]> www.infradead.org Git - users/jedix/linux-maple.git/commitdiff
docs: transhuge: document process level THP controls
authorUsama Arif <usamaarif642@gmail.com>
Fri, 15 Aug 2025 13:54:56 +0000 (14:54 +0100)
committerAndrew Morton <akpm@linux-foundation.org>
Fri, 12 Sep 2025 00:25:04 +0000 (17:25 -0700)
This includes the PR_SET_THP_DISABLE/PR_GET_THP_DISABLE pair of prctl
calls as well the newly introduced PR_THP_DISABLE_EXCEPT_ADVISED flag for
the PR_SET_THP_DISABLE prctl call.

Link: https://lkml.kernel.org/r/20250815135549.130506-5-usamaarif642@gmail.com
Signed-off-by: Usama Arif <usamaarif642@gmail.com>
Reviewed-by: Lorenzo Stoakes <lorenzo.stoakes@oracle.com>
Reviewed-by: Zi Yan <ziy@nvidia.com>
Cc: Arnd Bergmann <arnd@arndb.de>
Cc: Baolin Wang <baolin.wang@linux.alibaba.com>
Cc: Barry Song <baohua@kernel.org>
Cc: David Hildenbrand <david@redhat.com>
Cc: Dev Jain <dev.jain@arm.com>
Cc: Jann Horn <jannh@google.com>
Cc: Johannes Weiner <hannes@cmpxchg.org>
Cc: Jonathan Corbet <corbet@lwn.net>
Cc: Liam Howlett <liam.howlett@oracle.com>
Cc: Mariano Pache <npache@redhat.com>
Cc: Michal Hocko <mhocko@suse.com>
Cc: Mike Rapoport <rppt@kernel.org>
Cc: Rik van Riel <riel@surriel.com>
Cc: Ryan Roberts <ryan.roberts@arm.com>
Cc: SeongJae Park <sj@kernel.org>
Cc: Shakeel Butt <shakeel.butt@linux.dev>
Cc: Suren Baghdasaryan <surenb@google.com>
Cc: Vlastimil Babka <vbabka@suse.cz>
Cc: Yafang <laoar.shao@gmail.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Documentation/admin-guide/mm/transhuge.rst

index 370fba1134606297466b3f80a1138b79d1b49d43..a16a04841b960ed875a33b0fe2f7a8748fa60243 100644 (file)
@@ -225,6 +225,42 @@ to "always" or "madvise"), and it'll be automatically shutdown when
 PMD-sized THP is disabled (when both the per-size anon control and the
 top-level control are "never")
 
+process THP controls
+--------------------
+
+A process can control its own THP behaviour using the ``PR_SET_THP_DISABLE``
+and ``PR_GET_THP_DISABLE`` pair of prctl(2) calls. The THP behaviour set using
+``PR_SET_THP_DISABLE`` is inherited across fork(2) and execve(2). These calls
+support the following arguments::
+
+       prctl(PR_SET_THP_DISABLE, 1, 0, 0, 0):
+               This will disable THPs completely for the process, irrespective
+               of global THP controls or madvise(..., MADV_COLLAPSE) being used.
+
+       prctl(PR_SET_THP_DISABLE, 1, PR_THP_DISABLE_EXCEPT_ADVISED, 0, 0):
+               This will disable THPs for the process except when the usage of THPs is
+               advised. Consequently, THPs will only be used when:
+               - Global THP controls are set to "always" or "madvise" and
+                 madvise(..., MADV_HUGEPAGE) or madvise(..., MADV_COLLAPSE) is used.
+               - Global THP controls are set to "never" and madvise(..., MADV_COLLAPSE)
+                 is used. This is the same behavior as if THPs would not be disabled on
+                 a process level.
+               Note that MADV_COLLAPSE is currently always rejected if
+               madvise(..., MADV_NOHUGEPAGE) is set on an area.
+
+       prctl(PR_SET_THP_DISABLE, 0, 0, 0, 0):
+               This will re-enable THPs for the process, as if they were never disabled.
+               Whether THPs will actually be used depends on global THP controls and
+               madvise() calls.
+
+       prctl(PR_GET_THP_DISABLE, 0, 0, 0, 0):
+               This returns a value whose bits indicate how THP-disable is configured:
+               Bits
+                1 0  Value  Description
+               |0|0|   0    No THP-disable behaviour specified.
+               |0|1|   1    THP is entirely disabled for this process.
+               |1|1|   3    THP-except-advised mode is set for this process.
+
 Khugepaged controls
 -------------------