0
0
mirror of https://gitlab.nic.cz/labs/bird.git synced 2024-12-22 09:41: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:
Ondrej Zajicek 2023-01-17 17:13:50 +01:00
parent 54234c9eae
commit 928a1cb034
3 changed files with 14 additions and 0 deletions

View File

@ -14,3 +14,6 @@ CONFIG_DONTROUTE_UNICAST Use MSG_DONTROUTE flag for unicast packets (def for Fre
CONFIG_USE_HDRINCL Use IP_HDRINCL instead of control messages for source address on raw IP sockets.
CONFIG_RESTRICTED_PRIVILEGES Implements restricted privileges using drop_uid()
CONFIG_MADV_DONTNEED_TO_FREE To free pages, use MADV_DONTNEED instead of MADV_FREE (linux)
CONFIG_DISABLE_THP Disable transparent huge pages (linux)

View File

@ -24,6 +24,7 @@
#define CONFIG_INCLUDE_SYSPRIV_H "sysdep/linux/syspriv.h"
#define CONFIG_MADV_DONTNEED_TO_FREE
#define CONFIG_DISABLE_THP
#ifndef AF_MPLS
#define AF_MPLS 28

View File

@ -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);