Yalan Zhang
2017-Oct-26 08:01 UTC
Re: [libvirt-users] Need to increase the rx and tx buffer size of my interface
Hi Ashish, IMO, it is yes, no way to increase tx_queue_size for direct type interface ------- Best Regards, Yalan Zhang IRC: yalzhang Internal phone: 8389413 On Thu, Oct 26, 2017 at 3:38 PM, Ashish Kurian <ashishbnv@gmail.com> wrote:> Hi Yalan, > > In the previous email you mentioned "tx_queue_size='512' will not work in > the guest with direct type interface, in fact, no matter what you set, it > will not work and guest will get the default '256'. " > > So if I am using macvtap for my interfaces, then the device type will > always be direct type. Does it mean that there is no way I can increase the > buffer size with the macvtap interfaces? > > > > Best Regards, > Ashish Kurian > > On Thu, Oct 26, 2017 at 9:04 AM, Ashish Kurian <ashishbnv@gmail.com> > wrote: > >> Hi Yalan, >> >> Thank you for your comment on qemu-kvm-rhev >> >> I am waiting for a response about my previous email with the logs >> attached. I do not understand what is the problem. >> >> >> On Oct 26, 2017 8:58 AM, "Yalan Zhang" <yalzhang@redhat.com> wrote: >> >> Hi Ashish, >> >> Please never mind for qemu-kvm-rhev. >> qemu with the code base 2.10.0 will support the tx_queue_size and >> rx_queue_size. >> >> Thank you~ >> >> >> >> >> >> ------- >> Best Regards, >> Yalan Zhang >> IRC: yalzhang >> Internal phone: 8389413 >> >> On Thu, Oct 26, 2017 at 2:22 PM, Yalan Zhang <yalzhang@redhat.com> wrote: >> >>> Hi Ashish, >>> >>> Are these packages available for free? How can I install them? >>> => You did have vhost backend driver. Do not set <driver >>> name='qemu'...>, by default it will use vhost as backend driver. >>> >>> Is it possible to have my interfaces with an IP address inside the VM >>> to be bridged to the physical interfaces on the host? >>> => Yes, you can create a linux bridge with physical interface connected, >>> and use bridge type interface. Refer to https://libvirt.org/formatd >>> omain.html#elementsNICSBridge >>> direct type is also ok (but your host and guest have no access to each >>> other). >>> >>> Is it also a possibility that I change the rx and tx buffer on the >>> physical interface on the host and it is reflected automatically inside the >>> VM as you said it will always receive the default value of the host? >>> => No, it do not receive the default value of the host. It's the default >>> value related with the virtual device driver on the guest. >>> hostdev type interface will passthrough the physical interface or VF of >>> the host to guest, it will get the device's parameters for rx and tx buffer. >>> >>> >>> >>> ------- >>> Best Regards, >>> Yalan Zhang >>> IRC: yalzhang >>> Internal phone: 8389413 >>> >>> On Thu, Oct 26, 2017 at 1:30 PM, Ashish Kurian <ashishbnv@gmail.com> >>> wrote: >>> >>>> Hi Yalan, >>>> >>>> Thank you for your response. I do not have the following packages >>>> installed >>>> >>>> vhost backend driver >>>> qemu-kvm-rhev package >>>> >>>> Are these packages available for free? How can I install them? >>>> >>>> In my KVM VM, I must have an IP address to the interfaces that I am >>>> trying to increasing the buffers. That is the reason I was using macvtap >>>> (direct type interface). Is it possible to have my interfaces with an IP >>>> address inside the VM to be bridged to the physical interfaces on the host? >>>> >>>> Is it also a possibility that I change the rx and tx buffer on the >>>> physical interface on the host and it is reflected automatically inside the >>>> VM as you said it will always receive the default value of the host? >>>> >>>> >>>> Best Regards, >>>> Ashish Kurian >>>> >>>> On Thu, Oct 26, 2017 at 6:45 AM, Yalan Zhang <yalzhang@redhat.com> >>>> wrote: >>>> >>>>> Hi Ashish, >>>>> >>>>> I have tested with your xml in the first mail, and it works for rx_queue_size(see >>>>> below). >>>>> multiqueue need to work with vhost backend driver. And when you set >>>>> "queues=1" it will ignored. >>>>> >>>>> Please check your qemu-kvm-rhev package, should be newer than >>>>> qemu-kvm-rhev-2.9.0-16.el7_4.2 >>>>> And the logs? >>>>> >>>>> tx_queue_size='512' will not work in the guest with direct type >>>>> interface, in fact, no matter what you set, it will not work and guest will >>>>> get the default '256'. >>>>> We only support vhost-user backend to have more than 256. refer to >>>>> https://libvirt.org/formatdomain.html#elementsNICSEthernet >>>>> >>>>> tx_queue_size >>>>> The optional tx_queue_size attribute controls the size of virtio ring >>>>> for each queue as described above. The default value is hypervisor >>>>> dependent and may change across its releases. Moreover, some hypervisors >>>>> may pose some restrictions on actual value. For instance, QEMU v2.9 >>>>> requires value to be a power of two from [256, 1024] range. In addition to >>>>> that, this may work only for a subset of interface types, e.g. >>>>> aforementioned QEMU enables this option only for vhostuser type. Since >>>>> 3.7.0 (QEMU and KVM only) >>>>> multiqueue only supports vhost as backend driver. >>>>> >>>>> # rpm -q libvirt qemu-kvm-rhev >>>>> libvirt-3.2.0-14.el7_4.3.x86_64 >>>>> qemu-kvm-rhev-2.9.0-16.el7_4.9.x86_64 >>>>> >>>>> 1. the xml as below >>>>> <interface type='direct'> >>>>> <mac address='52:54:00:00:b5:99'/> >>>>> <source dev='eno1' mode='vepa'/> >>>>> <model type='virtio'/> >>>>> <driver name='vhost' queues='5' rx_queue_size='512' >>>>> tx_queue_size='512'> >>>>> <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> >>>>> <address type='pci' domain='0x0000' bus='0x00' slot='0x03' >>>>> function='0x0'/> >>>>> </interface> >>>>> >>>>> 2. after start the vm, check the qemu command line: >>>>> *-netdev >>>>> tap,fds=26:28:29:30:31,id=hostnet0,vhost=on,vhostfds=32:33:34:35:36* >>>>> -device virtio-net-pci,csum=off,gso=off,host_tso4=off,host_tso6=off, >>>>> host_ecn=off,host_ufo=off,mrg_rxbuf=off,guest_csum=off,guest >>>>> _tso4=off,guest_tso6=off,guest_ecn=off,guest_ufo=off, >>>>> *mq=on,vectors=12,rx_queue_size=512,tx_queue_size=512*,netdev=hostnet >>>>> 0,id=net0,mac=52:54:00:00:b5:99,bus=pci.0,addr=0x3 >>>>> >>>>> 3. check on guest >>>>> # ethtool -g eth0 >>>>> Ring parameters for eth0: >>>>> Pre-set maximums: >>>>> RX: *512 ==> rx_queue_size works* >>>>> RX Mini: 0 >>>>> RX Jumbo: 0 >>>>> TX: *256 ===> no change* >>>>> Current hardware settings: >>>>> RX: *512 **==> rx_queue_size works* >>>>> RX Mini: 0 >>>>> RX Jumbo: 0 >>>>> TX: *256 ===> no change* >>>>> >>>>> # ethtool -l eth0 >>>>> Channel parameters for eth0: >>>>> Pre-set maximums: >>>>> RX: 0 >>>>> TX: 0 >>>>> Other: 0 >>>>> Combined: *5 ==> queues what we set* >>>>> Current hardware settings: >>>>> RX: 0 >>>>> TX: 0 >>>>> Other: 0 >>>>> Combined: 1 >>>>> >>>>> >>>>> If change to qemu as driver, >>>>> # virsh edit rhel7 >>>>> .. >>>>> <interface type='direct'> >>>>> <mac address='52:54:00:00:b5:99'/> >>>>> <source dev='eno1' mode='vepa'/> >>>>> <model type='virtio'/> >>>>> <driver name='qemu' queues='5' rx_queue_size='512' >>>>> tx_queue_size='512'> >>>>> <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> >>>>> <address type='pci' domain='0x0000' bus='0x00' slot='0x03' >>>>> function='0x0'/> >>>>> </interface> >>>>> .. >>>>> Domain rhel7 XML configuration edited. ==> the xml can validate and >>>>> save >>>>> >>>>> # virsh start rhel7 >>>>> Domain rhel7 started >>>>> >>>>> >>>>> # virsh dumpxml rhel7 | grep /interface -B9 >>>>> <source dev='eno1' mode='vepa'/> >>>>> <target dev='macvtap0'/> >>>>> <model type='virtio'/> >>>>> *<driver name='qemu' queues='5' rx_queue_size='512' >>>>> tx_queue_size='512'>* >>>>> <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> >>>>> <alias name='net0'/> >>>>> <address type='pci' domain='0x0000' bus='0x00' slot='0x03' >>>>> function='0x0'/> >>>>> </interface> >>>>> >>>>> >>>>> * -netdev tap,fds=26:28:29:30:31*,id=hostnet0 -device >>>>> virtio-net-pci,csum=off,gso=off,host_tso4=off,host_tso6=off, >>>>> host_ecn=off,host_ufo=off,mrg_rxbuf=off,guest_csum=off,guest >>>>> _tso4=off,guest_tso6=off,guest_ecn=off,guest_ufo=off, >>>>> *rx_queue_size=512,tx_queue_size=512*,netdev=hostnet0,id=net0,mac=52: >>>>> 54:00:00:b5:99,bus=pci.0,addr=0x3 >>>>> >>>>> *"mq=on,vectors=12" is missing*, indicates there is no multiqueue >>>>> >>>>> and check on guest >>>>> >>>>> # ethtool -l eth0 >>>>> Channel parameters for eth0: >>>>> Pre-set maximums: >>>>> RX: 0 >>>>> TX: 0 >>>>> Other: 0 >>>>> Combined: 1 ==> no multiqueue >>>>> Current hardware settings: >>>>> RX: 0 >>>>> TX: 0 >>>>> Other: 0 >>>>> Combined: 1 >>>>> >>>>> # ethtool -g eth0 >>>>> Ring parameters for eth0: >>>>> Pre-set maximums: >>>>> RX: *512* >>>>> RX Mini: 0 >>>>> RX Jumbo: 0 >>>>> TX: 256 >>>>> Current hardware settings: >>>>> RX: *512* >>>>> RX Mini: 0 >>>>> RX Jumbo: 0 >>>>> TX: 256 >>>>> >>>>> >>>>> >>>>> >>>>> ------- >>>>> Best Regards, >>>>> Yalan Zhang >>>>> IRC: yalzhang >>>>> Internal phone: 8389413 >>>>> >>>>> On Thu, Oct 26, 2017 at 2:33 AM, Ashish Kurian <ashishbnv@gmail.com> >>>>> wrote: >>>>> >>>>>> Hi Michal, >>>>>> >>>>>> An update to what I have already said : when I try adding <driver >>>>>> name='qemu' txmode='iothread' ioeventfd='on' event_idx='off' queues='1' >>>>>> rx_queue_size='512' tx_queue_size='512'> although it showed me the error as >>>>>> mentioned, when I checked the xml again I saw that <driver >>>>>> name='qemu' txmode='iothread' ioeventfd='on' event_idx='off' > is added to >>>>>> the interface. >>>>>> >>>>>> The missing parameters are : queues='1' rx_queue_size='512' >>>>>> tx_queue_size='512' >>>>>> >>>>>> Best Regards, >>>>>> Ashish Kurian >>>>>> >>>>>> On Wed, Oct 25, 2017 at 5:07 PM, Ashish Kurian <ashishbnv@gmail.com> >>>>>> wrote: >>>>>> >>>>>>> Hi Michal, >>>>>>> >>>>>>> What I found was that when I restarted the machine and did a virsh >>>>>>> edit command to see the xml config, I see that it is was not actually >>>>>>> changed. This suggests why I saw 256 again after restarting. >>>>>>> >>>>>>> So now I tried again to edit the xml via virsh edit command and used >>>>>>> the following to set the parameters. >>>>>>> >>>>>>> <driver name='qemu' txmode='iothread' ioeventfd='on' event_idx='off' >>>>>>> queues='1' rx_queue_size='512' tx_queue_size='512'> >>>>>>> </driver> >>>>>>> >>>>>>> It was not accepted and I got the error saying : >>>>>>> >>>>>>> >>>>>>> error: XML document failed to validate against schema: Unable to >>>>>>> validate doc against /usr/share/libvirt/schemas/domain.rng >>>>>>> Extra element devices in interleave >>>>>>> Element domain failed to validate content >>>>>>> >>>>>>> What does this imply? I have two more other interfaces and do I have >>>>>>> to the same to them also? >>>>>>> >>>>>>> Btw, there are now logs generated now in the domain log or libvirtd >>>>>>> log >>>>>>> >>>>>>> >>>>>>> >>>>>>> >>>>>>> >>>>>>> Best Regards, >>>>>>> Ashish Kurian >>>>>>> >>>>>>> On Wed, Oct 25, 2017 at 2:50 PM, Michal Privoznik < >>>>>>> mprivozn@redhat.com> wrote: >>>>>>> >>>>>>>> On 10/25/2017 01:53 PM, Ashish Kurian wrote: >>>>>>>> > Dear Users/Developers, >>>>>>>> > >>>>>>>> > I am using a KVM Ubuntu VM as a degrader to apply specific delays >>>>>>>> to >>>>>>>> > incoming packets. As the delay for my packets can be higher than >>>>>>>> 7.5 >>>>>>>> > seconds, there is not enough buffer on my interface to buffer all >>>>>>>> the >>>>>>>> > packets. Therefore those overflowing packets are dropped in the >>>>>>>> machine and >>>>>>>> > not forwarded. >>>>>>>> > >>>>>>>> > When I tried to use the command ethtool -G ens8 rx 512 to >>>>>>>> increase the >>>>>>>> > buffer size, I get the following error. >>>>>>>> > >>>>>>>> > Cannot set device ring parameters: Operation not permitted >>>>>>>> > >>>>>>>> > I have kept the VM xml files as specified in the link : >>>>>>>> > https://libvirt.org/formatdomain.html. The value that I kept in >>>>>>>> my xml file >>>>>>>> > is as follows. >>>>>>>> > >>>>>>>> > <interface type='direct'> >>>>>>>> > <mac address='52:54:00:72:f9:eb'/> >>>>>>>> > <source dev='enp7s0f0' mode='vepa'/> >>>>>>>> > <model type='virtio'/> >>>>>>>> > <driver name='vhost' queues='5' rx_queue_size='512' >>>>>>>> > tx_queue_size='512'> >>>>>>>> > <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> >>>>>>>> > <address type='pci' domain='0x0000' bus='0x00' slot='0x08' >>>>>>>> > function='0x0'/> >>>>>>>> > </interface> >>>>>>>> > <interface type='direct'> >>>>>>>> > <mac address='52:54:00:00:b5:99'/> >>>>>>>> > <source dev='enp7s0f1' mode='vepa'/> >>>>>>>> > <model type='virtio'/> >>>>>>>> > <driver name='vhost' queues='5' rx_queue_size='512' >>>>>>>> > tx_queue_size='512'> >>>>>>>> > <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> >>>>>>>> > <address type='pci' domain='0x0000' bus='0x00' slot='0x09' >>>>>>>> > function='0x0'/> >>>>>>>> >>>>>>>> So what does the qemu command line look like? You can find it in >>>>>>>> either >>>>>>>> libvirtd log or domain log. >>>>>>>> >>>>>>>> http://wiki.libvirt.org/page/DebugLogs >>>>>>>> >>>>>>>> Michal >>>>>>>> >>>>>>> >>>>>>> >>>>>> >>>>>> _______________________________________________ >>>>>> libvirt-users mailing list >>>>>> libvirt-users@redhat.com >>>>>> https://www.redhat.com/mailman/listinfo/libvirt-users >>>>>> >>>>> >>>>> >>>> >>> >> >> >
Ashish Kurian
2017-Oct-26 08:38 UTC
Re: [libvirt-users] Need to increase the rx and tx buffer size of my interface
Hi Yalan and Michal,
Thank you for your response. So what I understand is that I can change
rx_queue size even if I use direct type interface and qemu driver as long
as the driver is virtio. Am I right? If that is the case why am I getting
the error saying that
error: XML document failed to validate against schema: Unable to validate
doc against /usr/share/libvirt/schemas/domain.rng
Extra element devices in interleave
Element domain failed to validate content
for the following xml config? Btw I changed vepa to bridged mode hoping it
would help me. Also note that I tried the following without any driver name
and it still failed.
<interface type='direct'>
<mac address='52:54:00:72:f9:eb'/>
<source dev='enp7s0f0' mode='bridge'/>
<model type='virtio'/>
<driver name='qemu' queues='5'
rx_queue_size='512'>
<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>
Best Regards,
Ashish Kurian
On Thu, Oct 26, 2017 at 10:01 AM, Yalan Zhang <yalzhang@redhat.com> wrote:
> Hi Ashish,
>
> IMO, it is yes, no way to increase tx_queue_size for direct type interface
>
>
>
>
>
>
> -------
> Best Regards,
> Yalan Zhang
> IRC: yalzhang
> Internal phone: 8389413
>
> On Thu, Oct 26, 2017 at 3:38 PM, Ashish Kurian <ashishbnv@gmail.com>
> wrote:
>
>> Hi Yalan,
>>
>> In the previous email you mentioned "tx_queue_size='512'
will not work
>> in the guest with direct type interface, in fact, no matter what you
set,
>> it will not work and guest will get the default '256'. "
>>
>> So if I am using macvtap for my interfaces, then the device type will
>> always be direct type. Does it mean that there is no way I can increase
the
>> buffer size with the macvtap interfaces?
>>
>>
>>
>> Best Regards,
>> Ashish Kurian
>>
>> On Thu, Oct 26, 2017 at 9:04 AM, Ashish Kurian
<ashishbnv@gmail.com>
>> wrote:
>>
>>> Hi Yalan,
>>>
>>> Thank you for your comment on qemu-kvm-rhev
>>>
>>> I am waiting for a response about my previous email with the logs
>>> attached. I do not understand what is the problem.
>>>
>>>
>>> On Oct 26, 2017 8:58 AM, "Yalan Zhang"
<yalzhang@redhat.com> wrote:
>>>
>>> Hi Ashish,
>>>
>>> Please never mind for qemu-kvm-rhev.
>>> qemu with the code base 2.10.0 will support the tx_queue_size and
>>> rx_queue_size.
>>>
>>> Thank you~
>>>
>>>
>>>
>>>
>>>
>>> -------
>>> Best Regards,
>>> Yalan Zhang
>>> IRC: yalzhang
>>> Internal phone: 8389413
>>>
>>> On Thu, Oct 26, 2017 at 2:22 PM, Yalan Zhang
<yalzhang@redhat.com>
>>> wrote:
>>>
>>>> Hi Ashish,
>>>>
>>>> Are these packages available for free? How can I install them?
>>>> => You did have vhost backend driver. Do not set <driver
>>>> name='qemu'...>, by default it will use vhost as
backend driver.
>>>>
>>>> Is it possible to have my interfaces with an IP address inside
the VM
>>>> to be bridged to the physical interfaces on the host?
>>>> => Yes, you can create a linux bridge with physical
interface
>>>> connected, and use bridge type interface. Refer to
>>>> https://libvirt.org/formatdomain.html#elementsNICSBridge
>>>> direct type is also ok (but your host and guest have no access
to each
>>>> other).
>>>>
>>>> Is it also a possibility that I change the rx and tx buffer on
the
>>>> physical interface on the host and it is reflected
automatically inside the
>>>> VM as you said it will always receive the default value of the
host?
>>>> => No, it do not receive the default value of the host.
It's the
>>>> default value related with the virtual device driver on the
guest.
>>>> hostdev type interface will passthrough the physical interface
or VF of
>>>> the host to guest, it will get the device's parameters for
rx and tx buffer.
>>>>
>>>>
>>>>
>>>> -------
>>>> Best Regards,
>>>> Yalan Zhang
>>>> IRC: yalzhang
>>>> Internal phone: 8389413
>>>>
>>>> On Thu, Oct 26, 2017 at 1:30 PM, Ashish Kurian
<ashishbnv@gmail.com>
>>>> wrote:
>>>>
>>>>> Hi Yalan,
>>>>>
>>>>> Thank you for your response. I do not have the following
packages
>>>>> installed
>>>>>
>>>>> vhost backend driver
>>>>> qemu-kvm-rhev package
>>>>>
>>>>> Are these packages available for free? How can I install
them?
>>>>>
>>>>> In my KVM VM, I must have an IP address to the interfaces
that I am
>>>>> trying to increasing the buffers. That is the reason I was
using macvtap
>>>>> (direct type interface). Is it possible to have my
interfaces with an IP
>>>>> address inside the VM to be bridged to the physical
interfaces on the host?
>>>>>
>>>>> Is it also a possibility that I change the rx and tx buffer
on the
>>>>> physical interface on the host and it is reflected
automatically inside the
>>>>> VM as you said it will always receive the default value of
the host?
>>>>>
>>>>>
>>>>> Best Regards,
>>>>> Ashish Kurian
>>>>>
>>>>> On Thu, Oct 26, 2017 at 6:45 AM, Yalan Zhang
<yalzhang@redhat.com>
>>>>> wrote:
>>>>>
>>>>>> Hi Ashish,
>>>>>>
>>>>>> I have tested with your xml in the first mail, and it
works for rx_queue_size(see
>>>>>> below).
>>>>>> multiqueue need to work with vhost backend driver. And
when you set
>>>>>> "queues=1" it will ignored.
>>>>>>
>>>>>> Please check your qemu-kvm-rhev package, should be
newer than
>>>>>> qemu-kvm-rhev-2.9.0-16.el7_4.2
>>>>>> And the logs?
>>>>>>
>>>>>> tx_queue_size='512' will not work in the guest
with direct type
>>>>>> interface, in fact, no matter what you set, it will not
work and guest will
>>>>>> get the default '256'.
>>>>>> We only support vhost-user backend to have more than
256. refer to
>>>>>>
https://libvirt.org/formatdomain.html#elementsNICSEthernet
>>>>>>
>>>>>> tx_queue_size
>>>>>> The optional tx_queue_size attribute controls the size
of virtio
>>>>>> ring for each queue as described above. The default
value is hypervisor
>>>>>> dependent and may change across its releases. Moreover,
some hypervisors
>>>>>> may pose some restrictions on actual value. For
instance, QEMU v2.9
>>>>>> requires value to be a power of two from [256, 1024]
range. In addition to
>>>>>> that, this may work only for a subset of interface
types, e.g.
>>>>>> aforementioned QEMU enables this option only for
vhostuser type. Since
>>>>>> 3.7.0 (QEMU and KVM only)
>>>>>> multiqueue only supports vhost as backend driver.
>>>>>>
>>>>>> # rpm -q libvirt qemu-kvm-rhev
>>>>>> libvirt-3.2.0-14.el7_4.3.x86_64
>>>>>> qemu-kvm-rhev-2.9.0-16.el7_4.9.x86_64
>>>>>>
>>>>>> 1. the xml as below
>>>>>> <interface type='direct'>
>>>>>> <mac address='52:54:00:00:b5:99'/>
>>>>>> <source dev='eno1'
mode='vepa'/>
>>>>>> <model type='virtio'/>
>>>>>> <driver name='vhost'
queues='5' rx_queue_size='512'
>>>>>> tx_queue_size='512'>
>>>>>> <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>
>>>>>> <address type='pci'
domain='0x0000' bus='0x00' slot='0x03'
>>>>>> function='0x0'/>
>>>>>> </interface>
>>>>>>
>>>>>> 2. after start the vm, check the qemu command line:
>>>>>> *-netdev
>>>>>>
tap,fds=26:28:29:30:31,id=hostnet0,vhost=on,vhostfds=32:33:34:35:36*
>>>>>> -device
virtio-net-pci,csum=off,gso=off,host_tso4=off,host_tso6=off,
>>>>>>
host_ecn=off,host_ufo=off,mrg_rxbuf=off,guest_csum=off,guest
>>>>>> _tso4=off,guest_tso6=off,guest_ecn=off,guest_ufo=off,
>>>>>>
*mq=on,vectors=12,rx_queue_size=512,tx_queue_size=512*,netdev=hostnet
>>>>>> 0,id=net0,mac=52:54:00:00:b5:99,bus=pci.0,addr=0x3
>>>>>>
>>>>>> 3. check on guest
>>>>>> # ethtool -g eth0
>>>>>> Ring parameters for eth0:
>>>>>> Pre-set maximums:
>>>>>> RX: *512 ==> rx_queue_size works*
>>>>>> RX Mini: 0
>>>>>> RX Jumbo: 0
>>>>>> TX: *256 ===> no change*
>>>>>> Current hardware settings:
>>>>>> RX: *512 **==> rx_queue_size works*
>>>>>> RX Mini: 0
>>>>>> RX Jumbo: 0
>>>>>> TX: *256 ===> no change*
>>>>>>
>>>>>> # ethtool -l eth0
>>>>>> Channel parameters for eth0:
>>>>>> Pre-set maximums:
>>>>>> RX: 0
>>>>>> TX: 0
>>>>>> Other: 0
>>>>>> Combined: *5 ==> queues what we set*
>>>>>> Current hardware settings:
>>>>>> RX: 0
>>>>>> TX: 0
>>>>>> Other: 0
>>>>>> Combined: 1
>>>>>>
>>>>>>
>>>>>> If change to qemu as driver,
>>>>>> # virsh edit rhel7
>>>>>> ..
>>>>>> <interface type='direct'>
>>>>>> <mac address='52:54:00:00:b5:99'/>
>>>>>> <source dev='eno1'
mode='vepa'/>
>>>>>> <model type='virtio'/>
>>>>>> <driver name='qemu' queues='5'
rx_queue_size='512'
>>>>>> tx_queue_size='512'>
>>>>>> <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>
>>>>>> <address type='pci'
domain='0x0000' bus='0x00' slot='0x03'
>>>>>> function='0x0'/>
>>>>>> </interface>
>>>>>> ..
>>>>>> Domain rhel7 XML configuration edited. ==> the xml
can validate and
>>>>>> save
>>>>>>
>>>>>> # virsh start rhel7
>>>>>> Domain rhel7 started
>>>>>>
>>>>>>
>>>>>> # virsh dumpxml rhel7 | grep /interface -B9
>>>>>> <source dev='eno1'
mode='vepa'/>
>>>>>> <target dev='macvtap0'/>
>>>>>> <model type='virtio'/>
>>>>>> *<driver name='qemu'
queues='5' rx_queue_size='512'
>>>>>> tx_queue_size='512'>*
>>>>>> <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>
>>>>>> <alias name='net0'/>
>>>>>> <address type='pci'
domain='0x0000' bus='0x00' slot='0x03'
>>>>>> function='0x0'/>
>>>>>> </interface>
>>>>>>
>>>>>>
>>>>>> * -netdev tap,fds=26:28:29:30:31*,id=hostnet0 -device
>>>>>>
virtio-net-pci,csum=off,gso=off,host_tso4=off,host_tso6=off,
>>>>>>
host_ecn=off,host_ufo=off,mrg_rxbuf=off,guest_csum=off,guest
>>>>>> _tso4=off,guest_tso6=off,guest_ecn=off,guest_ufo=off,
>>>>>>
*rx_queue_size=512,tx_queue_size=512*,netdev=hostnet0,id=net0,mac=52:
>>>>>> 54:00:00:b5:99,bus=pci.0,addr=0x3
>>>>>>
>>>>>> *"mq=on,vectors=12" is missing*, indicates
there is no multiqueue
>>>>>>
>>>>>> and check on guest
>>>>>>
>>>>>> # ethtool -l eth0
>>>>>> Channel parameters for eth0:
>>>>>> Pre-set maximums:
>>>>>> RX: 0
>>>>>> TX: 0
>>>>>> Other: 0
>>>>>> Combined: 1 ==> no multiqueue
>>>>>> Current hardware settings:
>>>>>> RX: 0
>>>>>> TX: 0
>>>>>> Other: 0
>>>>>> Combined: 1
>>>>>>
>>>>>> # ethtool -g eth0
>>>>>> Ring parameters for eth0:
>>>>>> Pre-set maximums:
>>>>>> RX: *512*
>>>>>> RX Mini: 0
>>>>>> RX Jumbo: 0
>>>>>> TX: 256
>>>>>> Current hardware settings:
>>>>>> RX: *512*
>>>>>> RX Mini: 0
>>>>>> RX Jumbo: 0
>>>>>> TX: 256
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>> -------
>>>>>> Best Regards,
>>>>>> Yalan Zhang
>>>>>> IRC: yalzhang
>>>>>> Internal phone: 8389413
>>>>>>
>>>>>> On Thu, Oct 26, 2017 at 2:33 AM, Ashish Kurian
<ashishbnv@gmail.com>
>>>>>> wrote:
>>>>>>
>>>>>>> Hi Michal,
>>>>>>>
>>>>>>> An update to what I have already said : when I try
adding <driver
>>>>>>> name='qemu' txmode='iothread'
ioeventfd='on' event_idx='off' queues='1'
>>>>>>> rx_queue_size='512'
tx_queue_size='512'> although it showed me the error as
>>>>>>> mentioned, when I checked the xml again I saw that
<driver
>>>>>>> name='qemu' txmode='iothread'
ioeventfd='on' event_idx='off' > is added to
>>>>>>> the interface.
>>>>>>>
>>>>>>> The missing parameters are : queues='1'
rx_queue_size='512'
>>>>>>> tx_queue_size='512'
>>>>>>>
>>>>>>> Best Regards,
>>>>>>> Ashish Kurian
>>>>>>>
>>>>>>> On Wed, Oct 25, 2017 at 5:07 PM, Ashish Kurian
<ashishbnv@gmail.com>
>>>>>>> wrote:
>>>>>>>
>>>>>>>> Hi Michal,
>>>>>>>>
>>>>>>>> What I found was that when I restarted the
machine and did a virsh
>>>>>>>> edit command to see the xml config, I see that
it is was not actually
>>>>>>>> changed. This suggests why I saw 256 again
after restarting.
>>>>>>>>
>>>>>>>> So now I tried again to edit the xml via virsh
edit command and
>>>>>>>> used the following to set the parameters.
>>>>>>>>
>>>>>>>> <driver name='qemu'
txmode='iothread' ioeventfd='on'
>>>>>>>> event_idx='off' queues='1'
rx_queue_size='512' tx_queue_size='512'>
>>>>>>>> </driver>
>>>>>>>>
>>>>>>>> It was not accepted and I got the error saying
:
>>>>>>>>
>>>>>>>>
>>>>>>>> error: XML document failed to validate against
schema: Unable to
>>>>>>>> validate doc against
/usr/share/libvirt/schemas/domain.rng
>>>>>>>> Extra element devices in interleave
>>>>>>>> Element domain failed to validate content
>>>>>>>>
>>>>>>>> What does this imply? I have two more other
interfaces and do I
>>>>>>>> have to the same to them also?
>>>>>>>>
>>>>>>>> Btw, there are now logs generated now in the
domain log or libvirtd
>>>>>>>> log
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>> Best Regards,
>>>>>>>> Ashish Kurian
>>>>>>>>
>>>>>>>> On Wed, Oct 25, 2017 at 2:50 PM, Michal
Privoznik <
>>>>>>>> mprivozn@redhat.com> wrote:
>>>>>>>>
>>>>>>>>> On 10/25/2017 01:53 PM, Ashish Kurian
wrote:
>>>>>>>>> > Dear Users/Developers,
>>>>>>>>> >
>>>>>>>>> > I am using a KVM Ubuntu VM as a
degrader to apply specific
>>>>>>>>> delays to
>>>>>>>>> > incoming packets. As the delay for my
packets can be higher than
>>>>>>>>> 7.5
>>>>>>>>> > seconds, there is not enough buffer on
my interface to buffer
>>>>>>>>> all the
>>>>>>>>> > packets. Therefore those overflowing
packets are dropped in the
>>>>>>>>> machine and
>>>>>>>>> > not forwarded.
>>>>>>>>> >
>>>>>>>>> > When I tried to use the command
ethtool -G ens8 rx 512 to
>>>>>>>>> increase the
>>>>>>>>> > buffer size, I get the following
error.
>>>>>>>>> >
>>>>>>>>> > Cannot set device ring parameters:
Operation not permitted
>>>>>>>>> >
>>>>>>>>> > I have kept the VM xml files as
specified in the link :
>>>>>>>>> > https://libvirt.org/formatdomain.html.
The value that I kept in
>>>>>>>>> my xml file
>>>>>>>>> > is as follows.
>>>>>>>>> >
>>>>>>>>> > <interface
type='direct'>
>>>>>>>>> > <mac
address='52:54:00:72:f9:eb'/>
>>>>>>>>> > <source
dev='enp7s0f0' mode='vepa'/>
>>>>>>>>> > <model
type='virtio'/>
>>>>>>>>> > <driver name='vhost'
queues='5' rx_queue_size='512'
>>>>>>>>> > tx_queue_size='512'>
>>>>>>>>> > <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>
>>>>>>>>> > <address type='pci'
domain='0x0000' bus='0x00' slot='0x08'
>>>>>>>>> > function='0x0'/>
>>>>>>>>> > </interface>
>>>>>>>>> > <interface
type='direct'>
>>>>>>>>> > <mac
address='52:54:00:00:b5:99'/>
>>>>>>>>> > <source
dev='enp7s0f1' mode='vepa'/>
>>>>>>>>> > <model
type='virtio'/>
>>>>>>>>> > <driver name='vhost'
queues='5' rx_queue_size='512'
>>>>>>>>> > tx_queue_size='512'>
>>>>>>>>> > <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>
>>>>>>>>> > <address type='pci'
domain='0x0000' bus='0x00' slot='0x09'
>>>>>>>>> > function='0x0'/>
>>>>>>>>>
>>>>>>>>> So what does the qemu command line look
like? You can find it in
>>>>>>>>> either
>>>>>>>>> libvirtd log or domain log.
>>>>>>>>>
>>>>>>>>> http://wiki.libvirt.org/page/DebugLogs
>>>>>>>>>
>>>>>>>>> Michal
>>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>
>>>>>>> _______________________________________________
>>>>>>> libvirt-users mailing list
>>>>>>> libvirt-users@redhat.com
>>>>>>>
https://www.redhat.com/mailman/listinfo/libvirt-users
>>>>>>>
>>>>>>
>>>>>>
>>>>>
>>>>
>>>
>>>
>>
>
Michal Privoznik
2017-Oct-26 08:46 UTC
Re: [libvirt-users] Need to increase the rx and tx buffer size of my interface
On 10/26/2017 10:38 AM, Ashish Kurian wrote:> Hi Yalan and Michal, > > Thank you for your response. So what I understand is that I can change > rx_queue size even if I use direct type interface and qemu driver as long > as the driver is virtio. Am I right?Yes.> If that is the case why am I getting > the error saying that > > error: XML document failed to validate against schema: Unable to validate > doc against /usr/share/libvirt/schemas/domain.rng > Extra element devices in interleave > Element domain failed to validate contentWhat's your libvirt version? For rx_queue_size you need 2.3.0 or newer. For tx_queue_size you need 3.7.0 or newer (not that there's one yet).> > for the following xml config? Btw I changed vepa to bridged mode hoping it > would help me. Also note that I tried the following without any driver name > and it still failed. > > > <interface type='direct'> > <mac address='52:54:00:72:f9:eb'/> > <source dev='enp7s0f0' mode='bridge'/> > <model type='virtio'/> > <driver name='qemu' queues='5' rx_queue_size='512'> > <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> >This works for me. I'm running recent git. Michal
Apparently Analagous Threads
- Re: Need to increase the rx and tx buffer size of my interface
- Re: Need to increase the rx and tx buffer size of my interface
- Re: Need to increase the rx and tx buffer size of my interface
- Re: Need to increase the rx and tx buffer size of my interface
- Re: Need to increase the rx and tx buffer size of my interface