mirror of
https://sourceware.org/git/glibc.git
synced 2024-11-25 22:40:05 +00:00
5f6d8d97c6
Linux Transparent Huge Pages (THP) current supports three different states: 'never', 'madvise', and 'always'. The 'never' is self-explanatory and 'always' will enable THP for all anonymous pages. However, 'madvise' is still the default for some system and for such case THP will be only used if the memory range is explicity advertise by the program through a madvise(MADV_HUGEPAGE) call. To enable it a new tunable is provided, 'glibc.malloc.hugetlb', where setting to a value diffent than 0 enables the madvise call. This patch issues the madvise(MADV_HUGEPAGE) call after a successful mmap() call at sysmalloc() with sizes larger than the default huge page size. The madvise() call is disable is system does not support THP or if it has the mode set to "never" and on Linux only support one page size for THP, even if the architecture supports multiple sizes. To test is a new rule is added tests-malloc-hugetlb1, which run the addes tests with the required GLIBC_TUNABLE setting. Checked on x86_64-linux-gnu. Reviewed-by: DJ Delorie <dj@redhat.com>
43 lines
1.6 KiB
C
43 lines
1.6 KiB
C
/* Internal declarations for malloc, for use within libc.
|
|
Copyright (C) 2016-2021 Free Software Foundation, Inc.
|
|
This file is part of the GNU C Library.
|
|
|
|
The GNU C Library is free software; you can redistribute it and/or
|
|
modify it under the terms of the GNU Lesser General Public License as
|
|
published by the Free Software Foundation; either version 2.1 of the
|
|
License, or (at your option) any later version.
|
|
|
|
The GNU C Library is distributed in the hope that it will be useful,
|
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
Lesser General Public License for more details.
|
|
|
|
You should have received a copy of the GNU Lesser General Public
|
|
License along with the GNU C Library; see the file COPYING.LIB. If
|
|
not, see <https://www.gnu.org/licenses/>. */
|
|
|
|
#ifndef _MALLOC_INTERNAL_H
|
|
#define _MALLOC_INTERNAL_H
|
|
|
|
#include <malloc-machine.h>
|
|
#include <malloc-sysdep.h>
|
|
#include <malloc-size.h>
|
|
#include <malloc-hugepages.h>
|
|
|
|
/* Called in the parent process before a fork. */
|
|
void __malloc_fork_lock_parent (void) attribute_hidden;
|
|
|
|
/* Called in the parent process after a fork. */
|
|
void __malloc_fork_unlock_parent (void) attribute_hidden;
|
|
|
|
/* Called in the child process after a fork. */
|
|
void __malloc_fork_unlock_child (void) attribute_hidden;
|
|
|
|
/* Called as part of the thread shutdown sequence. */
|
|
void __malloc_arena_thread_freeres (void) attribute_hidden;
|
|
|
|
/* Activate a standard set of debugging hooks. */
|
|
void __malloc_check_init (void) attribute_hidden;
|
|
|
|
#endif /* _MALLOC_INTERNAL_H */
|