Public bug reported: Guys,
It is possible to crash OVS + DPDK running at the host, from inside of a KVM Guest! All you need to do, is to enable multi-queue, then, from a KVM Guest, you can kill OVS running at the host... * Hardware requirements (might be exaggerated but this is what I have): 1 Dell Server with dedicated 2 x 10G NIC cards, plus another 1 or 2 1G NIC, for management, apt-get, ssh, etc; 1 IXIA Traffic Generator - 10G in both directions. * Steps to reproduce, at a glance: 1- Deploy Ubuntu at the host; a. Grub options /etc/default/grub: - GRUB_CMDLINE_LINUX_DEFAULT="quiet splash iommu=pt intel_iommu=on default_hugepagesz=1GB hugepagesz=1G hugepages=64" - 2- Install OVS with DPDK; 3- Configure DPDK, 1G Hugepages, PCI IDs and create the OVS bridges for a VM: a. /etc/default/openvswitch-switch: - DPDK_OPTS='--dpdk -c 0x1 -n 4 -m 2048,0 --vhost-owner libvirt-qemu:kvm --vhost-perm 0664' - b. /etc/dpdk/interfaces: - pci 0000:06:00.0 uio_pci_generic pci 0000:06:00.1 uio_pci_generic - NOTE: those PCI devices are located at NUMA Node 0. c. DPDK Hugepages /etc/dpdk/dpdk.conf: - NR_1G_PAGES=32 - d. OVS Bridges: ovs-vsctl add-br br0 -- set bridge br0 datapath_type=netdev ovs-vsctl add-port br0 dpdk0 -- set Interface dpdk0 type=dpdk ovs-vsctl add-port br0 vhost-user1 -- set Interface vhost-user1 type=dpdkvhostuser ovs-vsctl add-br br1 -- set bridge br1 datapath_type=netdev ovs-vsctl add-port br1 dpdk1 -- set Interface dpdk1 type=dpdk ovs-vsctl add-port br1 vhost-user2 -- set Interface vhost-user2 type=dpdkvhostuser ip link set dev br0 up ip link set dev br1 up 4- At the host, enable multi-queue and add more CPU Cores to OVS+DPDK PMD threads: ovs-vsctl set Open_vSwitch . other_config:n-dpdk-rxqs=4 ovs-vsctl set Open_vSwitch . other_config:pmd-cpu-mask=FFFF 5- Deploy Ubuntu at the VM, full Libvirt XML: a. ubuntu-16.01-1 XML: https://paste.ubuntu.com/16162857/ b. /etc/default/grub: - GRUB_CMDLINE_LINUX_DEFAULT="default_hugepagesz=1GB hugepagesz=1G hugepages=1" - 6- Install OVS with DPDK; 7- Configure DPDK, 1G Hugepages, PCI IDs and create the OVS bridges within the VM: NOTE: Do NOT enable multi-queue inside of the VM yet, you'll see that, so far, it will work! a. /etc/default/openvswitch-switch: - DPDK_OPTS='--dpdk -c 0x1 -n 4 -m 1024 --pci-blacklist 0000:00:03.0 --pci-blacklist 0000:00:04.0' - b. /etc/dpdk/interfaces: - pci 0000:00:05.0 uio_pci_generic pci 0000:00:06.0 uio_pci_generic - c. DPDK Hugepages /etc/dpdk/dpdk.conf: - NR_1G_PAGES=1 - d. OVS Bridge: ovs-vsctl add-br ovsbr -- set bridge ovsbr datapath_type=netdev ovs-vsctl add-port ovsbr dpdk0 -- set Interface dpdk0 type=dpdk ovs-vsctl add-port ovsbr dpdk1 -- set Interface dpdk1 type=dpdk ip link set dev ovsbr up NOTE 1: So far, so good! But no multi-queue yet! NOTE 2: Sometimes, you can crash ovs-vswitchd at the host, right here!!! 8- At the VM, add more CPU Cores to OVS+DPDK PMD threads: 2 Cores): ovs-vsctl set Open_vSwitch . other_config:pmd-cpu-mask=6 or: 4 Cores): ovs-vsctl set Open_vSwitch . other_config:pmd-cpu-mask=F 9- Enable multi-queue before starting up DPDK and OVS, run this inside of the VM: systemctl disable dpdk systemctl disable openvswitch-switch reboot ethtool -L ens5 combined 4 ethtool -L ens6 combined 4 service dpdk start service openvswitch-switch start BOOM!!! 10- Error log at the host (ovs-vswitchd + DPDK crashed): https://paste.ubuntu.com/16152614/ IMPORTANT NOTES: * Sometimes, even without enabling multi-queue at the VM, ovs-vswitchd at the host, crashes! ** Also, more weird, is that I have a proprietary DPDK App (L2 Bridge for DPI), that uses multi-queue automatically and it does NOT crash the ovs-vswitchd running at the host! I can use my DPDK App with multi- queue, but I can't do the same with OVS+DPDK. So, if I replace "ubuntu16.01-1.qcow2", by my own qcow2 where I have a proprietary DPDK App, I can use multi-queue, OVS+DPDK at the host works just fine (slower than PCI Pass but, acceptable, much better than just regular OVS). Cheers! Thiago ProblemType: Bug DistroRelease: Ubuntu 16.04 Package: openvswitch-switch-dpdk 2.5.0-0ubuntu1 ProcVersionSignature: Ubuntu 4.4.0-22.38-generic 4.4.8 Uname: Linux 4.4.0-22-generic x86_64 ApportVersion: 2.20.1-0ubuntu2 Architecture: amd64 Date: Sat Apr 30 18:04:16 2016 SourcePackage: openvswitch UpgradeStatus: Upgraded to xenial on 2016-04-07 (23 days ago) ** Affects: openvswitch (Ubuntu) Importance: Undecided Status: New ** Tags: amd64 apport-bug xenial -- You received this bug notification because you are a member of Ubuntu Bugs, which is subscribed to Ubuntu. https://bugs.launchpad.net/bugs/1577088 Title: OVS+DPDK crashes at the host, right after starting another OVS+DPDK inside of a KVM Guest, if multi-queue is enabled To manage notifications about this bug go to: https://bugs.launchpad.net/ubuntu/+source/openvswitch/+bug/1577088/+subscriptions -- ubuntu-bugs mailing list ubuntu-bugs@lists.ubuntu.com https://lists.ubuntu.com/mailman/listinfo/ubuntu-bugs