selftests: vm: Try harder to allocate huge pages
[GitHub/LineageOS/android_kernel_motorola_exynos9610.git] / tools / testing / selftests / vm / run_vmtests
1 #!/bin/bash
2 #please run as root
3
4 #we need 256M, below is the size in kB
5 needmem=262144
6 mnt=./huge
7 exitcode=0
8
9 #get pagesize and freepages from /proc/meminfo
10 while read name size unit; do
11 if [ "$name" = "HugePages_Free:" ]; then
12 freepgs=$size
13 fi
14 if [ "$name" = "Hugepagesize:" ]; then
15 pgsize=$size
16 fi
17 done < /proc/meminfo
18
19 #set proper nr_hugepages
20 if [ -n "$freepgs" ] && [ -n "$pgsize" ]; then
21 nr_hugepgs=`cat /proc/sys/vm/nr_hugepages`
22 needpgs=`expr $needmem / $pgsize`
23 tries=2
24 while [ $tries -gt 0 ] && [ $freepgs -lt $needpgs ]; do
25 lackpgs=$(( $needpgs - $freepgs ))
26 echo 3 > /proc/sys/vm/drop_caches
27 echo $(( $lackpgs + $nr_hugepgs )) > /proc/sys/vm/nr_hugepages
28 if [ $? -ne 0 ]; then
29 echo "Please run this test as root"
30 exit 1
31 fi
32 while read name size unit; do
33 if [ "$name" = "HugePages_Free:" ]; then
34 freepgs=$size
35 fi
36 done < /proc/meminfo
37 tries=$((tries - 1))
38 done
39 if [ $freepgs -lt $needpgs ]; then
40 printf "Not enough huge pages available (%d < %d)\n" \
41 $freepgs $needpgs
42 exit 1
43 fi
44 else
45 echo "no hugetlbfs support in kernel?"
46 exit 1
47 fi
48
49 mkdir $mnt
50 mount -t hugetlbfs none $mnt
51
52 echo "--------------------"
53 echo "running hugepage-mmap"
54 echo "--------------------"
55 ./hugepage-mmap
56 if [ $? -ne 0 ]; then
57 echo "[FAIL]"
58 exitcode=1
59 else
60 echo "[PASS]"
61 fi
62
63 shmmax=`cat /proc/sys/kernel/shmmax`
64 shmall=`cat /proc/sys/kernel/shmall`
65 echo 268435456 > /proc/sys/kernel/shmmax
66 echo 4194304 > /proc/sys/kernel/shmall
67 echo "--------------------"
68 echo "running hugepage-shm"
69 echo "--------------------"
70 ./hugepage-shm
71 if [ $? -ne 0 ]; then
72 echo "[FAIL]"
73 exitcode=1
74 else
75 echo "[PASS]"
76 fi
77 echo $shmmax > /proc/sys/kernel/shmmax
78 echo $shmall > /proc/sys/kernel/shmall
79
80 echo "--------------------"
81 echo "running map_hugetlb"
82 echo "--------------------"
83 ./map_hugetlb
84 if [ $? -ne 0 ]; then
85 echo "[FAIL]"
86 exitcode=1
87 else
88 echo "[PASS]"
89 fi
90
91 echo "NOTE: The above hugetlb tests provide minimal coverage. Use"
92 echo " https://github.com/libhugetlbfs/libhugetlbfs.git for"
93 echo " hugetlb regression testing."
94
95 echo "--------------------"
96 echo "running userfaultfd"
97 echo "--------------------"
98 ./userfaultfd 128 32
99 if [ $? -ne 0 ]; then
100 echo "[FAIL]"
101 exitcode=1
102 else
103 echo "[PASS]"
104 fi
105
106 #cleanup
107 umount $mnt
108 rm -rf $mnt
109 echo $nr_hugepgs > /proc/sys/vm/nr_hugepages
110
111 echo "-----------------------"
112 echo "running compaction_test"
113 echo "-----------------------"
114 ./compaction_test
115 if [ $? -ne 0 ]; then
116 echo "[FAIL]"
117 exitcode=1
118 else
119 echo "[PASS]"
120 fi
121
122 exit $exitcode