假设 Linux 内核不交换我的进程的内存页面,我可以假设它们在 RAM 中的物理位置不会改变,还是内核可能会移动它们?
我问的原因是我正在考虑memtester
从头开始编写自己的页面,我想知道新分配的页面是否可能位于 RAM 中该进程之前已经测试过的相同物理位置。
答案1
我知道有两种情况,分配的页面的物理地址可以更改,因此后续分配可以重新使用以前使用的物理页面:
- 换出(正如你提到的)
- 压实
在所有情况下都可以通过锁定内存来防止前者mlock()
或者mlockall()
。对于后者,这vm.compact_unevictable_allowed
sysctl
还需要设置为 0(如果启用压缩,则默认启用)。
透明大页碎片整理同时使用交换和压缩,但它添加了许多sysctl
自己的条目;我不知道除了全局禁用压缩并锁定正在测试的内存之外是否还需要它们。