123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214 |
- #!/bin/bash
- # SPDX-License-Identifier: GPL-2.0
- #please run as root
- # Kselftest framework requirement - SKIP code is 4.
- ksft_skip=4
- mnt=./huge
- exitcode=0
- #get huge pagesize and freepages from /proc/meminfo
- while read name size unit; do
- if [ "$name" = "HugePages_Free:" ]; then
- freepgs=$size
- fi
- if [ "$name" = "Hugepagesize:" ]; then
- hpgsize_KB=$size
- fi
- done < /proc/meminfo
- # Simple hugetlbfs tests have a hardcoded minimum requirement of
- # huge pages totaling 256MB (262144KB) in size. The userfaultfd
- # hugetlb test requires a minimum of 2 * nr_cpus huge pages. Take
- # both of these requirements into account and attempt to increase
- # number of huge pages available.
- nr_cpus=$(nproc)
- hpgsize_MB=$((hpgsize_KB / 1024))
- half_ufd_size_MB=$((((nr_cpus * hpgsize_MB + 127) / 128) * 128))
- needmem_KB=$((half_ufd_size_MB * 2 * 1024))
- #set proper nr_hugepages
- if [ -n "$freepgs" ] && [ -n "$hpgsize_KB" ]; then
- nr_hugepgs=`cat /proc/sys/vm/nr_hugepages`
- needpgs=$((needmem_KB / hpgsize_KB))
- tries=2
- while [ $tries -gt 0 ] && [ $freepgs -lt $needpgs ]; do
- lackpgs=$(( $needpgs - $freepgs ))
- echo 3 > /proc/sys/vm/drop_caches
- echo $(( $lackpgs + $nr_hugepgs )) > /proc/sys/vm/nr_hugepages
- if [ $? -ne 0 ]; then
- echo "Please run this test as root"
- exit $ksft_skip
- fi
- while read name size unit; do
- if [ "$name" = "HugePages_Free:" ]; then
- freepgs=$size
- fi
- done < /proc/meminfo
- tries=$((tries - 1))
- done
- if [ $freepgs -lt $needpgs ]; then
- printf "Not enough huge pages available (%d < %d)\n" \
- $freepgs $needpgs
- exit 1
- fi
- else
- echo "no hugetlbfs support in kernel?"
- exit 1
- fi
- mkdir $mnt
- mount -t hugetlbfs none $mnt
- echo "---------------------"
- echo "running hugepage-mmap"
- echo "---------------------"
- ./hugepage-mmap
- if [ $? -ne 0 ]; then
- echo "[FAIL]"
- exitcode=1
- else
- echo "[PASS]"
- fi
- shmmax=`cat /proc/sys/kernel/shmmax`
- shmall=`cat /proc/sys/kernel/shmall`
- echo 268435456 > /proc/sys/kernel/shmmax
- echo 4194304 > /proc/sys/kernel/shmall
- echo "--------------------"
- echo "running hugepage-shm"
- echo "--------------------"
- ./hugepage-shm
- if [ $? -ne 0 ]; then
- echo "[FAIL]"
- exitcode=1
- else
- echo "[PASS]"
- fi
- echo $shmmax > /proc/sys/kernel/shmmax
- echo $shmall > /proc/sys/kernel/shmall
- echo "-------------------"
- echo "running map_hugetlb"
- echo "-------------------"
- ./map_hugetlb
- if [ $? -ne 0 ]; then
- echo "[FAIL]"
- exitcode=1
- else
- echo "[PASS]"
- fi
- echo "NOTE: The above hugetlb tests provide minimal coverage. Use"
- echo " https://github.com/libhugetlbfs/libhugetlbfs.git for"
- echo " hugetlb regression testing."
- echo "-------------------"
- echo "running userfaultfd"
- echo "-------------------"
- ./userfaultfd anon 128 32
- if [ $? -ne 0 ]; then
- echo "[FAIL]"
- exitcode=1
- else
- echo "[PASS]"
- fi
- echo "---------------------------"
- echo "running userfaultfd_hugetlb"
- echo "---------------------------"
- # Test requires source and destination huge pages. Size of source
- # (half_ufd_size_MB) is passed as argument to test.
- ./userfaultfd hugetlb $half_ufd_size_MB 32 $mnt/ufd_test_file
- if [ $? -ne 0 ]; then
- echo "[FAIL]"
- exitcode=1
- else
- echo "[PASS]"
- fi
- rm -f $mnt/ufd_test_file
- echo "-------------------------"
- echo "running userfaultfd_shmem"
- echo "-------------------------"
- ./userfaultfd shmem 128 32
- if [ $? -ne 0 ]; then
- echo "[FAIL]"
- exitcode=1
- else
- echo "[PASS]"
- fi
- #cleanup
- umount $mnt
- rm -rf $mnt
- echo $nr_hugepgs > /proc/sys/vm/nr_hugepages
- echo "-----------------------"
- echo "running compaction_test"
- echo "-----------------------"
- ./compaction_test
- if [ $? -ne 0 ]; then
- echo "[FAIL]"
- exitcode=1
- else
- echo "[PASS]"
- fi
- echo "----------------------"
- echo "running on-fault-limit"
- echo "----------------------"
- sudo -u nobody ./on-fault-limit
- if [ $? -ne 0 ]; then
- echo "[FAIL]"
- exitcode=1
- else
- echo "[PASS]"
- fi
- echo "--------------------"
- echo "running map_populate"
- echo "--------------------"
- ./map_populate
- if [ $? -ne 0 ]; then
- echo "[FAIL]"
- exitcode=1
- else
- echo "[PASS]"
- fi
- echo "--------------------"
- echo "running mlock2-tests"
- echo "--------------------"
- ./mlock2-tests
- if [ $? -ne 0 ]; then
- echo "[FAIL]"
- exitcode=1
- else
- echo "[PASS]"
- fi
- echo "-----------------------------"
- echo "running virtual_address_range"
- echo "-----------------------------"
- ./virtual_address_range
- if [ $? -ne 0 ]; then
- echo "[FAIL]"
- exitcode=1
- else
- echo "[PASS]"
- fi
- echo "-----------------------------"
- echo "running virtual address 128TB switch test"
- echo "-----------------------------"
- ./va_128TBswitch
- if [ $? -ne 0 ]; then
- echo "[FAIL]"
- exitcode=1
- else
- echo "[PASS]"
- fi
- exit $exitcode
|