I am running dpdk within a virtual guest as a L3 forwarder.
The VM has two ports connecting to two linux bridges (in turn connecting two physical ports). DPDK is used to forward between these two ports (one port connected to traffic generator and the other connected to sink). I used iperf to test the throughput. If the VM/DPDK is running on passthrough, it can achieve around 10G end-to-end (from traffic generator to sink) throughput. However if the VM/DPDK is running on virtio (virtio-net-pmd), it achieves just 150M throughput, which is a huge degrade. On the virtio, I also measured the throughput between the traffic generator and its connected port on VM, as well as throughput between the sink and it's VM port. Both legs show around 7.5G throughput. So I guess forwarding within the VM (from one port to the other) would be a big killer of the performance. Any suggestion on how I can root cause the poor performance issue, or any idea on performance tuning techniques for virtio? thanks a lot!