Linux
Linux 是否將記憶體保持在同一物理位置?
假設 Linux 核心沒有換出我的程序的記憶體頁面,我可以假設它們在 RAM 中的物理位置不會改變,還是核心可能會移動它們?
我問的原因是我正在考慮從頭開始編寫自己
memtester
的,並且我想知道新分配的頁面是否可能位於該程序之前已經測試過的 RAM 中的相同物理位置。
我知道分配頁面的物理地址可以更改的兩種情況,因此後續分配可以重新使用以前使用的物理頁面:
- 換出(正如你提到的)
- 壓實
mlock()
在所有情況下都可以通過使用或mlockall()
鎖定記憶體來防止前者。對於後者,還vm.compact_unevictable_allowed
sysctl
需要將其設置為 0(如果啟用了壓縮,則預設啟用)。透明的大頁面碎片整理同時使用交換和壓縮,但它添加了
sysctl
自己的一些條目;我不知道在全域禁用壓縮和鎖定正在測試的記憶體之外是否需要它們。