Message ID | 20250430072810.63169-1-vimal.agrawal@sophos.com |
---|---|
State | New |
Headers | show |
Series | [v3] nf_conntrack: sysctl: expose gc worker scan interval via sysctl | expand |
avimalin@gmail.com <avimalin@gmail.com> wrote: > From: Vimal Agrawal <vimal.agrawal@sophos.com> > > Default initial gc scan interval of 60 secs is too long for system > with low number of conntracks causing delay in conntrack deletion. > It is affecting userspace which are replying on timely arrival of > conntrack destroy event. So it is better that this is controlled > through sysctl Acked-by: Florian Westphal <fw@strlen.de>
Thanks Florian for the suggestions and comments. Hi Pablo, netfilter-devel, Could you also please review the patch and let me know if you have any comment/s Thanks, Vimal On Wed, Apr 30, 2025 at 1:27 PM Florian Westphal <fw@strlen.de> wrote: > > avimalin@gmail.com <avimalin@gmail.com> wrote: > > From: Vimal Agrawal <vimal.agrawal@sophos.com> > > > > Default initial gc scan interval of 60 secs is too long for system > > with low number of conntracks causing delay in conntrack deletion. > > It is affecting userspace which are replying on timely arrival of > > conntrack destroy event. So it is better that this is controlled > > through sysctl > > Acked-by: Florian Westphal <fw@strlen.de> >
Hi all, Let me know if you have any comment/s on the patch. Thanks, Vimal On Sat, May 3, 2025 at 7:57 AM Vimal Agrawal <avimalin@gmail.com> wrote: > > Thanks Florian for the suggestions and comments. > > Hi Pablo, netfilter-devel, > Could you also please review the patch and let me know if you have any comment/s > > Thanks, > Vimal > > On Wed, Apr 30, 2025 at 1:27 PM Florian Westphal <fw@strlen.de> wrote: > > > > avimalin@gmail.com <avimalin@gmail.com> wrote: > > > From: Vimal Agrawal <vimal.agrawal@sophos.com> > > > > > > Default initial gc scan interval of 60 secs is too long for system > > > with low number of conntracks causing delay in conntrack deletion. > > > It is affecting userspace which are replying on timely arrival of > > > conntrack destroy event. So it is better that this is controlled > > > through sysctl > > > > Acked-by: Florian Westphal <fw@strlen.de> > >
diff --git a/Documentation/networking/nf_conntrack-sysctl.rst b/Documentation/networking/nf_conntrack-sysctl.rst index 238b66d0e059..207b62047639 100644 --- a/Documentation/networking/nf_conntrack-sysctl.rst +++ b/Documentation/networking/nf_conntrack-sysctl.rst @@ -64,6 +64,11 @@ nf_conntrack_frag6_timeout - INTEGER (seconds) Time to keep an IPv6 fragment in memory. +nf_conntrack_gc_scan_interval_init - INTEGER (seconds) + default 60 + + Default for garbage collector's initial scan interval. + nf_conntrack_generic_timeout - INTEGER (seconds) default 600 diff --git a/include/net/netfilter/nf_conntrack.h b/include/net/netfilter/nf_conntrack.h index 3f02a45773e8..eaf1933687b2 100644 --- a/include/net/netfilter/nf_conntrack.h +++ b/include/net/netfilter/nf_conntrack.h @@ -321,6 +321,7 @@ extern struct hlist_nulls_head *nf_conntrack_hash; extern unsigned int nf_conntrack_htable_size; extern seqcount_spinlock_t nf_conntrack_generation; extern unsigned int nf_conntrack_max; +extern unsigned int nf_conntrack_gc_scan_interval_init; /* must be called with rcu read lock held */ static inline void diff --git a/net/netfilter/nf_conntrack_core.c b/net/netfilter/nf_conntrack_core.c index 7f8b245e287a..d7e03c29765a 100644 --- a/net/netfilter/nf_conntrack_core.c +++ b/net/netfilter/nf_conntrack_core.c @@ -204,6 +204,8 @@ EXPORT_SYMBOL_GPL(nf_conntrack_htable_size); unsigned int nf_conntrack_max __read_mostly; EXPORT_SYMBOL_GPL(nf_conntrack_max); +__read_mostly unsigned int nf_conntrack_gc_scan_interval_init = GC_SCAN_INTERVAL_INIT; +EXPORT_SYMBOL_GPL(nf_conntrack_gc_scan_interval_init); seqcount_spinlock_t nf_conntrack_generation __read_mostly; static siphash_aligned_key_t nf_conntrack_hash_rnd; @@ -1513,7 +1515,7 @@ static void gc_worker(struct work_struct *work) nf_conntrack_max95 = nf_conntrack_max / 100u * 95u; if (i == 0) { - gc_work->avg_timeout = GC_SCAN_INTERVAL_INIT; + gc_work->avg_timeout = nf_conntrack_gc_scan_interval_init; gc_work->count = GC_SCAN_INITIAL_COUNT; gc_work->start_time = start_time; } diff --git a/net/netfilter/nf_conntrack_standalone.c b/net/netfilter/nf_conntrack_standalone.c index 2f666751c7e7..bdbf37a938bb 100644 --- a/net/netfilter/nf_conntrack_standalone.c +++ b/net/netfilter/nf_conntrack_standalone.c @@ -559,6 +559,7 @@ enum nf_ct_sysctl_index { #ifdef CONFIG_NF_CONNTRACK_TIMESTAMP NF_SYSCTL_CT_TIMESTAMP, #endif + NF_SYSCTL_CT_GC_SCAN_INTERVAL_INIT, NF_SYSCTL_CT_PROTO_TIMEOUT_GENERIC, NF_SYSCTL_CT_PROTO_TIMEOUT_TCP_SYN_SENT, NF_SYSCTL_CT_PROTO_TIMEOUT_TCP_SYN_RECV, @@ -691,6 +692,13 @@ static struct ctl_table nf_ct_sysctl_table[] = { .extra2 = SYSCTL_ONE, }, #endif + [NF_SYSCTL_CT_GC_SCAN_INTERVAL_INIT] = { + .procname = "nf_conntrack_gc_scan_interval_init", + .data = &nf_conntrack_gc_scan_interval_init, + .maxlen = sizeof(unsigned int), + .mode = 0644, + .proc_handler = proc_dointvec_jiffies, + }, [NF_SYSCTL_CT_PROTO_TIMEOUT_GENERIC] = { .procname = "nf_conntrack_generic_timeout", .maxlen = sizeof(unsigned int), @@ -1090,6 +1098,7 @@ static int nf_conntrack_standalone_init_sysctl(struct net *net) table[NF_SYSCTL_CT_MAX].mode = 0444; table[NF_SYSCTL_CT_EXPECT_MAX].mode = 0444; table[NF_SYSCTL_CT_BUCKETS].mode = 0444; + table[NF_SYSCTL_CT_GC_SCAN_INTERVAL_INIT].mode = 0444; } cnet->sysctl_header = register_net_sysctl_sz(net, "net/netfilter",