Actually, the problem with NUMA is that you’re not guaranteed, if you’ve been paged out and so are now being paged back in, to be paged back into the NUMA node you were originally allocated into.
So you can end up with allocations all over the place, with you thinking they’re in nodes they’re just not in any more.
Also of course as well the OS can move threads across cores – even across cores which cause a change in ideal NUMA node.
This really stinks. We’re trying to compensate in software for something which is a hardware issue and where there are just no guarantees you can use with which to write your software.