diff options
author | Eric Dumazet <dada1@cosmosbay.com> | 2006-12-08 00:08:43 -0800 |
---|---|---|
committer | David S. Miller <davem@sunset.davemloft.net> | 2006-12-08 17:19:29 -0800 |
commit | f0490980a152958d25ce9762bfb296d8fd4c5512 (patch) | |
tree | b5f505b4bfbc770c1e15d7177fec4944e2df9c28 /include/linux/netdevice.h | |
parent | 47bbec0282cce900f16a8dd6397260e076400edb (diff) | |
download | lwn-f0490980a152958d25ce9762bfb296d8fd4c5512.tar.gz lwn-f0490980a152958d25ce9762bfb296d8fd4c5512.zip |
[NET]: Force a cache line split in hh_cache in SMP.
hh_lock was converted from rwlock to seqlock by Stephen.
To have a 100% benefit of this change, I suggest to place read mostly fields
of hh_cache in a separate cache line, because hh_refcnt may be changed quite
frequently on some busy machines.
Signed-off-by: Eric Dumazet <dada1@cosmosbay.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'include/linux/netdevice.h')
-rw-r--r-- | include/linux/netdevice.h | 9 |
1 files changed, 8 insertions, 1 deletions
diff --git a/include/linux/netdevice.h b/include/linux/netdevice.h index 631cec4ff5e1..6be767c76b37 100644 --- a/include/linux/netdevice.h +++ b/include/linux/netdevice.h @@ -193,7 +193,14 @@ struct hh_cache { struct hh_cache *hh_next; /* Next entry */ atomic_t hh_refcnt; /* number of users */ - __be16 hh_type; /* protocol identifier, f.e ETH_P_IP +/* + * We want hh_output, hh_len, hh_lock and hh_data be a in a separate + * cache line on SMP. + * They are mostly read, but hh_refcnt may be changed quite frequently, + * incurring cache line ping pongs. + */ + __be16 hh_type ____cacheline_aligned_in_smp; + /* protocol identifier, f.e ETH_P_IP * NOTE: For VLANs, this will be the * encapuslated type. --BLG */ |