[PATCH 0/4] workqueue: reduce the sizeof pool_workqueue

From: Lai Jiangshan
Date: Mon Jun 01 2020 - 04:45:06 EST


The major memory ussage in workqueue is on the pool_workqueue.
The pool_workqueue has alignment requirement which often leads
to padding.

Reducing the memory usage for the pool_workqueue is valuable.

And 32bit system often has less memory, less workqueues,
less works, less concurrent flush_workqueue()s, so we can
slash the flush color on 32bit system to reduce memory usage

Before patch:
The sizeof the struct pool_workqueue is 256 bytes,
only 136 bytes is in use in 32bit system

After patch:
The sizeof the struct pool_workqueue is 128 bytes,
only 104 bytes is in use in 32bit system, there is still
room for future usage.

Setting WORK_STRUCT_COLOR_BITS to 3 can't reduce the sizeof
the struct pool_workqueue in 64bit system, unless combined
with big refactor for unbound pwq.

Lai Jiangshan (4):
workqueue: fix a piece of comment about reserved bits for work flags
workqueue: use BUILD_BUG_ON() for compile time test instead of
WARN_ON()
workqueue: add a BUILD_BUG_ON() to check the size of struct
pool_workqueue
workqueue: slash half memory usage in 32bit system

Cc: Tejun Heo <tj@xxxxxxxxxx>

include/linux/workqueue.h | 8 +++++++-
kernel/workqueue.c | 10 +++++++++-
2 files changed, 16 insertions(+), 2 deletions(-)

--
2.20.1