LVS
lvs-devel
Google
 
Web LinuxVirtualServer.org

Re: [PATCH v2 nf-next] ipvs: Move defense_work and est_reload_work to sy

To: Ismael Luceno <iluceno@xxxxxxx>
Subject: Re: [PATCH v2 nf-next] ipvs: Move defense_work and est_reload_work to system_dfl_long_wq
Cc: linux-kernel@xxxxxxxxxxxxxxx, Marco Crivellari <marco.crivellari@xxxxxxxx>, Tejun Heo <tj@xxxxxxxxxx>, Simon Horman <horms@xxxxxxxxxxxx>, Pablo Neira Ayuso <pablo@xxxxxxxxxxxxx>, Florian Westphal <fw@xxxxxxxxx>, Phil Sutter <phil@xxxxxx>, "David S. Miller" <davem@xxxxxxxxxxxxx>, Eric Dumazet <edumazet@xxxxxxxxxx>, Jakub Kicinski <kuba@xxxxxxxxxx>, Paolo Abeni <pabeni@xxxxxxxxxx>, "open list:IPVS" <netdev@xxxxxxxxxxxxxxx>, "open list:IPVS" <lvs-devel@xxxxxxxxxxxxxxx>, "open list:NETFILTER" <netfilter-devel@xxxxxxxxxxxxxxx>, "open list:NETFILTER" <coreteam@xxxxxxxxxxxxx>
From: Julian Anastasov <ja@xxxxxx>
Date: Fri, 3 Jul 2026 20:49:55 +0300 (EEST)
        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 <iluceno@xxxxxxx>

        Looks good to me, thanks!

Acked-by: Julian Anastasov <ja@xxxxxx>

> ---
> CC: Marco Crivellari <marco.crivellari@xxxxxxxx>
> CC: Tejun Heo <tj@xxxxxxxxxx>
> 
> 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 <ja@xxxxxx>



<Prev in Thread] Current Thread [Next in Thread>