1 #!/bin/bash 2 #please run as root 3 4 #we need 256M, below is the size in kB 5 needmem=262144 6 mnt=./huge 7 exitcode=0 8 9 #get pagesize and freepages from /proc/meminfo 10 while read name size unit; do 11 if [ "$name" = "HugePages_Free:" ]; then 12 freepgs=$size 13 fi 14 if [ "$name" = "Hugepagesize:" ]; then 15 pgsize=$size 16 fi 17 done < /proc/meminfo 18 19 #set proper nr_hugepages 20 if [ -n "$freepgs" ] && [ -n "$pgsize" ]; then 21 nr_hugepgs=`cat /proc/sys/vm/nr_hugepages` 22 needpgs=`expr $needmem / $pgsize` 23 tries=2 24 while [ $tries -gt 0 ] && [ $freepgs -lt $needpgs ]; do 25 lackpgs=$(( $needpgs - $freepgs )) 26 echo 3 > /proc/sys/vm/drop_caches 27 echo $(( $lackpgs + $nr_hugepgs )) > /proc/sys/vm/nr_hugepages 28 if [ $? -ne 0 ]; then 29 echo "Please run this test as root" 30 exit 1 31 fi 32 while read name size unit; do 33 if [ "$name" = "HugePages_Free:" ]; then 34 freepgs=$size 35 fi 36 done < /proc/meminfo 37 tries=$((tries - 1)) 38 done 39 if [ $freepgs -lt $needpgs ]; then 40 printf "Not enough huge pages available (%d < %d)\n" \ 41 $freepgs $needpgs 42 exit 1 43 fi 44 else 45 echo "no hugetlbfs support in kernel?" 46 exit 1 47 fi 48 49 mkdir $mnt 50 mount -t hugetlbfs none $mnt 51 52 echo "--------------------" 53 echo "running hugepage-mmap" 54 echo "--------------------" 55 ./hugepage-mmap 56 if [ $? -ne 0 ]; then 57 echo "[FAIL]" 58 exitcode=1 59 else 60 echo "[PASS]" 61 fi 62 63 shmmax=`cat /proc/sys/kernel/shmmax` 64 shmall=`cat /proc/sys/kernel/shmall` 65 echo 268435456 > /proc/sys/kernel/shmmax 66 echo 4194304 > /proc/sys/kernel/shmall 67 echo "--------------------" 68 echo "running hugepage-shm" 69 echo "--------------------" 70 ./hugepage-shm 71 if [ $? -ne 0 ]; then 72 echo "[FAIL]" 73 exitcode=1 74 else 75 echo "[PASS]" 76 fi 77 echo $shmmax > /proc/sys/kernel/shmmax 78 echo $shmall > /proc/sys/kernel/shmall 79 80 echo "--------------------" 81 echo "running map_hugetlb" 82 echo "--------------------" 83 ./map_hugetlb 84 if [ $? -ne 0 ]; then 85 echo "[FAIL]" 86 exitcode=1 87 else 88 echo "[PASS]" 89 fi 90 91 echo "NOTE: The above hugetlb tests provide minimal coverage. Use" 92 echo " https://github.com/libhugetlbfs/libhugetlbfs.git for" 93 echo " hugetlb regression testing." 94 95 echo "--------------------" 96 echo "running userfaultfd" 97 echo "--------------------" 98 ./userfaultfd 128 32 99 if [ $? -ne 0 ]; then 100 echo "[FAIL]" 101 exitcode=1 102 else 103 echo "[PASS]" 104 fi 105 106 #cleanup 107 umount $mnt 108 rm -rf $mnt 109 echo $nr_hugepgs > /proc/sys/vm/nr_hugepages 110 111 echo "-----------------------" 112 echo "running compaction_test" 113 echo "-----------------------" 114 ./compaction_test 115 if [ $? -ne 0 ]; then 116 echo "[FAIL]" 117 exitcode=1 118 else 119 echo "[PASS]" 120 fi 121 122 echo "--------------------" 123 echo "running on-fault-limit" 124 echo "--------------------" 125 sudo -u nobody ./on-fault-limit 126 if [ $? -ne 0 ]; then 127 echo "[FAIL]" 128 exitcode=1 129 else 130 echo "[PASS]" 131 fi 132 133 echo "--------------------" 134 echo "running mlock2-tests" 135 echo "--------------------" 136 ./mlock2-tests 137 if [ $? -ne 0 ]; then 138 echo "[FAIL]" 139 exitcode=1 140 else 141 echo "[PASS]" 142 fi 143 144 exit $exitcode 145