netdev.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [net-next PATCH v4 0/7] Improve GbEth performance on Renesas RZ/G2L and related SoCs
@ 2024-05-28 15:03 Paul Barker
  2024-05-28 15:03 ` [net-next PATCH v4 1/7] net: ravb: Simplify poll & receive functions Paul Barker
                   ` (6 more replies)
  0 siblings, 7 replies; 26+ messages in thread
From: Paul Barker @ 2024-05-28 15:03 UTC (permalink / raw)
  To: Sergey Shtylyov, David S. Miller, Eric Dumazet, Jakub Kicinski,
	Paolo Abeni, Niklas Söderlund
  Cc: Paul Barker, Biju Das, Claudiu Beznea, Yoshihiro Shimoda, netdev,
	linux-renesas-soc, linux-kernel

This series aims to improve performance of the GbEth IP in the Renesas
RZ/G2L SoC family and the RZ/G3S SoC, which use the ravb driver. Along
the way, we do some refactoring and ensure that napi_complete_done() is
used in accordance with the NAPI documentation for both GbEth and R-Car
code paths.

Much of the performance improvement comes from enabling SW IRQ
Coalescing for all SoCs using the GbEth IP, and NAPI Threaded mode for
single core SoCs using the GbEth IP. These can be enabled/disabled at
runtime via sysfs, but our goal is to set sensible defaults which get
good performance on the affected SoCs.

The rest of the performance improvement comes from using a page pool to
allocate RX buffers, and reducing the allocation size from >8kB to 2kB.

The overall performance impact of this patch series seen in testing with
iperf3 is as follows (see patches 5-7 for more detailed results):
  * RZ/G2L:
    * TCP TX: +1.8% bandwidth
    * TCP RX: +1% bandwidth at 47% less CPU load
    * UDP RX: +1% bandwidth at 26% less CPU load

  * RZ/G2UL:
    * TCP TX: +37% bandwidth
    * TCP RX: +43% bandwidth
    * UDP TX: -8% bandwidth
    * UDP RX: +32500% bandwidth (!)

  * RZ/G3S:
    * TCP TX: +25% bandwidth
    * TCP RX: +76% bandwidth
    * UDP TX: -9% bandwidth
    * UDP RX: +37900% bandwidth (!)

  * RZ/Five:
    * TCP TX: +18% bandwidth
    * TCP RX: +212% bandwidth
    * UDP TX: +2% bandwidth
    * UDP RX: +inf bandwidth (test no longer crashes)

There is no significant impact on bandwidth or CPU load in testing on
RZ/G2H or R-Car M3N.

Fixing the crash in UDP RX testing for RZ/Five is a cumulative effect of
patches 1, 2, 5 & 6 so this is very difficult to break out as a bugfix
for backporting.

Changes v3->v4:
  * Dependency patches have merged so this is no longer an RFC.
  * Fixed update of stats->rx_packets.
  * Simplified refactoring following feedback from Niklas and Sergey.
  * Renamed needs_irq_coalesce -> coalesce_irqs.
  * Used a separate page pool for each RX queue.
  * Passed struct ravb_rx_desc to ravb_alloc_rx_buffer() so that we can
    simplify the calling function.
  * Explained the calculation of rx_desc->ds_cc.
  * Added handling of nonlinear SKBs in ravb_rx_csum_gbeth().
  * Used Niklas' suggested commit message for patch 2/7.
  * Added Sergey's Reviewed-by tags to patches 5/7 and 6/7.

Changes v2->v3:
  * Incorporated feedback on RFC v2 from Sergey.
  * Split out bugfixes and rebased. This changed the order of what was
    the first 5 patches of v2 and things look a little different so I've
    not picked up Reviewed-by tags from v2.
  * Further refactoring and tidy up of RX ring refill and
    ravb_rx_gbeth().
  * Switched to using a page pool to allocate RX buffers.
  * Re-tested and provided updated performance figures.

Changes v1->v2:
  * Marked as RFC as the series depends on unmerged patches.
  * Refactored R-Car code paths as well as GbEth code paths.
  * Updated references to the patches this series depends on.

Paul Barker (7):
  net: ravb: Simplify poll & receive functions
  net: ravb: Consider busypolling status when re-enabling interrupts
  net: ravb: Refactor RX ring refill
  net: ravb: Refactor GbEth RX code path
  net: ravb: Enable SW IRQ Coalescing for GbEth
  net: ravb: Use NAPI threaded mode on 1-core CPUs with GbEth IP
  net: ravb: Allocate RX buffers via page pool

 drivers/net/ethernet/renesas/ravb.h      |  13 +-
 drivers/net/ethernet/renesas/ravb_main.c | 459 ++++++++++++-----------
 2 files changed, 247 insertions(+), 225 deletions(-)


base-commit: 5233a55a5254ea38dcdd8d836a0f9ee886c3df51
-- 
2.39.2


^ permalink raw reply	[flat|nested] 26+ messages in thread

end of thread, other threads:[~2024-06-05 17:18 UTC | newest]

Thread overview: 26+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-05-28 15:03 [net-next PATCH v4 0/7] Improve GbEth performance on Renesas RZ/G2L and related SoCs Paul Barker
2024-05-28 15:03 ` [net-next PATCH v4 1/7] net: ravb: Simplify poll & receive functions Paul Barker
2024-05-28 16:21   ` Sergey Shtylyov
2024-05-28 15:03 ` [net-next PATCH v4 2/7] net: ravb: Consider busypolling status when re-enabling interrupts Paul Barker
2024-05-28 16:44   ` Sergey Shtylyov
2024-05-28 16:47     ` Sergey Shtylyov
2024-05-29 19:09       ` Paul Barker
2024-05-28 15:03 ` [net-next PATCH v4 3/7] net: ravb: Refactor RX ring refill Paul Barker
2024-05-28 20:50   ` Sergey Shtylyov
2024-05-28 15:03 ` [net-next PATCH v4 4/7] net: ravb: Refactor GbEth RX code path Paul Barker
2024-05-29 18:30   ` Sergey Shtylyov
2024-05-29 19:07     ` Paul Barker
2024-05-30 20:37       ` Sergey Shtylyov
2024-05-28 15:03 ` [net-next PATCH v4 5/7] net: ravb: Enable SW IRQ Coalescing for GbEth Paul Barker
2024-05-28 15:03 ` [net-next PATCH v4 6/7] net: ravb: Use NAPI threaded mode on 1-core CPUs with GbEth IP Paul Barker
2024-05-28 15:03 ` [net-next PATCH v4 7/7] net: ravb: Allocate RX buffers via page pool Paul Barker
2024-05-29 20:52   ` Sergey Shtylyov
2024-05-30  9:21     ` Paul Barker
2024-05-30 10:29       ` Paul Barker
2024-05-31 17:25       ` Sergey Shtylyov
2024-06-01 10:13   ` Simon Horman
2024-06-03  8:02     ` Paul Barker
2024-06-03 12:07       ` Simon Horman
2024-06-03 12:15         ` Paul Barker
2024-06-05 17:18           ` Sergey Shtylyov
2024-06-03 20:45       ` Sergey Shtylyov

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).