From: Eric Dumazet <eric.dumazet@gmail.com>
To: Tonghao Zhang <xiangxia.m.yue@gmail.com>
Cc: Eric Dumazet <edumazet@google.com>,
Linux Kernel Network Developers <netdev@vger.kernel.org>
Subject: Re: Compare length of req sock queue with sk_max_ack_backlog
Date: Thu, 01 Feb 2018 20:19:26 -0800 [thread overview]
Message-ID: <1517545166.3715.124.camel@gmail.com> (raw)
In-Reply-To: <CAMDZJNXyPy7sE-YEteAR==9kX9-9zcnJY+du6qOajBa5AeeVhg@mail.gmail.com>
On Fri, 2018-02-02 at 09:55 +0800, Tonghao Zhang wrote:
> On Thu, Feb 1, 2018 at 10:00 PM, Eric Dumazet <eric.dumazet@gmail.com> wrote:
> > On Thu, 2018-02-01 at 20:34 +0800, Tonghao Zhang wrote:
> > > Hi Eric
> > > One question for you, In the patch ef547f2ac16 ("tcp: remove
> > > max_qlen_log"), why we compared the length of req sock queue with
> > > sk_max_ack_backlog. If we remove the max_qlen_log, we should check the
> > > length of req sock queue with tcp_max_syn_backlog, right ?
> > >
> > > With this patch, the option "/proc/sys/net/ipv4/tcp_max_syn_backlog"
> > > will be unsed anymore, right ?
> >
> > Not right.
> >
> > Please "git grep -n sysctl_max_syn_backlog" to convince it is still
> > used.
> >
>
> In the tcp_conn_request(), we call the inet_csk_reqsk_queue_is_full()
> to check the length of req sock queue. But
> inet_csk_reqsk_queue_is_full()
> compares it with sk_max_ack_backlog.
>
> inet_csk_reqsk_queue_is_full
> inet_csk_reqsk_queue_len(sk) >= sk->sk_max_ack_backlog;
>
>
> inet_csk_reqsk_queue_len
> reqsk_queue_len(&inet_csk(sk)->icsk_accept_queue);
>
> If we set sysctl_max_syn_backlog to 1024 via
> /proc/sys/net/ipv4/tcp_max_syn_backlog, and
> backlog(sk_max_ack_backlog) to 128 via listen() , tcp_conn_request
> will drop the packets when
> length of req sock queue > 128, but not 1024.
>
> tcp_conn_request
> if ((net->ipv4.sysctl_tcp_syncookies == 2 ||
> inet_csk_reqsk_queue_is_full(sk)) && !isn) {
> want_cookie = tcp_syn_flood_action(sk, skb, rsk_ops->slab_name);
> if (!want_cookie)
> goto drop; // drop the packets
> }
It seems to work as intended and documented in the changelog.
A socket listen backlog is determined at the time listen() system call
is issued, using the standard somaxconn as safe guard, for all socket
types.
We want to get rid of tcp_max_syn_backlog eventually, since TCP
listeners can use listen(fd, 10000000) these days if they want,
it is a matter of provisioning the needed memory.
Old mechanism was not allowing a listener to reduce or increase its
backlog dynamically (listener was using a private hash table, sized at
the time of first listen() and not resized later)
Having a global sysctl to magically change behavior on all TCP
listeners is not very practical, unless you had dedicated hosts to deal
with one service.
next prev parent reply other threads:[~2018-02-02 4:19 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-02-01 12:34 Compare length of req sock queue with sk_max_ack_backlog Tonghao Zhang
2018-02-01 14:00 ` Eric Dumazet
2018-02-02 1:55 ` Tonghao Zhang
2018-02-02 4:19 ` Eric Dumazet [this message]
2018-02-02 5:41 ` Tonghao Zhang
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=1517545166.3715.124.camel@gmail.com \
--to=eric.dumazet@gmail.com \
--cc=edumazet@google.com \
--cc=netdev@vger.kernel.org \
--cc=xiangxia.m.yue@gmail.com \
/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).