Is there a way to pre-populate the operating system page table for a large Rust allocation?

If you try to allocate a large chunk of memory using any of Rust's memory allocators (including nightly alloc_api

), you cannot prepopulate the page table, that is, you cannot recreate the MAP_POPULATE option for mmap. Instead, I just use libc::mmap

it when I need to allocate large areas of memory.

Is there any other way to pre-populate a page table in Rust other than scrolling through Vec<usize>

or Vec<SomeTypeOfPageSize>

and page launch error?

As @FlorianWeimer noted , there are platform-specific ways to accomplish this. I am scanning the Rust RFC to see if the new allocator API includes any presets.

+3


source to share


1 answer


You can call mlockall

if you can afford to pre-fill everything. This should work on GNU / Linux and on systems that implement POSIX Realtime (memory lock) extensions.



Whether or not this is acceptable really depends on your application.

+4


source







All Articles