gpt4 book ai didi

linux-kernel - 32 位和 64 位内核上的 zone_NORMAL 和 ZONE_HIGHMEM

转载 作者:行者123 更新时间:2023-12-01 13:00:41 25 4
gpt4 key购买 nike

我试图使 linux 内存管理更加清晰一些,以用于调优和性能目的。

通过阅读在 IBM website 上找到的这本非常有趣的红皮书“Linux 性能和调优指南”我遇到了一些我不完全理解的事情。

On 32-bit architectures such as the IA-32, the Linux kernel can directly address only the first gigabyte of physical memory (896 MB when considering the reserved range). Memory above the so-called ZONE_NORMAL must be mapped into the lower 1 GB. This mapping is completely transparent to applications, but allocating a memory page in ZONE_HIGHMEM causes a small performance degradation.

  1. 为什么必须将 896 MB 以上的内存映射到较低的 1GB?
  2. 为什么在 ZONE_HIGHMEM 中分配内存页会对性能产生影响?
  3. ZONE_HIGHMEM 的用途是什么?
  4. 为什么能够识别高达 4gb (CONFIG_HIGHMEM=y) 的内核只能使用第一个 GB?

提前致谢

最佳答案

当用户进程陷入内核时,页表不会改变。这意味着一个线性地址空间必须能够覆盖用户进程可用的内存地址和内核可用的内存地址。

在允许 4GB 线性地址空间的 IA-32 上,通常线性地址空间的前 3GB 分配给用户进程,线性地址空间的最后 1GB 分配给内核。

内核必须使用它的 1GB 地址范围来寻址它需要的物理内存的任何部分。高于 896MB 的内存“映射到低 1GB” - 发生的情况是低于 896MB 的物理内存在线性地址空间的内核部分中分配了一个永久线性地址,而高于该限制的内存必须在线性地址空间的剩余部分分配一个临时映射。

ZONE_HIGHMEM 页面映射到用户空间进程时对性能没有影响 - 对于用户空间进程,所有物理内存页面都是相等的。当内核需要访问 ZONE_HIGHMEM 中的非用户页面时,会对性能产生影响 - 为此,如果尚未映射,则必须将其映射到线性地址空间。

关于linux-kernel - 32 位和 64 位内核上的 zone_NORMAL 和 ZONE_HIGHMEM,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6145456/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com