mirror of
https://github.com/edk2-porting/linux-next.git
synced 2024-12-18 02:04:05 +08:00
tcp: fix three tcp sysctls tuning
As discovered by Anton Blanchard, current code to autotune tcp_death_row.sysctl_max_tw_buckets, sysctl_tcp_max_orphans and sysctl_max_syn_backlog makes little sense. The bigger a page is, the less tcp_max_orphans is : 4096 on a 512GB machine in Anton's case. (tcp_hashinfo.bhash_size * sizeof(struct inet_bind_hashbucket)) is much bigger if spinlock debugging is on. Its wrong to select bigger limits in this case (where kernel structures are also bigger) bhash_size max is 65536, and we get this value even for small machines. A better ground is to use size of ehash table, this also makes code shorter and more obvious. Based on a patch from Anton, and another from David. Reported-and-tested-by: Anton Blanchard <anton@samba.org> Signed-off-by: Eric Dumazet <eric.dumazet@gmail.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
ad1af0fedb
commit
c5ed63d66f
@ -3209,7 +3209,7 @@ void __init tcp_init(void)
|
|||||||
{
|
{
|
||||||
struct sk_buff *skb = NULL;
|
struct sk_buff *skb = NULL;
|
||||||
unsigned long nr_pages, limit;
|
unsigned long nr_pages, limit;
|
||||||
int order, i, max_share;
|
int i, max_share, cnt;
|
||||||
unsigned long jiffy = jiffies;
|
unsigned long jiffy = jiffies;
|
||||||
|
|
||||||
BUILD_BUG_ON(sizeof(struct tcp_skb_cb) > sizeof(skb->cb));
|
BUILD_BUG_ON(sizeof(struct tcp_skb_cb) > sizeof(skb->cb));
|
||||||
@ -3258,22 +3258,12 @@ void __init tcp_init(void)
|
|||||||
INIT_HLIST_HEAD(&tcp_hashinfo.bhash[i].chain);
|
INIT_HLIST_HEAD(&tcp_hashinfo.bhash[i].chain);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Try to be a bit smarter and adjust defaults depending
|
|
||||||
* on available memory.
|
cnt = tcp_hashinfo.ehash_mask + 1;
|
||||||
*/
|
|
||||||
for (order = 0; ((1 << order) << PAGE_SHIFT) <
|
tcp_death_row.sysctl_max_tw_buckets = cnt / 2;
|
||||||
(tcp_hashinfo.bhash_size * sizeof(struct inet_bind_hashbucket));
|
sysctl_tcp_max_orphans = cnt / 2;
|
||||||
order++)
|
sysctl_max_syn_backlog = max(128, cnt / 256);
|
||||||
;
|
|
||||||
if (order >= 4) {
|
|
||||||
tcp_death_row.sysctl_max_tw_buckets = 180000;
|
|
||||||
sysctl_tcp_max_orphans = 4096 << (order - 4);
|
|
||||||
sysctl_max_syn_backlog = 1024;
|
|
||||||
} else if (order < 3) {
|
|
||||||
tcp_death_row.sysctl_max_tw_buckets >>= (3 - order);
|
|
||||||
sysctl_tcp_max_orphans >>= (3 - order);
|
|
||||||
sysctl_max_syn_backlog = 128;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Set the pressure threshold to be a fraction of global memory that
|
/* Set the pressure threshold to be a fraction of global memory that
|
||||||
* is up to 1/2 at 256 MB, decreasing toward zero with the amount of
|
* is up to 1/2 at 256 MB, decreasing toward zero with the amount of
|
||||||
|
Loading…
Reference in New Issue
Block a user