linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCHSET] workqueue: remove gcwq and make worker_pool the only backend abstraction
@ 2013-01-17  1:42 Tejun Heo
  2013-01-17  1:42 ` [PATCH 01/17] workqueue: unexport work_cpu() Tejun Heo
                   ` (21 more replies)
  0 siblings, 22 replies; 31+ messages in thread
From: Tejun Heo @ 2013-01-17  1:42 UTC (permalink / raw)
  To: linux-kernel; +Cc: Lai Jiangshan

Hello,

Currently, on the backend side, there are two layers of abstraction.
For each CPU and the special unbound wq-specific CPU, there's one
global_cwq.  gcwq in turn hosts two worker_pools - one for normal
priority, the other for highpri - each of which actually serves the
work items.

worker_pool is the later addition to support separate pool of workers
for highpri workqueues.  Stuff was moved to worker_pool on as-needed
basis and, as a result, the two pools belonging to the same CPU share
some stuff in the gcwq - most notably the lock and the hash table for
work items currently being executed.

It seems like we'll need to support worker pools with custom
attributes, which is planned to be implemented as extra worker_pools
for the unbound CPU.  Removing gcwq and having worker_pool as the top
level abstraction makes things much simpler for such designs.  Also,
there's scalability benefit to not sharing locking and busy hash among
different worker pools as worker pools w/ custom attributes are likely
to have widely different memory / cpu locality characteristics.

In retrospect, it might have been less churn if we just converted to
have multiple gcwqs per CPU when we were adding highpri pool support.
Oh well, such is life and the name worker_pool fits the role much
better anyway at this point.

This patchset moves the remaining stuff in gcwq to worker_pool and
then removes gcwq entirely making worker_pool the top level and the
only backend abstraction.  In the process, this patchset also prepares
for later addition of worker_pools with custom attributes.

This patchset shouldn't introduce any visible differences outside of
workqueue proper and contains the following 17 patches.

 0001-workqueue-unexport-work_cpu.patch
 0002-workqueue-use-std_-prefix-for-the-standard-per-cpu-p.patch
 0003-workqueue-make-GCWQ_DISASSOCIATED-a-pool-flag.patch
 0004-workqueue-make-GCWQ_FREEZING-a-pool-flag.patch
 0005-workqueue-introduce-WORK_OFFQ_CPU_NONE.patch
 0006-workqueue-add-worker_pool-id.patch
 0007-workqueue-record-pool-ID-instead-of-CPU-in-work-data.patch
 0008-workqueue-move-busy_hash-from-global_cwq-to-worker_p.patch
 0009-workqueue-move-global_cwq-cpu-to-worker_pool.patch
 0010-workqueue-move-global_cwq-lock-to-worker_pool.patch
 0011-workqueue-make-hotplug-processing-per-pool.patch
 0012-workqueue-make-freezing-thawing-per-pool.patch
 0013-workqueue-replace-for_each_worker_pool-with-for_each.patch
 0014-workqueue-remove-worker_pool-gcwq.patch
 0015-workqueue-remove-global_cwq.patch
 0016-workqueue-rename-nr_running-variables.patch
 0017-workqueue-post-global_cwq-removal-cleanups.patch

0001-0002 are misc preps.

0003-0004 move flags from gcwq to pool.

0005-0007 make work->data off-queue backlink point to worker_pools
instead of CPUs, which is necessary to move busy_hash to pool.

0008-0010 move busy_hash, cpu and locking to pool.

0011-0014 make operations per-pool and remove gcwq usages.

0015-0017 remove gcwq and cleanup afterwards.

This patchset is on top of wq/for-3.9 023f27d3d6f ("workqueue: fix
find_worker_executing_work() brekage from hashtable conversion") and
available in the following git branch.

 git://git.kernel.org/pub/scm/linux/kernel/git/tj/wq.git for-3.9-remove-gcwq

Thanks.

 include/linux/workqueue.h        |   17
 include/trace/events/workqueue.h |    2
 kernel/workqueue.c               |  897 +++++++++++++++++++--------------------
 3 files changed, 461 insertions(+), 455 deletions(-)

--
tejun

^ permalink raw reply	[flat|nested] 31+ messages in thread

end of thread, other threads:[~2013-01-24 19:03 UTC | newest]

Thread overview: 31+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2013-01-17  1:42 [PATCHSET] workqueue: remove gcwq and make worker_pool the only backend abstraction Tejun Heo
2013-01-17  1:42 ` [PATCH 01/17] workqueue: unexport work_cpu() Tejun Heo
2013-01-17  1:42 ` [PATCH 02/17] workqueue: use std_ prefix for the standard per-cpu pools Tejun Heo
2013-01-17  1:42 ` [PATCH 03/17] workqueue: make GCWQ_DISASSOCIATED a pool flag Tejun Heo
2013-01-17  1:42 ` [PATCH 04/17] workqueue: make GCWQ_FREEZING " Tejun Heo
2013-01-17  1:42 ` [PATCH 05/17] workqueue: introduce WORK_OFFQ_CPU_NONE Tejun Heo
2013-01-17  1:42 ` [PATCH 06/17] workqueue: add worker_pool->id Tejun Heo
2013-01-17  1:42 ` [PATCH 07/17] workqueue: record pool ID instead of CPU in work->data when off-queue Tejun Heo
2013-01-17  1:42 ` [PATCH 08/17] workqueue: move busy_hash from global_cwq to worker_pool Tejun Heo
2013-01-17  1:42 ` [PATCH 09/17] workqueue: move global_cwq->cpu " Tejun Heo
2013-01-17  1:42 ` [PATCH 10/17] workqueue: move global_cwq->lock " Tejun Heo
2013-01-17  1:42 ` [PATCH 11/17] workqueue: make hotplug processing per-pool Tejun Heo
2013-01-17  1:42 ` [PATCH 12/17] workqueue: make freezing/thawing per-pool Tejun Heo
2013-01-17  1:42 ` [PATCH 13/17] workqueue: replace for_each_worker_pool() with for_each_std_worker_pool() Tejun Heo
2013-01-17  1:42 ` [PATCH 14/17] workqueue: remove worker_pool->gcwq Tejun Heo
2013-01-17  1:42 ` [PATCH 15/17] workqueue: remove global_cwq Tejun Heo
2013-01-22  6:50   ` Joonsoo Kim
2013-01-23  1:09     ` Tejun Heo
2013-01-23 18:09   ` [PATCH v2 " Tejun Heo
2013-01-24  9:29     ` Joonsoo Kim
2013-01-24 18:44       ` Tejun Heo
2013-01-17  1:42 ` [PATCH 16/17] workqueue: rename nr_running variables Tejun Heo
2013-01-17  1:42 ` [PATCH 17/17] workqueue: post global_cwq removal cleanups Tejun Heo
2013-01-17  1:48 ` [PATCHSET] workqueue: remove gcwq and make worker_pool the only backend abstraction Tejun Heo
2013-01-17  3:25 ` Wanlong Gao
2013-01-17 19:11   ` Tejun Heo
2013-01-22  5:37 ` Joonsoo Kim
2013-01-23  1:07   ` Tejun Heo
2013-01-24 13:36 ` Lai Jiangshan
2013-01-24 18:51   ` Tejun Heo
2013-01-24 19:03 ` Tejun Heo

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).