I am running many multi-threaded processes on a larger NUMA system with dozens of sockets. The memory access across different nodes is very slow, so I restrict each process to one socket and let it use the complete CPU. For this placement I use numactl and its --localalloc option.

From time to time my process placement script accidentally places two processes on one node. I could move the processes from one node to the other using taskset or the like, but the allocated memory would stay behind.

Since I know it is possible to move memory pages between NUMA nodes transparently, I was wondering whether any command line utility exists to do this?

  • I don't know of a tool that let's you move the running process, but we use LikwidPin to do the pinning (on a core level even, not a socket level) It's easy to use and I have not had any issues with it (yet) code.google.com/p/likwid/wiki/LikwidPin – Jens Timmerman Mar 16 '15 at 8:23
  • Thanks for the tip! Pinning and moving is not a problem, though. That can be achieved with numactl and taskset. Depending on the allocation policy, new allocations might actually be on the new locality domain. However, this does not help with transferring already allocated memory from the old domain. – nfw Mar 16 '15 at 17:45

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Browse other questions tagged or ask your own question.