mirror of
https://gitlab.labs.nic.cz/labs/bird.git
synced 2024-05-11 16:54:54 +00:00
Alloc: Disable transparent huge pages
The usage pattern implemented in allocator seems to be incompatible with transparent huge pages, as memory released using madvise(MADV_DONTNEED) with regular page size and alignment does not seem to trigger demotion of huge pages back to regular pages, even when significant number of pages is released. Even if demotion is triggered when system memory is low, it still breaks memory accounting.
This commit is contained in:
@@ -19,6 +19,10 @@
|
||||
#include <sys/mman.h>
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_DISABLE_THP
|
||||
#include <sys/prctl.h>
|
||||
#endif
|
||||
|
||||
long page_size = 0;
|
||||
|
||||
#ifdef HAVE_MMAP
|
||||
@@ -218,6 +222,12 @@ global_free_pages_cleanup_event(void *data UNUSED)
|
||||
void
|
||||
resource_sys_init(void)
|
||||
{
|
||||
#ifdef CONFIG_DISABLE_THP
|
||||
/* Disable transparent huge pages, they do not work properly with madvice(MADV_DONTNEED) */
|
||||
if (prctl(PR_SET_THP_DISABLE, (unsigned long) 1, (unsigned long) 0, (unsigned long) 0, (unsigned long) 0) < 0)
|
||||
die("prctl(PR_SET_THP_DISABLE) failed: %m");
|
||||
#endif
|
||||
|
||||
#ifdef HAVE_MMAP
|
||||
ASSERT_DIE(global_free_pages.cnt == 0);
|
||||
|
||||
|
Reference in New Issue
Block a user