summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIsmael Luceno <iluceno@suse.de>2026-07-02 12:10:50 +0200
committerPablo Neira Ayuso <pablo@netfilter.org>2026-07-24 10:21:38 +0200
commit0a33bdce34c68f1d158d2ee3c9dfd011bef5c290 (patch)
treee303f4adf0e56c72899225539f12540ff071b5d6
parent89d8006259b81dd25c962f6cc8d7ab268d6ea426 (diff)
downloadlinux-next-0a33bdce34c68f1d158d2ee3c9dfd011bef5c290.tar.gz
linux-next-0a33bdce34c68f1d158d2ee3c9dfd011bef5c290.zip
ipvs: Move defense_work and est_reload_work to system_dfl_long_wq
Under synflood conditions binding these handlers to system_long_wq may pin them to a saturated CPU. We've observed improved throughtput on a DPDK/VPP application with this change, which we attribute to the reduced context switching. Neither handler has per-CPU data dependencies nor cache locality requirements that would prevent this change. Signed-off-by: Ismael Luceno <iluceno@suse.de> Acked-by: Julian Anastasov <ja@ssi.bg> Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
-rw-r--r--net/netfilter/ipvs/ip_vs_ctl.c6
-rw-r--r--net/netfilter/ipvs/ip_vs_est.c2
2 files changed, 4 insertions, 4 deletions
diff --git a/net/netfilter/ipvs/ip_vs_ctl.c b/net/netfilter/ipvs/ip_vs_ctl.c
index bcf40b8c41cf..d7e669efab4d 100644
--- a/net/netfilter/ipvs/ip_vs_ctl.c
+++ b/net/netfilter/ipvs/ip_vs_ctl.c
@@ -235,7 +235,7 @@ static void defense_work_handler(struct work_struct *work)
update_defense_level(ipvs);
if (atomic_read(&ipvs->dropentry))
ip_vs_random_dropentry(ipvs);
- queue_delayed_work(system_long_wq, &ipvs->defense_work,
+ queue_delayed_work(system_dfl_long_wq, &ipvs->defense_work,
DEFENSE_TIMER_PERIOD);
}
#endif
@@ -290,7 +290,7 @@ static void est_reload_work_handler(struct work_struct *work)
atomic_set(&ipvs->est_genid_done, genid);
if (repeat)
- queue_delayed_work(system_long_wq, &ipvs->est_reload_work,
+ queue_delayed_work(system_dfl_long_wq, &ipvs->est_reload_work,
delay);
unlock:
@@ -5126,7 +5126,7 @@ static int __net_init ip_vs_control_net_init_sysctl(struct netns_ipvs *ipvs)
goto err;
/* Schedule defense work */
- queue_delayed_work(system_long_wq, &ipvs->defense_work,
+ queue_delayed_work(system_dfl_long_wq, &ipvs->defense_work,
DEFENSE_TIMER_PERIOD);
return 0;
diff --git a/net/netfilter/ipvs/ip_vs_est.c b/net/netfilter/ipvs/ip_vs_est.c
index ab09f5182951..78964aa861e9 100644
--- a/net/netfilter/ipvs/ip_vs_est.c
+++ b/net/netfilter/ipvs/ip_vs_est.c
@@ -243,7 +243,7 @@ void ip_vs_est_reload_start(struct netns_ipvs *ipvs, bool restart)
/* Bump the kthread configuration genid if stopping is requested */
if (restart)
atomic_inc(&ipvs->est_genid);
- queue_delayed_work(system_long_wq, &ipvs->est_reload_work, 0);
+ queue_delayed_work(system_dfl_long_wq, &ipvs->est_reload_work, 0);
}
/* Start kthread task with current configuration */