[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:
committed by
Space Cloud
parent
0ac02be534
commit
1ef3561caa
@@ -82,6 +82,9 @@ void* SafeAlloc(uint64_t size) noexcept {
|
|||||||
} else {
|
} else {
|
||||||
#if KONAN_WINDOWS
|
#if KONAN_WINDOWS
|
||||||
RuntimeFail("mmap is not available on mingw");
|
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
|
#else
|
||||||
memory = mmap(nullptr, size, PROT_WRITE | PROT_READ, MAP_ANONYMOUS | MAP_PRIVATE | MAP_NORESERVE, -1, 0);
|
memory = mmap(nullptr, size, PROT_WRITE | PROT_READ, MAP_ANONYMOUS | MAP_PRIVATE | MAP_NORESERVE, -1, 0);
|
||||||
error = memory == MAP_FAILED;
|
error = memory == MAP_FAILED;
|
||||||
|
|||||||
Reference in New Issue
Block a user