Re: [MEH PATCH] fs/pipe: write to ->poll_usage only once
From: Jan Kara
Date: Tue May 19 2026 - 04:30:14 EST
On Sat 16-05-26 04:18:52, Mateusz Guzik wrote:
> Both GNU and BSD makes share a "token pipe" between their instances, as
> a result a -j $BIGNUM invocation results in multicore perf problems in
> the poll handler.
>
> Avoiding the store will reduce it a little bit. However, the crux of the
> problem is the locked queuing up in poll_wait().
>
> Signed-off-by: Mateusz Guzik <mjguzik@xxxxxxxxx>
I guess doesn't harm to reduce cacheline invalidations. Feel free to add:
Reviewed-by: Jan Kara <jack@xxxxxxx>
Honza
> ---
>
> disclaimer: could not be bothered to bench this
>
> fs/pipe.c | 3 ++-
> 1 file changed, 2 insertions(+), 1 deletion(-)
>
> diff --git a/fs/pipe.c b/fs/pipe.c
> index 9841648c9cf3..e37c79935ecb 100644
> --- a/fs/pipe.c
> +++ b/fs/pipe.c
> @@ -664,7 +664,8 @@ pipe_poll(struct file *filp, poll_table *wait)
> union pipe_index idx;
>
> /* Epoll has some historical nasty semantics, this enables them */
> - WRITE_ONCE(pipe->poll_usage, true);
> + if (unlikely(!READ_ONCE(pipe->poll_usage)))
> + WRITE_ONCE(pipe->poll_usage, true);
>
> /*
> * Reading pipe state only -- no need for acquiring the semaphore.
> --
> 2.48.1
>
--
Jan Kara <jack@xxxxxxxx>
SUSE Labs, CR