diff options
author | Eric Dumazet <eric.dumazet@gmail.com> | 2010-10-11 10:22:12 +0000 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2010-10-12 12:35:25 -0700 |
commit | 29b4433d991c88d86ca48a4c1cc33c671475be4b (patch) | |
tree | 2ad21b86aab8193c4533820c40cd31af97a7377f /net/bluetooth | |
parent | f0b9f4725180ea58c8da78b3de0b4e0ad180fc2c (diff) | |
download | blackbird-op-linux-29b4433d991c88d86ca48a4c1cc33c671475be4b.tar.gz blackbird-op-linux-29b4433d991c88d86ca48a4c1cc33c671475be4b.zip |
net: percpu net_device refcount
We tried very hard to remove all possible dev_hold()/dev_put() pairs in
network stack, using RCU conversions.
There is still an unavoidable device refcount change for every dst we
create/destroy, and this can slow down some workloads (routers or some
app servers, mmap af_packet)
We can switch to a percpu refcount implementation, now dynamic per_cpu
infrastructure is mature. On a 64 cpus machine, this consumes 256 bytes
per device.
On x86, dev_hold(dev) code :
before
lock incl 0x280(%ebx)
after:
movl 0x260(%ebx),%eax
incl fs:(%eax)
Stress bench :
(Sending 160.000.000 UDP frames,
IP route cache disabled, dual E5540 @2.53GHz,
32bit kernel, FIB_TRIE)
Before:
real 1m1.662s
user 0m14.373s
sys 12m55.960s
After:
real 0m51.179s
user 0m15.329s
sys 10m15.942s
Signed-off-by: Eric Dumazet <eric.dumazet@gmail.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/bluetooth')
0 files changed, 0 insertions, 0 deletions