Am 01.06.2017 um 18:54 schrieb Paolo Bonzini:
>
> On 01/06/2017 16:25, Peter Lieven wrote:
>>> DEFINE_PROP_UINT32("max_sectors", VirtIOSCSI,
>>> parent_obj.conf.max_sectors,
>>> 0xFFFF),
>>>
>>> We could increase it now that we have support for max_xfer_len
>>> passthrough.
>> 0xFFFF * 512 is 32MB - 512 byte. This should not limit 1M requests?!
> Yeah, I cannot do math apparently. Someone needs to debug the guest and
> see where the strange 504K limit comes from.
Okay, here comes the root cause. The kernel honours the max_sectors limit
of 1024 sectors (=512KB), but in virtio-blk we have request merging enabled
per default. If I disable it I get the same strange pattern 516096 + 516096 +
16384
Byte. If I increase the limit to 2048 sectors, 1M requests go through for
virtio-blk
and virtio-scsi.
But whats strange is that the kernel properly splits 1M requests into 2* 512KB
for
IDE, but fails to do so for virtio-blk and virtio-scsi.
Side question: What is needed (Qemu Version and Guest Kernel) to get the
max_requests limit
in the kernel based on max_xfer_len?
My testing is with Qemu 2.9.0 and Debian 8 (3.16 kernel)
Thanks,
Peter