at v5.5-rc4 240 lines 5.2 kB view raw
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 12while 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 19done < /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. 26nr_cpus=$(nproc) 27hpgsize_MB=$((hpgsize_KB / 1024)) 28half_ufd_size_MB=$((((nr_cpus * hpgsize_MB + 127) / 128) * 128)) 29needmem_KB=$((half_ufd_size_MB * 2 * 1024)) 30 31#set proper nr_hugepages 32if [ -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 56else 57 echo "no hugetlbfs support in kernel?" 58 exit 1 59fi 60 61#filter 64bit architectures 62ARCH64STR="arm64 ia64 mips64 parisc64 ppc64 riscv64 s390x sh64 sparc64 x86_64" 63if [ -z $ARCH ]; then 64 ARCH=`uname -m 2>/dev/null | sed -e 's/aarch64.*/arm64/'` 65fi 66VADDR64=0 67echo "$ARCH64STR" | grep $ARCH && VADDR64=1 68 69mkdir $mnt 70mount -t hugetlbfs none $mnt 71 72echo "---------------------" 73echo "running hugepage-mmap" 74echo "---------------------" 75./hugepage-mmap 76if [ $? -ne 0 ]; then 77 echo "[FAIL]" 78 exitcode=1 79else 80 echo "[PASS]" 81fi 82 83shmmax=`cat /proc/sys/kernel/shmmax` 84shmall=`cat /proc/sys/kernel/shmall` 85echo 268435456 > /proc/sys/kernel/shmmax 86echo 4194304 > /proc/sys/kernel/shmall 87echo "--------------------" 88echo "running hugepage-shm" 89echo "--------------------" 90./hugepage-shm 91if [ $? -ne 0 ]; then 92 echo "[FAIL]" 93 exitcode=1 94else 95 echo "[PASS]" 96fi 97echo $shmmax > /proc/sys/kernel/shmmax 98echo $shmall > /proc/sys/kernel/shmall 99 100echo "-------------------" 101echo "running map_hugetlb" 102echo "-------------------" 103./map_hugetlb 104if [ $? -ne 0 ]; then 105 echo "[FAIL]" 106 exitcode=1 107else 108 echo "[PASS]" 109fi 110 111echo "NOTE: The above hugetlb tests provide minimal coverage. Use" 112echo " https://github.com/libhugetlbfs/libhugetlbfs.git for" 113echo " hugetlb regression testing." 114 115echo "-------------------" 116echo "running userfaultfd" 117echo "-------------------" 118./userfaultfd anon 128 32 119if [ $? -ne 0 ]; then 120 echo "[FAIL]" 121 exitcode=1 122else 123 echo "[PASS]" 124fi 125 126echo "---------------------------" 127echo "running userfaultfd_hugetlb" 128echo "---------------------------" 129# Test requires source and destination huge pages. Size of source 130# (half_ufd_size_MB) is passed as argument to test. 131./userfaultfd hugetlb $half_ufd_size_MB 32 $mnt/ufd_test_file 132if [ $? -ne 0 ]; then 133 echo "[FAIL]" 134 exitcode=1 135else 136 echo "[PASS]" 137fi 138rm -f $mnt/ufd_test_file 139 140echo "-------------------------" 141echo "running userfaultfd_shmem" 142echo "-------------------------" 143./userfaultfd shmem 128 32 144if [ $? -ne 0 ]; then 145 echo "[FAIL]" 146 exitcode=1 147else 148 echo "[PASS]" 149fi 150 151#cleanup 152umount $mnt 153rm -rf $mnt 154echo $nr_hugepgs > /proc/sys/vm/nr_hugepages 155 156echo "-----------------------" 157echo "running compaction_test" 158echo "-----------------------" 159./compaction_test 160if [ $? -ne 0 ]; then 161 echo "[FAIL]" 162 exitcode=1 163else 164 echo "[PASS]" 165fi 166 167echo "----------------------" 168echo "running on-fault-limit" 169echo "----------------------" 170sudo -u nobody ./on-fault-limit 171if [ $? -ne 0 ]; then 172 echo "[FAIL]" 173 exitcode=1 174else 175 echo "[PASS]" 176fi 177 178echo "--------------------" 179echo "running map_populate" 180echo "--------------------" 181./map_populate 182if [ $? -ne 0 ]; then 183 echo "[FAIL]" 184 exitcode=1 185else 186 echo "[PASS]" 187fi 188 189echo "--------------------" 190echo "running mlock2-tests" 191echo "--------------------" 192./mlock2-tests 193if [ $? -ne 0 ]; then 194 echo "[FAIL]" 195 exitcode=1 196else 197 echo "[PASS]" 198fi 199 200if [ $VADDR64 -ne 0 ]; then 201echo "-----------------------------" 202echo "running virtual_address_range" 203echo "-----------------------------" 204./virtual_address_range 205if [ $? -ne 0 ]; then 206 echo "[FAIL]" 207 exitcode=1 208else 209 echo "[PASS]" 210fi 211 212echo "-----------------------------" 213echo "running virtual address 128TB switch test" 214echo "-----------------------------" 215./va_128TBswitch 216if [ $? -ne 0 ]; then 217 echo "[FAIL]" 218 exitcode=1 219else 220 echo "[PASS]" 221fi 222fi # VADDR64 223 224echo "------------------------------------" 225echo "running vmalloc stability smoke test" 226echo "------------------------------------" 227./test_vmalloc.sh smoke 228ret_val=$? 229 230if [ $ret_val -eq 0 ]; then 231 echo "[PASS]" 232elif [ $ret_val -eq $ksft_skip ]; then 233 echo "[SKIP]" 234 exitcode=$ksft_skip 235else 236 echo "[FAIL]" 237 exitcode=1 238fi 239 240exit $exitcode