返回

内存碎片的终结者:Linux 内核的内存规整功能详解

前端

在 <#reference></#reference>中,我们探讨了 Linux 内核如何通过根据迁移类型对内存页面进行分组来减轻内存碎片的问题。然而,这种方法只能暂时延缓碎片化,而不能彻底消除它。当内存碎片积累到无法满足连续物理内存需求的程度时,就会导致性能问题。为了解决这一难题,Linux 内核引入了内存规整功能。

内存规整:碎片化的克星

在引入内存规整功能之前,内核在分配内存时主要依靠“首次适配”算法,即从满足请求大小的可用内存块中选择第一个可用的块。这种算法虽然简单高效,但容易导致碎片化。随着时间的推移,可用内存块被分割成越来越小的碎片,从而无法满足较大的连续内存分配请求。

内存规整功能通过引入一个称为“movable zone”的新概念来解决这一问题。Movable zone 是一个虚拟内存区域,用于存储可以移动的内存页面。当内核需要分配一块连续的物理内存时,它首先尝试从 movable zone 中移动页面以创建所需的空间。只有当 movable zone 中没有足够的页面可移动时,内核才会从其他内存区域分配页面。

Movable zone 的工作原理

Movable zone 的工作原理如下:

  1. 页面迁移: 当一个页面被分配到 movable zone 时,它就会被标记为可移动。当内核需要一个连续的物理内存块时,它会扫描 movable zone 中的页面,并尝试将它们移动到其他内存区域。
  2. 页面固定: 如果一个页面被内核使用(例如,用于代码或数据),则该页面将被固定,无法移动。固定页面的目的是防止内核移动关键页面,从而导致系统崩溃。
  3. 页面回收: 如果内核无法在 movable zone 中找到足够的页面来满足请求,它将开始回收固定页面。回收过程涉及将页面标记为可移动,然后将其移动到其他内存区域。

内存规整的好处

内存规整功能提供了以下好处:

  • 减少内存碎片: 通过将页面移动到 movable zone,内存规整功能可以有效地减少内存碎片。这确保了内核始终有足够的空间来满足连续内存分配请求。
  • 提高性能: 减少内存碎片可以提高系统的整体性能。当内核不需要花费时间寻找和合并可用内存块时,内存分配速度就会更快。
  • 减少停机时间: 通过防止内存碎片,内存规整功能可以帮助减少系统停机时间。当内核无法满足连续内存分配请求时,系统可能会出现故障或崩溃。

结论

Linux 内核的内存规整功能是一种强大的工具,用于减少内存碎片并提高系统性能。通过引入 movable zone 和页面迁移机制,内存规整功能确保内核始终有足够的连续物理内存来满足各种应用程序的需求。这不仅提高了系统的效率,还降低了停机时间的风险。