2014-07-22 05:03:17

by Lai Jiangshan

[permalink] [raw]
Subject: [PATCH] workqueue: get the probable node ID from the first CPU of the mask

Current get_unbound_pool() considers all node IDs are probable for
the pool, and it travel all nodes to find the node ID for the pool.
This travel is unnecessary, the probable node ID can be attained
from the first CPU and we need check only one possible node ID.

Signed-off-by: Lai Jiangshan <[email protected]>
---
kernel/workqueue.c | 10 ++++------
1 files changed, 4 insertions(+), 6 deletions(-)

diff --git a/kernel/workqueue.c b/kernel/workqueue.c
index 347ac5b..942103d9 100644
--- a/kernel/workqueue.c
+++ b/kernel/workqueue.c
@@ -3482,12 +3482,10 @@ static struct worker_pool *get_unbound_pool(const struct workqueue_attrs *attrs)

/* if cpumask is contained inside a NUMA node, we belong to that node */
if (wq_numa_enabled) {
- for_each_node(node) {
- if (cpumask_subset(pool->attrs->cpumask,
- wq_numa_possible_cpumask[node])) {
- pool->node = node;
- break;
- }
+ node = cpu_to_node(cpumask_first(pool->attrs->cpumask));
+ if (cpumask_subset(pool->attrs->cpumask,
+ wq_numa_possible_cpumask[node])) {
+ pool->node = node;
}
}

--
1.7.4.4


2014-07-22 15:30:28

by Tejun Heo

[permalink] [raw]
Subject: Re: [PATCH] workqueue: get the probable node ID from the first CPU of the mask

On Tue, Jul 22, 2014 at 01:04:02PM +0800, Lai Jiangshan wrote:
> + node = cpu_to_node(cpumask_first(pool->attrs->cpumask));

Minor but maybe cpumask_any() is a better fit here?

Thanks.

--
tejun

2014-07-23 01:25:40

by Lai Jiangshan

[permalink] [raw]
Subject: Re: [PATCH] workqueue: get the probable node ID from the first CPU of the mask

On 07/22/2014 11:30 PM, Tejun Heo wrote:
> On Tue, Jul 22, 2014 at 01:04:02PM +0800, Lai Jiangshan wrote:
>> + node = cpu_to_node(cpumask_first(pool->attrs->cpumask));
>
> Minor but maybe cpumask_any() is a better fit here?
>

It is OK, the result are the same. But I still think cpumask_first() is better since
its name sounds deterministic while we need a deterministic value for pool->node.

Thanks,
Lai

2014-07-23 15:10:11

by Tejun Heo

[permalink] [raw]
Subject: Re: [PATCH] workqueue: get the probable node ID from the first CPU of the mask

On Wed, Jul 23, 2014 at 09:26:30AM +0800, Lai Jiangshan wrote:
> On 07/22/2014 11:30 PM, Tejun Heo wrote:
> > On Tue, Jul 22, 2014 at 01:04:02PM +0800, Lai Jiangshan wrote:
> >> + node = cpu_to_node(cpumask_first(pool->attrs->cpumask));
> >
> > Minor but maybe cpumask_any() is a better fit here?
> >
>
> It is OK, the result are the same. But I still think cpumask_first() is better since
> its name sounds deterministic while we need a deterministic value for pool->node.

The CPU can be any CPU in the mask. That's the whole point of
cpumask_any(). Please use it.

--
tejun