• Eric Dumazet's avatar
    net: reorder struct Qdisc for better SMP performance · 5e140dfc
    Eric Dumazet authored
    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: default avatarEric Dumazet <dada1@cosmosbay.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    5e140dfc
sch_generic.h 13.5 KB