xref: /aosp_15_r20/external/linux-kselftest/tools/testing/selftests/vm/run_vmtests.sh (revision 053f45be4e351dfd5e965df293cd45b779f579ee)
1#!/bin/bash
2# SPDX-License-Identifier: GPL-2.0
3#please run as root
4
5# Kselftest framework requirement - SKIP code is 4.
6ksft_skip=4
7
8mnt=./huge
9exitcode=0
10
11##get huge pagesize and freepages from /proc/meminfo
12#while read -r name size unit; do
13#	if [ "$name" = "HugePages_Free:" ]; then
14#		freepgs="$size"
15#	fi
16#	if [ "$name" = "Hugepagesize:" ]; then
17#		hpgsize_KB="$size"
18#	fi
19#done < /proc/meminfo
20#
21## Simple hugetlbfs tests have a hardcoded minimum requirement of
22## huge pages totaling 256MB (262144KB) in size.  The userfaultfd
23## hugetlb test requires a minimum of 2 * nr_cpus huge pages.  Take
24## both of these requirements into account and attempt to increase
25## number of huge pages available.
26#nr_cpus=$(nproc)
27#hpgsize_MB=$((hpgsize_KB / 1024))
28#half_ufd_size_MB=$((((nr_cpus * hpgsize_MB + 127) / 128) * 128))
29#needmem_KB=$((half_ufd_size_MB * 2 * 1024))
30#
31##set proper nr_hugepages
32#if [ -n "$freepgs" ] && [ -n "$hpgsize_KB" ]; then
33#	nr_hugepgs=$(cat /proc/sys/vm/nr_hugepages)
34#	needpgs=$((needmem_KB / hpgsize_KB))
35#	tries=2
36#	while [ "$tries" -gt 0 ] && [ "$freepgs" -lt "$needpgs" ]; do
37#		lackpgs=$((needpgs - freepgs))
38#		echo 3 > /proc/sys/vm/drop_caches
39#		if ! echo $((lackpgs + nr_hugepgs)) > /proc/sys/vm/nr_hugepages; then
40#			echo "Please run this test as root"
41#			exit $ksft_skip
42#		fi
43#		while read -r name size unit; do
44#			if [ "$name" = "HugePages_Free:" ]; then
45#				freepgs=$size
46#			fi
47#		done < /proc/meminfo
48#		tries=$((tries - 1))
49#	done
50#	if [ "$freepgs" -lt "$needpgs" ]; then
51#		printf "Not enough huge pages available (%d < %d)\n" \
52#		       "$freepgs" "$needpgs"
53#		exit 1
54#	fi
55#else
56#	echo "no hugetlbfs support in kernel?"
57#	exit 1
58#fi
59#
60##filter 64bit architectures
61#ARCH64STR="arm64 ia64 mips64 parisc64 ppc64 ppc64le riscv64 s390x sh64 sparc64 x86_64"
62#if [ -z "$ARCH" ]; then
63#	ARCH=$(uname -m 2>/dev/null | sed -e 's/aarch64.*/arm64/')
64#fi
65#VADDR64=0
66#echo "$ARCH64STR" | grep "$ARCH" && VADDR64=1
67
68# Usage: run_test [test binary] [arbitrary test arguments...]
69run_test() {
70	local title="running $*"
71	local sep=$(echo -n "$title" | tr "[:graph:][:space:]" -)
72	printf "%s\n%s\n%s\n" "$sep" "$title" "$sep"
73
74	"$@"
75	local ret=$?
76	if [ $ret -eq 0 ]; then
77		echo "[PASS]"
78	elif [ $ret -eq $ksft_skip ]; then
79		echo "[SKIP]"
80		exitcode=$ksft_skip
81	else
82		echo "[FAIL]"
83		exitcode=1
84	fi
85}
86
87#mkdir "$mnt"
88#mount -t hugetlbfs none "$mnt"
89#
90#run_test ./hugepage-mmap
91#
92#shmmax=$(cat /proc/sys/kernel/shmmax)
93#shmall=$(cat /proc/sys/kernel/shmall)
94#echo 268435456 > /proc/sys/kernel/shmmax
95#echo 4194304 > /proc/sys/kernel/shmall
96#run_test ./hugepage-shm
97#echo "$shmmax" > /proc/sys/kernel/shmmax
98#echo "$shmall" > /proc/sys/kernel/shmall
99#
100#run_test ./map_hugetlb
101#
102#run_test ./hugepage-mremap "$mnt"/huge_mremap
103#rm -f "$mnt"/huge_mremap
104#
105#run_test ./hugepage-vmemmap
106#
107#run_test ./hugetlb-madvise "$mnt"/madvise-test
108#rm -f "$mnt"/madvise-test
109#
110#echo "NOTE: The above hugetlb tests provide minimal coverage.  Use"
111#echo "      https://github.com/libhugetlbfs/libhugetlbfs.git for"
112#echo "      hugetlb regression testing."
113#
114#run_test ./map_fixed_noreplace
115#
116## get_user_pages_fast() benchmark
117#run_test ./gup_test -u
118## pin_user_pages_fast() benchmark
119#run_test ./gup_test -a
120## Dump pages 0, 19, and 4096, using pin_user_pages:
121#run_test ./gup_test -ct -F 0x1 0 19 0x1000
122#
123#uffd_mods=("" ":dev")
124#for mod in "${uffd_mods[@]}"; do
125#	run_test ./userfaultfd anon${mod} 20 16
126#	# Hugetlb tests require source and destination huge pages. Pass in half
127#	# the size ($half_ufd_size_MB), which is used for *each*.
128#	run_test ./userfaultfd hugetlb${mod} "$half_ufd_size_MB" 32
129#	run_test ./userfaultfd hugetlb_shared${mod} "$half_ufd_size_MB" 32 "$mnt"/uffd-test
130#	rm -f "$mnt"/uffd-test
131#	run_test ./userfaultfd shmem${mod} 20 16
132#done
133#
134##cleanup
135#umount "$mnt"
136#rm -rf "$mnt"
137#echo "$nr_hugepgs" > /proc/sys/vm/nr_hugepages
138#
139#run_test ./compaction_test
140
141run_test sudo -u nobody ./on-fault-limit
142
143#run_test ./map_populate
144
145run_test ./mlock-random-test
146
147run_test ./mlock2-tests
148
149run_test ./mrelease_test
150
151run_test ./mremap_test
152
153run_test ./thuge-gen
154
155#if [ $VADDR64 -ne 0 ]; then
156#	run_test ./virtual_address_range
157#
158#	# virtual address 128TB switch test
159#	run_test ./va_128TBswitch.sh
160#fi # VADDR64
161
162# vmalloc stability smoke test
163#run_test ./test_vmalloc.sh smoke
164
165run_test ./mremap_dontunmap
166
167#run_test ./test_hmm.sh smoke
168
169## MADV_POPULATE_READ and MADV_POPULATE_WRITE tests
170#run_test ./madv_populate
171#
172#run_test ./memfd_secret
173
174## KSM MADV_MERGEABLE test with 10 identical pages
175#run_test ./ksm_tests -M -p 10
176## KSM unmerge test
177#run_test ./ksm_tests -U
178## KSM test with 10 zero pages and use_zero_pages = 0
179#run_test ./ksm_tests -Z -p 10 -z 0
180## KSM test with 10 zero pages and use_zero_pages = 1
181#run_test ./ksm_tests -Z -p 10 -z 1
182## KSM test with 2 NUMA nodes and merge_across_nodes = 1
183#run_test ./ksm_tests -N -m 1
184## KSM test with 2 NUMA nodes and merge_across_nodes = 0
185#run_test ./ksm_tests -N -m 0
186
187## protection_keys tests
188#if [ -x ./protection_keys_32 ]
189#then
190#	run_test ./protection_keys_32
191#fi
192#
193#if [ -x ./protection_keys_64 ]
194#then
195#	run_test ./protection_keys_64
196#fi
197#
198#run_test ./soft-dirty
199
200exit $exitcode
201