Linux
swappiness 是絕對的還是相對於記憶體大小的?
保留在物理記憶體中的虛擬記憶體量是否取決於物理記憶體大小?
假設我的交換參數為 60,我的 8GB 中的 4GB 填充了應用程序數據,另外 4GB 填充了文件記憶體。
在具有相同交換參數但只有 4GB 物理記憶體的相同工作負載下,所有 4GB 是否會被應用程序數據填充或更少?
它是成比例的,根本不基於記憶體大小。程式碼在
mm/vmscan.c
. 在檢查了一些病態條件後,例如完全沒有交換空間(然後只有文件支持的頁面將被掃描作為被逐出記憶體的候選者),幾乎沒有記憶體(文件支持的記憶體和匿名記憶體將被同等掃描),或者頁面記憶體變得非常大並且充滿了非活動頁面(只會掃描文件支持的頁面),我們點擊這個:/* * With swappiness at 100, anonymous and file have the same priority. * This scanning priority is essentially the inverse of IO cost. */ anon_prio = swappiness; file_prio = 200 - anon_prio;
根據記憶體掃描器最近在釋放每種類型的記憶體方面取得的成功,這些優先級得到進一步調整。然後按比例掃描每種類型的記憶體,將最近未使用的頁面逐出。
歸根結底,這一切都取決於工作量。swappiness 值告訴系統為嘗試換出匿名記憶體分配什麼優先級,但記憶體訪問模式將決定實際發生的情況。