mirror of
https://github.com/Fishwaldo/Star64_linux.git
synced 2025-06-28 09:31:14 +00:00
net: avoid RCU for NOCACHE dst
There is no point using RCU for dst we allocate for a very short time (used once). Change dst_release() to take DST_NOCACHE into account, but also change skb_dst_set_noref() to force a refcount increment for such dst. This is a _huge_ gain, because we dont waste memory to store xx thousand of dsts. Instead of queueing them to RCU, we can free them instantly. CPU caches can stay hot, re-using same memory blocks to hold temporary dsts. Note : remove unneeded smp_mb__before_atomic_dec(); in dst_release(), since atomic_dec_return() implies a full memory barrier. Stress test, 160.000.000 udp frames sent, IP route cache disabled (DDOS). Before: real 0m38.091s user 0m13.189s sys 7m53.018s After: real 0m29.946s user 0m12.157s sys 7m40.605s For reference, if IP route cache was enabled : real 0m32.030s user 0m10.521s sys 8m15.243s Signed-off-by: Eric Dumazet <eric.dumazet@gmail.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
e6484930d7
commit
27b75c95f1
3 changed files with 33 additions and 19 deletions
|
@ -1105,9 +1105,9 @@ restart:
|
|||
* Note that we do rt_free on this new route entry, so that
|
||||
* once its refcount hits zero, we are still able to reap it
|
||||
* (Thanks Alexey)
|
||||
* Note also the rt_free uses call_rcu. We don't actually
|
||||
* need rcu protection here, this is just our path to get
|
||||
* on the route gc list.
|
||||
* Note: To avoid expensive rcu stuff for this uncached dst,
|
||||
* we set DST_NOCACHE so that dst_release() can free dst without
|
||||
* waiting a grace period.
|
||||
*/
|
||||
|
||||
rt->dst.flags |= DST_NOCACHE;
|
||||
|
@ -1117,12 +1117,11 @@ restart:
|
|||
if (net_ratelimit())
|
||||
printk(KERN_WARNING
|
||||
"Neighbour table failure & not caching routes.\n");
|
||||
rt_drop(rt);
|
||||
ip_rt_put(rt);
|
||||
return err;
|
||||
}
|
||||
}
|
||||
|
||||
rt_free(rt);
|
||||
goto skip_hashing;
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue