neigh: reorder struct neighbour
authorEric Dumazet <eric.dumazet@gmail.com>
Thu, 11 Nov 2010 06:57:19 +0000 (06:57 +0000)
committerDavid S. Miller <davem@davemloft.net>
Thu, 11 Nov 2010 18:29:40 +0000 (10:29 -0800)
It is important to move nud_state outside of the often modified cache
line (because of refcnt), to reduce false sharing in neigh_event_send()

This is a followup of commit 0ed8ddf4045f (neigh: Protect neigh->ha[]
with a seqlock)

This gives a 7% speedup on routing test with IP route cache disabled.

Signed-off-by: Eric Dumazet <eric.dumazet@gmail.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
include/net/neighbour.h

index 55590ab16b3ed5192413b4b6415a8785c1d1a5bb..815b2ce9f4a496768fff673321a79bd39c0545c9 100644 (file)
@@ -96,16 +96,16 @@ struct neighbour {
        struct neigh_parms      *parms;
        unsigned long           confirmed;
        unsigned long           updated;
-       __u8                    flags;
-       __u8                    nud_state;
-       __u8                    type;
-       __u8                    dead;
+       rwlock_t                lock;
        atomic_t                refcnt;
        struct sk_buff_head     arp_queue;
        struct timer_list       timer;
        unsigned long           used;
        atomic_t                probes;
-       rwlock_t                lock;
+       __u8                    flags;
+       __u8                    nud_state;
+       __u8                    type;
+       __u8                    dead;
        seqlock_t               ha_lock;
        unsigned char           ha[ALIGN(MAX_ADDR_LEN, sizeof(unsigned long))];
        struct hh_cache         *hh;