Le mardi 12 octobre 2010 à 00:02 +0200, Eric Dumazet a écrit :
> Here is the followup patch.
>
> Thanks !
>
Oops, this was an old version, the up2date ones also took care of "used"
field.
I guess its time for a sleep, sorry again.
[PATCH net-next V2] neigh: reorder struct neighbour fields
(refcnt) and (ha_lock, ha, used, dev, output, ops, primary_key) should
be placed on a separate cache lines.
refcnt can be often written, while other fields are mostly read.
This gave me good result on stress test :
before:
real    0m45.570s
user    0m15.525s
sys     9m56.669s
After:
real    0m41.841s
user    0m15.261s
sys     8m45.949s
Signed-off-by: Eric Dumazet <eric.dumazet@gmail.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
        struct neighbour __rcu  *next;
        struct neigh_table      *tbl;
        struct neigh_parms      *parms;
-       struct net_device       *dev;
-       unsigned long           used;
        unsigned long           confirmed;
        unsigned long           updated;
        __u8                    flags;
        __u8                    type;
        __u8                    dead;
        atomic_t                refcnt;
+       struct sk_buff_head     arp_queue;
+       struct timer_list       timer;
+       unsigned long           used;
        atomic_t                probes;
        rwlock_t                lock;
        seqlock_t               ha_lock;
        unsigned char           ha[ALIGN(MAX_ADDR_LEN, sizeof(unsigned long))];
        struct hh_cache         *hh;
        int                     (*output)(struct sk_buff *skb);
-       struct sk_buff_head     arp_queue;
-       struct timer_list       timer;
        const struct neigh_ops  *ops;
        struct rcu_head         rcu;
+       struct net_device       *dev;
        u8                      primary_key[0];
 };