aviro Asked: 2022-03-25 06:24:48 +0800 CST2022-03-25 06:24:48 +0800 CST 2022-03-25 06:24:48 +0800 CST Linux 是否将内存保持在同一物理位置? 772 假设 Linux 内核没有换出我的进程的内存页面,我可以假设它们在 RAM 中的物理位置不会改变,还是内核可能会移动它们? 我问的原因是我正在考虑从头开始编写自己memtester的,并且我想知道新分配的页面是否可能位于该进程之前已经测试过的 RAM 中的相同物理位置。 linux kernel 1 个回答 Voted Best Answer Stephen Kitt 2022-03-26T04:45:19+08:002022-03-26T04:45:19+08:00 我知道分配页面的物理地址可以更改的两种情况,因此后续分配可以重新使用以前使用的物理页面: 换出(正如你提到的) 压实 mlock()在所有情况下都可以通过使用或mlockall()锁定内存来防止前者。对于后者,还vm.compact_unevictable_allowed sysctl需要将其设置为 0(如果启用了压缩,则默认启用)。 透明的大页面碎片整理同时使用交换和压缩,但它添加了sysctl自己的一些条目;我不知道在全局禁用压缩和锁定正在测试的内存之外是否需要它们。
我知道分配页面的物理地址可以更改的两种情况,因此后续分配可以重新使用以前使用的物理页面:
mlock()
在所有情况下都可以通过使用或mlockall()
锁定内存来防止前者。对于后者,还vm.compact_unevictable_allowed
sysctl
需要将其设置为 0(如果启用了压缩,则默认启用)。透明的大页面碎片整理同时使用交换和压缩,但它添加了
sysctl
自己的一些条目;我不知道在全局禁用压缩和锁定正在测试的内存之外是否需要它们。