After packet classification packets are queued in to batches depending on the matching netdev flow. Thereafter each batch is processed to execute the related actions. This becomes particularly inefficient if there are few packets in each batch as rte_eth_tx_burst() incurs expensive MMIO writes.
This patchset adds back the intermediate queue implementation. Packets are queued and burst when their count is >= NETDEV_MAX_BURST. Also a drain logic is refactored to handle packets hanging into the tx queues. Testing shows significant performance gains with this implementation. Fixes: b59cc14e032d("netdev-dpdk: Use instant sending instead of queueing of packets.") V1 => V2: * xps_get_tx_qid() is no more called twice. The last used qid is stored so the drain function will flush the right queue also when XPS is enabled. * netdev_txq_drain() is called unconditionally and not just for dpdk ports. * txq_drain() takes the 'tx_lock' for queue in case of dynamic tx queues. * Restored counting of dropped packets. * Changed scheduling of drain function. * Updated comments in netdev-provider.h * Fixed a comment in dp-packet.h. Fischetti, Antonio (2): netdev-dpdk: Use intermediate queue during packet transmission. dp-packet: Fix comment on DPDK buffer data. lib/dp-packet.c | 4 +-- lib/dp-packet.h | 10 +++---- lib/dpif-netdev.c | 53 +++++++++++++++++++++++++++++++-- lib/netdev-bsd.c | 1 + lib/netdev-dpdk.c | 82 ++++++++++++++++++++++++++++++++++++++++++++++----- lib/netdev-dummy.c | 1 + lib/netdev-linux.c | 1 + lib/netdev-provider.h | 8 +++++ lib/netdev-vport.c | 3 +- lib/netdev.c | 9 ++++++ lib/netdev.h | 1 + 11 files changed, 156 insertions(+), 17 deletions(-) -- 2.4.11 _______________________________________________ dev mailing list d...@openvswitch.org https://mail.openvswitch.org/mailman/listinfo/ovs-dev