<div dir="ltr"><br><div class="gmail_extra"><br><div class="gmail_quote">On 11 April 2016 at 03:36, Martinx - ジェームズ <span dir="ltr"><<a href="mailto:thiagocmartinsc@gmail.com" target="_blank">thiagocmartinsc@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex"><div dir="ltr">Guys,<div><br></div><div> Lets get a server, with 2 x 1G NIC embedded, and 2 x 10G NIC igbxe (compatible with DPDK + PMD).</div><div><br></div><div> I have a Proprietary L2 Bridge DPDK Application (unfortunately, it is still CentOS-based) that, on bare-metal, or by using PCI Passthrough with KVM, I can make it top the hardware speed, it can bridge @ 19.XG (full speed, IXIA traffic generators are attached to it), virtually no packet drops.</div><div><br></div><div> Now, I'm planning to move this "Proprietary L2 Bridge DPDK Application" to a purely virtual environment using only VirtIO devices (i.e., without any kind of PCI Passthrough).</div><div><br></div><div> However, at the same server host (2x1G + 2x10G NICs), I'll be using Ubuntu Xenial with OpenvSwitch + DPDK (already running, BTW).</div><div><br></div><div> So, the idea will be something like this:</div><div><br></div><div><br></div><div> * Setup 1 - PCI Pass to the KVM guest</div><div><br></div><div> 10G NIC 1 <-> L2 DPDK App <-> 10G NIC 2  = 19.XG full-duplex</div><div><br></div><div><br></div><div> * Setup 2 - OVS + DPDK to the KVM guest</div><div><br></div><div> 10G NIC 1 <-> OVS+DPKD <-> VirtIO <-> L2 DPDK App <-> VirtIO <-> 10G NIC 2 = XXG?</div><div><br></div><div><br></div><div> My question is:</div><div><br></div><div> With the "Setup 2" perfect tuned, do you guys think that I'll be able to hit about 15G? Maybe even more close to "bare-metal 19G"?</div><div><br></div><div> I am trying many things here, I am unable to see it pass 2.8G, this is just in one direction, if I start traffic on both directions, it drops to 300M!!!</div><div><br></div><div> This looks like a very complex setup and I'm still learning about how to put all the moving parts together... I really appreciate any tip!</div><div><br></div><div><br></div><div> * Usefull links:</div><div><br></div><div> <a href="http://wiki.qemu.org/Features/vhost-user-ovs-dpdk" target="_blank">http://wiki.qemu.org/Features/vhost-user-ovs-dpdk</a></div><div><br></div><div> <a href="https://software.intel.com/en-us/articles/using-open-vswitch-with-dpdk-on-ubuntu" target="_blank">https://software.intel.com/en-us/articles/using-open-vswitch-with-dpdk-on-ubuntu</a></div><div><br></div><div> <a href="https://software.intel.com/en-us/articles/using-open-vswitch-with-dpdk-for-inter-vm-nfv-applications" target="_blank">https://software.intel.com/en-us/articles/using-open-vswitch-with-dpdk-for-inter-vm-nfv-applications</a></div><div><br></div><div> <a href="https://github.com/openvswitch/ovs/blob/master/INSTALL.DPDK.md" target="_blank">https://github.com/openvswitch/ovs/blob/master/INSTALL.DPDK.md</a></div><div><br></div><div><br></div><div>Cheers!</div><div>Thiago</div></div>
</blockquote></div><br></div><div class="gmail_extra">So far, my OVS+DPK and posterior KVM setup looks like this:</div><div class="gmail_extra"><br></div><div class="gmail_extra">---</div><div class="gmail_extra"><div class="gmail_extra">ovs-vsctl add-br br0 -- set bridge br0 datapath_type=netdev</div><div class="gmail_extra">ovs-vsctl add-port br0 dpdk0 -- set Interface dpdk0 type=dpdk</div><div class="gmail_extra">ovs-vsctl add-port br0 vhost-user1 -- set Interface vhost-user1 type=dpdkvhostuser</div><div class="gmail_extra"><br></div><div class="gmail_extra">-</div><div class="gmail_extra"><br></div><div class="gmail_extra">ovs-vsctl add-br br1 -- set bridge br1 datapath_type=netdev</div><div class="gmail_extra">ovs-vsctl add-port br1 dpdk1 -- set Interface dpdk1 type=dpdk</div><div class="gmail_extra">ovs-vsctl add-port br1 vhost-user2 -- set Interface vhost-user2 type=dpdkvhostuser</div><div><br></div><div>-</div><div><br></div><div><div>qemu-system-x86_64 -enable-kvm -m 6144 -smp 10 -vnc <a href="http://0.0.0.0:0">0.0.0.0:0</a> \</div><div>    -net user,hostfwd=tcp::10021-:22 -net nic \<br></div><div>    -net user -net nic \</div><div>    -chardev socket,id=char0,path=/var/run/openvswitch/vhost-user1 \</div><div>    -netdev type=vhost-user,id=mynet1,chardev=char0,vhostforce \</div><div>    -device virtio-net-pci,netdev=mynet1,mac=52:54:00:02:d9:01 \</div><div>    -chardev socket,id=char1,path=/var/run/openvswitch/vhost-user2 \</div><div>    -netdev type=vhost-user,id=mynet2,chardev=char1,vhostforce \</div><div>    -device virtio-net-pci,netdev=mynet2,mac=52:54:00:02:d9:02 \</div><div>    -object memory-backend-file,id=mem,size=6144M,mem-path=/dev/hugepages,share=on \</div><div>    -numa node,memdev=mem -mem-prealloc \</div></div><div>    /var/lib/libvirt/images/my-private-l2-dpdk-app.qcow2</div><div>---</div><div><br></div><div> Very likely that I am missing many, many things on this setup... After all, it is much slower than on bare-metal...</div><div><br></div><div> BTW, is it possible to translate those qemu options, into a Libvirt XML? Very annoying to deal with those commands...</div><div><br></div><div>Thanks!</div><div>Thiago</div></div></div>