mirror of
https://github.com/microsoft/mimalloc.git
synced 2025-05-04 22:49:32 +03:00
cleanup thp disable a bit
This commit is contained in:
parent
c0da600ed3
commit
128c7c1876
2 changed files with 16 additions and 17 deletions
|
@ -28,7 +28,7 @@ option(MI_DEBUG_UBSAN "Build with undefined-behavior sanitizer (needs clan
|
||||||
option(MI_SKIP_COLLECT_ON_EXIT "Skip collecting memory on program exit" OFF)
|
option(MI_SKIP_COLLECT_ON_EXIT "Skip collecting memory on program exit" OFF)
|
||||||
option(MI_NO_PADDING "Force no use of padding even in DEBUG mode etc." OFF)
|
option(MI_NO_PADDING "Force no use of padding even in DEBUG mode etc." OFF)
|
||||||
option(MI_INSTALL_TOPLEVEL "Install directly into $CMAKE_INSTALL_PREFIX instead of PREFIX/lib/mimalloc-version" OFF)
|
option(MI_INSTALL_TOPLEVEL "Install directly into $CMAKE_INSTALL_PREFIX instead of PREFIX/lib/mimalloc-version" OFF)
|
||||||
option(MI_NO_THP "Force disable transparent huge pages support on Linux/Android process wise only" OFF)
|
option(MI_NO_THP "Disable transparent huge pages support on Linux/Android for the mimalloc process only" OFF)
|
||||||
|
|
||||||
# deprecated options
|
# deprecated options
|
||||||
option(MI_CHECK_FULL "Use full internal invariant checking in DEBUG mode (deprecated, use MI_DEBUG_FULL instead)" OFF)
|
option(MI_CHECK_FULL "Use full internal invariant checking in DEBUG mode (deprecated, use MI_DEBUG_FULL instead)" OFF)
|
||||||
|
|
|
@ -31,7 +31,9 @@ terms of the MIT license. A copy of the license can be found in the file
|
||||||
|
|
||||||
#if defined(__linux__)
|
#if defined(__linux__)
|
||||||
#include <features.h>
|
#include <features.h>
|
||||||
|
#if defined(MI_NO_THP)
|
||||||
#include <sys/prctl.h>
|
#include <sys/prctl.h>
|
||||||
|
#endif
|
||||||
#if defined(__GLIBC__)
|
#if defined(__GLIBC__)
|
||||||
#include <linux/mman.h> // linux mmap flags
|
#include <linux/mman.h> // linux mmap flags
|
||||||
#else
|
#else
|
||||||
|
@ -129,21 +131,8 @@ static bool unix_detect_overcommit(void) {
|
||||||
return os_overcommit;
|
return os_overcommit;
|
||||||
}
|
}
|
||||||
|
|
||||||
void unix_set_thp(void) {
|
void _mi_prim_mem_init( mi_os_mem_config_t* config )
|
||||||
#if defined(__linux__) || defined(__ANDROID__)
|
{
|
||||||
#if MI_NO_THP
|
|
||||||
int val;
|
|
||||||
if (prctl(PR_GET_THP_DISABLE, &val, 0, 0, 0) != 0) {
|
|
||||||
// Most likely since distros often come with always/madvise settings.
|
|
||||||
val = 1;
|
|
||||||
// Disabling only for mimalloc process rather than touching system wide settings
|
|
||||||
(void)prctl(PR_SET_THP_DISABLE, &val, 0, 0, 0);
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
void _mi_prim_mem_init( mi_os_mem_config_t* config ) {
|
|
||||||
long psize = sysconf(_SC_PAGESIZE);
|
long psize = sysconf(_SC_PAGESIZE);
|
||||||
if (psize > 0) {
|
if (psize > 0) {
|
||||||
config->page_size = (size_t)psize;
|
config->page_size = (size_t)psize;
|
||||||
|
@ -153,7 +142,17 @@ void _mi_prim_mem_init( mi_os_mem_config_t* config ) {
|
||||||
config->has_overcommit = unix_detect_overcommit();
|
config->has_overcommit = unix_detect_overcommit();
|
||||||
config->must_free_whole = false; // mmap can free in parts
|
config->must_free_whole = false; // mmap can free in parts
|
||||||
config->has_virtual_reserve = true; // todo: check if this true for NetBSD? (for anonymous mmap with PROT_NONE)
|
config->has_virtual_reserve = true; // todo: check if this true for NetBSD? (for anonymous mmap with PROT_NONE)
|
||||||
unix_set_thp();
|
|
||||||
|
// disable transparent huge pages for this process?
|
||||||
|
#if defined(MI_NO_THP) && (defined(__linux__) || defined(__ANDROID__))
|
||||||
|
int val = 0;
|
||||||
|
if (prctl(PR_GET_THP_DISABLE, &val, 0, 0, 0) != 0) {
|
||||||
|
// Most likely since distros often come with always/madvise settings.
|
||||||
|
val = 1;
|
||||||
|
// Disabling only for mimalloc process rather than touching system wide settings
|
||||||
|
(void)prctl(PR_SET_THP_DISABLE, &val, 0, 0, 0);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue