From: Leonardo Bras <leobras.c@gmail.com>
To: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
Cc: "Leonardo Bras" <leobras.c@gmail.com>,
"Jonathan Corbet" <corbet@lwn.net>,
"Shuah Khan" <skhan@linuxfoundation.org>,
"Peter Zijlstra" <peterz@infradead.org>,
"Ingo Molnar" <mingo@redhat.com>, "Will Deacon" <will@kernel.org>,
"Boqun Feng" <boqun@kernel.org>,
"Waiman Long" <longman@redhat.com>,
"Andrew Morton" <akpm@linux-foundation.org>,
"David Hildenbrand" <david@kernel.org>,
"Lorenzo Stoakes" <ljs@kernel.org>,
"Liam R. Howlett" <liam@infradead.org>,
"Vlastimil Babka" <vbabka@kernel.org>,
"Mike Rapoport" <rppt@kernel.org>,
"Suren Baghdasaryan" <surenb@google.com>,
"Michal Hocko" <mhocko@suse.com>, "Jann Horn" <jannh@google.com>,
"Pedro Falcato" <pfalcato@suse.de>,
"Brendan Jackman" <jackmanb@google.com>,
"Johannes Weiner" <hannes@cmpxchg.org>, "Zi Yan" <ziy@nvidia.com>,
"Harry Yoo" <harry@kernel.org>, "Hao Li" <hao.li@linux.dev>,
"Christoph Lameter" <cl@gentwo.org>,
"David Rientjes" <rientjes@google.com>,
"Roman Gushchin" <roman.gushchin@linux.dev>,
"Chris Li" <chrisl@kernel.org>,
"Kairui Song" <kasong@tencent.com>,
"Kemeng Shi" <shikemeng@huaweicloud.com>,
"Nhat Pham" <nphamcs@gmail.com>, "Baoquan He" <bhe@redhat.com>,
"Barry Song" <baohua@kernel.org>,
"Youngjun Park" <youngjun.park@lge.com>,
"Qi Zheng" <qi.zheng@linux.dev>,
"Shakeel Butt" <shakeel.butt@linux.dev>,
"Axel Rasmussen" <axelrasmussen@google.com>,
"Yuanchu Xie" <yuanchu@google.com>, "Wei Xu" <weixugc@google.com>,
"Borislav Petkov (AMD)" <bp@alien8.de>,
"Randy Dunlap" <rdunlap@infradead.org>,
"Feng Tang" <feng.tang@linux.alibaba.com>,
"Dapeng Mi" <dapeng1.mi@linux.intel.com>,
"Kees Cook" <kees@kernel.org>, "Marco Elver" <elver@google.com>,
"Jakub Kicinski" <kuba@kernel.org>,
"Li RongQing" <lirongqing@baidu.com>,
"Eric Biggers" <ebiggers@kernel.org>,
"Paul E. McKenney" <paulmck@kernel.org>,
"Nathan Chancellor" <nathan@kernel.org>,
"Nicolas Schier" <nsc@kernel.org>,
"Miguel Ojeda" <ojeda@kernel.org>,
"Thomas Weißschuh" <thomas.weissschuh@linutronix.de>,
"Thomas Gleixner" <tglx@kernel.org>,
"Douglas Anderson" <dianders@chromium.org>,
"Gary Guo" <gary@garyguo.net>,
"Christian Brauner" <brauner@kernel.org>,
"Pasha Tatashin" <pasha.tatashin@soleen.com>,
"Coiby Xu" <coxu@redhat.com>,
"Masahiro Yamada" <masahiroy@kernel.org>,
"Frederic Weisbecker" <frederic@kernel.org>,
linux-doc@vger.kernel.org, linux-kernel@vger.kernel.org,
linux-mm@kvack.org, linux-rt-devel@lists.linux.dev,
"Marcelo Tosatti" <mtosatti@redhat.com>
Subject: Re: [PATCH v4 3/4] swap: apply new pw_queue_on() interface
Date: Sun, 12 Jul 2026 18:43:48 -0300 [thread overview]
Message-ID: <alQKlBaKIOAxMzc2@WindFlash> (raw)
In-Reply-To: <20260520150736.HZnlFkv7@linutronix.de>
On Wed, May 20, 2026 at 05:07:36PM +0200, Sebastian Andrzej Siewior wrote:
> On 2026-05-18 22:27:49 [-0300], Leonardo Bras wrote:
>
> after digesting the slub patch,
>
> > @@ -882,38 +879,38 @@ static inline void __lru_add_drain_all(bool force_all_cpus)
> > * If the paired barrier is done at any later step, e.g. after the
> > * loop, CPU #x will just exit at (C) and miss flushing out all of its
> > * added pages.
> > */
> > WRITE_ONCE(lru_drain_gen, lru_drain_gen + 1);
> > smp_mb();
> >
> > cpumask_clear(&has_mm_work);
> > cpumask_clear(&has_bh_work);
> > for_each_online_cpu(cpu) {
> > - struct work_struct *mm_work = &per_cpu(lru_add_drain_work, cpu);
> > + struct pw_struct *mm_pw = &per_cpu(lru_add_drain_pw, cpu);
> > struct work_struct *bh_work = &per_cpu(bh_add_drain_work, cpu);
> >
> > if (cpu_needs_mm_drain(cpu)) {
> > - INIT_WORK(mm_work, lru_add_drain_per_cpu);
> > - queue_work_on(cpu, mm_percpu_wq, mm_work);
> > + INIT_PW(mm_pw, lru_add_drain_per_cpu, cpu);
> > + pw_queue_on(cpu, mm_percpu_wq, mm_pw);
> > __cpumask_set_cpu(cpu, &has_mm_work);
> > }
> >
> > if (cpu_needs_bh_drain(cpu)) {
> > INIT_WORK(bh_work, bh_add_drain_per_cpu);
> > queue_work_on(cpu, mm_percpu_wq, bh_work);
> > __cpumask_set_cpu(cpu, &has_bh_work);
> > }
> > }
> >
> > for_each_cpu(cpu, &has_mm_work)
> > - flush_work(&per_cpu(lru_add_drain_work, cpu));
> > + pw_flush(&per_cpu(lru_add_drain_pw, cpu));
> >
> > for_each_cpu(cpu, &has_bh_work)
> > flush_work(&per_cpu(bh_add_drain_work, cpu));
>
> Why do we have two iterations here? Is it just a proof of concept that
> is not complete yet? I am curious why it is okay/needed to "remove" the
> one workqueue but not the other. Maybe the other does not bother as much
> as the other does.
Argh, sorry about the above :/
Slub was converted on a previous patchset version, and rebasing worked
fine. I should have properly checked if any other mechanism was added in
the file, but ended up just checking the one that was already converted.
>
> But essentially we can't use a spin_lock_t here because due to the
> hotpath nature of the code it will kill performance.
Correct
> So instead we do it
> anyway but behind a switch so that only those suffer from this that do
> not want to suffer from workqueue interruption on a NOHZ full system,
> right?
Yes, one can choose to pay the price to use spinlocks here and have less
workqueue interruptions, if !CONFIG_PREEMPT_RT
In case of CONFIG_PREEMPT_RT, we have the local_lock() already becoming a
rt_spinlock(), so it already pays the price to hold the lock. So it should
be basically free on this scenario, and save time by doing the operation
remotelly instead of scheduling it.
>
> I thought that this improved since commit
> ff042f4a9b050 ("mm: lru_cache_disable: replace work queue synchronization with synchronize_rcu")
>
> Did it get worse or was it not entirely gone?
>
I worked in this patchset majorly after that commit date, and it was still
an issue up to last time Marcelo tested. Not sure of the impact of above
commit, but I suppose it may have brought some improvements without fully
fixing it.
Thanks!
Leo
next prev parent reply other threads:[~2026-07-12 21:43 UTC|newest]
Thread overview: 33+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-05-19 1:27 [PATCH v4 0/4] Introduce Per-CPU Work helpers (was QPW) Leonardo Bras
2026-05-19 1:27 ` [PATCH v4 1/4] Introducing pw_lock() and per-cpu queue & flush work Leonardo Bras
2026-05-20 10:08 ` Frederic Weisbecker
2026-07-12 20:49 ` Leonardo Bras
2026-05-20 13:48 ` Sebastian Andrzej Siewior
2026-05-20 14:47 ` Frederic Weisbecker
2026-07-12 21:17 ` Leonardo Bras
2026-07-12 21:17 ` Leonardo Bras
2026-05-20 22:06 ` Randy Dunlap
2026-07-12 21:23 ` Leonardo Bras
2026-05-26 19:15 ` Jonathan Corbet
2026-07-12 21:32 ` Leonardo Bras
2026-05-19 1:27 ` [PATCH v4 2/4] mm/swap: move bh draining into a separate workqueue Leonardo Bras
2026-05-19 1:27 ` [PATCH v4 3/4] swap: apply new pw_queue_on() interface Leonardo Bras
2026-05-20 15:07 ` Sebastian Andrzej Siewior
2026-07-12 21:43 ` Leonardo Bras [this message]
2026-07-13 7:31 ` Sebastian Andrzej Siewior
2026-07-13 21:28 ` Leonardo Bras
2026-05-19 1:27 ` [PATCH v4 4/4] slub: " Leonardo Bras
2026-05-19 10:21 ` kernel test robot
2026-05-20 14:53 ` Sebastian Andrzej Siewior
2026-07-12 22:35 ` Leonardo Bras
2026-07-13 7:36 ` Sebastian Andrzej Siewior
2026-07-13 10:55 ` Vlastimil Babka (SUSE)
2026-07-13 21:44 ` Leonardo Bras
2026-07-13 21:40 ` Leonardo Bras
2026-07-14 9:47 ` Sebastian Andrzej Siewior
2026-05-19 6:58 ` [syzbot ci] Re: Introduce Per-CPU Work helpers (was QPW) syzbot ci
2026-05-20 13:09 ` [PATCH v4 0/4] " Sebastian Andrzej Siewior
2026-07-12 20:32 ` Leonardo Bras
2026-07-13 8:07 ` Sebastian Andrzej Siewior
2026-07-13 21:17 ` Leonardo Bras
2026-07-14 10:12 ` Sebastian Andrzej Siewior
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=alQKlBaKIOAxMzc2@WindFlash \
--to=leobras.c@gmail.com \
--cc=akpm@linux-foundation.org \
--cc=axelrasmussen@google.com \
--cc=baohua@kernel.org \
--cc=bhe@redhat.com \
--cc=bigeasy@linutronix.de \
--cc=boqun@kernel.org \
--cc=bp@alien8.de \
--cc=brauner@kernel.org \
--cc=chrisl@kernel.org \
--cc=cl@gentwo.org \
--cc=corbet@lwn.net \
--cc=coxu@redhat.com \
--cc=dapeng1.mi@linux.intel.com \
--cc=david@kernel.org \
--cc=dianders@chromium.org \
--cc=ebiggers@kernel.org \
--cc=elver@google.com \
--cc=feng.tang@linux.alibaba.com \
--cc=frederic@kernel.org \
--cc=gary@garyguo.net \
--cc=hannes@cmpxchg.org \
--cc=hao.li@linux.dev \
--cc=harry@kernel.org \
--cc=jackmanb@google.com \
--cc=jannh@google.com \
--cc=kasong@tencent.com \
--cc=kees@kernel.org \
--cc=kuba@kernel.org \
--cc=liam@infradead.org \
--cc=linux-doc@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mm@kvack.org \
--cc=linux-rt-devel@lists.linux.dev \
--cc=lirongqing@baidu.com \
--cc=ljs@kernel.org \
--cc=longman@redhat.com \
--cc=masahiroy@kernel.org \
--cc=mhocko@suse.com \
--cc=mingo@redhat.com \
--cc=mtosatti@redhat.com \
--cc=nathan@kernel.org \
--cc=nphamcs@gmail.com \
--cc=nsc@kernel.org \
--cc=ojeda@kernel.org \
--cc=pasha.tatashin@soleen.com \
--cc=paulmck@kernel.org \
--cc=peterz@infradead.org \
--cc=pfalcato@suse.de \
--cc=qi.zheng@linux.dev \
--cc=rdunlap@infradead.org \
--cc=rientjes@google.com \
--cc=roman.gushchin@linux.dev \
--cc=rppt@kernel.org \
--cc=shakeel.butt@linux.dev \
--cc=shikemeng@huaweicloud.com \
--cc=skhan@linuxfoundation.org \
--cc=surenb@google.com \
--cc=tglx@kernel.org \
--cc=thomas.weissschuh@linutronix.de \
--cc=vbabka@kernel.org \
--cc=weixugc@google.com \
--cc=will@kernel.org \
--cc=youngjun.park@lge.com \
--cc=yuanchu@google.com \
--cc=ziy@nvidia.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.