1#!/bin/bash 2#please run as root 3 4#we need 256M, below is the size in kB 5needmem=262144 6mnt=./huge 7exitcode=0 8 9#get pagesize and freepages from /proc/meminfo 10while 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 17done < /proc/meminfo 18 19#set proper nr_hugepages 20if [ -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 44else 45 echo "no hugetlbfs support in kernel?" 46 exit 1 47fi 48 49mkdir $mnt 50mount -t hugetlbfs none $mnt 51 52echo "--------------------" 53echo "running hugepage-mmap" 54echo "--------------------" 55./hugepage-mmap 56if [ $? -ne 0 ]; then 57 echo "[FAIL]" 58 exitcode=1 59else 60 echo "[PASS]" 61fi 62 63shmmax=`cat /proc/sys/kernel/shmmax` 64shmall=`cat /proc/sys/kernel/shmall` 65echo 268435456 > /proc/sys/kernel/shmmax 66echo 4194304 > /proc/sys/kernel/shmall 67echo "--------------------" 68echo "running hugepage-shm" 69echo "--------------------" 70./hugepage-shm 71if [ $? -ne 0 ]; then 72 echo "[FAIL]" 73 exitcode=1 74else 75 echo "[PASS]" 76fi 77echo $shmmax > /proc/sys/kernel/shmmax 78echo $shmall > /proc/sys/kernel/shmall 79 80echo "--------------------" 81echo "running map_hugetlb" 82echo "--------------------" 83./map_hugetlb 84if [ $? -ne 0 ]; then 85 echo "[FAIL]" 86 exitcode=1 87else 88 echo "[PASS]" 89fi 90 91echo "NOTE: The above hugetlb tests provide minimal coverage. Use" 92echo " https://github.com/libhugetlbfs/libhugetlbfs.git for" 93echo " hugetlb regression testing." 94 95echo "--------------------" 96echo "running userfaultfd" 97echo "--------------------" 98./userfaultfd 128 32 99if [ $? -ne 0 ]; then 100 echo "[FAIL]" 101 exitcode=1 102else 103 echo "[PASS]" 104fi 105 106echo "----------------------------" 107echo "running userfaultfd_hugetlb" 108echo "----------------------------" 109# 258MB total huge pages == 128MB src and 128MB dst 110./userfaultfd_hugetlb 128 32 $mnt/ufd_test_file 111if [ $? -ne 0 ]; then 112 echo "[FAIL]" 113 exitcode=1 114else 115 echo "[PASS]" 116fi 117rm -f $mnt/ufd_test_file 118 119echo "----------------------------" 120echo "running userfaultfd_shmem" 121echo "----------------------------" 122./userfaultfd_shmem 128 32 123if [ $? -ne 0 ]; then 124 echo "[FAIL]" 125 exitcode=1 126else 127 echo "[PASS]" 128fi 129 130#cleanup 131umount $mnt 132rm -rf $mnt 133echo $nr_hugepgs > /proc/sys/vm/nr_hugepages 134 135echo "-----------------------" 136echo "running compaction_test" 137echo "-----------------------" 138./compaction_test 139if [ $? -ne 0 ]; then 140 echo "[FAIL]" 141 exitcode=1 142else 143 echo "[PASS]" 144fi 145 146echo "--------------------" 147echo "running on-fault-limit" 148echo "--------------------" 149sudo -u nobody ./on-fault-limit 150if [ $? -ne 0 ]; then 151 echo "[FAIL]" 152 exitcode=1 153else 154 echo "[PASS]" 155fi 156 157echo "--------------------" 158echo "running mlock2-tests" 159echo "--------------------" 160./mlock2-tests 161if [ $? -ne 0 ]; then 162 echo "[FAIL]" 163 exitcode=1 164else 165 echo "[PASS]" 166fi 167 168exit $exitcode 169