在 AL2023 内核上使用多代 LRU(MGLRU) - Amazon Linux 2023
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

在 AL2023 内核上使用多代 LRU(MGLRU)

多代 LRU 是 Linux 内核中的一种现代页面回收算法,旨在提高内存压力下的内存管理性能。它取代了传统的 LRU(最近最少使用)机制,该机制用于在系统内存不足时确定要回收哪些内存页。

传统的 LRU 机制使用双列表模型(活跃和非活跃)来跟踪页面使用情况,这在具有大型工作集的现代工作负载中可能效率低下。MGLRU 用多“代”页面取代了这种机制,允许内核基于更细粒度的老化信息做出更智能的决策。

MGLRU 的好处包括:

  • 更好的回收决策:更准确地识别冷(未使用)页面。

  • 更低的延迟和更高的吞吐量:特别是对于具有大地址空间或许多并发进程的工作负载。

  • 改进的缓存保留:最近使用的页面不太可能被过早换出。

  • 可扩展且锁高效的设计:在具有多个 CPU 的机器上表现更好。

配置和调优

AL2023 内核启用了内核配置 CONFIG_LRU_GEN。这会编译进 MGLRU,但默认不启用它。

可以使用 /sys/kernel/mm/lru_gen/enabled 文件启用和调整 MGLRU。该值是一个位掩码。建议启用所有组件,除非其中某些组件存在不良副作用。

组件
0 多代 LRU 的主开关。
1 当 MMU 设置时(例如在 x86 架构上),以大批量方式清除叶子页表项中的访问位。此行为理论上可能加剧锁争用 (mmap_lock)。如果禁用此功能,对于连续映射热页的工作负载,多代 LRU 将遭受轻微的性能下降,因为这些页面的访问位本可以通过较少的大批量操作清除。
2 当 MMU 设置时(例如在 x86 架构上),同时清除非叶子页表项中的访问位。此行为未在 Intel 和 AMD 以外的 x86 变体上得到验证。如果禁用此功能,多代 LRU 将遭受可忽略不计的性能下降。
[yYnN] 启用/禁用上述所有组件。

如何启用 MGLRU 的示例:

[ec2-user ~]$ echo y >/sys/kernel/mm/lru_gen/enabled

此命令启用所有组件:

[ec2-user ~]$ cat /sys/kernel/mm/lru_gen/enabled 0x0007