Reclaim¶
CXL記憶體可以間接利用的另一種方式是透過mm/vmscan.c中的reclaim系統。當系統上的記憶體容量基於全域性和cgroup本地的watermark(水位線)設定變得緊張時,就會啟用Reclaim。
在本節中,我們不討論watermark(水位線)配置,只討論reclaim系統的各個部分如何消耗CXL記憶體。
Demotion(降級)¶
預設情況下,reclaim系統在回收記憶體時會優先選擇交換(或zswap)。啟用kernel/mm/numa/demotion_enabled將導致vmscan在容量可用時,機會性地優先選擇遠端NUMA節點,而不是交換或zswap。
降級會啟用mm/memory_tier.c元件來確定下一個降級節點。下一個降級節點基於HMAT或CDAT效能資料。
cpusets.mems_allowed 缺陷¶
在Linux v6.15及更低版本中,降級在遷移頁面時不會考慮cpusets.mems_allowed。因此,如果啟用了降級,vmscan無法保證容器的記憶體與未在mems_allowed中設定的節點隔離。
在Linux v6.XX及更高版本中,降級會嘗試考慮cpusets.mems_allowed;但是,某些由另一個cgroup最初例項化的共享記憶體類(例如,公共庫 - 例如libc)可能仍然會被降級。因此,mems_allowed介面仍然無法提供與遠端節點的完美隔離。
ZSwap和節點偏好¶
在Linux v6.15及更低版本中,ZSwap從處理器本地節點分配記憶體,用於正在壓縮的新頁面。由於正在壓縮的頁面通常是冷的,因此結果是冷頁面被提升 - 只是在老化脫離LRU後才被降級。
在Linux v6.XX中,ZSwap嘗試優先選擇正在壓縮的頁面的節點作為壓縮頁面的分配目標。這有助於防止抖動。
降級與ZSwap¶
當同時啟用降級和ZSwap時,您會建立一個ZSwap預設會優先選擇最慢的CXL記憶體形式,直到該層記憶體耗盡的情況。