mirror of
https://github.com/AuxXxilium/linux_dsm_epyc7002.git
synced 2024-12-27 07:55:15 +07:00
7549b33642
Some virtual address range tests requires 64bit address space, and we can not build and run those tests on the 32bit machine. Filter the 64bit architectures in Makefile and run_vmtests, so that those tests are built/run only on 64bit archs. Signed-off-by: Masami Hiramatsu <mhiramat@kernel.org> Cc: Anshuman Khandual <khandual@linux.vnet.ibm.com> Cc: Aneesh Kumar K.V <aneesh.kumar@linux.vnet.ibm.com> Signed-off-by: Shuah Khan <skhan@linuxfoundation.org>
241 lines
5.1 KiB
Bash
Executable File
241 lines
5.1 KiB
Bash
Executable File
#!/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
|
|
|
|
#filter 64bit architectures
|
|
ARCH64STR="arm64 ia64 mips64 parisc64 ppc64 riscv64 s390x sh64 sparc64 x86_64"
|
|
if [ -z $ARCH ]; then
|
|
ARCH=`uname -m 2>/dev/null | sed -e 's/aarch64.*/arm64/'`
|
|
fi
|
|
VADDR64=0
|
|
echo "$ARCH64STR" | grep $ARCH && VADDR64=1
|
|
|
|
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
|
|
|
|
if [ $VADDR64 -ne 0 ]; then
|
|
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
|
|
fi # VADDR64
|
|
|
|
echo "------------------------------------"
|
|
echo "running vmalloc stability smoke test"
|
|
echo "------------------------------------"
|
|
./test_vmalloc.sh smoke
|
|
ret_val=$?
|
|
|
|
if [ $ret_val -eq 0 ]; then
|
|
echo "[PASS]"
|
|
elif [ $ret_val -eq $ksft_skip ]; then
|
|
echo "[SKIP]"
|
|
exitcode=$ksft_skip
|
|
else
|
|
echo "[FAIL]"
|
|
exitcode=1
|
|
fi
|
|
|
|
exit $exitcode
|