Commit | Line | Data |
---|---|---|
f0f57b2b | 1 | #!/bin/bash |
b2441318 | 2 | # SPDX-License-Identifier: GPL-2.0 |
f0f57b2b DY |
3 | #please run as root |
4 | ||
f0f57b2b | 5 | mnt=./huge |
51a1d165 | 6 | exitcode=0 |
f0f57b2b | 7 | |
0627be7d | 8 | #get huge pagesize and freepages from /proc/meminfo |
f0f57b2b DY |
9 | while read name size unit; do |
10 | if [ "$name" = "HugePages_Free:" ]; then | |
11 | freepgs=$size | |
12 | fi | |
13 | if [ "$name" = "Hugepagesize:" ]; then | |
0627be7d | 14 | hpgsize_KB=$size |
f0f57b2b DY |
15 | fi |
16 | done < /proc/meminfo | |
17 | ||
0627be7d LZ |
18 | # Simple hugetlbfs tests have a hardcoded minimum requirement of |
19 | # huge pages totaling 256MB (262144KB) in size. The userfaultfd | |
20 | # hugetlb test requires a minimum of 2 * nr_cpus huge pages. Take | |
21 | # both of these requirements into account and attempt to increase | |
22 | # number of huge pages available. | |
23 | nr_cpus=$(nproc) | |
24 | hpgsize_MB=$((hpgsize_KB / 1024)) | |
25 | half_ufd_size_MB=$((((nr_cpus * hpgsize_MB + 127) / 128) * 128)) | |
26 | needmem_KB=$((half_ufd_size_MB * 2 * 1024)) | |
27 | ||
f0f57b2b | 28 | #set proper nr_hugepages |
0627be7d | 29 | if [ -n "$freepgs" ] && [ -n "$hpgsize_KB" ]; then |
f0f57b2b | 30 | nr_hugepgs=`cat /proc/sys/vm/nr_hugepages` |
0627be7d | 31 | needpgs=$((needmem_KB / hpgsize_KB)) |
ee00479d BH |
32 | tries=2 |
33 | while [ $tries -gt 0 ] && [ $freepgs -lt $needpgs ]; do | |
f0f57b2b | 34 | lackpgs=$(( $needpgs - $freepgs )) |
ee00479d | 35 | echo 3 > /proc/sys/vm/drop_caches |
f0f57b2b DY |
36 | echo $(( $lackpgs + $nr_hugepgs )) > /proc/sys/vm/nr_hugepages |
37 | if [ $? -ne 0 ]; then | |
38 | echo "Please run this test as root" | |
39 | exit 1 | |
40 | fi | |
ee00479d BH |
41 | while read name size unit; do |
42 | if [ "$name" = "HugePages_Free:" ]; then | |
43 | freepgs=$size | |
44 | fi | |
45 | done < /proc/meminfo | |
46 | tries=$((tries - 1)) | |
47 | done | |
48 | if [ $freepgs -lt $needpgs ]; then | |
49 | printf "Not enough huge pages available (%d < %d)\n" \ | |
50 | $freepgs $needpgs | |
51 | exit 1 | |
f0f57b2b DY |
52 | fi |
53 | else | |
54 | echo "no hugetlbfs support in kernel?" | |
55 | exit 1 | |
56 | fi | |
57 | ||
58 | mkdir $mnt | |
59 | mount -t hugetlbfs none $mnt | |
60 | ||
2b8713e1 | 61 | echo "---------------------" |
ce8283d5 | 62 | echo "running hugepage-mmap" |
2b8713e1 | 63 | echo "---------------------" |
f0f57b2b DY |
64 | ./hugepage-mmap |
65 | if [ $? -ne 0 ]; then | |
66 | echo "[FAIL]" | |
51a1d165 | 67 | exitcode=1 |
f0f57b2b DY |
68 | else |
69 | echo "[PASS]" | |
70 | fi | |
71 | ||
72 | shmmax=`cat /proc/sys/kernel/shmmax` | |
73 | shmall=`cat /proc/sys/kernel/shmall` | |
74 | echo 268435456 > /proc/sys/kernel/shmmax | |
75 | echo 4194304 > /proc/sys/kernel/shmall | |
76 | echo "--------------------" | |
ce8283d5 | 77 | echo "running hugepage-shm" |
f0f57b2b DY |
78 | echo "--------------------" |
79 | ./hugepage-shm | |
80 | if [ $? -ne 0 ]; then | |
81 | echo "[FAIL]" | |
51a1d165 | 82 | exitcode=1 |
f0f57b2b DY |
83 | else |
84 | echo "[PASS]" | |
85 | fi | |
86 | echo $shmmax > /proc/sys/kernel/shmmax | |
87 | echo $shmall > /proc/sys/kernel/shmall | |
88 | ||
2b8713e1 | 89 | echo "-------------------" |
ce8283d5 | 90 | echo "running map_hugetlb" |
2b8713e1 | 91 | echo "-------------------" |
f0f57b2b DY |
92 | ./map_hugetlb |
93 | if [ $? -ne 0 ]; then | |
94 | echo "[FAIL]" | |
51a1d165 | 95 | exitcode=1 |
f0f57b2b DY |
96 | else |
97 | echo "[PASS]" | |
98 | fi | |
99 | ||
fd5a9ecd MK |
100 | echo "NOTE: The above hugetlb tests provide minimal coverage. Use" |
101 | echo " https://github.com/libhugetlbfs/libhugetlbfs.git for" | |
102 | echo " hugetlb regression testing." | |
103 | ||
2b8713e1 | 104 | echo "-------------------" |
c47174fc | 105 | echo "running userfaultfd" |
2b8713e1 | 106 | echo "-------------------" |
b6ad1976 | 107 | ./userfaultfd anon 128 32 |
c47174fc AA |
108 | if [ $? -ne 0 ]; then |
109 | echo "[FAIL]" | |
110 | exitcode=1 | |
111 | else | |
112 | echo "[PASS]" | |
113 | fi | |
114 | ||
2b8713e1 | 115 | echo "---------------------------" |
9903bd7b | 116 | echo "running userfaultfd_hugetlb" |
2b8713e1 | 117 | echo "---------------------------" |
0627be7d LZ |
118 | # Test requires source and destination huge pages. Size of source |
119 | # (half_ufd_size_MB) is passed as argument to test. | |
120 | ./userfaultfd hugetlb $half_ufd_size_MB 32 $mnt/ufd_test_file | |
9903bd7b MK |
121 | if [ $? -ne 0 ]; then |
122 | echo "[FAIL]" | |
123 | exitcode=1 | |
124 | else | |
125 | echo "[PASS]" | |
126 | fi | |
127 | rm -f $mnt/ufd_test_file | |
128 | ||
2b8713e1 | 129 | echo "-------------------------" |
419624da | 130 | echo "running userfaultfd_shmem" |
2b8713e1 | 131 | echo "-------------------------" |
b6ad1976 | 132 | ./userfaultfd shmem 128 32 |
419624da MR |
133 | if [ $? -ne 0 ]; then |
134 | echo "[FAIL]" | |
135 | exitcode=1 | |
136 | else | |
137 | echo "[PASS]" | |
138 | fi | |
139 | ||
f0f57b2b DY |
140 | #cleanup |
141 | umount $mnt | |
142 | rm -rf $mnt | |
143 | echo $nr_hugepgs > /proc/sys/vm/nr_hugepages | |
bd67d5c1 SJ |
144 | |
145 | echo "-----------------------" | |
146 | echo "running compaction_test" | |
147 | echo "-----------------------" | |
148 | ./compaction_test | |
149 | if [ $? -ne 0 ]; then | |
150 | echo "[FAIL]" | |
151 | exitcode=1 | |
152 | else | |
153 | echo "[PASS]" | |
154 | fi | |
155 | ||
2b8713e1 | 156 | echo "----------------------" |
b3b0d09c | 157 | echo "running on-fault-limit" |
2b8713e1 | 158 | echo "----------------------" |
b3b0d09c EM |
159 | sudo -u nobody ./on-fault-limit |
160 | if [ $? -ne 0 ]; then | |
161 | echo "[FAIL]" | |
162 | exitcode=1 | |
163 | else | |
164 | echo "[PASS]" | |
165 | fi | |
166 | ||
167 | echo "--------------------" | |
168 | echo "running mlock2-tests" | |
169 | echo "--------------------" | |
170 | ./mlock2-tests | |
171 | if [ $? -ne 0 ]; then | |
172 | echo "[FAIL]" | |
173 | exitcode=1 | |
174 | else | |
175 | echo "[PASS]" | |
176 | fi | |
177 | ||
4e5ce33c AK |
178 | echo "-----------------------------" |
179 | echo "running virtual_address_range" | |
180 | echo "-----------------------------" | |
181 | ./virtual_address_range | |
182 | if [ $? -ne 0 ]; then | |
183 | echo "[FAIL]" | |
184 | exitcode=1 | |
185 | else | |
186 | echo "[PASS]" | |
187 | fi | |
188 | ||
235266b8 AK |
189 | echo "-----------------------------" |
190 | echo "running virtual address 128TB switch test" | |
191 | echo "-----------------------------" | |
192 | ./va_128TBswitch | |
193 | if [ $? -ne 0 ]; then | |
194 | echo "[FAIL]" | |
195 | exitcode=1 | |
196 | else | |
197 | echo "[PASS]" | |
198 | fi | |
199 | ||
51a1d165 | 200 | exit $exitcode |