在 AL2023 核心上使用多世代 LRU (MGLRU) - Amazon Linux 2023

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

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

多世代 LRU 是 Linux 核心中的現代頁面回收演算法,旨在改善記憶體壓力下的記憶體管理效能。它會取代用於判斷系統記憶體不足時要回收哪些記憶體頁面的傳統 LRU (最近最少使用) 機制。

傳統 LRU 機制使用雙清單模型 (主動和非主動) 來追蹤頁面使用情況,這在具有大型工作集的現代工作負載中可能會變得效率低下。MGLRU 將其取代為多個「世代」頁面,允許核心根據更精細的老化資訊做出更明智的決策。

MGLRU 的優點包括:

  • 更好的回收決策:更準確地識別冷 (未使用的) 頁面。

  • 降低延遲並改善輸送量:特別是對於具有大型地址空間或許多並行程序的工作負載。

  • 改善快取保留:最近使用的頁面不太可能過早移出。

  • 可擴展且鎖定效率的設計:在具有許多 CPUs機器上表現更好。

組態和調校

在 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