From: Denys Fedoryshchenko <nuclearcat@nuclearcat.com>
To: Florian Westphal <fw@strlen.de>
Cc: netfilter-devel@vger.kernel.org,
Nicolas Dichtel <nicolas.dichtel@6wind.com>
Subject: Re: [PATCH nf v2] netfilter: conntrack: refine gc worker heuristics, redux
Date: Thu, 19 Jan 2017 03:36:52 +0200 [thread overview]
Message-ID: <87f65fc03fdfa4c2fc185551c7989c48@nuclearcat.com> (raw)
In-Reply-To: <1484701282-14758-1-git-send-email-fw@strlen.de>
On 2017-01-18 03:01, Florian Westphal wrote:
> This further refines the changes made to conntrack gc_worker in
> commit e0df8cae6c16 ("netfilter: conntrack: refine gc worker
> heuristics").
>
> The main idea of that change was to reduce the scan interval when
> evictions
> take place.
>
> However, on the reporters' setup, there are 1-2 million conntrack
> entries
> in total and roughly 8k new (and closing) connections per second.
>
> In this case we'll always evict at least one entry per gc cycle and
> scan
> interval is always at 1 jiffy because of this test:
>
> } else if (expired_count) {
> gc_work->next_gc_run /= 2U;
> next_run = msecs_to_jiffies(1);
>
> being true almost all the time.
>
> Given we scan ~10k entries per run its clearly wrong to reduce interval
> based on nonzero eviction count, it will only waste cpu cycles since a
> vast
> majorities of conntracks are not timed out.
>
> Thus only look at the ratio (scanned entries vs. evicted entries) to
> make
> a decision on whether to reduce or not.
>
> Because evictor is supposed to only kick in when system turns idle
> after
> a busy period, pick a high ratio -- this makes it 50%. We thus keep
> the idea of increasing scan rate when its likely that table contains
> many
> expired entries.
>
> In order to not let timed-out entries hang around for too long
> (important when using event logging, in which case we want to timely
> destroy events), we now scan the full table within at most
> GC_MAX_SCAN_JIFFIES (16 seconds) even in worst-case scenario where all
> timed-out entries sit in same slot.
>
> I tested this with a vm under synflood (with
> sysctl net.netfilter.nf_conntrack_tcp_timeout_syn_recv=3).
>
> While flood is ongoing, interval now stays at its max rate
> (GC_MAX_SCAN_JIFFIES / GC_MAX_BUCKETS_DIV -> 125ms).
>
> With feedback from Nicolas Dichtel.
>
> Reported-by: Denys Fedoryshchenko <nuclearcat@nuclearcat.com>
> Cc: Nicolas Dichtel <nicolas.dichtel@6wind.com>
> Fixes: b87a2f9199ea82eaadc ("netfilter: conntrack: add gc worker to
> remove timed-out entries")
> Signed-off-by: Florian Westphal <fw@strlen.de>
> ---
> this is on top of
> https://patchwork.ozlabs.org/patch/715850/
> ('netfilter: conntrack: remove GC_MAX_EVICTS break').
I confirm, patch completely fix issue.
next prev parent reply other threads:[~2017-01-19 3:10 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-01-18 1:01 [PATCH nf v2] netfilter: conntrack: refine gc worker heuristics, redux Florian Westphal
2017-01-18 7:46 ` Denys Fedoryshchenko
2017-01-18 14:27 ` Nicolas Dichtel
2017-01-19 1:36 ` Denys Fedoryshchenko [this message]
2017-01-19 13:29 ` Pablo Neira Ayuso
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=87f65fc03fdfa4c2fc185551c7989c48@nuclearcat.com \
--to=nuclearcat@nuclearcat.com \
--cc=fw@strlen.de \
--cc=netfilter-devel@vger.kernel.org \
--cc=nicolas.dichtel@6wind.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).