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 echo "----------------------------" 107 echo "running userfaultfd_hugetlb" 108 echo "----------------------------" 109 # 258MB total huge pages == 128MB src and 128MB dst 110 ./userfaultfd_hugetlb 128 32 $mnt/ufd_test_file 111 if [ $? -ne 0 ]; then 112 echo "[FAIL]" 113 exitcode=1 114 else 115 echo "[PASS]" 116 fi 117 rm -f $mnt/ufd_test_file 118 119 echo "----------------------------" 120 echo "running userfaultfd_shmem" 121 echo "----------------------------" 122 ./userfaultfd_shmem 128 32 123 if [ $? -ne 0 ]; then 124 echo "[FAIL]" 125 exitcode=1 126 else 127 echo "[PASS]" 128 fi 129 130 #cleanup 131 umount $mnt 132 rm -rf $mnt 133 echo $nr_hugepgs > /proc/sys/vm/nr_hugepages 134 135 echo "-----------------------" 136 echo "running compaction_test" 137 echo "-----------------------" 138 ./compaction_test 139 if [ $? -ne 0 ]; then 140 echo "[FAIL]" 141 exitcode=1 142 else 143 echo "[PASS]" 144 fi 145 146 echo "--------------------" 147 echo "running on-fault-limit" 148 echo "--------------------" 149 sudo -u nobody ./on-fault-limit 150 if [ $? -ne 0 ]; then 151 echo "[FAIL]" 152 exitcode=1 153 else 154 echo "[PASS]" 155 fi 156 157 echo "--------------------" 158 echo "running mlock2-tests" 159 echo "--------------------" 160 ./mlock2-tests 161 if [ $? -ne 0 ]; then 162 echo "[FAIL]" 163 exitcode=1 164 else 165 echo "[PASS]" 166 fi 167 168 exit $exitcode 169