Before we look at the data structures used to organize memory in the kernel, we need to define a few concepts because the terminology is not always easy to understand. Let's first consider NUMA systems. This will enable us to show that it is very easy to reduce them to UMA systems.
Figure 3-3 is a graphic illustration of the memory partitioning described below (the situation is somewhat simplified, as you will see when we examine the data structures closely).
First, RAM memory is divided into nodes. A node is associated with each processor of the system and is represented in the kernel by an instance of pg_data_t (these data structures are defined shortly).
Each node is split into zones as further subdivisions of memory. For example, there are restrictions as to the memory area that can be used for DMA operations (with ISA devices); only the first 16 MiB are suitable. There is also a highmem area that cannot be mapped directly. Between these is the "normal" memory area for universal use. A node therefore comprises up to three zones. The kernel introduces the following constants to distinguish between them.
Continue reading here: Figure 33 Memory partitioning in NUMA systems
Was this article helpful?