2 # SPDX-License-Identifier: GPL-2.0
5 # Kselftest framework requirement - SKIP code is 4.
11 #get huge pagesize and freepages from /proc/meminfo
12 while read name size unit; do
13 if [ "$name" = "HugePages_Free:" ]; then
16 if [ "$name" = "Hugepagesize:" ]; then
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.
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))
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))
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
41 echo "Please run this test as root"
44 while read name size unit; do
45 if [ "$name" = "HugePages_Free:" ]; then
51 if [ $freepgs -lt $needpgs ]; then
52 printf "Not enough huge pages available (%d < %d)\n" \
57 echo "no hugetlbfs support in kernel?"
61 #filter 64bit architectures
62 ARCH64STR="arm64 ia64 mips64 parisc64 ppc64 ppc64le riscv64 s390x sh64 sparc64 x86_64"
64 ARCH=`uname -m 2>/dev/null | sed -e 's/aarch64.*/arm64/'`
67 echo "$ARCH64STR" | grep $ARCH && VADDR64=1
70 mount -t hugetlbfs none $mnt
72 echo "---------------------"
73 echo "running hugepage-mmap"
74 echo "---------------------"
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 "--------------------"
97 echo $shmmax > /proc/sys/kernel/shmmax
98 echo $shmall > /proc/sys/kernel/shmall
100 echo "-------------------"
101 echo "running map_hugetlb"
102 echo "-------------------"
104 if [ $? -ne 0 ]; then
111 echo "-----------------------"
112 echo "running hugepage-mremap"
113 echo "-----------------------"
114 ./hugepage-mremap $mnt/huge_mremap
115 if [ $? -ne 0 ]; then
121 rm -f $mnt/huge_mremap
123 echo "------------------------"
124 echo "running hugepage-vmemmap"
125 echo "------------------------"
127 if [ $? -ne 0 ]; then
134 echo "-----------------------"
135 echo "running hugetlb-madvise"
136 echo "-----------------------"
137 ./hugetlb-madvise $mnt/madvise-test
138 if [ $? -ne 0 ]; then
144 rm -f $mnt/madvise-test
146 echo "NOTE: The above hugetlb tests provide minimal coverage. Use"
147 echo " https://github.com/libhugetlbfs/libhugetlbfs.git for"
148 echo " hugetlb regression testing."
150 echo "---------------------------"
151 echo "running map_fixed_noreplace"
152 echo "---------------------------"
153 ./map_fixed_noreplace
154 if [ $? -ne 0 ]; then
161 echo "------------------------------------------------------"
162 echo "running: gup_test -u # get_user_pages_fast() benchmark"
163 echo "------------------------------------------------------"
165 if [ $? -ne 0 ]; then
172 echo "------------------------------------------------------"
173 echo "running: gup_test -a # pin_user_pages_fast() benchmark"
174 echo "------------------------------------------------------"
176 if [ $? -ne 0 ]; then
183 echo "------------------------------------------------------------"
184 echo "# Dump pages 0, 19, and 4096, using pin_user_pages:"
185 echo "running: gup_test -ct -F 0x1 0 19 0x1000 # dump_page() test"
186 echo "------------------------------------------------------------"
187 ./gup_test -ct -F 0x1 0 19 0x1000
188 if [ $? -ne 0 ]; then
195 echo "-------------------"
196 echo "running userfaultfd"
197 echo "-------------------"
198 ./userfaultfd anon 20 16
199 if [ $? -ne 0 ]; then
206 echo "---------------------------"
207 echo "running userfaultfd_hugetlb"
208 echo "---------------------------"
209 # Test requires source and destination huge pages. Size of source
210 # (half_ufd_size_MB) is passed as argument to test.
211 ./userfaultfd hugetlb $half_ufd_size_MB 32
212 if [ $? -ne 0 ]; then
219 echo "-------------------------"
220 echo "running userfaultfd_shmem"
221 echo "-------------------------"
222 ./userfaultfd shmem 20 16
223 if [ $? -ne 0 ]; then
233 echo $nr_hugepgs > /proc/sys/vm/nr_hugepages
235 echo "-----------------------"
236 echo "running compaction_test"
237 echo "-----------------------"
239 if [ $? -ne 0 ]; then
246 echo "----------------------"
247 echo "running on-fault-limit"
248 echo "----------------------"
249 sudo -u nobody ./on-fault-limit
250 if [ $? -ne 0 ]; then
257 echo "--------------------"
258 echo "running map_populate"
259 echo "--------------------"
261 if [ $? -ne 0 ]; then
268 echo "-------------------------"
269 echo "running mlock-random-test"
270 echo "-------------------------"
272 if [ $? -ne 0 ]; then
279 echo "--------------------"
280 echo "running mlock2-tests"
281 echo "--------------------"
283 if [ $? -ne 0 ]; then
290 echo "-------------------"
291 echo "running mremap_test"
292 echo "-------------------"
294 if [ $? -ne 0 ]; then
301 echo "-----------------"
302 echo "running thuge-gen"
303 echo "-----------------"
305 if [ $? -ne 0 ]; then
312 if [ $VADDR64 -ne 0 ]; then
313 echo "-----------------------------"
314 echo "running virtual_address_range"
315 echo "-----------------------------"
316 ./virtual_address_range
317 if [ $? -ne 0 ]; then
324 echo "-----------------------------"
325 echo "running virtual address 128TB switch test"
326 echo "-----------------------------"
328 if [ $? -ne 0 ]; then
336 echo "------------------------------------"
337 echo "running vmalloc stability smoke test"
338 echo "------------------------------------"
339 ./test_vmalloc.sh smoke
342 if [ $ret_val -eq 0 ]; then
344 elif [ $ret_val -eq $ksft_skip ]; then
352 echo "------------------------------------"
353 echo "running MREMAP_DONTUNMAP smoke test"
354 echo "------------------------------------"
358 if [ $ret_val -eq 0 ]; then
360 elif [ $ret_val -eq $ksft_skip ]; then
368 echo "running HMM smoke test"
369 echo "------------------------------------"
373 if [ $ret_val -eq 0 ]; then
375 elif [ $ret_val -eq $ksft_skip ]; then
383 echo "--------------------------------------------------------"
384 echo "running MADV_POPULATE_READ and MADV_POPULATE_WRITE tests"
385 echo "--------------------------------------------------------"
389 if [ $ret_val -eq 0 ]; then
391 elif [ $ret_val -eq $ksft_skip ]; then
399 echo "running memfd_secret test"
400 echo "------------------------------------"
404 if [ $ret_val -eq 0 ]; then
406 elif [ $ret_val -eq $ksft_skip ]; then
414 echo "-------------------------------------------------------"
415 echo "running KSM MADV_MERGEABLE test with 10 identical pages"
416 echo "-------------------------------------------------------"
420 if [ $ret_val -eq 0 ]; then
422 elif [ $ret_val -eq $ksft_skip ]; then
430 echo "------------------------"
431 echo "running KSM unmerge test"
432 echo "------------------------"
436 if [ $ret_val -eq 0 ]; then
438 elif [ $ret_val -eq $ksft_skip ]; then
446 echo "----------------------------------------------------------"
447 echo "running KSM test with 10 zero pages and use_zero_pages = 0"
448 echo "----------------------------------------------------------"
449 ./ksm_tests -Z -p 10 -z 0
452 if [ $ret_val -eq 0 ]; then
454 elif [ $ret_val -eq $ksft_skip ]; then
462 echo "----------------------------------------------------------"
463 echo "running KSM test with 10 zero pages and use_zero_pages = 1"
464 echo "----------------------------------------------------------"
465 ./ksm_tests -Z -p 10 -z 1
468 if [ $ret_val -eq 0 ]; then
470 elif [ $ret_val -eq $ksft_skip ]; then
478 echo "-------------------------------------------------------------"
479 echo "running KSM test with 2 NUMA nodes and merge_across_nodes = 1"
480 echo "-------------------------------------------------------------"
484 if [ $ret_val -eq 0 ]; then
486 elif [ $ret_val -eq $ksft_skip ]; then
494 echo "-------------------------------------------------------------"
495 echo "running KSM test with 2 NUMA nodes and merge_across_nodes = 0"
496 echo "-------------------------------------------------------------"
500 if [ $ret_val -eq 0 ]; then
502 elif [ $ret_val -eq $ksft_skip ]; then