当前位置: 首页 > 面试题库 >

对大型页面使用mmap和madvise

邵兴庆
2023-03-14
问题内容

我想在Linux机器正在使用的巨大页面上分配内存。我看到有两种方法可以使用mmapmadvise

也就是说,MAP_HUGETLBmmap调用中使用标志-

base_ptr_ = mmap(NULL, memory_size_, PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANONYMOUS | MAP_HUGETLB, -1, 0);

MADV_HUGEPAGE带有madvise呼叫标志-

madvise(base_ptr_, memory_size_, MADV_HUGEPAGE);

有人可以解释两者之间的区别吗?


问题答案:

这两个函数执行不同的操作,在您的上下文中这可能无关紧要:

  • madvise为所有与传递给它的区域相对应的内存映射设置一个标志,告诉khugepaged内核线程可以考虑将所述映射提升为大页面。只有启用了透明大页面支持(在下提供了透明大页面支持的状态),这才起作用。/sys/kernel/mm/transparent_hugepage/enabled在大多数发行版中都是这种情况,但是在嵌入式系统上可能会禁用。

  • mmap实际上将继续并保留内核内部hugetlbfs装载中的页面,其状态可以在中查看/sys/kernel/mm/hugepages。由时间问题所需要的页面,可mmap调用(见HugePages_Free/proc/meminfo),或mmap将失败。

这两种机制在内核树中都有自己的doc文件:hugetlbpage.txt和transhuge.txt



 类似资料:
  • 本文向大家介绍使用mmap实现多进程对大文件拷贝,包括了使用mmap实现多进程对大文件拷贝的使用技巧和注意事项,需要的朋友参考一下 本文实例为大家分享了mmap实现文件多进程拷贝,供大家参考,具体内容如下 假设有一个超大文件,需对其完成拷贝工作。为提高效率,可采用多进程并行拷贝的方法来实现。假设文件大小为len,共有n个进程对该文件进行拷贝。那每个进程拷贝的字节数应为len/n。但未必一定能整除,

  • 问题内容: 在Windows上的Python中,我可以通过创建一个大文件 现在大约是1 GB。但是,在Linux上,这将返回。 有没有办法在Linux上获得与Windows相同的行为?也就是说,能够使用?来增加文件的大小。 问题答案: 至少在POSIX系统上,不能用于增加(或减小)文件的大小。的功能是将文件的一部分映射到内存。合乎逻辑的是,您请求映射的东西应该确实存在!坦白说,我真的很惊讶您实际上

  • 我的网页上有一个按钮,一旦输入所需的信息,我想点击它。我目前正在使用By来建立页面的所有元素,但想使用WebElements作为这个按钮,然后使用Actions稍后单击它。我应该如何在我的页面对象类中做到这一点。 我尝试了以下方法: 但在以TestNG的形式运行测试类时,它在WebElement行上显示空指针异常。也尝试使用By执行此操作,但按钮无法收到单击。它与WebElements配合得非常好

  • 我想在我的页面对象中使用剧作家的定位器。我找到了一个Javascript示例(为了简洁起见,将其剥离): 试图在我的Java代码中做同样的事情: 引发空指针异常,因为初始化登录按钮时,尚未启动。 我可以 但是对于大型页面对象类来说,这将变得有点冗长/混乱。 有没有关于如何在Java中实现这一点的想法? 谢谢