[K/N] custom alloc: pre-fault OS pages ^KT-55364

On linux, some memory access patterns cause a cascade of page faults. By
asking mmap for MAP_POPULATE on linux, the page faults happen up front
in a much more efficient manner.


Co-authored-by: Troels Lund <troels@google.com>

Merge-request: KOTLIN-MR-697
Merged-by: Alexander Shabalin <alexander.shabalin@jetbrains.com>
This commit is contained in:
Troels Bjerre Lund
2023-05-26 12:44:36 +00:00
committed by Space Cloud
parent 0ac02be534
commit 1ef3561caa
@@ -82,6 +82,9 @@ void* SafeAlloc(uint64_t size) noexcept {
} else {
#if KONAN_WINDOWS
RuntimeFail("mmap is not available on mingw");
#elif KONAN_LINUX
memory = mmap(nullptr, size, PROT_WRITE | PROT_READ, MAP_ANONYMOUS | MAP_PRIVATE | MAP_NORESERVE | MAP_POPULATE, -1, 0);
error = memory == MAP_FAILED;
#else
memory = mmap(nullptr, size, PROT_WRITE | PROT_READ, MAP_ANONYMOUS | MAP_PRIVATE | MAP_NORESERVE, -1, 0);
error = memory == MAP_FAILED;