Hide Forgot
Description of problem: libvirt show the wrong network bandwidth when the vm start with server or client type network Version-Release number of selected component (if applicable): libvirt-1.2.8-7.el7.x86_64 How reproducible: 100% Steps to Reproduce: 1.prepare 2 guest which have server and client interface: # virsh dumpxml test5 <interface type='server'> <mac address='52:54:00:22:c9:42'/> <source address='127.0.0.1' port='1234'/> <bandwidth> <inbound average='1' peak='1'/> <outbound average='1' peak='1'/> </bandwidth> <model type='rtl8139'/> <alias name='net0'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x0c' function='0x0'/> </interface> # virsh dumpxml test3 <interface type='server'> <mac address='52:54:00:22:c9:42'/> <source address='127.0.0.1' port='1234'/> <bandwidth> <inbound average='1' peak='1'/> <outbound average='1' peak='1'/> </bandwidth> <model type='rtl8139'/> <alias name='net0'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x0c' function='0x0'/> </interface> 2.start server first and then start client 3.scp a big thing from server to client (or client to server) and the speed is very fast(the same with doesn't set bandwidth) 4.check it via domiftune,libvirt doesn't set network bandwidth for this type network, but still show it. # virsh domiftune test5 52:54:00:22:c9:42 --live inbound.average: 1 inbound.peak : 1 inbound.burst : 0 outbound.average: 1 outbound.peak : 1 outbound.burst : 0 # virsh domiftune test3 52:54:00:97:6c:07 --live inbound.average: 1 inbound.peak : 1 inbound.burst : 0 outbound.average: 1 outbound.peak : 1 outbound.burst : 0 Actual results: libvirt cannot do domiftune to a server and client guest interface, but still can check it and show the wrong bandwidth(which doesn't set) Expected results: report error or warning in log when try to start the guest, or cannot see it in running guest xml, because libvirt doesn't set it and cannot use tc set the bandwidth now, so do not show the wrong number in xml and domiftune. # virsh domiftune test3 52:54:00:97:6c:07 --live inbound.average: 0 inbound.peak : 0 inbound.burst : 0 outbound.average: 0 outbound.peak : 0 outbound.burst : 0 Additional info: cannot set bandwidth for this type network # virsh domiftune test3 52:54:00:97:6c:07 123 error: Unable to set interface parameters error: internal error: Child process (/sbin/tc qdisc add dev) unexpected exit status 255: Command line is not complete. Try option "help"
Patch proposed upstream: https://www.redhat.com/archives/libvir-list/2015-January/msg00169.html
Another try: https://www.redhat.com/archives/libvir-list/2015-January/msg00450.html
I've just pushed the patch upstream: commit 04cf99a6b6ce380d4e04c726d1a7d4da40f908eb Author: Michal Privoznik <mprivozn> AuthorDate: Wed Jan 7 15:52:21 2015 +0100 Commit: Michal Privoznik <mprivozn> CommitDate: Wed Jan 14 08:54:49 2015 +0100 qemu, lxc: Warn if setting QoS on unsupported vNIC types https://bugzilla.redhat.com/show_bug.cgi?id=1165993 So, there are still plenty of vNIC types that we don't know how to set bandwidth on. Let's warn explicitly in case user has requested it instead of pretending everything was set. Signed-off-by: Michal Privoznik <mprivozn> v1.2.11-156-g04cf99a Although, we can't just forbid starting a VM with bandwidth set on unsupported interface. It would be a regression - there already may be a customer having a start hook set up, which injects the correct TC rules for unsupported interfaces. If we forbid starting such machine, then it would be a regression.
Verify it as follows. # rpm -q libvirt libvirt-1.2.17-1.el7.x86_64 # virsh start rhel7.0 Domain rhel7.0 started # virsh domiflist rhel7.0 Interface Type Source Model MAC ------------------------------------------------------- vnet3 network default virtio 52:54:00:68:ce:60 - server - rtl8139 52:54:00:22:c9:42 # virsh domiftune rhel7.0 52:54:00:22:c9:42 --live inbound.average: 1 inbound.peak : 1 inbound.burst : 0 outbound.average: 1 outbound.peak : 1 outbound.burst : 0 # vim /var/log/libvirt/libvirtd.log 2015-07-06 08:20:23.581+0000: 9515: warning : qemuBuildInterfaceCommandLine:8432 : setting bandwidth on interfaces of type 'server' is not implemented yet
Add hotplug scenario as follows. # virsh start rhel7.0 Domain rhel7.0 started # virsh domiflist rhel7.0 Interface Type Source Model MAC ------------------------------------------------------- vnet3 network default virtio 52:54:00:68:ce:60 # cat if.xml <interface type='server'> <mac address='52:54:00:22:c9:42'/> <source address='127.0.0.1' port='1234'/> <bandwidth> <inbound average='1' peak='1'/> <outbound average='1' peak='1'/> </bandwidth> <model type='rtl8139'/> <alias name='net0'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x0c' function='0x0'/> </interface> # virsh attach-device rhel7.0 if.xml Device attached successfully # virsh domiflist rhel7.0 Interface Type Source Model MAC ------------------------------------------------------- vnet3 network default virtio 52:54:00:68:ce:60 - server - rtl8139 52:54:00:22:c9:42 # vim /var/log/libvirt/libvirtd.log 2015-07-06 08:44:03.231+0000: 9512: warning : qemuDomainAttachNetDevice:972 : setting bandwidth on interfaces of type 'server' is not implemented yet
Since the problem described in this bug report should be resolved in a recent advisory, it has been closed with a resolution of ERRATA. For information on the advisory, and where to find the updated files, follow the link below. If the solution does not work for you, open a new bug report. https://rhn.redhat.com/errata/RHBA-2015-2202.html