]> www.infradead.org Git - users/jedix/linux-maple.git/commit
workqueue: Reduce expensive locks for unbound workqueue
authorWangyang Guo <wangyang.guo@intel.com>
Fri, 15 Nov 2024 05:49:36 +0000 (13:49 +0800)
committerTejun Heo <tj@kernel.org>
Fri, 15 Nov 2024 16:43:39 +0000 (06:43 -1000)
commit85f0d8e39affb7b88401b1e0542230a7af985b96
tree798832c1f9d5566dcc1e1a82a50b87390b463c25
parent581434654e01ec79dd02c21448ac84e2ce2d1a64
workqueue: Reduce expensive locks for unbound workqueue

For unbound workqueue, pwqs usually map to just a few pools. Most of
the time, pwqs will be linked sequentially to wq->pwqs list by cpu
index.  Usually, consecutive CPUs have the same workqueue attribute
(e.g. belong to the same NUMA node). This makes pwqs with the same
pool cluster together in the pwq list.

Only do lock/unlock if the pool has changed in flush_workqueue_prep_pwqs().
This reduces the number of expensive lock operations.

The performance data shows this change boosts FIO by 65x in some cases
when multiple concurrent threads write to xfs mount points with fsync.

FIO Benchmark Details
- FIO version: v3.35
- FIO Options: ioengine=libaio,iodepth=64,norandommap=1,rw=write,
  size=128M,bs=4k,fsync=1
- FIO Job Configs: 64 jobs in total writing to 4 mount points (ramdisks
  formatted as xfs file system).
- Kernel Codebase: v6.12-rc5
- Test Platform: Xeon 8380 (2 sockets)

Reviewed-by: Tim Chen <tim.c.chen@linux.intel.com>
Signed-off-by: Wangyang Guo <wangyang.guo@intel.com>
Reviewed-by: Lai Jiangshan <jiangshanlai@gmail.com>
Signed-off-by: Tejun Heo <tj@kernel.org>
kernel/workqueue.c