diff mbox series

[2/2] hugetlb: compacting memory to reduce fragmental pages

Message ID 20230529061135.24261-2-liwang@redhat.com
State Accepted
Headers show
Series [1/2] hugemmap32: release mem caches and prepare for hugepage | expand

Commit Message

Li Wang May 29, 2023, 6:11 a.m. UTC
Kernel memory compaction is a process that helps to reduce fragmentation
and optimize memory allocation by compacting memory pages.

  `echo 1 > /proc/sys/vm/compact_memory`

When 1 is written to the file, all zones are compacted such that free
memory is available in contiguous blocks where possible.

This can be important for example in the allocation of huge pages although
processes will also directly compact memory as required.

As this introduced since v2.6.35, we could safely use it via
SAFE_FILE_PRINT() in LTP lib:

  commit 76ab0f530e4a01d4dc20cdc1d5e87753c579dc18
  Author: Mel Gorman <mel@csn.ul.ie>
  Date:   Mon May 24 14:32:28 2010 -0700

      mm: compaction: add /proc trigger for memory compaction

Signed-off-by: Li Wang <liwang@redhat.com>
---
 lib/tst_hugepage.c                                 | 1 +
 testcases/kernel/mem/hugetlb/hugemmap/hugemmap32.c | 2 ++
 2 files changed, 3 insertions(+)
diff mbox series

Patch

diff --git a/lib/tst_hugepage.c b/lib/tst_hugepage.c
index 728a8c3ec..d2e70a955 100644
--- a/lib/tst_hugepage.c
+++ b/lib/tst_hugepage.c
@@ -47,6 +47,7 @@  unsigned long tst_reserve_hugepages(struct tst_hugepage *hp)
 	}
 
 	SAFE_FILE_PRINTF("/proc/sys/vm/drop_caches", "3");
+	SAFE_FILE_PRINTF("/proc/sys/vm/compact_memory", "1");
 	if (hp->policy == TST_NEEDS) {
 		tst_hugepages += SAFE_READ_MEMINFO("HugePages_Total:");
 		goto set_hugepages;
diff --git a/testcases/kernel/mem/hugetlb/hugemmap/hugemmap32.c b/testcases/kernel/mem/hugetlb/hugemmap/hugemmap32.c
index 76b790a95..d27e5b8b2 100644
--- a/testcases/kernel/mem/hugetlb/hugemmap/hugemmap32.c
+++ b/testcases/kernel/mem/hugetlb/hugemmap/hugemmap32.c
@@ -65,6 +65,8 @@  static void setup(void)
 	SAFE_CLOSEDIR(dir);
 
 	SAFE_FILE_PRINTF("/proc/sys/vm/drop_caches", "3");
+	SAFE_FILE_PRINTF("/proc/sys/vm/compact_memory", "1");
+
 	if (tst_available_mem() < (long long)hpage_size) {
 		g_hpage_path[0] = '\0';
 		tst_brk(TCONF, "No enough memory for gigantic hugepage reservation");