From 1ef3561caae4eaa5eb7ae419d863d7beaf84ac6a Mon Sep 17 00:00:00 2001 From: Troels Bjerre Lund Date: Fri, 26 May 2023 12:44:36 +0000 Subject: [PATCH] [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 Merge-request: KOTLIN-MR-697 Merged-by: Alexander Shabalin --- kotlin-native/runtime/src/custom_alloc/cpp/GCApi.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/kotlin-native/runtime/src/custom_alloc/cpp/GCApi.cpp b/kotlin-native/runtime/src/custom_alloc/cpp/GCApi.cpp index 56da0aa9246..b4526779687 100644 --- a/kotlin-native/runtime/src/custom_alloc/cpp/GCApi.cpp +++ b/kotlin-native/runtime/src/custom_alloc/cpp/GCApi.cpp @@ -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;