Neo*_*Neo 4 c memory kernel memory-management microbenchmark
对于我在Linux Kernel上的课程项目,我需要模拟由于内存不足而导致大量页面交换的情况.
我想编写一个需要大量物理内存的程序,因此该程序访问的页面必须多次交换.
首先,您首先需要分配一个大于RAM大小的缓冲区.我希望你在64位操作系统上运行或启用PAE.如果让我们说4GB的RAM,你需要这样的东西:
double* pBigArray = (double*)malloc(sizeof(double) * 536870912);
// You actually need more than that. This is just 4GB.
Run Code Online (Sandbox Code Playgroud)
现在,只有一个大于RAM大小的阵列是不够的.重要的是你如何访问它.如果您只是连续读取元素,CPU中的硬件预取程序会将程序读取的一些数据带入缓存中.
要生成许多页面错误,您需要从不在RAM中的地址读取.
要做到这一点,这是一个简单的方法,通过随机读取数组:
double lfBigChecksum = 0.0;
while (true)
{
int iIndex = rand() % BUFFER_SIZE;
lfBigChecksum += pBigArray[iIndex];
}
Run Code Online (Sandbox Code Playgroud)
如果你有一个8GB和4GB的RAM阵列,那么一半的读取将是页面错误(并从硬盘中的交换空间提供).