[Devel] [PATCH RHEL9 COMMIT] Revert "fs/fuse/kio: tidy up RPC_AFFINITY_RSS"

Konstantin Khorenko khorenko at virtuozzo.com
Tue Jul 8 17:39:20 MSK 2025


disregard

--
Best regards,

Konstantin Khorenko,
Virtuozzo Linux Kernel Team

On 08.07.2025 16:23, Konstantin Khorenko wrote:
> The commit is pushed to "branch-rh9-5.14.0-427.55.1.vz9.82.x-ovz" and will appear at git at bitbucket.org:openvz/vzkernel.git
> after rh9-5.14.0-427.55.1.vz9.82.4
> ------>
> commit 7176e5bda1c6891b6e05a3f88d70f6ae34b12634
> Author: Konstantin Khorenko <khorenko at virtuozzo.com>
> Date:   Tue Jul 8 16:20:15 2025 +0200
> 
>      Revert "fs/fuse/kio: tidy up RPC_AFFINITY_RSS"
>      
>      This reverts commit 3f286d2b5f406c2d5325d14d3d4a4204e7fd010e.
>      
>      We'll have another and better commit solving the problem:
>        [PATCH VZ9 v2] fs/fuse kio: do not set RPC affinity from a workequeue worker
>      
>      https://virtuozzo.atlassian.net/browse/VSTOR-109481
>      
>      Signed-off-by: Konstantin Khorenko <khorenko at virtuozzo.com>
>      
>      Feature: vStorage
> ---
>   fs/fuse/kio/pcs/pcs_rdma_io.c |  1 -
>   fs/fuse/kio/pcs/pcs_rpc.c     | 25 +++++++++----------------
>   fs/fuse/kio/pcs/pcs_rpc.h     |  1 -
>   fs/fuse/kio/pcs/pcs_sock_io.c |  5 +++--
>   4 files changed, 12 insertions(+), 20 deletions(-)
> 
> diff --git a/fs/fuse/kio/pcs/pcs_rdma_io.c b/fs/fuse/kio/pcs/pcs_rdma_io.c
> index 1c464e0e60f3e..582504e054e19 100644
> --- a/fs/fuse/kio/pcs/pcs_rdma_io.c
> +++ b/fs/fuse/kio/pcs/pcs_rdma_io.c
> @@ -1110,7 +1110,6 @@ static void pcs_rdma_cq_comp_handler(struct ib_cq *cq, void *private)
>   
>   	set_bit(PCS_RDMA_IO_CQE, &rio->io_flags);
>   	wake_up(&rio->waitq);
> -	ep->rx_cpu = smp_processor_id();
>   	pcs_rpc_kick_queue(ep);
>   }
>   
> diff --git a/fs/fuse/kio/pcs/pcs_rpc.c b/fs/fuse/kio/pcs/pcs_rpc.c
> index f15d0c3fb7cd5..4ab38b3989148 100644
> --- a/fs/fuse/kio/pcs/pcs_rpc.c
> +++ b/fs/fuse/kio/pcs/pcs_rpc.c
> @@ -339,7 +339,6 @@ void pcs_rpc_attach_new_ep(struct pcs_rpc * ep, struct pcs_rpc_engine * eng)
>   	atomic_set(&ep->netlat_cnt, 0);
>   	atomic64_set(&ep->netlat_avg, 0);
>   	ep->cpu = WORK_CPU_UNBOUND;
> -	ep->rx_cpu = WORK_CPU_UNBOUND;
>   
>   	ep->gc = NULL;
>   	if (eng->max_gc_index)
> @@ -864,33 +863,27 @@ static void pcs_rpc_affinity(struct pcs_rpc *ep, bool was_idle)
>   				ep->cpu = WORK_CPU_UNBOUND;
>   			}
>   			break;
> -		case RPC_AFFINITY_RSS: {
> -			int rx_cpu = READ_ONCE(ep->rx_cpu);
> -
> -			if (rx_cpu != WORK_CPU_UNBOUND && ep->cpu != rx_cpu)
> -				ep->cpu = rx_cpu;
> +		case RPC_AFFINITY_RSS:
> +			if (!(ep->flags & PCS_RPC_F_LOCAL) && ep->addr.type != PCS_ADDRTYPE_RDMA)
> +				break;
>   			fallthrough;
> -		}
> -		case RPC_AFFINITY_FAIR_SPREAD:
> -			if (ep->cpu == WORK_CPU_UNBOUND ||
> -			    (time_is_before_jiffies(ep->cpu_stamp) && was_idle))
> -				pcs_rpc_cpu_select(ep);
> -			break;
>   		case RPC_AFFINITY_RETENT:
>   			/* Naive socket-to-cpu binding approach */
> -			if (ep->cpu == WORK_CPU_UNBOUND ||
> -			    (time_is_before_jiffies(ep->cpu_stamp) && was_idle)) {
> +			if (time_is_before_jiffies(ep->cpu_stamp) && was_idle) {
>   				ep->cpu_stamp = jiffies + rpc_cpu_time_slice;
>   				ep->cpu = smp_processor_id();
>   			}
>   			break;
>   		case RPC_AFFINITY_SPREAD:
> -			if (ep->cpu == WORK_CPU_UNBOUND ||
> -			    (time_is_before_jiffies(ep->cpu_stamp) && was_idle)) {
> +			if (time_is_before_jiffies(ep->cpu_stamp) && was_idle) {
>   				ep->cpu_stamp = jiffies + rpc_cpu_time_slice;
>   				ep->cpu = pcs_rpc_cpu_next();
>   			}
>   			break;
> +		case RPC_AFFINITY_FAIR_SPREAD:
> +			if (time_is_before_jiffies(ep->cpu_stamp) && was_idle)
> +				pcs_rpc_cpu_select(ep);
> +			break;
>   		default:
>   			pr_err("Unknown affinity mode: %u\n", rpc_affinity_mode);
>   	}
> diff --git a/fs/fuse/kio/pcs/pcs_rpc.h b/fs/fuse/kio/pcs/pcs_rpc.h
> index 0bafc8a742636..cb18557a3da5e 100644
> --- a/fs/fuse/kio/pcs/pcs_rpc.h
> +++ b/fs/fuse/kio/pcs/pcs_rpc.h
> @@ -142,7 +142,6 @@ struct pcs_rpc
>   	int			cpu;
>   	unsigned long		cpu_stamp;
>   	struct delayed_work	cpu_timer_work;	/* reset cpu affinity after being idle */
> -	int			rx_cpu;
>   
>   	struct mutex		mutex;
>   	u64			accounted;
> diff --git a/fs/fuse/kio/pcs/pcs_sock_io.c b/fs/fuse/kio/pcs/pcs_sock_io.c
> index 7eb231b7260d2..ac8a6ecfdb374 100644
> --- a/fs/fuse/kio/pcs/pcs_sock_io.c
> +++ b/fs/fuse/kio/pcs/pcs_sock_io.c
> @@ -593,8 +593,9 @@ static void pcs_sk_kick_queue(struct sock *sk)
>   	sio = rcu_dereference_sk_user_data(sk);
>   	if (sio) {
>   		struct pcs_rpc *ep = sio->netio.parent;
> -		DTRACE(PEER_FMT" queue cpu=%d\n", PEER_ARGS(ep), smp_processor_id());
> -		ep->rx_cpu = smp_processor_id();
> +		TRACE(PEER_FMT" queue cpu=%d\n", PEER_ARGS(ep), smp_processor_id());
> +		if (rpc_affinity_mode == RPC_AFFINITY_RSS && !(ep->flags & PCS_RPC_F_LOCAL))
> +			ep->cpu = smp_processor_id();
>   		pcs_rpc_kick_queue(ep);
>   	}
>   	rcu_read_unlock();



More information about the Devel mailing list