Take the 2-minute tour ×
Unix & Linux Stack Exchange is a question and answer site for users of Linux, FreeBSD and other Un*x-like operating systems.. It's 100% free, no registration required.

In Linux kernel, the documentation for CONFIG_NUMA says:

Enable NUMA (Non Uniform Memory Access) support
...
For 64-bit this is recommended if the system is Intel Core i7 (or later)
...

I have an Intel Core i7 processor, but AFAICT it only has one NUMA node:

$ numactl --hardware
available: 1 nodes (0)
node 0 cpus: 0 1 2 3 4 5 6 7
node 0 size: 16063 MB
node 0 free: 15031 MB
node distances:
node   0 
  0:  10 

so what is the purpose of having CONFIG_NUMA=y, when i7 has only one numa node ?

share|improve this question
add comment

3 Answers

up vote 4 down vote accepted

I think this picture explains enough:

                  enter image description here

  • socket or numa node is a collection of cores with a local access to memory. Each socket contains 1 or more cores. Note that this does not necessarily refer to a physical socket, but rather to the memory architecture of the machine, which will depend on your chip vendor.

  • processor core (cpu core, logical processor) refers to a single processing unit capable of performing computations.

So the above indicates that you would need multiple processors in the machine to leverage NUMA architecture.

You can have compiled NUMA support in the kernel and run it on single processor machine. It's similar like with SMP support. It's compiled in as well but when the kernel detects that there is single processor in the system it will not use it (disable it). The same holds for NUMA. You can check dmesg kernel ring buffer or /var/log/dmesg file for related messages:

NUMA - single processor (or NUMA disabled) X multi processor:

No NUMA configuration found
NUMA: Allocated memnodemap from b000 - b440

SMP - single processor X multi processor:

SMP: Allowing 1 CPUs, 0 hotplug CPUs
SMP: Allowing 32 CPUs, 0 hotplug CPUs
share|improve this answer
add comment

I think if you use the --show switch it might make more sense:

$ numactl --show
policy: default
preferred node: current
physcpubind: 0 1 2 3 
cpubind: 0 
nodebind: 0 
membind: 0 

So you can control the use of physcpubind's like this:

$ numactl --physcpubind=+0-2 myapp

This would limit the application myapp to the first 2 CPU cores. My system is an i5 with 4 cores.

References

share|improve this answer
add comment

In a PC with at most one CPU, NUMA is totally useless. Feel free disable it in your own kernel.

You can always control CPU bonding by taskset(1).

share|improve this answer
add comment

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.