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 12#while read -r 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 19#done < /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. 26#nr_cpus=$(nproc) 27#hpgsize_MB=$((hpgsize_KB / 1024)) 28#half_ufd_size_MB=$((((nr_cpus * hpgsize_MB + 127) / 128) * 128)) 29#needmem_KB=$((half_ufd_size_MB * 2 * 1024)) 30# 31##set proper nr_hugepages 32#if [ -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# if ! echo $((lackpgs + nr_hugepgs)) > /proc/sys/vm/nr_hugepages; then 40# echo "Please run this test as root" 41# exit $ksft_skip 42# fi 43# while read -r name size unit; do 44# if [ "$name" = "HugePages_Free:" ]; then 45# freepgs=$size 46# fi 47# done < /proc/meminfo 48# tries=$((tries - 1)) 49# done 50# if [ "$freepgs" -lt "$needpgs" ]; then 51# printf "Not enough huge pages available (%d < %d)\n" \ 52# "$freepgs" "$needpgs" 53# exit 1 54# fi 55#else 56# echo "no hugetlbfs support in kernel?" 57# exit 1 58#fi 59# 60##filter 64bit architectures 61#ARCH64STR="arm64 ia64 mips64 parisc64 ppc64 ppc64le riscv64 s390x sh64 sparc64 x86_64" 62#if [ -z "$ARCH" ]; then 63# ARCH=$(uname -m 2>/dev/null | sed -e 's/aarch64.*/arm64/') 64#fi 65#VADDR64=0 66#echo "$ARCH64STR" | grep "$ARCH" && VADDR64=1 67 68# Usage: run_test [test binary] [arbitrary test arguments...] 69run_test() { 70 local title="running $*" 71 local sep=$(echo -n "$title" | tr "[:graph:][:space:]" -) 72 printf "%s\n%s\n%s\n" "$sep" "$title" "$sep" 73 74 "$@" 75 local ret=$? 76 if [ $ret -eq 0 ]; then 77 echo "[PASS]" 78 elif [ $ret -eq $ksft_skip ]; then 79 echo "[SKIP]" 80 exitcode=$ksft_skip 81 else 82 echo "[FAIL]" 83 exitcode=1 84 fi 85} 86 87#mkdir "$mnt" 88#mount -t hugetlbfs none "$mnt" 89# 90#run_test ./hugepage-mmap 91# 92#shmmax=$(cat /proc/sys/kernel/shmmax) 93#shmall=$(cat /proc/sys/kernel/shmall) 94#echo 268435456 > /proc/sys/kernel/shmmax 95#echo 4194304 > /proc/sys/kernel/shmall 96#run_test ./hugepage-shm 97#echo "$shmmax" > /proc/sys/kernel/shmmax 98#echo "$shmall" > /proc/sys/kernel/shmall 99# 100#run_test ./map_hugetlb 101# 102#run_test ./hugepage-mremap "$mnt"/huge_mremap 103#rm -f "$mnt"/huge_mremap 104# 105#run_test ./hugepage-vmemmap 106# 107#run_test ./hugetlb-madvise "$mnt"/madvise-test 108#rm -f "$mnt"/madvise-test 109# 110#echo "NOTE: The above hugetlb tests provide minimal coverage. Use" 111#echo " https://github.com/libhugetlbfs/libhugetlbfs.git for" 112#echo " hugetlb regression testing." 113# 114#run_test ./map_fixed_noreplace 115# 116## get_user_pages_fast() benchmark 117#run_test ./gup_test -u 118## pin_user_pages_fast() benchmark 119#run_test ./gup_test -a 120## Dump pages 0, 19, and 4096, using pin_user_pages: 121#run_test ./gup_test -ct -F 0x1 0 19 0x1000 122# 123#uffd_mods=("" ":dev") 124#for mod in "${uffd_mods[@]}"; do 125# run_test ./userfaultfd anon${mod} 20 16 126# # Hugetlb tests require source and destination huge pages. Pass in half 127# # the size ($half_ufd_size_MB), which is used for *each*. 128# run_test ./userfaultfd hugetlb${mod} "$half_ufd_size_MB" 32 129# run_test ./userfaultfd hugetlb_shared${mod} "$half_ufd_size_MB" 32 "$mnt"/uffd-test 130# rm -f "$mnt"/uffd-test 131# run_test ./userfaultfd shmem${mod} 20 16 132#done 133# 134##cleanup 135#umount "$mnt" 136#rm -rf "$mnt" 137#echo "$nr_hugepgs" > /proc/sys/vm/nr_hugepages 138# 139#run_test ./compaction_test 140 141run_test sudo -u nobody ./on-fault-limit 142 143#run_test ./map_populate 144 145run_test ./mlock-random-test 146 147run_test ./mlock2-tests 148 149run_test ./mrelease_test 150 151run_test ./mremap_test 152 153run_test ./thuge-gen 154 155#if [ $VADDR64 -ne 0 ]; then 156# run_test ./virtual_address_range 157# 158# # virtual address 128TB switch test 159# run_test ./va_128TBswitch.sh 160#fi # VADDR64 161 162# vmalloc stability smoke test 163#run_test ./test_vmalloc.sh smoke 164 165run_test ./mremap_dontunmap 166 167#run_test ./test_hmm.sh smoke 168 169## MADV_POPULATE_READ and MADV_POPULATE_WRITE tests 170#run_test ./madv_populate 171# 172#run_test ./memfd_secret 173 174## KSM MADV_MERGEABLE test with 10 identical pages 175#run_test ./ksm_tests -M -p 10 176## KSM unmerge test 177#run_test ./ksm_tests -U 178## KSM test with 10 zero pages and use_zero_pages = 0 179#run_test ./ksm_tests -Z -p 10 -z 0 180## KSM test with 10 zero pages and use_zero_pages = 1 181#run_test ./ksm_tests -Z -p 10 -z 1 182## KSM test with 2 NUMA nodes and merge_across_nodes = 1 183#run_test ./ksm_tests -N -m 1 184## KSM test with 2 NUMA nodes and merge_across_nodes = 0 185#run_test ./ksm_tests -N -m 0 186 187## protection_keys tests 188#if [ -x ./protection_keys_32 ] 189#then 190# run_test ./protection_keys_32 191#fi 192# 193#if [ -x ./protection_keys_64 ] 194#then 195# run_test ./protection_keys_64 196#fi 197# 198#run_test ./soft-dirty 199 200exit $exitcode 201