

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 在 AL2023 核心上使用多世代 LRU (MGLRU)
<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>

 在 AL2023 核心上`CONFIG_LRU_GEN`啟用核心組態。這會在 MGLRU 中編譯，但預設不會啟用它。

 可以使用 `/sys/kernel/mm/lru_gen/enabled` 檔案啟用和調校 MGLRU。值為位元遮罩。*建議啟用所有元件，除非其中一些元件有不良的副作用。*


| 位元 | 元件 | 
| --- | --- | 
| 0 | 多世代 LRU 的主開關。 | 
| 1 |  當 MMU 設定時 （例如在 x86 上），以大型批次清除分葉頁面資料表項目中存取的位元。此行為理論上會加重鎖定爭用 (mmap\$1lock)。如果停用，對於連續映射熱頁面的工作負載，多世代 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
```