at v5.6-rc4 273 lines 5.8 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 map_fixed_noreplace" 117echo "---------------------------" 118./map_fixed_noreplace 119if [ $? -ne 0 ]; then 120 echo "[FAIL]" 121 exitcode=1 122else 123 echo "[PASS]" 124fi 125 126echo "-------------------" 127echo "running userfaultfd" 128echo "-------------------" 129./userfaultfd anon 128 32 130if [ $? -ne 0 ]; then 131 echo "[FAIL]" 132 exitcode=1 133else 134 echo "[PASS]" 135fi 136 137echo "---------------------------" 138echo "running userfaultfd_hugetlb" 139echo "---------------------------" 140# Test requires source and destination huge pages. Size of source 141# (half_ufd_size_MB) is passed as argument to test. 142./userfaultfd hugetlb $half_ufd_size_MB 32 $mnt/ufd_test_file 143if [ $? -ne 0 ]; then 144 echo "[FAIL]" 145 exitcode=1 146else 147 echo "[PASS]" 148fi 149rm -f $mnt/ufd_test_file 150 151echo "-------------------------" 152echo "running userfaultfd_shmem" 153echo "-------------------------" 154./userfaultfd shmem 128 32 155if [ $? -ne 0 ]; then 156 echo "[FAIL]" 157 exitcode=1 158else 159 echo "[PASS]" 160fi 161 162#cleanup 163umount $mnt 164rm -rf $mnt 165echo $nr_hugepgs > /proc/sys/vm/nr_hugepages 166 167echo "-----------------------" 168echo "running compaction_test" 169echo "-----------------------" 170./compaction_test 171if [ $? -ne 0 ]; then 172 echo "[FAIL]" 173 exitcode=1 174else 175 echo "[PASS]" 176fi 177 178echo "----------------------" 179echo "running on-fault-limit" 180echo "----------------------" 181sudo -u nobody ./on-fault-limit 182if [ $? -ne 0 ]; then 183 echo "[FAIL]" 184 exitcode=1 185else 186 echo "[PASS]" 187fi 188 189echo "--------------------" 190echo "running map_populate" 191echo "--------------------" 192./map_populate 193if [ $? -ne 0 ]; then 194 echo "[FAIL]" 195 exitcode=1 196else 197 echo "[PASS]" 198fi 199 200echo "-------------------------" 201echo "running mlock-random-test" 202echo "-------------------------" 203./mlock-random-test 204if [ $? -ne 0 ]; then 205 echo "[FAIL]" 206 exitcode=1 207else 208 echo "[PASS]" 209fi 210 211echo "--------------------" 212echo "running mlock2-tests" 213echo "--------------------" 214./mlock2-tests 215if [ $? -ne 0 ]; then 216 echo "[FAIL]" 217 exitcode=1 218else 219 echo "[PASS]" 220fi 221 222echo "-----------------" 223echo "running thuge-gen" 224echo "-----------------" 225./thuge-gen 226if [ $? -ne 0 ]; then 227 echo "[FAIL]" 228 exitcode=1 229else 230 echo "[PASS]" 231fi 232 233if [ $VADDR64 -ne 0 ]; then 234echo "-----------------------------" 235echo "running virtual_address_range" 236echo "-----------------------------" 237./virtual_address_range 238if [ $? -ne 0 ]; then 239 echo "[FAIL]" 240 exitcode=1 241else 242 echo "[PASS]" 243fi 244 245echo "-----------------------------" 246echo "running virtual address 128TB switch test" 247echo "-----------------------------" 248./va_128TBswitch 249if [ $? -ne 0 ]; then 250 echo "[FAIL]" 251 exitcode=1 252else 253 echo "[PASS]" 254fi 255fi # VADDR64 256 257echo "------------------------------------" 258echo "running vmalloc stability smoke test" 259echo "------------------------------------" 260./test_vmalloc.sh smoke 261ret_val=$? 262 263if [ $ret_val -eq 0 ]; then 264 echo "[PASS]" 265elif [ $ret_val -eq $ksft_skip ]; then 266 echo "[SKIP]" 267 exitcode=$ksft_skip 268else 269 echo "[FAIL]" 270 exitcode=1 271fi 272 273exit $exitcode