[NETFILTER]: nf_conntrack: reduce timer updates in __nf_ct_refresh_acct()
Only update the conntrack timer if there's been at least HZ jiffies since the last update. Reduces the number of del_timer/add_timer cycles from one per packet to one per connection per second (plus once for each state change of a connection) Should handle timer wraparounds and connection timeout changes. Signed-off-by: Martin Josefsson <gandalf@wlug.westbo.se> Signed-off-by: Patrick McHardy <kaber@trash.net>
This commit is contained in:
parent
824621eddd
commit
be00c8e489
|
@ -864,9 +864,14 @@ void __nf_ct_refresh_acct(struct nf_conn *ct,
|
||||||
ct->timeout.expires = extra_jiffies;
|
ct->timeout.expires = extra_jiffies;
|
||||||
event = IPCT_REFRESH;
|
event = IPCT_REFRESH;
|
||||||
} else {
|
} else {
|
||||||
/* Need del_timer for race avoidance (may already be dying). */
|
unsigned long newtime = jiffies + extra_jiffies;
|
||||||
if (del_timer(&ct->timeout)) {
|
|
||||||
ct->timeout.expires = jiffies + extra_jiffies;
|
/* Only update the timeout if the new timeout is at least
|
||||||
|
HZ jiffies from the old timeout. Need del_timer for race
|
||||||
|
avoidance (may already be dying). */
|
||||||
|
if (newtime - ct->timeout.expires >= HZ
|
||||||
|
&& del_timer(&ct->timeout)) {
|
||||||
|
ct->timeout.expires = newtime;
|
||||||
add_timer(&ct->timeout);
|
add_timer(&ct->timeout);
|
||||||
event = IPCT_REFRESH;
|
event = IPCT_REFRESH;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue