]> git.ipfire.org Git - people/ms/linux.git/commitdiff
mm: hugetlb_vmemmap: introduce the name HVO
authorMuchun Song <songmuchun@bytedance.com>
Tue, 28 Jun 2022 09:22:30 +0000 (17:22 +0800)
committerAndrew Morton <akpm@linux-foundation.org>
Tue, 9 Aug 2022 01:06:42 +0000 (18:06 -0700)
It it inconvenient to mention the feature of optimizing vmemmap pages
associated with HugeTLB pages when communicating with others since there
is no specific or abbreviated name for it when it is first introduced.
Let us give it a name HVO (HugeTLB Vmemmap Optimization) from now.

This commit also updates the document about "hugetlb_free_vmemmap" by the
way discussed in thread [1].

Link: https://lore.kernel.org/all/21aae898-d54d-cc4b-a11f-1bb7fddcfffa@redhat.com/
Link: https://lkml.kernel.org/r/20220628092235.91270-4-songmuchun@bytedance.com
Signed-off-by: Muchun Song <songmuchun@bytedance.com>
Reviewed-by: Oscar Salvador <osalvador@suse.de>
Reviewed-by: Mike Kravetz <mike.kravetz@oracle.com>
Cc: Anshuman Khandual <anshuman.khandual@arm.com>
Cc: Catalin Marinas <catalin.marinas@arm.com>
Cc: David Hildenbrand <david@redhat.com>
Cc: Jonathan Corbet <corbet@lwn.net>
Cc: Will Deacon <will@kernel.org>
Cc: Xiongchun Duan <duanxiongchun@bytedance.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Documentation/admin-guide/kernel-parameters.txt
Documentation/admin-guide/mm/hugetlbpage.rst
Documentation/admin-guide/mm/memory-hotplug.rst
Documentation/admin-guide/sysctl/vm.rst
Documentation/mm/vmemmap_dedup.rst
fs/Kconfig
include/linux/page-flags.h
mm/hugetlb_vmemmap.c
mm/hugetlb_vmemmap.h

index bab2b0bf5988dfc8dfce798f6ea3086e82eed75e..8c06271835b03da46e8d57ce665d03420e1e0af5 100644 (file)
        hugetlb_free_vmemmap=
                        [KNL] Reguires CONFIG_HUGETLB_PAGE_OPTIMIZE_VMEMMAP
                        enabled.
+                       Control if HugeTLB Vmemmap Optimization (HVO) is enabled.
                        Allows heavy hugetlb users to free up some more
                        memory (7 * PAGE_SIZE for each 2MB hugetlb page).
-                       Format: { [oO][Nn]/Y/y/1 | [oO][Ff]/N/n/0 (default) }
+                       Format: { on | off (default) }
 
-                       [oO][Nn]/Y/y/1: enable the feature
-                       [oO][Ff]/N/n/0: disable the feature
+                       on: enable HVO
+                       off: disable HVO
 
                        Built with CONFIG_HUGETLB_PAGE_OPTIMIZE_VMEMMAP_DEFAULT_ON=y,
                        the default is on.
index a90330d0a837375a1df4755bdb1bd7e9d37e470e..8e2727dc18d4d3a458e1d931abe889e46dd7ca8c 100644 (file)
@@ -164,8 +164,8 @@ default_hugepagesz
        will all result in 256 2M huge pages being allocated.  Valid default
        huge page size is architecture dependent.
 hugetlb_free_vmemmap
-       When CONFIG_HUGETLB_PAGE_OPTIMIZE_VMEMMAP is set, this enables optimizing
-       unused vmemmap pages associated with each HugeTLB page.
+       When CONFIG_HUGETLB_PAGE_OPTIMIZE_VMEMMAP is set, this enables HugeTLB
+       Vmemmap Optimization (HVO).
 
 When multiple huge page sizes are supported, ``/proc/sys/vm/nr_hugepages``
 indicates the current number of pre-allocated huge pages of the default size.
index 0f56ecd8ac054380bbea36dd6789cbe8eed127d9..a3c9e8ad8fa0d83f0c30372958539c724aa0d86f 100644 (file)
@@ -653,8 +653,8 @@ block might fail:
 - Concurrent activity that operates on the same physical memory area, such as
   allocating gigantic pages, can result in temporary offlining failures.
 
-- Out of memory when dissolving huge pages, especially when freeing unused
-  vmemmap pages associated with each hugetlb page is enabled.
+- Out of memory when dissolving huge pages, especially when HugeTLB Vmemmap
+  Optimization (HVO) is enabled.
 
   Offlining code may be able to migrate huge page contents, but may not be able
   to dissolve the source huge page because it fails allocating (unmovable) pages
index f74f722ad7028d8ab47a3d37b7e4a00617f7b59d..9b833e439f097520fcd31f11960f43145c3bc4c2 100644 (file)
@@ -569,8 +569,7 @@ This knob is not available when the size of 'struct page' (a structure defined
 in include/linux/mm_types.h) is not power of two (an unusual system config could
 result in this).
 
