linux/Documentation
Tejun Heo 3270476a6c workqueue: reimplement WQ_HIGHPRI using a separate worker_pool
WQ_HIGHPRI was implemented by queueing highpri work items at the head
of the global worklist.  Other than queueing at the head, they weren't
handled differently; unfortunately, this could lead to execution
latency of a few seconds on heavily loaded systems.

Now that workqueue code has been updated to deal with multiple
worker_pools per global_cwq, this patch reimplements WQ_HIGHPRI using
a separate worker_pool.  NR_WORKER_POOLS is bumped to two and
gcwq->pools[0] is used for normal pri work items and ->pools[1] for
highpri.  Highpri workers get -20 nice level and has 'H' suffix in
their names.  Note that this change increases the number of kworkers
per cpu.

POOL_HIGHPRI_PENDING, pool_determine_ins_pos() and highpri chain
wakeup code in process_one_work() are no longer used and removed.

This allows proper prioritization of highpri work items and removes
high execution latency of highpri work items.

v2: nr_running indexing bug in get_pool_nr_running() fixed.

v3: Refreshed for the get_pool_nr_running() update in the previous
    patch.

Signed-off-by: Tejun Heo <tj@kernel.org>
Reported-by: Josh Hunt <joshhunt00@gmail.com>
LKML-Reference: <CAKA=qzaHqwZ8eqpLNFjxnO2fX-tgAOjmpvxgBFjv6dJeQaOW1w@mail.gmail.com>
Cc: Tony Luck <tony.luck@intel.com>
Cc: Fengguang Wu <fengguang.wu@intel.com>
2012-07-13 22:24:45 -07:00
..
2012-06-20 14:39:36 -07:00
2011-09-27 18:08:04 +02:00
2012-04-03 13:09:18 +02:00
2011-09-27 18:08:04 +02:00
2011-03-31 11:26:23 -03:00
2011-03-31 11:26:23 -03:00
2012-06-06 09:34:56 -07:00
2012-05-15 17:28:01 -04:00
2011-09-27 18:08:04 +02:00
2011-11-02 16:07:02 -07:00
2012-05-23 13:05:43 -07:00
2011-03-31 11:26:23 -03:00
2011-09-27 18:08:04 +02:00
2011-03-31 11:26:23 -03:00
2012-03-16 20:35:01 +00:00
2011-03-31 11:26:23 -03:00
2011-03-31 11:26:23 -03:00
2011-09-27 18:08:04 +02:00
2011-03-07 13:20:05 -08:00
2011-09-27 18:08:04 +02:00
2012-02-28 16:05:06 +01:00
2012-05-17 08:51:59 -07:00
2011-09-27 18:08:04 +02:00
2011-03-31 11:26:23 -03:00
2012-01-02 13:04:55 +01:00