diff options
author | Paolo Abeni <pabeni@redhat.com> | 2024-03-26 14:17:20 +0300 |
---|---|---|
committer | Paolo Abeni <pabeni@redhat.com> | 2024-03-26 14:17:21 +0300 |
commit | 1a3e4d6a75c6301ff08d1cc5ef081d2213c87fd1 (patch) | |
tree | 42437207987d5da82b6b362a4d845acb78b73cd1 /include | |
parent | 26f44b700536d0cf4d7ee33bed1692fc8af98fd2 (diff) | |
parent | 765b11f8f4e20b7433e4ba4a3e9106a0d59501ed (diff) | |
download | linux-1a3e4d6a75c6301ff08d1cc5ef081d2213c87fd1.tar.xz |
Merge branch 'net-provide-smp-threads-for-backlog-napi'
Sebastian Andrzej Siewior says:
====================
net: Provide SMP threads for backlog NAPI
The RPS code and "deferred skb free" both send IPI/ function call
to a remote CPU in which a softirq is raised. This leads to a warning on
PREEMPT_RT because raising softiqrs from function call led to undesired
behaviour in the past. I had duct tape in RT for the "deferred skb free"
and Wander Lairson Costa reported the RPS case.
This series only provides support for SMP threads for backlog NAPI, I
did not attach a patch to make it default and remove the IPI related
code to avoid confusion. I can post it for reference it asked.
The RedHat performance team was so kind to provide some testing here.
The series (with the IPI code removed) has been tested and no regression
vs without the series has been found. For testing iperf3 was used on 25G
interface, provided by mlx5, ix40e or ice driver and RPS was enabled. I
can provide the individual test results if needed.
====================
Link: https://lore.kernel.org/r/20240325074943.289909-1-bigeasy@linutronix.de
Signed-off-by: Paolo Abeni <pabeni@redhat.com>
Diffstat (limited to 'include')
-rw-r--r-- | include/linux/netdevice.h | 1 |
1 files changed, 1 insertions, 0 deletions
diff --git a/include/linux/netdevice.h b/include/linux/netdevice.h index cb37817d6382..e41d30ebaca6 100644 --- a/include/linux/netdevice.h +++ b/include/linux/netdevice.h @@ -3287,6 +3287,7 @@ static inline void dev_xmit_recursion_dec(void) __this_cpu_dec(softnet_data.xmit.recursion); } +void kick_defer_list_purge(struct softnet_data *sd, unsigned int cpu); void __netif_schedule(struct Qdisc *q); void netif_schedule_queue(struct netdev_queue *txq); |