在 023 内核上使用多代 LRU (MGLRU) AL2 - Amazon Linux 2023

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

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

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

传统的 LRU 机制使用双列表模型(活动和非活动)来跟踪页面使用情况,在具有大型工作集的现代工作负载中,这可能会变得效率低下。MGLRU 用多代 “代” 页面取而代之,允许内核根据更精细的老化信息做出更明智的决策。

MGLRU 的好处包括:

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

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

  • 提高缓存保留率:最近使用的页面不太可能过早被移出。

  • 可扩展且锁定效率高的设计:在有许多机器上性能更好。 CPUs

配置和调整

在 AL2 023 内核上启用内核配置CONFIG_LRU_GEN。这在 MGLRU 中编译,但默认情况下不启用。

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

组件
0 多代 LRU 的主开关。
1 当 MMU 设置时(例如,在 x86 上),大批量清除叶页表条目中的访问位。从理论上讲,这种行为会加剧锁争用 ()。mmap_lock如果将其禁用,则对于连续映射热页的工作负载,多代 LRU 的性能将略有下降,否则可以用更少的大批次清除热点页面的访问位。
2 当 MMU 设置时(例如,在 x86 上),也要清除非叶页表条目中的访问位。除英特尔和AMD外,此行为未在x86版本上得到验证。如果将其禁用,则多代 LRU 的性能下降可以忽略不计。
[yYnN] Enable/disable 以上所有组件。

如何启用 MGLRU 的示例:

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

这将启用所有组件:

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