| #!/bin/bash |
| # SPDX-License-Identifier: GPL-2.0 |
| #please run as root |
| |
| #we need 256M, below is the size in kB |
| needmem=262144 |
| mnt=./huge |
| exitcode=0 |
| |
| #get pagesize and freepages from /proc/meminfo |
| while read name size unit; do |
| if [ "$name" = "HugePages_Free:" ]; then |
| freepgs=$size |
| fi |
| if [ "$name" = "Hugepagesize:" ]; then |
| pgsize=$size |
| fi |
| done < /proc/meminfo |
| |
| #set proper nr_hugepages |
| if [ -n "$freepgs" ] && [ -n "$pgsize" ]; then |
| nr_hugepgs=`cat /proc/sys/vm/nr_hugepages` |
| needpgs=`expr $needmem / $pgsize` |
| 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 1 |
| 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 "---------------------------" |
| # 256MB total huge pages == 128MB src and 128MB dst |
| ./userfaultfd hugetlb 128 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 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 |
| |
| exit $exitcode |