• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 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#		echo $(( $lackpgs + $nr_hugepgs )) > /proc/sys/vm/nr_hugepages
40#		if [ $? -ne 0 ]; then
41#			echo "Please run this test as root"
42#			exit $ksft_skip
43#		fi
44#		while read name size unit; do
45#			if [ "$name" = "HugePages_Free:" ]; then
46#				freepgs=$size
47#			fi
48#		done < /proc/meminfo
49#		tries=$((tries - 1))
50#	done
51#	if [ $freepgs -lt $needpgs ]; then
52#		printf "Not enough huge pages available (%d < %d)\n" \
53#		       $freepgs $needpgs
54#		exit 1
55#	fi
56#else
57#	echo "no hugetlbfs support in kernel?"
58#	exit 1
59#fi
60#
61##filter 64bit architectures
62#ARCH64STR="arm64 ia64 mips64 parisc64 ppc64 ppc64le riscv64 s390x sh64 sparc64 x86_64"
63#if [ -z $ARCH ]; then
64#  ARCH=`uname -m 2>/dev/null | sed -e 's/aarch64.*/arm64/'`
65#fi
66#VADDR64=0
67#echo "$ARCH64STR" | grep $ARCH && VADDR64=1
68#
69#mkdir $mnt
70#mount -t hugetlbfs none $mnt
71#
72#echo "---------------------"
73#echo "running hugepage-mmap"
74#echo "---------------------"
75#./hugepage-mmap
76#if [ $? -ne 0 ]; then
77#	echo "[FAIL]"
78#	exitcode=1
79#else
80#	echo "[PASS]"
81#fi
82#
83#shmmax=`cat /proc/sys/kernel/shmmax`
84#shmall=`cat /proc/sys/kernel/shmall`
85#echo 268435456 > /proc/sys/kernel/shmmax
86#echo 4194304 > /proc/sys/kernel/shmall
87#echo "--------------------"
88#echo "running hugepage-shm"
89#echo "--------------------"
90#./hugepage-shm
91#if [ $? -ne 0 ]; then
92#	echo "[FAIL]"
93#	exitcode=1
94#else
95#	echo "[PASS]"
96#fi
97#echo $shmmax > /proc/sys/kernel/shmmax
98#echo $shmall > /proc/sys/kernel/shmall
99#
100#echo "-------------------"
101#echo "running map_hugetlb"
102#echo "-------------------"
103#./map_hugetlb
104#if [ $? -ne 0 ]; then
105#	echo "[FAIL]"
106#	exitcode=1
107#else
108#	echo "[PASS]"
109#fi
110#
111#echo "-----------------------"
112#echo "running hugepage-mremap"
113#echo "-----------------------"
114#./hugepage-mremap $mnt/huge_mremap
115#if [ $? -ne 0 ]; then
116#	echo "[FAIL]"
117#	exitcode=1
118#else
119#	echo "[PASS]"
120#fi
121#rm -f $mnt/huge_mremap
122#
123#echo "NOTE: The above hugetlb tests provide minimal coverage.  Use"
124#echo "      https://github.com/libhugetlbfs/libhugetlbfs.git for"
125#echo "      hugetlb regression testing."
126#
127#echo "---------------------------"
128#echo "running map_fixed_noreplace"
129#echo "---------------------------"
130#./map_fixed_noreplace
131#if [ $? -ne 0 ]; then
132#	echo "[FAIL]"
133#	exitcode=1
134#else
135#	echo "[PASS]"
136#fi
137#
138#echo "------------------------------------------------------"
139#echo "running: gup_test -u # get_user_pages_fast() benchmark"
140#echo "------------------------------------------------------"
141#./gup_test -u
142#if [ $? -ne 0 ]; then
143#	echo "[FAIL]"
144#	exitcode=1
145#else
146#	echo "[PASS]"
147#fi
148#
149#echo "------------------------------------------------------"
150#echo "running: gup_test -a # pin_user_pages_fast() benchmark"
151#echo "------------------------------------------------------"
152#./gup_test -a
153#if [ $? -ne 0 ]; then
154#	echo "[FAIL]"
155#	exitcode=1
156#else
157#	echo "[PASS]"
158#fi
159#
160#echo "------------------------------------------------------------"
161#echo "# Dump pages 0, 19, and 4096, using pin_user_pages:"
162#echo "running: gup_test -ct -F 0x1 0 19 0x1000 # dump_page() test"
163#echo "------------------------------------------------------------"
164#./gup_test -ct -F 0x1 0 19 0x1000
165#if [ $? -ne 0 ]; then
166#	echo "[FAIL]"
167#	exitcode=1
168#else
169#	echo "[PASS]"
170#fi
171#
172#echo "-------------------"
173#echo "running userfaultfd"
174#echo "-------------------"
175#./userfaultfd anon 20 16
176#if [ $? -ne 0 ]; then
177#	echo "[FAIL]"
178#	exitcode=1
179#else
180#	echo "[PASS]"
181#fi
182#
183#echo "---------------------------"
184#echo "running userfaultfd_hugetlb"
185#echo "---------------------------"
186## Test requires source and destination huge pages.  Size of source
187## (half_ufd_size_MB) is passed as argument to test.
188#./userfaultfd hugetlb $half_ufd_size_MB 32 $mnt/ufd_test_file
189#if [ $? -ne 0 ]; then
190#	echo "[FAIL]"
191#	exitcode=1
192#else
193#	echo "[PASS]"
194#fi
195#rm -f $mnt/ufd_test_file
196#
197#echo "-------------------------"
198#echo "running userfaultfd_shmem"
199#echo "-------------------------"
200#./userfaultfd shmem 20 16
201#if [ $? -ne 0 ]; then
202#	echo "[FAIL]"
203#	exitcode=1
204#else
205#	echo "[PASS]"
206#fi
207#
208##cleanup
209#umount $mnt
210#rm -rf $mnt
211#echo $nr_hugepgs > /proc/sys/vm/nr_hugepages
212#
213#echo "-----------------------"
214#echo "running compaction_test"
215#echo "-----------------------"
216#./compaction_test
217#if [ $? -ne 0 ]; then
218#	echo "[FAIL]"
219#	exitcode=1
220#else
221#	echo "[PASS]"
222#fi
223
224echo "----------------------"
225echo "running on-fault-limit"
226echo "----------------------"
227sudo -u nobody ./on-fault-limit
228if [ $? -ne 0 ]; then
229	echo "[FAIL]"
230	exitcode=1
231else
232	echo "[PASS]"
233fi
234
235echo "--------------------"
236echo "running map_populate"
237echo "--------------------"
238./map_populate
239if [ $? -ne 0 ]; then
240	echo "[FAIL]"
241	exitcode=1
242else
243	echo "[PASS]"
244fi
245
246echo "-------------------------"
247echo "running mlock-random-test"
248echo "-------------------------"
249./mlock-random-test
250if [ $? -ne 0 ]; then
251	echo "[FAIL]"
252	exitcode=1
253else
254	echo "[PASS]"
255fi
256
257echo "--------------------"
258echo "running mlock2-tests"
259echo "--------------------"
260./mlock2-tests
261if [ $? -ne 0 ]; then
262	echo "[FAIL]"
263	exitcode=1
264else
265	echo "[PASS]"
266fi
267
268echo "-------------------"
269echo "running mremap_test"
270echo "-------------------"
271./mremap_test
272if [ $? -ne 0 ]; then
273	echo "[FAIL]"
274	exitcode=1
275else
276	echo "[PASS]"
277fi
278
279echo "-----------------"
280echo "running thuge-gen"
281echo "-----------------"
282./thuge-gen
283if [ $? -ne 0 ]; then
284	echo "[FAIL]"
285	exitcode=1
286else
287	echo "[PASS]"
288fi
289
290if [ $VADDR64 -ne 0 ]; then
291echo "-----------------------------"
292echo "running virtual_address_range"
293echo "-----------------------------"
294./virtual_address_range
295if [ $? -ne 0 ]; then
296	echo "[FAIL]"
297	exitcode=1
298else
299	echo "[PASS]"
300fi
301
302echo "-----------------------------"
303echo "running virtual address 128TB switch test"
304echo "-----------------------------"
305./va_128TBswitch
306if [ $? -ne 0 ]; then
307    echo "[FAIL]"
308    exitcode=1
309else
310    echo "[PASS]"
311fi
312fi # VADDR64
313
314echo "------------------------------------"
315echo "running vmalloc stability smoke test"
316echo "------------------------------------"
317./test_vmalloc.sh smoke
318ret_val=$?
319
320if [ $ret_val -eq 0 ]; then
321	echo "[PASS]"
322elif [ $ret_val -eq $ksft_skip ]; then
323	 echo "[SKIP]"
324	 exitcode=$ksft_skip
325else
326	echo "[FAIL]"
327	exitcode=1
328fi
329
330echo "------------------------------------"
331echo "running MREMAP_DONTUNMAP smoke test"
332echo "------------------------------------"
333./mremap_dontunmap
334ret_val=$?
335
336if [ $ret_val -eq 0 ]; then
337	echo "[PASS]"
338elif [ $ret_val -eq $ksft_skip ]; then
339	 echo "[SKIP]"
340	 exitcode=$ksft_skip
341else
342	echo "[FAIL]"
343	exitcode=1
344fi
345
346echo "running HMM smoke test"
347echo "------------------------------------"
348./test_hmm.sh smoke
349ret_val=$?
350
351if [ $ret_val -eq 0 ]; then
352	echo "[PASS]"
353elif [ $ret_val -eq $ksft_skip ]; then
354	echo "[SKIP]"
355	exitcode=$ksft_skip
356else
357	echo "[FAIL]"
358	exitcode=1
359fi
360
361echo "--------------------------------------------------------"
362echo "running MADV_POPULATE_READ and MADV_POPULATE_WRITE tests"
363echo "--------------------------------------------------------"
364./madv_populate
365ret_val=$?
366
367if [ $ret_val -eq 0 ]; then
368	echo "[PASS]"
369elif [ $ret_val -eq $ksft_skip ]; then
370	echo "[SKIP]"
371	exitcode=$ksft_skip
372else
373	echo "[FAIL]"
374	exitcode=1
375fi
376
377echo "running memfd_secret test"
378echo "------------------------------------"
379./memfd_secret
380ret_val=$?
381
382if [ $ret_val -eq 0 ]; then
383	echo "[PASS]"
384elif [ $ret_val -eq $ksft_skip ]; then
385	echo "[SKIP]"
386	exitcode=$ksft_skip
387else
388	echo "[FAIL]"
389	exitcode=1
390fi
391
392echo "-------------------------------------------------------"
393echo "running KSM MADV_MERGEABLE test with 10 identical pages"
394echo "-------------------------------------------------------"
395./ksm_tests -M -p 10
396ret_val=$?
397
398if [ $ret_val -eq 0 ]; then
399	echo "[PASS]"
400elif [ $ret_val -eq $ksft_skip ]; then
401	 echo "[SKIP]"
402	 exitcode=$ksft_skip
403else
404	echo "[FAIL]"
405	exitcode=1
406fi
407
408echo "------------------------"
409echo "running KSM unmerge test"
410echo "------------------------"
411./ksm_tests -U
412ret_val=$?
413
414if [ $ret_val -eq 0 ]; then
415	echo "[PASS]"
416elif [ $ret_val -eq $ksft_skip ]; then
417	 echo "[SKIP]"
418	 exitcode=$ksft_skip
419else
420	echo "[FAIL]"
421	exitcode=1
422fi
423
424echo "----------------------------------------------------------"
425echo "running KSM test with 10 zero pages and use_zero_pages = 0"
426echo "----------------------------------------------------------"
427./ksm_tests -Z -p 10 -z 0
428ret_val=$?
429
430if [ $ret_val -eq 0 ]; then
431	echo "[PASS]"
432elif [ $ret_val -eq $ksft_skip ]; then
433	 echo "[SKIP]"
434	 exitcode=$ksft_skip
435else
436	echo "[FAIL]"
437	exitcode=1
438fi
439
440echo "----------------------------------------------------------"
441echo "running KSM test with 10 zero pages and use_zero_pages = 1"
442echo "----------------------------------------------------------"
443./ksm_tests -Z -p 10 -z 1
444ret_val=$?
445
446if [ $ret_val -eq 0 ]; then
447	echo "[PASS]"
448elif [ $ret_val -eq $ksft_skip ]; then
449	 echo "[SKIP]"
450	 exitcode=$ksft_skip
451else
452	echo "[FAIL]"
453	exitcode=1
454fi
455
456echo "-------------------------------------------------------------"
457echo "running KSM test with 2 NUMA nodes and merge_across_nodes = 1"
458echo "-------------------------------------------------------------"
459./ksm_tests -N -m 1
460ret_val=$?
461
462if [ $ret_val -eq 0 ]; then
463	echo "[PASS]"
464elif [ $ret_val -eq $ksft_skip ]; then
465	 echo "[SKIP]"
466	 exitcode=$ksft_skip
467else
468	echo "[FAIL]"
469	exitcode=1
470fi
471
472echo "-------------------------------------------------------------"
473echo "running KSM test with 2 NUMA nodes and merge_across_nodes = 0"
474echo "-------------------------------------------------------------"
475./ksm_tests -N -m 0
476ret_val=$?
477
478if [ $ret_val -eq 0 ]; then
479	echo "[PASS]"
480elif [ $ret_val -eq $ksft_skip ]; then
481	 echo "[SKIP]"
482	 exitcode=$ksft_skip
483else
484	echo "[FAIL]"
485	exitcode=1
486fi
487
488exit $exitcode
489
490exit $exitcode
491