At 2024-05-30 10:04:14, "Baolin Wang" <baolin.wang@xxxxxxxxxxxxxxxxx> wrote:
>To support the use of mTHP with anonymous shmem, add a new sysfs interface >'shmem_enabled' in the '/sys/kernel/mm/transparent_hugepage/hugepages-kB/' >directory for each mTHP to control whether shmem is enabled for that mTHP, >with a value similar to the top level 'shmem_enabled', which can be set to: >"always", "inherit (to inherit the top level setting)", "within_size", "advise", >"never", "deny", "force". These values follow the same semantics as the top >level, except the 'deny' is equivalent to 'never', and 'force' is equivalent >to 'always' to keep compatibility. > >By default, PMD-sized hugepages have enabled="inherit" and all other hugepage >sizes have enabled="never" for '/sys/kernel/mm/transparent_hugepage/hugepages-xxkB/shmem_enabled'. > >In addition, if top level value is 'force', then only PMD-sized hugepages >have enabled="inherit", otherwise configuration will be failed and vice versa. >That means now we will avoid using non-PMD sized THP to override the global >huge allocation. > >Signed-off-by: Baolin Wang <baolin.wang@xxxxxxxxxxxxxxxxx> >--- > Documentation/admin-guide/mm/transhuge.rst | 29 +++++++ > include/linux/huge_mm.h | 10 +++ > mm/huge_memory.c | 11 +-- > mm/shmem.c | 96 ++++++++++++++++++++++ > 4 files changed, 138 insertions(+), 8 deletions(-) > >diff --git a/Documentation/admin-guide/mm/transhuge.rst b/Documentation/admin-guide/mm/transhuge.rst >index d414d3f5592a..659459374032 100644 >--- a/Documentation/admin-guide/mm/transhuge.rst >+++ b/Documentation/admin-guide/mm/transhuge.rst >@@ -332,6 +332,35 @@ deny > force > Force the huge option on for all - very useful for testing; > >+Anonymous shmem can also use "multi-size THP" (mTHP) by adding a new sysfs knob >+to control mTHP allocation: /sys/kernel/mm/transparent_hugepage/hugepages-<size>kB/shmem_enabled. >+Its value for each mTHP is essentially consistent with the global setting, except >+for the addition of 'inherit' to ensure compatibility with the global settings. >+always >+ Attempt to allocate <size> huge pages every time we need a new page; >+ >+inherit >+ Inherit the top-level "shmem_enabled" value. By default, PMD-sized hugepages >+ have enabled="inherit" and all other hugepage sizes have enabled="never"; >+ >+never >+ Do not allocate <size> huge pages; >+ >+within_size >+ Only allocate <size> huge page if it will be fully within i_size. >+ Also respect fadvise()/madvise() hints; >+ >+advise >+ Only allocate <size> huge pages if requested with fadvise()/madvise(); >+ >+deny >+ Has the same semantics as 'never', now mTHP allocation policy is only >+ used for anonymous shmem and no not override tmpfs. >+ >+force >+ Has the same semantics as 'always', now mTHP allocation policy is only >+ used for anonymous shmem and no not override tmpfs.>+I just briefly reviewed the discussion about the value of hugepages-<size>kB/shmem_enabledin V1 [PATCH 5/8]. Is there a conclusion now? Maybe I left out some important information.> Need of application restart > ===========================