net: optimize INET input path further
Followup of commit b178bb3dfc
(net: reorder struct sock fields)
Optimize INET input path a bit further, by :
1) moving sk_refcnt close to sk_lock.
This reduces number of dirtied cache lines by one on 64bit arches (and
64 bytes cache line size).
2) moving inet_daddr & inet_rcv_saddr at the beginning of sk
(same cache line than hash / family / bound_dev_if / nulls_node)
This reduces number of accessed cache lines in lookups by one, and dont
increase size of inet and timewait socks.
inet and tw sockets now share same place-holder for these fields.
Before patch :
offsetof(struct sock, sk_refcnt) = 0x10
offsetof(struct sock, sk_lock) = 0x40
offsetof(struct sock, sk_receive_queue) = 0x60
offsetof(struct inet_sock, inet_daddr) = 0x270
offsetof(struct inet_sock, inet_rcv_saddr) = 0x274
After patch :
offsetof(struct sock, sk_refcnt) = 0x44
offsetof(struct sock, sk_lock) = 0x48
offsetof(struct sock, sk_receive_queue) = 0x68
offsetof(struct inet_sock, inet_daddr) = 0x0
offsetof(struct inet_sock, inet_rcv_saddr) = 0x4
compute_score() (udp or tcp) now use a single cache line per ignored
item, instead of two.
Signed-off-by: Eric Dumazet <eric.dumazet@gmail.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:

committed by
David S. Miller

parent
defb3519a6
commit
68835aba4d
@@ -116,8 +116,9 @@ struct inet_sock {
|
||||
struct ipv6_pinfo *pinet6;
|
||||
#endif
|
||||
/* Socket demultiplex comparisons on incoming packets. */
|
||||
__be32 inet_daddr;
|
||||
__be32 inet_rcv_saddr;
|
||||
#define inet_daddr sk.__sk_common.skc_daddr
|
||||
#define inet_rcv_saddr sk.__sk_common.skc_rcv_saddr
|
||||
|
||||
__be16 inet_dport;
|
||||
__u16 inet_num;
|
||||
__be32 inet_saddr;
|
||||
|
Reference in New Issue
Block a user