at v4.16-rc6 200 lines 4.4 kB view raw
1#!/bin/bash 2# SPDX-License-Identifier: GPL-2.0 3#please run as root 4 5mnt=./huge 6exitcode=0 7 8#get huge pagesize and freepages from /proc/meminfo 9while read name size unit; do 10 if [ "$name" = "HugePages_Free:" ]; then 11 freepgs=$size 12 fi 13 if [ "$name" = "Hugepagesize:" ]; then 14 hpgsize_KB=$size 15 fi 16done < /proc/meminfo 17 18# Simple hugetlbfs tests have a hardcoded minimum requirement of 19# huge pages totaling 256MB (262144KB) in size. The userfaultfd 20# hugetlb test requires a minimum of 2 * nr_cpus huge pages. Take 21# both of these requirements into account and attempt to increase 22# number of huge pages available. 23nr_cpus=$(nproc) 24hpgsize_MB=$((hpgsize_KB / 1024)) 25half_ufd_size_MB=$((((nr_cpus * hpgsize_MB + 127) / 128) * 128)) 26needmem_KB=$((half_ufd_size_MB * 2 * 1024)) 27 28#set proper nr_hugepages 29if [ -n "$freepgs" ] && [ -n "$hpgsize_KB" ]; then 30 nr_hugepgs=`cat /proc/sys/vm/nr_hugepages` 31 needpgs=$((needmem_KB / hpgsize_KB)) 32 tries=2 33 while [ $tries -gt 0 ] && [ $freepgs -lt $needpgs ]; do 34 lackpgs=$(( $needpgs - $freepgs )) 35 echo 3 > /proc/sys/vm/drop_caches 36 echo $(( $lackpgs + $nr_hugepgs )) > /proc/sys/vm/nr_hugepages 37 if [ $? -ne 0 ]; then 38 echo "Please run this test as root" 39 exit 1 40 fi 41 while read name size unit; do 42 if [ "$name" = "HugePages_Free:" ]; then 43 freepgs=$size 44 fi 45 done < /proc/meminfo 46 tries=$((tries - 1)) 47 done 48 if [ $freepgs -lt $needpgs ]; then 49 printf "Not enough huge pages available (%d < %d)\n" \ 50 $freepgs $needpgs 51 exit 1 52 fi 53else 54 echo "no hugetlbfs support in kernel?" 55 exit 1 56fi 57 58mkdir $mnt 59mount -t hugetlbfs none $mnt 60 61echo "---------------------" 62echo "running hugepage-mmap" 63echo "---------------------" 64./hugepage-mmap 65if [ $? -ne 0 ]; then 66 echo "[FAIL]" 67 exitcode=1 68else 69 echo "[PASS]" 70fi 71 72shmmax=`cat /proc/sys/kernel/shmmax` 73shmall=`cat /proc/sys/kernel/shmall` 74echo 268435456 > /proc/sys/kernel/shmmax 75echo 4194304 > /proc/sys/kernel/shmall 76echo "--------------------" 77echo "running hugepage-shm" 78echo "--------------------" 79./hugepage-shm 80if [ $? -ne 0 ]; then 81 echo "[FAIL]" 82 exitcode=1 83else 84 echo "[PASS]" 85fi 86echo $shmmax > /proc/sys/kernel/shmmax 87echo $shmall > /proc/sys/kernel/shmall 88 89echo "-------------------" 90echo "running map_hugetlb" 91echo "-------------------" 92./map_hugetlb 93if [ $? -ne 0 ]; then 94 echo "[FAIL]" 95 exitcode=1 96else 97 echo "[PASS]" 98fi 99 100echo "NOTE: The above hugetlb tests provide minimal coverage. Use" 101echo " https://github.com/libhugetlbfs/libhugetlbfs.git for" 102echo " hugetlb regression testing." 103 104echo "-------------------" 105echo "running userfaultfd" 106echo "-------------------" 107./userfaultfd anon 128 32 108if [ $? -ne 0 ]; then 109 echo "[FAIL]" 110 exitcode=1 111else 112 echo "[PASS]" 113fi 114 115echo "---------------------------" 116echo "running userfaultfd_hugetlb" 117echo "---------------------------" 118# Test requires source and destination huge pages. Size of source 119# (half_ufd_size_MB) is passed as argument to test. 120./userfaultfd hugetlb $half_ufd_size_MB 32 $mnt/ufd_test_file 121if [ $? -ne 0 ]; then 122 echo "[FAIL]" 123 exitcode=1 124else 125 echo "[PASS]" 126fi 127rm -f $mnt/ufd_test_file 128 129echo "-------------------------" 130echo "running userfaultfd_shmem" 131echo "-------------------------" 132./userfaultfd shmem 128 32 133if [ $? -ne 0 ]; then 134 echo "[FAIL]" 135 exitcode=1 136else 137 echo "[PASS]" 138fi 139 140#cleanup 141umount $mnt 142rm -rf $mnt 143echo $nr_hugepgs > /proc/sys/vm/nr_hugepages 144 145echo "-----------------------" 146echo "running compaction_test" 147echo "-----------------------" 148./compaction_test 149if [ $? -ne 0 ]; then 150 echo "[FAIL]" 151 exitcode=1 152else 153 echo "[PASS]" 154fi 155 156echo "----------------------" 157echo "running on-fault-limit" 158echo "----------------------" 159sudo -u nobody ./on-fault-limit 160if [ $? -ne 0 ]; then 161 echo "[FAIL]" 162 exitcode=1 163else 164 echo "[PASS]" 165fi 166 167echo "--------------------" 168echo "running mlock2-tests" 169echo "--------------------" 170./mlock2-tests 171if [ $? -ne 0 ]; then 172 echo "[FAIL]" 173 exitcode=1 174else 175 echo "[PASS]" 176fi 177 178echo "-----------------------------" 179echo "running virtual_address_range" 180echo "-----------------------------" 181./virtual_address_range 182if [ $? -ne 0 ]; then 183 echo "[FAIL]" 184 exitcode=1 185else 186 echo "[PASS]" 187fi 188 189echo "-----------------------------" 190echo "running virtual address 128TB switch test" 191echo "-----------------------------" 192./va_128TBswitch 193if [ $? -ne 0 ]; then 194 echo "[FAIL]" 195 exitcode=1 196else 197 echo "[PASS]" 198fi 199 200exit $exitcode