Linux 内核中的按需补零是如何实现的,以及在哪里可以禁用它?

Qin*_*hen 6 c memory-management copy-on-write linux-kernel page-fault

当我们malloc内存时,只有虚拟内存可用,而且它实际上指向零页。当我们尝试写入malloced内存时,将分配真正的物理内存,此时,将出现copy-on-wright,将零从零页复制到通过页错误映射的物理内存。我的问题是,在linux源代码中如何/在何处实现按需补零,我想禁用此功能来进行一些测试。我猜这可能发生在页面错误过程中,而不是 brk() 或 mmap() 中。

与按需零填充相关的类似主题。ZFODCOW

eug*_*rez 0

如果您希望用户空间进程在每次 *alloc 调用时分配实际内存,我认为在下一个选项中:

  • 如果出于性能原因,您可以将所有 calloc 调用替换为 malloc+memset,这样进程将始终拥有真实的内存页。但是,内核仍然可以合并一些内存页面。

  • 禁用内存过量使用,以便每个 malloc 都会返回当前的页面。这样,您的程序将无法分配比可用内存(RAM + 交换)更多的内存。请参阅https://www.kernel.org/doc/Documentation/vm/overcommit-accounting