如何强制用户程序阻止 16GB 的物理 RAM

How to force a user program to block 16GB of physical RAM?

本文关键字:RAM 16GB 何强制 用户程序      更新时间:2023-10-16

我有一台 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

您可以使用

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