首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Linux内核中如何实现按需填零,在哪里可以禁用它?

问在Linux内核中如何实现按需填零,在哪里可以禁用它?
EN

Stack Overflow用户
提问于 2017-07-07 18:27:24
回答 2查看 2.5K关注 0票数 5

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

与zero-fill-on-demand相关的类似主题。ZFOD和COW。

EN

回答 2

Stack Overflow用户

发布于 2018-07-05 11:25:51

您希望在内核编译中使用MAP_UNINITIALIZED参数来映射和启用CONFIG_MMAP_ALLOW_UNINITIALIZED。

代码语言:javascript
复制
`MAP_UNINITIALIZED (since Linux 2.6.33)               Don't  clear  anonymous pages.  This flag is intended to improve               performance on embedded devices.  This flag is honored  only  if               the  kernel was configured with the CONFIG_MMAP_ALLOW_UNINITIAL‐               IZED option.  Because of the security implications, that  option               is  normally  enabled  only  on  embedded devices (i.e., devices               where one has complete control of the contents of user memory).`
票数 1
EN

Stack Overflow用户

发布于 2017-07-07 21:57:32

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

  • 如果出于性能原因,您可以替换malloc+memset的所有calloc调用,以便进程始终具有真实的内存页。但是,内核仍然可以合并一些内存页。
  • 禁用内存过量使用,以便每个malloc都会在此时返回该页。这样,你的程序将不能分配比可用内存更多的内存(RAM +交换)。请参阅https://www.kernel.org/doc/Documentation/vm/overcommit-accounting
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44968502

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档