1

我已经分配了大量的页面,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);

如果它们没有被映射或已经在我的驻留集中,这将只导致一个上下文切换并预置多个页面或保持它们不变。

4

1 回答 1

3

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

于 2013-10-24T19:05:45.200 回答