From: David Miller <davem@davemloft.net>
To: eric.dumazet@gmail.com
Cc: anton@samba.org, netdev@vger.kernel.org, miltonm@bga.com
Subject: Re: [PATCH] tcp: Fix sysctl_tcp_max_orphans when PAGE_SIZE != 4k
Date: Wed, 25 Aug 2010 16:57:59 -0700 (PDT) [thread overview]
Message-ID: <20100825.165759.27789477.davem@davemloft.net> (raw)
In-Reply-To: <1282758634.2487.576.camel@edumazet-laptop>
From: Eric Dumazet <eric.dumazet@gmail.com>
Date: Wed, 25 Aug 2010 19:50:34 +0200
> In fact, existing code makes litle sense....
>
> (tcp_hashinfo.bhash_size * sizeof(struct inet_bind_hashbucket))
>
> is much bigger if spinlock debugging is on. Its strange 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.
>
> Sizing would probably be better if using ehash_size instead of
> bhash_size
Yes, that would avoid debugging unduly influencing this tunable.
Also, I think the "4096" constant is a reference to thing we now
call SK_MEM_QUANTUM. Back when this sizing code was added in:
commit 1f28b683339f74f9664b77532f4a2f1aad512451
Author: davem <davem>
Date: Sun Jan 16 05:10:52 2000 +0000
Merge in TCP/UDP optimizations and
bug fixing from softnet patches. Softnet patch
set decreases size by approx. 300k
of the netdev-vger-cvs tree, we used the '4096' constant explicitly.
> Maybe remove the 'order' loop and use ehash_size, already a result of
> the available memory or thash_entries tunable.
>
> unsigned int ehash_size = tcp_hashinfo.ehash_mask + 1;
>
> tcp_death_row.sysctl_max_tw_buckets = cnt / 2;
> sysctl_tcp_max_orphans = cnt / 2;
> sysctl_max_syn_backlog = min(128, cnt / 256);
Yeah, something like the following, Anton?
diff --git a/net/ipv4/tcp.c b/net/ipv4/tcp.c
index 197b9b7..403c029 100644
--- a/net/ipv4/tcp.c
+++ b/net/ipv4/tcp.c
@@ -3209,7 +3209,7 @@ void __init tcp_init(void)
{
struct sk_buff *skb = NULL;
unsigned long nr_pages, limit;
- int order, i, max_share;
+ int order, i, max_share, cnt;
unsigned long jiffy = jiffies;
BUILD_BUG_ON(sizeof(struct tcp_skb_cb) > sizeof(skb->cb));
@@ -3258,22 +3258,11 @@ void __init tcp_init(void)
INIT_HLIST_HEAD(&tcp_hashinfo.bhash[i].chain);
}
- /* Try to be a bit smarter and adjust defaults depending
- * on available memory.
- */
- for (order = 0; ((1 << order) << PAGE_SHIFT) <
- (tcp_hashinfo.bhash_size * sizeof(struct inet_bind_hashbucket));
- order++)
- ;
- 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;
- }
+ cnt = tcp_hashinfo.ehash_mask + 1;
+
+ tcp_death_row.sysctl_max_tw_buckets = cnt / 2;
+ sysctl_tcp_max_orphans = cnt / 2;
+ sysctl_max_syn_backlog = min(128, cnt / 256);
/* 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
next prev parent reply other threads:[~2010-08-25 23:57 UTC|newest]
Thread overview: 17+ messages / expand[flat|nested] mbox.gz Atom feed top
2010-08-25 7:16 Spurious "TCP: too many of orphaned sockets", unable to allocate sockets Anton Blanchard
2010-08-25 7:17 ` [PATCH] tcp: Fix sysctl_tcp_max_orphans when PAGE_SIZE != 4k Anton Blanchard
2010-08-25 7:39 ` Eric Dumazet
2010-08-25 7:59 ` David Miller
2010-08-25 17:50 ` Eric Dumazet
2010-08-25 23:57 ` David Miller [this message]
2010-08-26 0:38 ` Anton Blanchard
2010-08-26 3:53 ` David Miller
2010-08-26 6:36 ` Anton Blanchard
2010-08-26 4:45 ` Eric Dumazet
2010-08-26 5:15 ` [PATCH] tcp: fix three tcp sysctls tuning Eric Dumazet
2010-08-26 6:02 ` David Miller
2010-08-26 6:21 ` Eric Dumazet
2010-08-25 7:59 ` Spurious "TCP: too many of orphaned sockets", unable to allocate sockets David Miller
2010-08-25 8:20 ` David Miller
2010-08-25 8:47 ` Eric Dumazet
2010-08-25 9:28 ` David Miller
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20100825.165759.27789477.davem@davemloft.net \
--to=davem@davemloft.net \
--cc=anton@samba.org \
--cc=eric.dumazet@gmail.com \
--cc=miltonm@bga.com \
--cc=netdev@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).