Test the mmap() flag, and the mlockall() flag. These tests ensure that pages are not faulted in until they are accessed, that the pages are unevictable once faulted in, and that VMA splitting and merging works with the new VM flag. The second test ensures that mlock limits are respected. Note that the limit test needs to be run a normal user. Also add tests to use the new mlock2 family of system calls. [treding@nvidia.com: : Fix mlock2-tests for 32-bit architectures] [treding@nvidia.com: ensure the mlock2 syscall number can be found] [treding@nvidia.com: use the right arguments for main()] Signed-off-by: Eric B Munson <emunson@akamai.com> Cc: Shuah Khan <shuahkh@osg.samsung.com> Cc: Michal Hocko <mhocko@suse.cz> Cc: Vlastimil Babka <vbabka@suse.cz> Cc: Jonathan Corbet <corbet@lwn.net> Cc: Catalin Marinas <catalin.marinas@arm.com> Cc: Geert Uytterhoeven <geert@linux-m68k.org> Cc: Guenter Roeck <linux@roeck-us.net> Cc: Heiko Carstens <heiko.carstens@de.ibm.com> Cc: Kirill A. Shutemov <kirill.shutemov@linux.intel.com> Cc: Michael Kerrisk <mtk.manpages@gmail.com> Cc: Ralf Baechle <ralf@linux-mips.org> Cc: Stephen Rothwell <sfr@canb.auug.org.au> Signed-off-by: Thierry Reding <treding@nvidia.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
132 lines
2.5 KiB
Bash
Executable File
132 lines
2.5 KiB
Bash
Executable File
#!/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`
|
|
if [ $freepgs -lt $needpgs ]; then
|
|
lackpgs=$(( $needpgs - $freepgs ))
|
|
echo $(( $lackpgs + $nr_hugepgs )) > /proc/sys/vm/nr_hugepages
|
|
if [ $? -ne 0 ]; then
|
|
echo "Please run this test as root"
|
|
exit 1
|
|
fi
|
|
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 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
|
|
|
|
exit $exitcode
|