Zone_NORMAL and ZONE_HIGHMEM on 32 and 64-bit cores

I am trying to make Linux memory management more understandable for configuration and execution.

After reading this very interesting reference, “Linux Performance and Tuning Guide,” found on the IBM website , I came across something that I don’t quite understand.

In 32-bit architectures, such as IA-32, the Linux kernel can directly address only the first gigabyte of physical memory (896 MB when considering the reserved range). The memory above the so-called ZONE_NORMALshould be displayed in the lower 1 GB. This mapping is completely transparent to applications, but allocating a memory page in ZONE_HIGHMEMleads to a slight performance degradation.

  • Why should memory above 896 MB be displayed in the lower 1 GB?
  • Why does it affect performance by allocating a page of memory in ZONE_HIGHMEM?
  • what is it used for ZONE_HIGHMEM?
  • Why can a kernel capable of recognizing up to 4gb ( CONFIG_HIGHMEM=y) just use the first gigabyte?

Thanks in advance

+3
source share
1 answer

When the user process intercepts the kernel, the page tables are not modified. This means that a single linear address space should cover both the memory address available for the user process and the memory addresses available to the kernel.

On IA-32, which allows a 4 GB linear address space, typically the first 3 GB of the linear address space is allocated to the user process, and the last 1 GB of the linear address space is allocated to the kernel.

1 , , . 896 " 1 " - , 896 , .

ZONE_HIGHMEM - . , ​​ - ZONE_HIGHMEM - , , .

+4

All Articles