我有一台 32GB 内存的机器,我想模拟尝试一个用户进程在 16GB 机器内运行。一种方法是让一个小型用户进程运行并阻塞 16GB 物理内存,然后进入睡眠状态,然后让这个以前的用户进程在可用系统中运行。
问题是当我写一个程序到 malloc 16GB 内存时,大部分内存被虚拟内存阻塞,只有大约 64MB 的物理 RAM 被阻塞。有没有办法强制阻止物理RAM?
我有一台 32GB 内存的机器,我想模拟尝试一个用户进程在 16GB 机器内运行。一种方法是让一个小型用户进程运行并阻塞 16GB 物理内存,然后进入睡眠状态,然后让这个以前的用户进程在可用系统中运行。
问题是当我写一个程序到 malloc 16GB 内存时,大部分内存被虚拟内存阻塞,只有大约 64MB 的物理 RAM 被阻塞。有没有办法强制阻止物理RAM?
Linux 有一个内核参数可以忽略超过一定大小的内存:
max_addr=[KMG] [KNL,BOOT,ia64] All physical memory greater than or
equal to this physical address is ignored.
所以你可以使用它。或者看看mlock
您可以使用mmap
using MAP_ANONYMOUS
and MAP_LOCKED
(第一个标志只是为了避免需要文件来创建mmap
,fd
andoffset
参数被忽略)。如果size_t
不是 64 位,则需要多次mmap
调用才能达到 16 GB。