On 9/21/21 6:52 AM, Aneesh Kumar K.V wrote: > Mike Kravetz <mike.kravetz@xxxxxxxxxx> writes: > >> Describe demote and demote_size interfaces. >> >> Signed-off-by: Mike Kravetz <mike.kravetz@xxxxxxxxxx> >> --- >> Documentation/admin-guide/mm/hugetlbpage.rst | 29 ++++++++++++++++++-- >> 1 file changed, 27 insertions(+), 2 deletions(-) >> >> diff --git a/Documentation/admin-guide/mm/hugetlbpage.rst b/Documentation/admin-guide/mm/hugetlbpage.rst >> index 8abaeb144e44..902059a0257b 100644 >> --- a/Documentation/admin-guide/mm/hugetlbpage.rst >> +++ b/Documentation/admin-guide/mm/hugetlbpage.rst >> @@ -234,8 +234,12 @@ will exist, of the form:: >> >> hugepages-${size}kB >> >> -Inside each of these directories, the same set of files will exist:: >> +Inside each of these directories, the set of files contained in ``/proc`` >> +will exist. In addition, two additional interfaces for demoting huge >> +pages will exist:: >> >> + demote >> + demote_size >> nr_hugepages >> nr_hugepages_mempolicy >> nr_overcommit_hugepages >> @@ -243,7 +247,28 @@ Inside each of these directories, the same set of files will exist:: >> resv_hugepages >> surplus_hugepages >> >> -which function as described above for the default huge page-sized case. >> +The demote interfaces provide the ability to split a huge page into >> +smaller huge pages. For example, the x86 architecture supports both >> +1GB and 2MB huge pages sizes. A 1GB huge page can be split into 512 >> +2MB huge pages. The demote interfaces are: >> + >> +demote_size >> + is the size of demoted pages. When a page is demoted a corresponding >> + number of huge pages of demote_size will be created. For huge pages >> + of the smallest supported size (2MB on x86), demote_size will be the >> + system page size (PAGE_SIZE). If demote_size is the system page size >> + then demoting a page will simply free the huge page. demote_size is >> + a read only interface. > > That is an alternate interface for nr_hugepages. Will it be better to > return EINVAL on write to 'demote' file below > /sys/kernel/mm/hugepages/hugepages-2048kB ? > > Or may be not expose demote possibility within 2M hugepage directory at all? > Thanks for taking a look Aneesh! You are right. If demote_size is PAGE_SIZE, then demote is just an alternative to freeing huge pages via the nr_hugepages interface. So, why even provide such an interface? It certainly would be easy to just not display demote interfaces for the smallest huge page size. Based on other feedback, I am also making demote_size writable. It makes little sense on x86 with only two huge page sizes. However, it might be useful on other architectures with more sizes. demote_size can only be a valid huge page size. Before your comment, I was going to allow setting demote_size to PAGE_SIZE. Perhaps, that should not be allowed. Thanks for the suggestion, I think removing support for demote_size == PAGE_SIZE will make the code simpler. -- Mike Kravetz