Thread (60 messages) 60 messages, 8 authors, 2024-10-28

Re: [PATCH v1 11/14] futex: Implement FUTEX2_NUMA

From: "Christoph Lameter (Ampere)" <cl@gentwo.org>
Date: 2024-10-25 19:36:34
Also in: linux-arch, linux-mm, lkml

Sorry saw this after the other email.

On Fri, 25 Oct 2024, Peter Zijlstra wrote:
quoted
Could we follow NUMA policies like with other metadata allocations during
systen call processing?
I had a quick look at this, and since the mempolicy stuff is per vma,
and we don't have the vma, this is going to be terribly expensive --
mmap_lock and all that.
There is a memory policy for the task as a whole that is used for slab
allocations and allocations that are not vma bound in current->mempolicy.
Use that.
Using memory policies is probably okay -- but still risky, since you get
the extra failure case where if you change the mempolicy between WAIT
and WAKE things will not match and sadness happens, but that *SHOULD*
hopefully not happen a lot. Mempolicies are typically fairly static.
Right.
quoted
That way the placement of the futex can be controlled by the tasks memory
policy. We could skip the FUTEX2_NUMA option.
That doesn't work. If we don't have storage for the node across
WAIT/WAKE, then the node must be deterministic per futex_hash().
Otherwise wake has no chance of finding the entry.
You can get a node number following the current task mempolicy by calling
mempolicy_slab_node() and keep using that node for the future.

It is also possible to check if the policy is interleave and then follow
the distributed hash scheme.

The current scheme where we determine node based on hash bits is fully
deterministic and WAIT/WAKE will agree on which node-hash to use. The
interleave is no worse than the global hash today -- OTOH it also isn't
better.
This is unexpected strange behavior for those familiar with NUMA. We have
tools to set memory policies for tasks and those policies should be used
throughout.
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help