-Enable (set to 1) or disable (set to 0) the feature of optimizing vmemmap pages
-associated with each HugeTLB page.
+Enable (set to 1) or disable (set to 0) HugeTLB Vmemmap Optimization (HVO).
 
 Once enabled, the vmemmap pages of subsequent allocation of HugeTLB pages from
 buddy allocator will be optimized (7 pages per 2MB HugeTLB page and 4095 pages
index c9c495f62d123b8b103e841003e2e04226d2511f..7d7a161aa364676af233e516fe5ddb7d19f46202 100644 (file)
@@ -7,6 +7,8 @@ A vmemmap diet for HugeTLB and Device DAX
 HugeTLB
 =======
 
+This section is to explain how HugeTLB Vmemmap Optimization (HVO) works.
+
 The struct page structures (page structs) are used to describe a physical
 page frame. By default, there is a one-to-one mapping from a page frame to
 it's corresponding page struct.
index 5976eb33535ff0ab0fa5ce6a580e20c93a4285ba..a547307c1ae824a9283fb1f79c721585fa967323 100644 (file)
@@ -247,8 +247,7 @@ config HUGETLB_PAGE
 
 #
 # Select this config option from the architecture Kconfig, if it is preferred
-# to enable the feature of minimizing overhead of struct page associated with
-# each HugeTLB page.
+# to enable the feature of HugeTLB Vmemmap Optimization (HVO).
 #
 config ARCH_WANT_HUGETLB_PAGE_OPTIMIZE_VMEMMAP
        bool
@@ -259,14 +258,13 @@ config HUGETLB_PAGE_OPTIMIZE_VMEMMAP
        depends on SPARSEMEM_VMEMMAP
 
 config HUGETLB_PAGE_OPTIMIZE_VMEMMAP_DEFAULT_ON
-       bool "Default optimizing vmemmap pages of HugeTLB to on"
+       bool "HugeTLB Vmemmap Optimization (HVO) defaults to on"
        default n
        depends on HUGETLB_PAGE_OPTIMIZE_VMEMMAP
        help
-         When using HUGETLB_PAGE_OPTIMIZE_VMEMMAP, the optimizing unused vmemmap
-         pages associated with each HugeTLB page is default off. Say Y here
-         to enable optimizing vmemmap pages of HugeTLB by default. It can then
-         be disabled on the command line via hugetlb_free_vmemmap=off.
+         The HugeTLB VmemmapvOptimization (HVO) defaults to off. Say Y here to
+         enable HVO by default. It can be disabled via hugetlb_free_vmemmap=off
+         (boot command line) or hugetlb_optimize_vmemmap (sysctl).
 
 config MEMFD_CREATE
        def_bool TMPFS || HUGETLBFS
index b44cc24d7496f0828877ac1d6f350f040bbddbb8..78ed46ae6ee542375ef31aeff13f7af4de5a0d29 100644 (file)
@@ -208,8 +208,7 @@ enum pageflags {
 DECLARE_STATIC_KEY_FALSE(hugetlb_optimize_vmemmap_key);
 
 /*
- * If the feature of optimizing vmemmap pages associated with each HugeTLB
- * page is enabled, the head vmemmap page frame is reused and all of the tail
+ * If HVO is enabled, the head vmemmap page frame is reused and all of the tail
  * vmemmap addresses map to the head vmemmap page frame (furture details can
  * refer to the figure at the head of the mm/hugetlb_vmemmap.c).  In other
  * words, there are more than one page struct with PG_head associated with each
index e5b83a25c2fa8afa6b5fca1d290f50a6d64d0f19..bcafd9d7639cf239589fd73baf08cdddc802050a 100644 (file)
@@ -1,8 +1,8 @@
 // SPDX-License-Identifier: GPL-2.0
 /*
- * Optimize vmemmap pages associated with HugeTLB
+ * HugeTLB Vmemmap Optimization (HVO)
  *
- * Copyright (c) 2020, Bytedance. All rights reserved.
+ * Copyright (c) 2020, ByteDance. All rights reserved.
  *
  *     Author: Muchun Song <songmuchun@bytedance.com>
  *
@@ -156,8 +156,8 @@ void __init hugetlb_vmemmap_init(struct hstate *h)
 
        /*
         * There are only (RESERVE_VMEMMAP_SIZE / sizeof(struct page)) struct
-        * page structs that can be used when CONFIG_HUGETLB_PAGE_OPTIMIZE_VMEMMAP,
-        * so add a BUILD_BUG_ON to catch invalid usage of the tail struct page.
+        * page structs that can be used when HVO is enabled, add a BUILD_BUG_ON
+        * to catch invalid usage of the tail page structs.
         */
        BUILD_BUG_ON(__NR_USED_SUBPAGE >=
                     RESERVE_VMEMMAP_SIZE / sizeof(struct page));
index 109b0a53b6fe9b6e79694ab7830afa0cd2e03343..ba66fadad9fcacaf1f64584f7d334e89cedaf614 100644 (file)
@@ -1,8 +1,8 @@
 // SPDX-License-Identifier: GPL-2.0
 /*
- * Optimize vmemmap pages associated with HugeTLB
+ * HugeTLB Vmemmap Optimization (HVO)
  *
- * Copyright (c) 2020, Bytedance. All rights reserved.
+ * Copyright (c) 2020, ByteDance. All rights reserved.
  *
  *     Author: Muchun Song <songmuchun@bytedance.com>
  */