Hello,

On Thu, 2 Jul 2026, Ismael Luceno wrote:

> 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 <[email protected]>

        Looks good to me, thanks!

Acked-by: Julian Anastasov <[email protected]>

> ---
> CC: Marco Crivellari <[email protected]>
> CC: Tejun Heo <[email protected]>
> 
> Changes since v1:
> * Rebased on nf-next
> * Reworded commit message
> 
>  net/netfilter/ipvs/ip_vs_ctl.c | 6 +++---
>  net/netfilter/ipvs/ip_vs_est.c | 2 +-
>  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 @@ #define DEFENSE_TIMER_PERIOD      1*HZ
>       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 @@ #define DEFENSE_TIMER_PERIOD      1*HZ
>       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 @@ do_ip_vs_get_ctl(struct sock *sk, int cmd, void __user 
> *user, int *len)
>               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 @@ #define pr_fmt(fmt) "IPVS: " fmt
>       /* 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 */

Regards

--
Julian Anastasov <[email protected]>


Reply via email to