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

Reply via email to