inet: move ipv6only in sock_common
When an UDP application switches from AF_INET to AF_INET6 sockets, we have a small performance degradation for IPv4 communications because of extra cache line misses to access ipv6only information. This can also be noticed for TCP listeners, as ipv6_only_sock() is also used from __inet_lookup_listener()->compute_score() This is magnified when SO_REUSEPORT is used. Move ipv6only into struct sock_common so that it is available at no extra cost in lookups. Signed-off-by: Eric Dumazet <edumazet@google.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:

committed by
David S. Miller

parent
090cce4263
commit
9fe516ba3f
@@ -181,7 +181,8 @@ struct sock_common {
|
||||
unsigned short skc_family;
|
||||
volatile unsigned char skc_state;
|
||||
unsigned char skc_reuse:4;
|
||||
unsigned char skc_reuseport:4;
|
||||
unsigned char skc_reuseport:1;
|
||||
unsigned char skc_ipv6only:1;
|
||||
int skc_bound_dev_if;
|
||||
union {
|
||||
struct hlist_node skc_bind_node;
|
||||
@@ -317,6 +318,7 @@ struct sock {
|
||||
#define sk_state __sk_common.skc_state
|
||||
#define sk_reuse __sk_common.skc_reuse
|
||||
#define sk_reuseport __sk_common.skc_reuseport
|
||||
#define sk_ipv6only __sk_common.skc_ipv6only
|
||||
#define sk_bound_dev_if __sk_common.skc_bound_dev_if
|
||||
#define sk_bind_node __sk_common.skc_bind_node
|
||||
#define sk_prot __sk_common.skc_prot
|
||||
|
Reference in New Issue
Block a user