Skip to content

Commit

Permalink
ipv6 fib: Make rt6_info{} more cache-line aware.
Browse files Browse the repository at this point in the history
The head element of rt6_info{} is dst_entry{}, and
IPv6 specific elements follow.

Because elements at the end of dst_entry{} are frequently
updated, it is not good to put frequently-used static
elements, such as rt6i_idev, rt6i_dst or rt6i_flags in the
same cache line.

On the other hand, fib6_table, rt6i_node or rt6i_gateway are
rarely used, so it is okay to stay in the same cache line.

Let's rearrange rt6_info{}.

Signed-off-by: YOSHIFUJI Hideaki <yoshfuji@linux-ipv6.org>
Signed-off-by: David S. Miller <davem@davemloft.net>
  • Loading branch information
yoshfuji authored and davem330 committed Apr 2, 2010
1 parent 152102c commit bd2c77a
Showing 1 changed file with 16 additions and 13 deletions.
29 changes: 16 additions & 13 deletions include/net/ip6_fib.h
Original file line number Diff line number Diff line change
Expand Up @@ -88,34 +88,37 @@ struct rt6_info {
struct dst_entry dst;
} u;

struct inet6_dev *rt6i_idev;

#define rt6i_dev u.dst.dev
#define rt6i_nexthop u.dst.neighbour
#define rt6i_expires u.dst.expires

/*
* Tail elements of dst_entry (__refcnt etc.)
* and these elements (rarely used in hot path) are in
* the same cache line.
*/
struct fib6_table *rt6i_table;
struct fib6_node *rt6i_node;

struct in6_addr rt6i_gateway;

u32 rt6i_flags;
u32 rt6i_metric;
atomic_t rt6i_ref;

/* more non-fragment space at head required */
unsigned short rt6i_nfheader_len;

u8 rt6i_protocol;
atomic_t rt6i_ref;

struct fib6_table *rt6i_table;
/* These are in a separate cache line. */
struct rt6key rt6i_dst ____cacheline_aligned_in_smp;
u32 rt6i_flags;
struct rt6key rt6i_src;
u32 rt6i_metric;

struct rt6key rt6i_dst;
struct inet6_dev *rt6i_idev;

#ifdef CONFIG_XFRM
u32 rt6i_flow_cache_genid;
#endif
/* more non-fragment space at head required */
unsigned short rt6i_nfheader_len;

struct rt6key rt6i_src;
u8 rt6i_protocol;
};

static inline struct inet6_dev *ip6_dst_idev(struct dst_entry *dst)
Expand Down

0 comments on commit bd2c77a

Please sign in to comment.