forked from Qortal/Brooklyn
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
326 lines
6.7 KiB
326 lines
6.7 KiB
#!/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 ppc64le 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 map_fixed_noreplace" |
|
echo "---------------------------" |
|
./map_fixed_noreplace |
|
if [ $? -ne 0 ]; then |
|
echo "[FAIL]" |
|
exitcode=1 |
|
else |
|
echo "[PASS]" |
|
fi |
|
|
|
echo "--------------------------------------------" |
|
echo "running 'gup_benchmark -U' (normal/slow gup)" |
|
echo "--------------------------------------------" |
|
./gup_benchmark -U |
|
if [ $? -ne 0 ]; then |
|
echo "[FAIL]" |
|
exitcode=1 |
|
else |
|
echo "[PASS]" |
|
fi |
|
|
|
echo "------------------------------------------" |
|
echo "running gup_benchmark -b (pin_user_pages)" |
|
echo "------------------------------------------" |
|
./gup_benchmark -b |
|
if [ $? -ne 0 ]; then |
|
echo "[FAIL]" |
|
exitcode=1 |
|
else |
|
echo "[PASS]" |
|
fi |
|
|
|
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 mlock-random-test" |
|
echo "-------------------------" |
|
./mlock-random-test |
|
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 thuge-gen" |
|
echo "-----------------" |
|
./thuge-gen |
|
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 |
|
|
|
echo "------------------------------------" |
|
echo "running MREMAP_DONTUNMAP smoke test" |
|
echo "------------------------------------" |
|
./mremap_dontunmap |
|
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 |
|
|
|
echo "running HMM smoke test" |
|
echo "------------------------------------" |
|
./test_hmm.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
|
|
|