diff options
author | Eric Dumazet <dada1@cosmosbay.com> | 2009-03-20 01:33:32 -0700 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2009-03-20 01:33:32 -0700 |
commit | 5e140dfc1fe87eae27846f193086724806b33c7d (patch) | |
tree | a38240220f71ac128576cd8f432248442bac2deb /include/linux/gen_stats.h | |
parent | 408896d508794c98a2ac6b6e1dcd7a4888a4d32b (diff) | |
download | linux-stable-5e140dfc1fe87eae27846f193086724806b33c7d.tar.gz linux-stable-5e140dfc1fe87eae27846f193086724806b33c7d.tar.bz2 linux-stable-5e140dfc1fe87eae27846f193086724806b33c7d.zip |
net: reorder struct Qdisc for better SMP performance
dev_queue_xmit() needs to dirty fields "state", "q", "bstats" and "qstats"
On x86_64 arch, they currently span three cache lines, involving more
cache line ping pongs than necessary, making longer holding of queue spinlock.
We can reduce this to one cache line, by grouping all read-mostly fields
at the beginning of structure. (Or should I say, all highly modified fields
at the end :) )
Before patch :
offsetof(struct Qdisc, state)=0x38
offsetof(struct Qdisc, q)=0x48
offsetof(struct Qdisc, bstats)=0x80
offsetof(struct Qdisc, qstats)=0x90
sizeof(struct Qdisc)=0xc8
After patch :
offsetof(struct Qdisc, state)=0x80
offsetof(struct Qdisc, q)=0x88
offsetof(struct Qdisc, bstats)=0xa0
offsetof(struct Qdisc, qstats)=0xac
sizeof(struct Qdisc)=0xc0
Signed-off-by: Eric Dumazet <dada1@cosmosbay.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'include/linux/gen_stats.h')
-rw-r--r-- | include/linux/gen_stats.h | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/include/linux/gen_stats.h b/include/linux/gen_stats.h index 13f4e74609ac..0ffa41df0ee8 100644 --- a/include/linux/gen_stats.h +++ b/include/linux/gen_stats.h @@ -22,7 +22,7 @@ struct gnet_stats_basic { __u64 bytes; __u32 packets; -}; +} __attribute__ ((packed)); /** * struct gnet_stats_rate_est - rate estimator |