NUMA stands for Non-Uniform Memory Access, in other words a system whose memory is not all in one place. The system consists of multiple "nodes" of cpu's (processors) and/or memory which are linked together by a special high-speed network. All cpu's have access to all of memory, but a cpu's access to memory on the local or a nearby node is faster than to distant nodes.
For more explanation see the whitepaper A NUMA API for Linux and also the original An NUMA API for Linux.


The numactl program allows you to run your application program on specific cpu's and memory nodes. It does this by supplying a NUMA memory policy to the operating system before running your program.

For example,

   numactl  --cpubind=0  --membind=0,1  myprog
runs program "myprog" on cpu 0, using memory on nodes 0 and 1.

The package contains other commands, such as numademo, numastat and memhog. The numademo command provides a quick overview of NUMA performance on your system.


The libnuma library provides convenient ways for you to add NUMA memory policies into your own program. It is a shared object (.so) library.

For example, you can call numa_bind() to cause your program to be bound to (in other words, run on) specific nodes.

Obtaining numactl and libnuma

You can probably obtain the numactl command and libnuma library as installable packages from your Linux distribution.

Download of Source Code

The numactl command and libnuma library are now maintained at


Send comments, discussion and patches to

To subscribe to the list, place "subscribe linux-numa" in the body of an email and send it to Majordomo will return a confirmation message that you will have to return.

The numactl/libnuma maintainers are Filipe Brandenburger ( and Cliff Wickman (


numactl and the demo programs are under the GNU General Public License, v.2
libnuma is under the GNU Lesser General Public License, v2.1.

The manpages are under the same license as the Linux manpages (see the files)