[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <CAJZ5v0jr1-dD9_cWrgunkXEsqE25CsHwpB5U0Zn_z7ztXRbSeg@mail.gmail.com>
Date: Fri, 5 Sep 2025 16:03:51 +0200
From: "Rafael J. Wysocki" <rafael@...nel.org>
To: Marco Crivellari <marco.crivellari@...e.com>
Cc: linux-kernel@...r.kernel.org, linux-pm@...r.kernel.org,
Tejun Heo <tj@...nel.org>, Lai Jiangshan <jiangshanlai@...il.com>,
Frederic Weisbecker <frederic@...nel.org>, Sebastian Andrzej Siewior <bigeasy@...utronix.de>,
Michal Hocko <mhocko@...e.com>, "Rafael J . Wysocki" <rafael@...nel.org>, Pavel Machek <pavel@...nel.org>,
Len Brown <len.brown@...el.com>
Subject: Re: [PATCH 1/1] PM: WQ_PERCPU added to alloc_workqueue users
On Fri, Sep 5, 2025 at 11:06 AM Marco Crivellari
<marco.crivellari@...e.com> wrote:
>
> Currently if a user enqueue a work item using schedule_delayed_work() the
> used wq is "system_wq" (per-cpu wq) while queue_delayed_work() use
> WORK_CPU_UNBOUND (used when a cpu is not specified). The same applies to
> schedule_work() that is using system_wq and queue_work(), that makes use
> again of WORK_CPU_UNBOUND.
> This lack of consistentcy cannot be addressed without refactoring the API.
>
> alloc_workqueue() treats all queues as per-CPU by default, while unbound
> workqueues must opt-in via WQ_UNBOUND.
>
> This default is suboptimal: most workloads benefit from unbound queues,
> allowing the scheduler to place worker threads where they’re needed and
> reducing noise when CPUs are isolated.
>
> This default is suboptimal: most workloads benefit from unbound queues,
> allowing the scheduler to place worker threads where they’re needed and
> reducing noise when CPUs are isolated.
Duplicate paragraph.
> This patch adds a new WQ_PERCPU flag to explicitly request the use of
Using phrases like "this patch" in kernel patch changelogs is
discouraged because the patches become commits when they go into git
and then the language becomes slightly odd. You can say "this change"
instead.
> the per-CPU behavior. Both flags coexist for one release cycle to allow
> callers to transition their calls.
>
> Once migration is complete, WQ_UNBOUND can be removed and unbound will
> become the implicit default.
>
> With the introduction of the WQ_PERCPU flag (equivalent to !WQ_UNBOUND),
> any alloc_workqueue() caller that doesn’t explicitly specify WQ_UNBOUND
> must now use WQ_PERCPU.
>
> All existing users have been updated accordingly.
>
> Suggested-by: Tejun Heo <tj@...nel.org>
> Signed-off-by: Marco Crivellari <marco.crivellari@...e.com>
> ---
> kernel/power/main.c | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/kernel/power/main.c b/kernel/power/main.c
> index 6254814d4817..eb55ef540032 100644
> --- a/kernel/power/main.c
> +++ b/kernel/power/main.c
> @@ -1012,7 +1012,7 @@ EXPORT_SYMBOL_GPL(pm_wq);
>
> static int __init pm_start_workqueue(void)
> {
> - pm_wq = alloc_workqueue("pm", WQ_FREEZABLE, 0);
> + pm_wq = alloc_workqueue("pm", WQ_FREEZABLE | WQ_PERCPU, 0);
I have no strong opinion on the change itself.
While preserving the current behavior is prudent, this particular
workqueue may as well be better off as WQ_UNBOUND.
>
> return pm_wq ? 0 : -ENOMEM;
> }
> --
Powered by blists - more mailing lists