Hi Ilya,
I have retested your "Output patches batching" v6 in our standard PVP
L3-VPN/VXLAN benchmark setup [1]. The configuration is a single PMD serving a
physical 10G port and a VM running DPDK testpmd as IP reflector with 4 equally
loaded vhostuser ports. The tests are run with 64 byte packets. Below are Mpps
values averaged over four 10 second runs:
master patch patch
Flows Mpps tx-flush-interval=0 tx-flush-interval=50
8 4.419 4.342 -1.7% 4.749 7.5%
100 4.026 3.956 -1.7% 4.281 6.3%
1000 3.630 3.632 0.1% 3.760 3.6%
2000 3.394 3.390 -0.1% 3.490 2.8%
5000 2.989 2.938 -1.7% 2.994 0.2%
10000 2.756 2.711 -1.6% 2.746 -0.4%
20000 2.641 2.598 -1.6% 2.622 -0.7%
50000 2.604 2.558 -1.8% 2.579 -1.0%
100000 2.598 2.552 -1.8% 2.572 -1.0%
500000 2.598 2.550 -1.8% 2.571 -1.0%
As expected output batching within rx bursts (tx-flush-interval=0) provides
little or no benefit in this scenario. The test results reflect roughly a 1.7%
performance penalty due to the tx batching overhead. This overhead is
measurable, but should in my eyes not be a blocker for merging this patch
series.
Interestingly, tests with time-based tx batching and a minimum flush interval
of 50 microseconds show a consistent and significant performance increase for
small number of flows (in the regime where EMC is effective) and a reduced
penalty of 1% for many flows. I don't have a good explanation yet for this
phenomenon. I would be interested to see if other benchmark results support the
general positive impact of time-based tx batching on throughput also for
synthetic DPDK applications in the VM. The average Ping RTT increases by 20-30
us as expected.
We will also retest the performance improvement of time-based tx batching on
interrupt driven Linux kernel applications (such as iperf3).
BR, Jan
> -----Original Message-----
> From: Ilya Maximets [mailto:[email protected]]
> Sent: Friday, 01 December, 2017 16:44
> To: [email protected]; Bhanuprakash Bodireddy
> <[email protected]>
> Cc: Heetae Ahn <[email protected]>; Antonio Fischetti
> <[email protected]>; Eelco Chaudron
> <[email protected]>; Ciara Loftus <[email protected]>; Kevin Traynor
> <[email protected]>; Jan Scheurich
> <[email protected]>; Ian Stokes <[email protected]>; Ilya
> Maximets <[email protected]>
> Subject: [PATCH v6 0/7] Output packet batching.
>
> 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.
>
> Basic testing of 'PVP with OVS bonding on phy ports' scenario shows
> significant performance improvement.
>
> Test results for time-based batching for v3:
> https://mail.openvswitch.org/pipermail/ovs-dev/2017-September/338247.html
>
> Test results for v4:
> https://mail.openvswitch.org/pipermail/ovs-dev/2017-October/339624.html
>
> [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
>
> 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 (7):
> dpif-netdev: Refactor PMD thread structure for further extension.
> dpif-netdev: Keep latest measured time for PMD thread.
> dpif-netdev: Output packet batching.
> netdev: Remove unused may_steal.
> netdev: Remove useless cutlen.
> dpif-netdev: Time based output batching.
> dpif-netdev: Count sent packets and batches.
>
> lib/dpif-netdev.c | 412
> +++++++++++++++++++++++++++++++++++++-------------
> lib/netdev-bsd.c | 6 +-
> lib/netdev-dpdk.c | 30 ++--
> lib/netdev-dummy.c | 6 +-
> lib/netdev-linux.c | 8 +-
> lib/netdev-provider.h | 7 +-
> lib/netdev.c | 12 +-
> lib/netdev.h | 2 +-
> vswitchd/vswitch.xml | 16 ++
> 9 files changed, 349 insertions(+), 150 deletions(-)
>
> --
> 2.7.4
_______________________________________________
dev mailing list
[email protected]
https://mail.openvswitch.org/mailman/listinfo/ovs-dev