Hello,
On Wed, Sep 26, 2018 at 03:19:21PM -0700, Alexander Duyck wrote:
On 9/26/2018 3:09 PM, Tejun Heo wrote:
I could just use queue_work_on probably, but is there any issue if I
am passing CPU values that are not in the wq_unbound_cpumask? That
That should be fine. If it can't find any available cpu, it'll fall
back to round-robin. We probably can improve it so that it can
consider the numa distance when falling back.
was mostly my concern. Also for an unbound queue do I need to worry
about the hotplug lock? I wasn't sure if that was the case or not as
Issuers don't need to worry about them.
I know it is called out as something to be concerned with using
queue_work_on, but in __queue_work the value is just used to
determine which node to grab a work queue from.
It might be better to leave queue_work_on() to be used for per-cpu
workqueues and introduce queue_work_near() as you suggseted. I just
don't want it to duplicate the node selection code in it. Would that
work?
I forgot to address your question about the advantages. They are
pretty significant. The test system I was working with was
initializing 3TB of nvdimm memory per node. If the node is aligned
it takes something like 24 seconds, whereas an unaligned core can
take 36 seconds or more.
Oh yeah, sure, numa affinity matters quite a bit on memory heavy
workloads. I was mistaken that you were adding adding numa affinity
to per-cpu workqueues.
Thanks.
--
tejun