Staging
v0.8.1
https://github.com/torvalds/linux
Raw File
Tip revision: 08332893e37af6ae779367e78e444f8f9571511d authored by Linus Torvalds on 22 May 2017, 02:30:23 UTC
Linux 4.12-rc2
Tip revision: 0833289
run_vmtests
#!/bin/bash
#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
back to top