netfilter: conntrack: fix the gc rescheduling delay
authorAntoine Tenart <atenart@kernel.org>
Fri, 16 Sep 2022 09:29:40 +0000 (11:29 +0200)
committerFlorian Westphal <fw@strlen.de>
Wed, 21 Sep 2022 08:44:56 +0000 (10:44 +0200)
commit95eabdd207024312876d0ebed90b4c977e050e85
treee1cdc080b4e80db1561b2e2e13db346c814a7ac9
parentc29b068215906d33f75378d44526edc37ad08276
netfilter: conntrack: fix the gc rescheduling delay

Commit 2cfadb761d3d ("netfilter: conntrack: revisit gc autotuning")
changed the eviction rescheduling to the use average expiry of scanned
entries (within 1-60s) by doing:

  for (...) {
      expires = clamp(nf_ct_expires(tmp), ...);
      next_run += expires;
      next_run /= 2;
  }

The issue is the above will make the average ('next_run' here) more
dependent on the last expiration values than the firsts (for sets > 2).
Depending on the expiration values used to compute the average, the
result can be quite different than what's expected. To fix this we can
do the following:

  for (...) {
      expires = clamp(nf_ct_expires(tmp), ...);
      next_run += (expires - next_run) / ++count;
  }

Fixes: 2cfadb761d3d ("netfilter: conntrack: revisit gc autotuning")
Cc: Florian Westphal <fw@strlen.de>
Signed-off-by: Antoine Tenart <atenart@kernel.org>
Signed-off-by: Florian Westphal <fw@strlen.de>
net/netfilter/nf_conntrack_core.c