[LTP] [PATCH v2 29/31] testcases: sysfs: Add sys_ksm01
Cyril Hrubis <[email protected]>
| Newsgroups | it.linux.lists.ltp |
|---|---|
| Message-ID | <[email protected]> |
A test for /sys/kernel/mm/ksm/* files. Signed-off-by: Cyril Hrubis <[email protected]> --- 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 <[email protected]> + +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 <[email protected]> + */ + +/*\ + * 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 -- Mailing list info: https://lists.linux.it/listinfo/ltp