mirror of
https://github.com/Fishwaldo/Star64_linux.git
synced 2025-07-23 07:12:09 +00:00
net: Add sysctl to toggle early demux for tcp and udp
Certain system process significant unconnected UDP workload. It would be preferrable to disable UDP early demux for those systems and enable it for TCP only. By disabling UDP demux, we see these slight gains on an ARM64 system- 782 -> 788Mbps unconnected single stream UDPv4 633 -> 654Mbps unconnected UDPv4 different sources The performance impact can change based on CPU architecure and cache sizes. There will not much difference seen if entire UDP hash table is in cache. Both sysctls are enabled by default to preserve existing behavior. v1->v2: Change function pointer instead of adding conditional as suggested by Stephen. v2->v3: Read once in callers to avoid issues due to compiler optimizations. Also update commit message with the tests. v3->v4: Store and use read once result instead of querying pointer again incorrectly. v4->v5: Refactor to avoid errors due to compilation with IPV6={m,n} Signed-off-by: Subash Abhinov Kasiviswanathan <subashab@codeaurora.org> Suggested-by: Eric Dumazet <edumazet@google.com> Cc: Stephen Hemminger <stephen@networkplumber.org> Cc: Tom Herbert <tom@herbertland.com> Cc: David Miller <davem@davemloft.net> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
8fa96e3bf6
commit
dddb64bcb3
12 changed files with 103 additions and 14 deletions
|
@ -40,6 +40,7 @@
|
|||
/* This is used to register protocols. */
|
||||
struct net_protocol {
|
||||
void (*early_demux)(struct sk_buff *skb);
|
||||
void (*early_demux_handler)(struct sk_buff *skb);
|
||||
int (*handler)(struct sk_buff *skb);
|
||||
void (*err_handler)(struct sk_buff *skb, u32 info);
|
||||
unsigned int no_policy:1,
|
||||
|
@ -54,7 +55,7 @@ struct net_protocol {
|
|||
#if IS_ENABLED(CONFIG_IPV6)
|
||||
struct inet6_protocol {
|
||||
void (*early_demux)(struct sk_buff *skb);
|
||||
|
||||
void (*early_demux_handler)(struct sk_buff *skb);
|
||||
int (*handler)(struct sk_buff *skb);
|
||||
|
||||
void (*err_handler)(struct sk_buff *skb,
|
||||
|
@ -92,12 +93,12 @@ struct inet_protosw {
|
|||
#define INET_PROTOSW_PERMANENT 0x02 /* Permanent protocols are unremovable. */
|
||||
#define INET_PROTOSW_ICSK 0x04 /* Is this an inet_connection_sock? */
|
||||
|
||||
extern const struct net_protocol __rcu *inet_protos[MAX_INET_PROTOS];
|
||||
extern struct net_protocol __rcu *inet_protos[MAX_INET_PROTOS];
|
||||
extern const struct net_offload __rcu *inet_offloads[MAX_INET_PROTOS];
|
||||
extern const struct net_offload __rcu *inet6_offloads[MAX_INET_PROTOS];
|
||||
|
||||
#if IS_ENABLED(CONFIG_IPV6)
|
||||
extern const struct inet6_protocol __rcu *inet6_protos[MAX_INET_PROTOS];
|
||||
extern struct inet6_protocol __rcu *inet6_protos[MAX_INET_PROTOS];
|
||||
#endif
|
||||
|
||||
int inet_add_protocol(const struct net_protocol *prot, unsigned char num);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue