• Tejun Heo's avatar
    workqueue: The default node_nr_active should have its max set to max_active · d40f9202
    Tejun Heo authored
    The default nna (node_nr_active) is used when the pool isn't tied to a
    specific NUMA node. This can happen in the following cases:
    
     1. On NUMA, if per-node pwq init failure and the fallback pwq is used.
     2. On NUMA, if a pool is configured to span multiple nodes.
     3. On single node setups.
    
    5797b1c1 ("workqueue: Implement system-wide nr_active enforcement for
    unbound workqueues") set the default nna->max to min_active because only #1
    was being considered. For #2 and #3, using min_active means that the max
    concurrency in normal operation is pushed down to min_active which is
    currently 8, which can obviously lead to performance issues.
    
    exact value nna->max is set to doesn't really matter. #2 can only happen if
    the workqueue is intentionally configured to ignore NUMA boundaries and
    there's no good way to distribute max_active in this case. #3 is the default
    behavior on single node machines.
    
    Let's set it the default nna->max to max_active. This fixes the artificially
    lowered concurrency problem on single node machines and shouldn't hurt
    anything for other cases.
    Signed-off-by: default avatarTejun Heo <tj@kernel.org>
    Reported-by: default avatarShinichiro Kawasaki <shinichiro.kawasaki@wdc.com>
    Fixes: 5797b1c1 ("workqueue: Implement system-wide nr_active enforcement for unbound workqueues")
    Link: https://lore.kernel.org/dm-devel/20240410084531.2134621-1-shinichiro.kawasaki@wdc.com/Signed-off-by: default avatarTejun Heo <tj@kernel.org>
    d40f9202
workqueue.c 220 KB