[ovs-dev] [PATCH v11 0/5] Output packet batching (Time-based).

Ilya Maximets i.maximets at samsung.com
Mon Jan 15 10:20:50 UTC 2018


This patch-set inspired by [1] from Bhanuprakash Bodireddy.
Implementation of [1] looks very complex and introduces many pitfalls [2]
for later code modifications like possible packet stucks.

This version targeted to make simple and flexible output packet batching on
higher level without introducing and even simplifying netdev layer.

[1] [PATCH v4 0/5] netdev-dpdk: Use intermediate queue during packet transmission.
    https://mail.openvswitch.org/pipermail/ovs-dev/2017-August/337019.html

[2] For example:
    https://mail.openvswitch.org/pipermail/ovs-dev/2017-August/337133.html

The most of the series already in merged and not included in v9 and later
versions.

Testing of 'PVP with OVS bonding on phy ports' scenario shows significant
performance improvement up to +25% (v9 has no performance difference with v6 here):

	https://mail.openvswitch.org/pipermail/ovs-dev/2017-December/341700.html

Other testing results for v6:

	https://mail.openvswitch.org/pipermail/ovs-dev/2017-December/341605.html
	https://mail.openvswitch.org/pipermail/ovs-dev/2017-December/341628.html

Version 11:
	* Minor comment update about distribution of the send cycles in patch #2.

Version 10:
	* Rebased on top of '[PATCH v8 0/2] Refactor PMD stats and cycle counting':
	  https://mail.openvswitch.org/pipermail/ovs-dev/2018-January/343008.html
	* Per-rxq cycles accounting changed to use new nested counters.

Version 9:
	* Made on top of current DPDK_MERGE tree (cc4891f).
	* Patches 1-4,6 from v8 dropped as already included in DPDK_MERGE.
	* "Time based ..." patch updated with per-rxq cycles counting from
	  the following incremental:
	      https://mail.openvswitch.org/pipermail/ovs-dev/2017-December/342255.html
	  and splitted into 3 logically separate parts for easier review purposes:
	      1. Microsecond granularity for dpif-netdev.
	      2. Cycles accounting changes.
	      3. Time based batching itself.
	  There was no code changes in comparing with v8 + Incremental, only re-split.
	* Output batching mentioned in NEWS.
	* Documentation patch included in this series.

Version 8:
	* Minor rebase on top of current master.

Version 7:
	* Rebased on current istokes/dpdk_merge (3eb8d4f)
	* Dropped dp_netdev_pmd_thread structure refactoring patch.
	  Not needed since revert applied.

Version 6:
	* Rebased on current master:
	  - Added new patch to refactor dp_netdev_pmd_thread structure
	    according to following suggestion:
	    https://mail.openvswitch.org/pipermail/ovs-dev/2017-November/341230.html

	  NOTE: I still prefer reverting of the padding related patch.
	        Rebase done to not block acepting of this series.
	        Revert patch and discussion here:
	        https://mail.openvswitch.org/pipermail/ovs-dev/2017-November/341153.html

	* Added comment about pmd_thread_ctx_time_update() usage.

Version 5:
	* pmd_thread_ctx_time_update() calls moved to different places to
	  call them only from dp_netdev_process_rxq_port() and main
	  polling functions:
	  	pmd_thread_main, dpif_netdev_run and dpif_netdev_execute.
	  All other functions should use cached time from pmd->ctx.now.
	  It's guaranteed to be updated at least once per polling cycle.
	* 'may_steal' patch returned to version from v3 because
	  'may_steal' in qos is a completely different variable. This
	  patch only removes 'may_steal' from netdev API.
	* 2 more usec functions added to timeval to have complete public API.
	* Checking of 'output_cnt' turned to assertion.

Version 4:
	* Rebased on current master.
	* Rebased on top of "Keep latest measured time for PMD thread."
	  (Jan Scheurich)
	* Microsecond resolution related patches integrated.
	* Time-based batching without RFC tag.
	* 'output_time' renamed to 'flush_time'. (Jan Scheurich)
	* 'flush_time' update moved to 'dp_netdev_pmd_flush_output_on_port'.
	  (Jan Scheurich)
	* 'output-max-latency' renamed to 'tx-flush-interval'.
	* Added patch for output batching statistics.

Version 3:

	* Rebased on current master.
	* Time based RFC: fixed assert on n_output_batches <= 0.

Version 2:

	* Rebased on current master.
	* Added time based batching RFC patch.
	* Fixed mixing packets with different sources in same batch.


Ilya Maximets (5):
  dpif-netdev: Use microsecond granularity.
  dpif-netdev: Count cycles on per-rxq basis.
  dpif-netdev: Time based output batching.
  docs: Describe output packet batching in DPDK guide.
  NEWS: Mark output packet batching support.

 Documentation/intro/install/dpdk.rst |  58 ++++++++++++
 NEWS                                 |   2 +
 lib/dpif-netdev.c                    | 165 +++++++++++++++++++++++++++--------
 vswitchd/vswitch.xml                 |  16 ++++
 4 files changed, 205 insertions(+), 36 deletions(-)

-- 
2.7.4



More information about the dev mailing list