Commit 7de85491 authored by Usama Arif's avatar Usama Arif Committed by Andrew Morton
Browse files

docs: transhuge: document process level THP controls

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: default avatarUsama Arif <usamaarif642@gmail.com>
Reviewed-by: default avatarLorenzo Stoakes <lorenzo.stoakes@oracle.com>
Reviewed-by: default avatarZi 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: default avatarAndrew Morton <akpm@linux-foundation.org>
parent 8cdc4d27
Loading
Loading
Loading
Loading
+36 −0
Original line number Diff line number Diff line
@@ -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
-------------------