mirror of
https://github.com/qemu/qemu.git
synced 2026-04-05 21:46:25 +00:00
vhost-user-blk-server: fix opt_io_size=1 causing severe Windows I/O degradation
The QSD vhost-user-blk export sets opt_io_size=1 and min_io_size=1 in the virtio config. These values are reported to the guest through the VPD Block Limits page as OptimalTransferLength=1 block (512 bytes) and OptimalTransferLengthGranularity=1 block. Windows respects these hints and splits all I/O into ~512-byte requests, causing ~100x sequential throughput degradation (150 MB/s instead of 15+ GB/s). Linux is unaffected as its block layer ignores these values. Set both to 0 which means "not reported" per the SCSI Block Limits VPD spec, allowing Windows to use its own optimal I/O size defaults. Signed-off-by: Max Makarov <maxpain@linux.com> Message-ID: <20260330193451.76037-1-maxpain@linux.com> Reviewed-by: Kevin Wolf <kwolf@redhat.com> Signed-off-by: Kevin Wolf <kwolf@redhat.com>
This commit is contained in:
@@ -242,8 +242,8 @@ vu_blk_initialize_config(BlockDriverState *bs,
|
||||
config->blk_size = cpu_to_le32(blk_size);
|
||||
config->size_max = cpu_to_le32(0);
|
||||
config->seg_max = cpu_to_le32(128 - 2);
|
||||
config->min_io_size = cpu_to_le16(1);
|
||||
config->opt_io_size = cpu_to_le32(1);
|
||||
config->min_io_size = cpu_to_le16(0);
|
||||
config->opt_io_size = cpu_to_le32(0);
|
||||
config->num_queues = cpu_to_le16(num_queues);
|
||||
config->max_discard_sectors =
|
||||
cpu_to_le32(VIRTIO_BLK_MAX_DISCARD_SECTORS);
|
||||
|
||||
Reference in New Issue
Block a user