

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

# 在内核上使用多代 LRU (MGLRU) AL2023
<a name="kernel-mglru-al2023"></a>

 [多代 LRU](https://docs.kernel.org/admin-guide/mm/multigen_lru.html) 是 Linux 内核中的一种现代页面回收算法，旨在提高内存压力下的内存管理性能。它取代了传统的 LRU（最近最少使用）机制，该机制用于在系统内存不足时确定要回收哪些内存页。

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

 MGLRU 的好处包括：
+  **更好的回收决策：**更准确地识别冷（未使用）页面。
+  **更低的延迟和更高的吞吐量：**特别是对于具有大地址空间或许多并发进程的工作负载。
+  **改进的缓存保留：**最近使用的页面不太可能被过早换出。
+  **可扩展且锁定效率高的设计：**在有许多机器上性能更好。 CPUs

## 配置和调优
<a name="kernel-mglru-config-2023"></a>

 内核配置已`CONFIG_LRU_GEN`在内 AL2023 核上启用。这会编译进 MGLRU，但默认不启用它。

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


| Bit | 组件 | 
| --- | --- | 
| 0 | 多代 LRU 的主开关。 | 
| 1 |  当 MMU 设置时（例如在 x86 架构上），以大批量方式清除叶子页表项中的访问位。此行为理论上可能加剧锁争用 (mmap\_lock)。如果禁用此功能，对于连续映射热页的工作负载，多代 LRU 将遭受轻微的性能下降，因为这些页面的访问位本可以通过较少的大批量操作清除。 | 
| 2 |  当 MMU 设置时（例如在 x86 架构上），同时清除非叶子页表项中的访问位。此行为未在 Intel 和 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
```