[LTP] [PATCH v2 29/31] testcases: sysfs: Add sys_ksm01

Cyril Hrubis chrubis@suse.cz
Wed Aug 19 18:16:32 CEST 2026


A test for /sys/kernel/mm/ksm/* files.

Signed-off-by: Cyril Hrubis <chrubis@suse.cz>
---
 runtest/sysfs                                 |  1 +
 .../kernel/sysfs/kernel/mm/ksm/.gitignore     |  1 +
 testcases/kernel/sysfs/kernel/mm/ksm/Makefile |  7 ++
 .../kernel/sysfs/kernel/mm/ksm/sys_ksm01.c    | 64 +++++++++++++++++++
 4 files changed, 73 insertions(+)
 create mode 100644 testcases/kernel/sysfs/kernel/mm/ksm/.gitignore
 create mode 100644 testcases/kernel/sysfs/kernel/mm/ksm/Makefile
 create mode 100644 testcases/kernel/sysfs/kernel/mm/ksm/sys_ksm01.c

diff --git a/runtest/sysfs b/runtest/sysfs
index ec38d8b44..08358ebc6 100644
--- a/runtest/sysfs
+++ b/runtest/sysfs
@@ -24,3 +24,4 @@ sys_block_queue01 sys_block_queue01
 sys_block_size01 sys_block_size01
 sys_hugepages01 sys_hugepages01
 sys_hugepages02 sys_hugepages02
+sys_ksm01 sys_ksm01
diff --git a/testcases/kernel/sysfs/kernel/mm/ksm/.gitignore b/testcases/kernel/sysfs/kernel/mm/ksm/.gitignore
new file mode 100644
index 000000000..92fa7e2c1
--- /dev/null
+++ b/testcases/kernel/sysfs/kernel/mm/ksm/.gitignore
@@ -0,0 +1 @@
+/sys_ksm01
diff --git a/testcases/kernel/sysfs/kernel/mm/ksm/Makefile b/testcases/kernel/sysfs/kernel/mm/ksm/Makefile
new file mode 100644
index 000000000..781865569
--- /dev/null
+++ b/testcases/kernel/sysfs/kernel/mm/ksm/Makefile
@@ -0,0 +1,7 @@
+# SPDX-License-Identifier: GPL-2.0-or-later
+# Copyright (c) 2026 Cyril Hrubis <chrubis@suse.cz>
+
+top_srcdir		?= ../../../../../..
+
+include $(top_srcdir)/include/mk/testcases.mk
+include $(top_srcdir)/include/mk/generic_leaf_target.mk
diff --git a/testcases/kernel/sysfs/kernel/mm/ksm/sys_ksm01.c b/testcases/kernel/sysfs/kernel/mm/ksm/sys_ksm01.c
new file mode 100644
index 000000000..b089e2bae
--- /dev/null
+++ b/testcases/kernel/sysfs/kernel/mm/ksm/sys_ksm01.c
@@ -0,0 +1,64 @@
+// SPDX-License-Identifier: GPL-2.0-or-later
+/*
+ * Copyright (c) 2026 Cyril Hrubis <chrubis@suse.cz>
+ */
+
+/*\
+ * Sanity checks for the Kernel Samepage Merging (KSM) attributes exported
+ * under /sys/kernel/mm/ksm/.
+ *
+ * The test verifies that:
+ *
+ * - run is one of 0 (stop), 1 (run) or 2 (unmerge)
+ * - merge_across_nodes and use_zero_pages are booleans
+ * - max_page_sharing is greater than 2 and less than INT_MAX
+ * - pages_to_scan and sleep_millisecs are non-negative
+ * - the page accounting counters (pages_shared, pages_sharing, pages_unshared,
+ *   pages_volatile, stable_node_chains, stable_node_dups) are non-negative
+ *
+ * All checks skip gracefully with TCONF when a particular attribute is not
+ * present, since the set of KSM tunables differs between kernel versions.
+ */
+
+#include <limits.h>
+#include "tst_test.h"
+#include "tst_sysfs_assert.h"
+
+#define KSM "/sys/kernel/mm/ksm"
+
+static const char *const nonneg_counters[] = {
+	"pages_shared",
+	"pages_sharing",
+	"pages_unshared",
+	"pages_volatile",
+	"stable_node_chains",
+	"stable_node_dups",
+	"pages_to_scan",
+	"sleep_millisecs",
+};
+
+static void do_test(void)
+{
+	unsigned int i;
+
+	/* 0 = stop, 1 = merge, 2 = unmerge */
+	TST_SYSFS_ASSERT_RANGELL(0, 2, KSM "/run");
+
+	TST_SYSFS_ASSERT_BOOL(KSM "/merge_across_nodes");
+	TST_SYSFS_ASSERT_BOOL(KSM "/use_zero_pages");
+
+	TST_SYSFS_ASSERT_RANGELL(2, INT_MAX, KSM "/max_page_sharing");
+
+	for (i = 0; i < ARRAY_SIZE(nonneg_counters); i++) {
+		TST_SYSFS_ASSERT_RANGEUU(0, ULONG_MAX, KSM "/%s",
+					 nonneg_counters[i]);
+	}
+}
+
+static struct tst_test test = {
+	.test_all = do_test,
+	.needs_kconfigs = (const char *const[]){
+		"CONFIG_KSM=y",
+		NULL
+	},
+};
-- 
2.54.0



More information about the ltp mailing list