From: Anton Blanchard <anton@samba.org>
To: netdev@vger.kernel.org
Cc: miltonm@bga.com
Subject: Spurious "TCP: too many of orphaned sockets", unable to allocate sockets
Date: Wed, 25 Aug 2010 17:16:26 +1000 [thread overview]
Message-ID: <20100825071626.GA13681@kryten> (raw)
Hi,
We have a machine running a network test that regularly hits:
TCP: too many of orphaned sockets
Which comes from:
int orphan_count = percpu_counter_read_positive(
sk->sk_prot->orphan_count);
sk_mem_reclaim(sk);
if (tcp_too_many_orphans(sk, orphan_count)) {
if (net_ratelimit())
printk(KERN_INFO "TCP: too many of orphaned "
"sockets\n");
tcp_set_state(sk, TCP_CLOSE);
tcp_send_active_reset(sk, GFP_ATOMIC);
NET_INC_STATS_BH(sock_net(sk),
LINUX_MIB_TCPABORTONMEMORY);
}
Looking closer we have:
# cat /proc/sys/net/ipv4/tcp_max_orphans
4096
# grep processor /proc/cpuinfo | wc -l
128
The problem is we are using percpu_counter_read_positive, so the value can be
out num_online_cpus() * percpu_counter_batch. percpu_counter_batch is going to
be 32, so we might be out by 32 * 128 = 4k. Considering tcp_max_orphans is 4k
that explains the spurious printout and the inability to allocate sockets.
A couple of issues:
1. We size sysctl_tcp_max_orphans based on some second order heuristic
that uses pages which could be anything from 4k to 64k:
/* 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;
}
I'll follow up with a patch to fix this for PAGE_SIZE != 4k
2. Even with this fixed we could hit the original issue. We have been known to
test on 1024 thread boxes and we would have the possibility of 32 * 1024
= 32k slack in the percpu counters. On this box tcp_max_orphans will be
64k after the fix which is a bit close for comfort. Should we do anything here?
Anton
next reply other threads:[~2010-08-25 7:17 UTC|newest]
Thread overview: 17+ messages / expand[flat|nested] mbox.gz Atom feed top
2010-08-25 7:16 Anton Blanchard [this message]
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
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=20100825071626.GA13681@kryten \
--to=anton@samba.org \
--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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.