Hi, during the test against generic storage backend with NBD frontend we found that the virtio block device is always splitting a single read range request to 4k ones, bringing the overall performance of the sequential reads far below virtio-scsi. Random reads are going relatively well on small blocks due to small overhead comparing to sequential ones and writes are ok in all cases. Multiread slightly improves the situation, but it would be nice to see complete pass-through of range read requests down to backend without an intermediate splitting.
Samples measured on an NBD backend during 128k sequential reads for both virtio-blk and virtio-scsi are attached. Please let me know if it looks like that I missed something or this behavior is plainly wrong. Thanks!
125550: *NBD_CMD_READ from 513298432 (1002536) len 4096, exp->buf, +(READ from fd 5 offset 513298432 len 4096), buf->net, +OK! 125551: *NBD_CMD_READ from 513302528 (1002544) len 4096, exp->buf, +(READ from fd 5 offset 513302528 len 4096), buf->net, +OK! 125552: *NBD_CMD_READ from 513306624 (1002552) len 4096, exp->buf, +(READ from fd 5 offset 513306624 len 4096), buf->net, +OK! 125553: *NBD_CMD_READ from 513310720 (1002560) len 4096, exp->buf, +(READ from fd 5 offset 513310720 len 4096), buf->net, +OK! 125554: *NBD_CMD_READ from 513314816 (1002568) len 4096, exp->buf, +(READ from fd 5 offset 513314816 len 4096), buf->net, +OK! 125555: *NBD_CMD_READ from 513318912 (1002576) len 4096, exp->buf, +(READ from fd 5 offset 513318912 len 4096), buf->net, +OK! 125556: *NBD_CMD_READ from 513323008 (1002584) len 4096, exp->buf, +(READ from fd 5 offset 513323008 len 4096), buf->net, +OK! 125557: *NBD_CMD_READ from 513327104 (1002592) len 4096, exp->buf, +(READ from fd 5 offset 513327104 len 4096), buf->net, +OK! 125558: *NBD_CMD_READ from 513331200 (1002600) len 4096, exp->buf, +(READ from fd 5 offset 513331200 len 4096), buf->net, +OK! 125559: *NBD_CMD_READ from 513335296 (1002608) len 4096, exp->buf, +(READ from fd 5 offset 513335296 len 4096), buf->net, +OK! 125560: *NBD_CMD_READ from 513339392 (1002616) len 4096, exp->buf, +(READ from fd 5 offset 513339392 len 4096), buf->net, +OK! 125561: *NBD_CMD_READ from 513343488 (1002624) len 4096, exp->buf, +(READ from fd 5 offset 513343488 len 4096), buf->net, +OK! 125562: *NBD_CMD_READ from 513347584 (1002632) len 4096, exp->buf, +(READ from fd 5 offset 513347584 len 4096), buf->net, +OK!
8294: *NBD_CMD_READ from 1071120384 (2092032) len 131072, exp->buf, +(READ from fd 5 offset 1071120384 len 131072), buf->net, +OK! 8295: *NBD_CMD_READ from 1071251456 (2092288) len 131072, exp->buf, +(READ from fd 5 offset 1071251456 len 131072), buf->net, +OK! 8296: *NBD_CMD_READ from 1071382528 (2092544) len 131072, exp->buf, +(READ from fd 5 offset 1071382528 len 131072), buf->net, +OK! 8297: *NBD_CMD_READ from 1071513600 (2092800) len 131072, exp->buf, +(READ from fd 5 offset 1071513600 len 131072), buf->net, +OK! 8298: *NBD_CMD_READ from 1071644672 (2093056) len 131072, exp->buf, +(READ from fd 5 offset 1071644672 len 131072), buf->net, +OK! 8299: *NBD_CMD_READ from 1071775744 (2093312) len 131072, exp->buf, +(READ from fd 5 offset 1071775744 len 131072), buf->net, +OK! 8300: *NBD_CMD_READ from 1071906816 (2093568) len 131072, exp->buf, +(READ from fd 5 offset 1071906816 len 131072), buf->net, +OK! 8301: *NBD_CMD_READ from 1072037888 (2093824) len 131072, exp->buf, +(READ from fd 5 offset 1072037888 len 131072), buf->net, +OK! 8302: *NBD_CMD_READ from 1072168960 (2094080) len 131072, exp->buf, +(READ from fd 5 offset 1072168960 len 131072), buf->net, +OK! 8303: *NBD_CMD_READ from 1072300032 (2094336) len 131072, exp->buf, +(READ from fd 5 offset 1072300032 len 131072), buf->net, +OK! 8304: *NBD_CMD_READ from 1072431104 (2094592) len 131072, exp->buf, +(READ from fd 5 offset 1072431104 len 131072), buf->net, +OK! 8305: *NBD_CMD_READ from 1072562176 (2094848) len 131072, exp->buf, +(READ from fd 5 offset 1072562176 len 131072), buf->net, +OK! 8306: *NBD_CMD_READ from 1072693248 (2095104) len 131072, exp->buf, +(READ from fd 5 offset 1072693248 len 131072), buf->net, +OK! 8307: *NBD_CMD_READ from 1072824320 (2095360) len 131072, exp->buf, +(READ from fd 5 offset 1072824320 len 131072), buf->net, +OK!