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 <t...@kernel.org> include/linux/workqueue.h | 8 +++++++- kernel/workqueue.c | 10 +++++++++- 2 files changed, 16 insertions(+), 2 deletions(-) -- 2.20.1