[<prev] [next>] [thread-next>] [day] [month] [year] [list]
Message-Id: <20240412030718.68016-1-kerneljasonxing@gmail.com>
Date: Fri, 12 Apr 2024 11:07:18 +0800
From: Jason Xing <kerneljasonxing@...il.com>
To: edumazet@...gle.com,
pablo@...filter.org,
kuba@...nel.org,
pabeni@...hat.com,
davem@...emloft.net,
horms@...nel.org,
aleksander.lobakin@...el.com
Cc: netdev@...r.kernel.org,
kerneljasonxing@...il.com,
Jason Xing <kernelxing@...cent.com>
Subject: [PATCH net-next v2] net: save some cycles when doing skb_attempt_defer_free()
From: Jason Xing <kernelxing@...cent.com>
Normally, we don't face these two exceptions very often meanwhile
we have some chance to meet the condition where the current cpu id
is the same as skb->alloc_cpu.
One simple test that can help us see the frequency of this statement
'cpu == raw_smp_processor_id()':
1. running iperf -s and iperf -c [ip] -P [MAX CPU]
2. using BPF to capture skb_attempt_defer_free()
I can see around 4% chance that happens to satisfy the statement.
So moving this statement at the beginning can save some cycles in
most cases.
Signed-off-by: Jason Xing <kernelxing@...cent.com>
Reviewed-by: Alexander Lobakin <aleksander.lobakin@...el.com>
---
v2
Link: https://lore.kernel.org/all/20240411032450.51649-1-kerneljasonxing@gmail.com/
1. Fix the wrong order of testing cpu (Eric)
---
net/core/skbuff.c | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/net/core/skbuff.c b/net/core/skbuff.c
index ab970ded8a7b..6dc577a3ea6a 100644
--- a/net/core/skbuff.c
+++ b/net/core/skbuff.c
@@ -7002,9 +7002,9 @@ void skb_attempt_defer_free(struct sk_buff *skb)
unsigned int defer_max;
bool kick;
- if (WARN_ON_ONCE(cpu >= nr_cpu_ids) ||
- !cpu_online(cpu) ||
- cpu == raw_smp_processor_id()) {
+ if (cpu == raw_smp_processor_id() ||
+ WARN_ON_ONCE(cpu >= nr_cpu_ids) ||
+ !cpu_online(cpu)) {
nodefer: kfree_skb_napi_cache(skb);
return;
}
--
2.37.3
Powered by blists - more mailing lists