On 08/31/2016 10:24 AM, Michal Privoznik wrote:
On 31.08.2016 14:48, John Ferlan wrote:
[...]
>> --- a/docs/formatdomain.html.in
>> +++ b/docs/formatdomain.html.in
>> @@ -4604,7 +4604,7 @@ qemu-kvm -net nic,model=? /dev/null
>> <source network='default'/>
>> <target dev='vnet1'/>
>> <model type='virtio'/>
>> - <b><driver name='vhost' txmode='iothread'
ioeventfd='on' event_idx='off' queues='5'>
>> + <b><driver name='vhost' txmode='iothread'
ioeventfd='on' event_idx='off' queues='5'
rxqueuesize='128'>
>> <host csum='off' gso='off' tso4='off'
tso6='off' ecn='off' ufo='off' mrg_rxbuf='off'/>
>> <guest csum='off' tso4='off' tso6='off'
ecn='off' ufo='off'/>
>> </driver>
>> @@ -4720,6 +4720,11 @@ qemu-kvm -net nic,model=? /dev/null
>> <span class="since">virtio-net since 1.0.6 (QEMU and KVM
only)</span>
>> <span class="since">vhost-user since 1.2.17 (QEMU and
KVM only)</span>
>> </dd>
>> + <dt><code>rxqueuesize</code></dt>
>> + <dd>
>> + The optional <code>rxqueuesize</code> attribute controls
>> + the size of virtio ring for each queue as described above.
>
> Need a <span class="since"> (I assume something similar to queues
with
> the QEMU and KVM only condition)
>
> Also why not "rx_queue_size" - there's already event_idx or mrg_rxbuf,
> so adding the "_" at least mimics qemu's argument.
That's what I wanted to prevent. Copying name from qemu. But I've
struggled with the naming too (as can be seen - look how far I got :D).
I don't have a strong opinion on either of those, so whatever we feel
like I'll stick with that.
I guess I find it easier to be able to search qemu and libvirt code for
the same strings "if possible". I think we've already nixed allowing
"-"
(dash), so those don't match up. I don't have a strong preference either.
>
> Furthermore, the bz has quite a bit of discussion regarding an
> "appropriate value", so while I don't think it's something we want
to
> provide (that is suggested values), perhaps we could create a pointer or
> at least a few hints. At the very least a this value needs to be a power
> of 2 value... If not provided, the QEMU default of 256 is used. A
> larger size gives you what advantage. In general some guidance on
> setting or where to look could be helpful.
Well, as you point out later in the review too, qemu might change these
limitation anytime and we would advice untrue. But if I'm careful with
wording we might be safe.
As you point out below - "This should be used by expert users" or as the
disk device "ioeventfd" and "event_idx" descriptions indicate in bold
letters" "In general you should leave this option alone, unless you are
very certain you know what you are doing."
>
>> + </dd>
>> </dl>
>> <p>
>> Offloading options for the host and guest can be configured using
[...]
> e.g. extra space (although I do see the line is at 80 chars...
could
> change the internal name to rxqsz ;-)).
>
>> + virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
>> + _("rxqueuesize has to be a power of
two"));
>
> ^^ hence why I think it should be documented.
>
> The bz also indicates there's a maximum of 1024. Should we check for
> that? Although if the maximum increases we'd have to follow suit.
> Naturally there isn't a way to get that maximum. If something larger
> than 1024 is passed, then qemu will fail. Ugh, the hazards of adding
> these 1-off things that have limits and rules, but we're not given all
> the details necessary.
Nope. Moreover, this feature is going to be used by expert users who
know exactly what they are doing. So I'd say we're okay with just trying
to start qemu and see if it fails or not. IOW too much work on our side
not worth it.
>
>> + goto cleanup;
>> + }
>> }
>>
>> ret = 0;
>> diff --git a/tests/qemuxml2argvdata/qemuxml2argv-net-virtio-rxqueuesize.xml
b/tests/qemuxml2argvdata/qemuxml2argv-net-virtio-rxqueuesize.xml
>> new file mode 100644
>> index 0000000..e23d3e3
>> --- /dev/null
>> +++ b/tests/qemuxml2argvdata/qemuxml2argv-net-virtio-rxqueuesize.xml
>> @@ -0,0 +1,29 @@
>> +<domain type='qemu'>
>> + <name>QEMUGuest1</name>
>> + <uuid>c7a5fdbd-edaf-9455-926a-d65c16db1809</uuid>
>> + <memory unit='KiB'>219100</memory>
>> + <currentMemory unit='KiB'>219100</currentMemory>
>> + <vcpu placement='static'>1</vcpu>
>> + <os>
>> + <type arch='i686' machine='pc'>hvm</type>
>> + <boot dev='hd'/>
>> + </os>
>> + <clock offset='utc'/>
>> + <on_poweroff>destroy</on_poweroff>
>> + <on_reboot>restart</on_reboot>
>> + <on_crash>destroy</on_crash>
>> + <devices>
>> + <emulator>/usr/bin/qemu</emulator>
>> + <disk type='block' device='disk'>
>> + <source dev='/dev/HostVG/QEMUGuest1'/>
>> + <target dev='hda' bus='ide'/>
>> + </disk>
>> + <controller type='usb' index='0'/>
>> + <interface type='user'>
>> + <mac address='00:11:22:33:44:55'/>
>> + <model type='virtio'/>
>> + <driver rxqueuesize='128'/>
>> + </interface>
>> + <memballoon model='virtio'/>
>> + </devices>
>> +</domain>
>>
>
> Shouldn't qemuxml2xmltest.c be updated to add this new test?
Good catch.
As I'm going through your NVDIMM series - it has the same problem - so I
hunted down what I did for luks-disks... See commit id '9bbf0d7e' - it
adds a file link for the tests/qemuxml2xmloutdata/ to the
../qemuxml2argvdata/... I had just copied other examples.
And I also modified qemuxml2xmltest
>
> Should there be a "FAIL" test with an invalid value?
Sure, I can introduce such test.
>
> I think by rule we have to wait for QEMU to merge this so we cannot push
> until then. In the meantime, we should probably find out if it's felt we
> should check a maximum of 1024 or not. I'd hate to see that value change
> and then we have problems, but the way it is now - qemu would fail with
> a 2048 value from libvirt.
I don't think we need to. We should probably check whether it is a power
of two (this looks like invariant requirement) = who would want a ring
size of a non-power of two size? But the maximum/minimum size can
change. Currently the limits are [256;1024]. Moreover, qemu fails with
sensible message:
error: internal error: process exited while connecting to monitor:
2016-08-31T14:23:16.583247Z qemu-system-x86_64: -device
virtio-net-pci,mq=on,vectors=42,rx_queue_size=2048,netdev=hostnet1,id=net1,mac=52:54:00:6e:0e:72,bus=pci.2,addr=0x2:
Invalid rx_queue_size (= 2048), must be a power of 2 between 256 and 1024.
I'll post v2 which will is rebased onto current HEAD and address your
findings.
I'm fine with not adding the max comparison... As I think you could see
left brain and right brain weren't in agreement either!
John