]> err.no Git - linux-2.6/commitdiff
[NET]: Force a cache line split in hh_cache in SMP.
authorEric Dumazet <dada1@cosmosbay.com>
Fri, 8 Dec 2006 08:08:43 +0000 (00:08 -0800)
committerDavid S. Miller <davem@sunset.davemloft.net>
Sat, 9 Dec 2006 01:19:29 +0000 (17:19 -0800)
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>
include/linux/netdevice.h

index 631cec4ff5e1dc992972142c2caf3810971e9c88..6be767c76b37df983084121cf9e2d21a448831c4 100644 (file)
@@ -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
                                          */