]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
net: save some cycles when doing skb_attempt_defer_free()
authorJason Xing <kernelxing@tencent.com>
Fri, 12 Apr 2024 03:07:18 +0000 (11:07 +0800)
committerDavid S. Miller <davem@davemloft.net>
Mon, 15 Apr 2024 09:34:59 +0000 (10:34 +0100)
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@tencent.com>
Reviewed-by: Alexander Lobakin <aleksander.lobakin@intel.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
net/core/skbuff.c

index ea052fa710d893a266def2686ad50868913b4fc4..37c858dc11a6efc02081dfe9fa4f48dabc27950c 100644 (file)
@@ -6965,9 +6965,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;
        }