多个匿名页面的前瞻性错误

时间:2013-10-24 16:12:19

标签: c linux memory-management mmap virtual-memory

我已经使用mmap/MAP_ANONYMOUS分配了大量页面,这些页面用于仅增长的列表。

在Linux中访问内核之前,有没有办法让内核智能地预先为我提取多个页面?

MAP_POPULATE标志似乎是MAP_ANONYMOUS的无操作。

我可以在样式中循环指针:

for (i = 1; i < num_pages_to_prefault; i++)
    *((char *)pointer_to_current_page + i * sysconf(_SC_PAGE_SIZE)) = 0;

但这既不是线程安全的,也不是特别有效,因为每次访问的新页面都会强制进行新的上下文更改。

我想要的是像

prefault_memory(void * start_address, size_t length);

只会导致一个上下文切换并预先删除多个页面,如果它们未映射或已经存在于我的常驻集中,则保持不变。

1 个答案:

答案 0 :(得分:3)

您正在寻找的电话是madvise() MADV_WILLNEED