2

我有一台 32GB 内存的机器,我想模拟尝试一个用户进程在 16GB 机器内运行。一种方法是让一个小型用户进程运行并阻塞 16GB 物理内存,然后进入睡眠状态,然后让这个以前的用户进程在可用系统中运行。

问题是当我写一个程序到 malloc 16GB 内存时,大部分内存被虚拟内存阻塞,只有大约 64MB 的物理 RAM 被阻塞。有没有办法强制阻止物理RAM?

4

2 回答 2

2

Linux 有一个内核参数可以忽略超过一定大小的内存:

    max_addr=[KMG]  [KNL,BOOT,ia64] All physical memory greater than or
                    equal to this physical address is ignored.

所以你可以使用它。或者看看mlock

于 2012-06-19T10:08:44.320 回答
0

您可以使用mmapusing MAP_ANONYMOUSand MAP_LOCKED(第一个标志只是为了避免需要文件来创建mmapfdandoffset参数被忽略)。如果size_t不是 64 位,则需要多次mmap调用才能达到 16 GB。

于 2012-06-19T10:22:20.690 回答