I'm doing some bioinformatics work where the limitation is amount of memory (i.e., the process is not parallelizable). I see servers like the Dell R715 that have two sockets for Opteron 6100 CPUs and 128GB of RAM possible with 16 x 8GB DIMMs.
Each CPU has a bank of DIMMs associated with it.
My question is, if I put Linux on a machine like that, is only half the RAM addressable by each CPU? In other words, if I run a single-threaded program under Linux will that process have access to 128GB of RAM or only 64GB of RAM?
Strictly speaking, that single-threaded process will have access to all memory available to the server. You don't have to worry about that.
The process will have access to all memory in RAM, but access to half of it will be (in theory) slower than access to the other half of it. I know VMWare-ESX is aware of memory locality, as it attempts to keep all the memory for a specific VM on the same memory node as the process execution in order to keep performance good.
The technology is called Non-Uniform Memory Access (NUMA). Chances are your Linux machine already has the bits for it (
numastat
should return data). Thenumactl
program assigns a memory policy to your processes, which can be very useful if you're writing your own code and want to optimize for memory speed. CPU-local memory will fetch faster than memory in another CPU's memory node, which may be useful for you depending on what you're doing with it.Linux is a demand paged system that presents a virtual address space of 2^64 -1 on a 64 bit system. the VMM wil lhave access all of the ram in the box. The linux kernel handles creating the page table not the process.