[GIT PULL] workqueue: Changes for v6.6

From: Tejun Heo
Date: Thu Aug 31 2023 - 18:20:01 EST


The following changes since commit aa6fde93f3a49e42c0fe0490d7f3711bac0d162e:

workqueue: Scale up wq_cpu_intensive_thresh_us if BogoMIPS is below 4000 (2023-07-25 11:49:57 -1000)

are available in the Git repository at:

git://git.kernel.org/pub/scm/linux/kernel/git/tj/wq.git/ tags/wq-for-6.6

for you to fetch changes up to fe48ba7daefe75bbbefa2426deddc05f2d530d2d:

workqueue: fix data race with the pwq->stats[] increment (2023-08-29 09:52:16 -1000)

----------------------------------------------------------------
workqueue: Changes for v6.6

* Unbound workqueues now support more flexible affinity scopes. The default
behavior is to soft-affine according to last level cache boundaries. A
work item queued from a given LLC is executed by a worker running on the
same LLC but the worker may be moved across cache boundaries as the
scheduler sees fit. On machines which multiple L3 caches, which are
becoming more popular along with chiplet designs, this improves cache
locality while not harming work conservation too much.

Unbound workqueues are now also a lot more flexible in terms of execution
affinity. Differeing levels of affinity scopes are supported and both the
default and per-workqueue affinity settings can be modified dynamically.
This should help working around amny of sub-optimal behaviors observed
recently with asymmetric ARM CPUs.

This involved signficant restructuring of workqueue code. Nothing was
reported yet but there's some risk of subtle regressions. Should keep an
eye out.

* Rescuer workers now has more identifiable comms.

* workqueue.unbound_cpus added so that CPUs which can be used by workqueue
can be constrained early during boot.

* Now that all the in-tree users have been flushed out, trigger warning if
system-wide workqueues are flushed.

* One pull commit from for-6.5-fixes to avoid cascading conflicts in the
affinity scope patchset.

----------------------------------------------------------------
Aaron Tomlin (1):
workqueue: Rename rescuer kworker

Mirsad Goran Todorovac (1):
workqueue: fix data race with the pwq->stats[] increment

Tejun Heo (27):
workqueue: Merge branch 'for-6.5-fixes' into for-6.6
workqueue: Drop the special locking rule for worker->flags and worker_pool->flags
workqueue: Cleanups around process_scheduled_works()
workqueue: Not all work insertion needs to wake up a worker
workqueue: Rename wq->cpu_pwqs to wq->cpu_pwq
workqueue: Relocate worker and work management functions
workqueue: Remove module param disable_numa and sysfs knobs pool_ids and numa
workqueue: Use a kthread_worker to release pool_workqueues
workqueue: Make per-cpu pool_workqueues allocated and released like unbound ones
workqueue: Call wq_update_unbound_numa() on all CPUs in NUMA node on CPU hotplug
workqueue: Make unbound workqueues to use per-cpu pool_workqueues
workqueue: Rename workqueue_attrs->no_numa to ->ordered
workqueue: Rename NUMA related names to use pod instead
workqueue: Move wq_pod_init() below workqueue_init()
workqueue: Initialize unbound CPU pods later in the boot
workqueue: Factor out actual cpumask calculation to reduce subtlety in wq_update_pod()
workqueue: Factor out clearing of workqueue-only attrs fields
workqueue: Generalize unbound CPU pods
workqueue: Add tools/workqueue/wq_dump.py which prints out workqueue configuration
workqueue: Modularize wq_pod_type initialization
workqueue: Add multiple affinity scopes and interface to select them
workqueue: Factor out work to worker assignment and collision handling
workqueue: Factor out need_more_worker() check and worker wake-up
workqueue: Add workqueue_attrs->__pod_cpumask
workqueue: Implement non-strict affinity scope for unbound workqueues
workqueue: Add "Affinity Scopes and Performance" section to documentation
workqueue: Make default affinity_scope dynamically updatable

Tetsuo Handa (1):
workqueue: Warn attempt to flush system-wide workqueues.

Yang Yingliang (1):
workqueue: use LIST_HEAD to initialize cull_list

tiozhang (1):
workqueue: add cmdline parameter `workqueue.unbound_cpus` to further constrain wq_unbound_cpumask at boot time

Documentation/admin-guide/kernel-parameters.txt | 28 +-
Documentation/core-api/workqueue.rst | 356 ++++-
include/linux/workqueue.h | 115 +-
init/main.c | 1 +
kernel/workqueue.c | 1618 +++++++++++++----------
kernel/workqueue_internal.h | 2 +-
tools/workqueue/wq_dump.py | 177 +++
tools/workqueue/wq_monitor.py | 21 +-
8 files changed, 1513 insertions(+), 805 deletions(-)
create mode 100644 tools/workqueue/wq_dump.py

--
tejun