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