OSDN Git Service

scsi: target/iblock: fix WRITE SAME zeroing
[tomoyo/tomoyo-test1.git] / tools / testing / selftests / vm / run_vmtests
1 #!/bin/bash
2 # SPDX-License-Identifier: GPL-2.0
3 #please run as root
4
5 # Kselftest framework requirement - SKIP code is 4.
6 ksft_skip=4
7
8 mnt=./huge
9 exitcode=0
10
11 #get huge pagesize and freepages from /proc/meminfo
12 while read name size unit; do
13         if [ "$name" = "HugePages_Free:" ]; then
14                 freepgs=$size
15         fi
16         if [ "$name" = "Hugepagesize:" ]; then
17                 hpgsize_KB=$size
18         fi
19 done < /proc/meminfo
20
21 # Simple hugetlbfs tests have a hardcoded minimum requirement of
22 # huge pages totaling 256MB (262144KB) in size.  The userfaultfd
23 # hugetlb test requires a minimum of 2 * nr_cpus huge pages.  Take
24 # both of these requirements into account and attempt to increase
25 # number of huge pages available.
26 nr_cpus=$(nproc)
27 hpgsize_MB=$((hpgsize_KB / 1024))
28 half_ufd_size_MB=$((((nr_cpus * hpgsize_MB + 127) / 128) * 128))
29 needmem_KB=$((half_ufd_size_MB * 2 * 1024))
30
31 #set proper nr_hugepages
32 if [ -n "$freepgs" ] && [ -n "$hpgsize_KB" ]; then
33         nr_hugepgs=`cat /proc/sys/vm/nr_hugepages`
34         needpgs=$((needmem_KB / hpgsize_KB))
35         tries=2
36         while [ $tries -gt 0 ] && [ $freepgs -lt $needpgs ]; do
37                 lackpgs=$(( $needpgs - $freepgs ))
38                 echo 3 > /proc/sys/vm/drop_caches
39                 echo $(( $lackpgs + $nr_hugepgs )) > /proc/sys/vm/nr_hugepages
40                 if [ $? -ne 0 ]; then
41                         echo "Please run this test as root"
42                         exit $ksft_skip
43                 fi
44                 while read name size unit; do
45                         if [ "$name" = "HugePages_Free:" ]; then
46                                 freepgs=$size
47                         fi
48                 done < /proc/meminfo
49                 tries=$((tries - 1))
50         done
51         if [ $freepgs -lt $needpgs ]; then
52                 printf "Not enough huge pages available (%d < %d)\n" \
53                        $freepgs $needpgs
54                 exit 1
55         fi
56 else
57         echo "no hugetlbfs support in kernel?"
58         exit 1
59 fi
60
61 #filter 64bit architectures
62 ARCH64STR="arm64 ia64 mips64 parisc64 ppc64 riscv64 s390x sh64 sparc64 x86_64"
63 if [ -z $ARCH ]; then
64   ARCH=`uname -m 2>/dev/null | sed -e 's/aarch64.*/arm64/'`
65 fi
66 VADDR64=0
67 echo "$ARCH64STR" | grep $ARCH && VADDR64=1
68
69 mkdir $mnt
70 mount -t hugetlbfs none $mnt
71
72 echo "---------------------"
73 echo "running hugepage-mmap"
74 echo "---------------------"
75 ./hugepage-mmap
76 if [ $? -ne 0 ]; then
77         echo "[FAIL]"
78         exitcode=1
79 else
80         echo "[PASS]"
81 fi
82
83 shmmax=`cat /proc/sys/kernel/shmmax`
84 shmall=`cat /proc/sys/kernel/shmall`
85 echo 268435456 > /proc/sys/kernel/shmmax
86 echo 4194304 > /proc/sys/kernel/shmall
87 echo "--------------------"
88 echo "running hugepage-shm"
89 echo "--------------------"
90 ./hugepage-shm
91 if [ $? -ne 0 ]; then
92         echo "[FAIL]"
93         exitcode=1
94 else
95         echo "[PASS]"
96 fi
97 echo $shmmax > /proc/sys/kernel/shmmax
98 echo $shmall > /proc/sys/kernel/shmall
99
100 echo "-------------------"
101 echo "running map_hugetlb"
102 echo "-------------------"
103 ./map_hugetlb
104 if [ $? -ne 0 ]; then
105         echo "[FAIL]"
106         exitcode=1
107 else
108         echo "[PASS]"
109 fi
110
111 echo "NOTE: The above hugetlb tests provide minimal coverage.  Use"
112 echo "      https://github.com/libhugetlbfs/libhugetlbfs.git for"
113 echo "      hugetlb regression testing."
114
115 echo "---------------------------"
116 echo "running map_fixed_noreplace"
117 echo "---------------------------"
118 ./map_fixed_noreplace
119 if [ $? -ne 0 ]; then
120         echo "[FAIL]"
121         exitcode=1
122 else
123         echo "[PASS]"
124 fi
125
126 echo "--------------------------------------------"
127 echo "running 'gup_benchmark -U' (normal/slow gup)"
128 echo "--------------------------------------------"
129 ./gup_benchmark -U
130 if [ $? -ne 0 ]; then
131         echo "[FAIL]"
132         exitcode=1
133 else
134         echo "[PASS]"
135 fi
136
137 echo "------------------------------------------"
138 echo "running gup_benchmark -b (pin_user_pages)"
139 echo "------------------------------------------"
140 ./gup_benchmark -b
141 if [ $? -ne 0 ]; then
142         echo "[FAIL]"
143         exitcode=1
144 else
145         echo "[PASS]"
146 fi
147
148 echo "-------------------"
149 echo "running userfaultfd"
150 echo "-------------------"
151 ./userfaultfd anon 128 32
152 if [ $? -ne 0 ]; then
153         echo "[FAIL]"
154         exitcode=1
155 else
156         echo "[PASS]"
157 fi
158
159 echo "---------------------------"
160 echo "running userfaultfd_hugetlb"
161 echo "---------------------------"
162 # Test requires source and destination huge pages.  Size of source
163 # (half_ufd_size_MB) is passed as argument to test.
164 ./userfaultfd hugetlb $half_ufd_size_MB 32 $mnt/ufd_test_file
165 if [ $? -ne 0 ]; then
166         echo "[FAIL]"
167         exitcode=1
168 else
169         echo "[PASS]"
170 fi
171 rm -f $mnt/ufd_test_file
172
173 echo "-------------------------"
174 echo "running userfaultfd_shmem"
175 echo "-------------------------"
176 ./userfaultfd shmem 128 32
177 if [ $? -ne 0 ]; then
178         echo "[FAIL]"
179         exitcode=1
180 else
181         echo "[PASS]"
182 fi
183
184 #cleanup
185 umount $mnt
186 rm -rf $mnt
187 echo $nr_hugepgs > /proc/sys/vm/nr_hugepages
188
189 echo "-----------------------"
190 echo "running compaction_test"
191 echo "-----------------------"
192 ./compaction_test
193 if [ $? -ne 0 ]; then
194         echo "[FAIL]"
195         exitcode=1
196 else
197         echo "[PASS]"
198 fi
199
200 echo "----------------------"
201 echo "running on-fault-limit"
202 echo "----------------------"
203 sudo -u nobody ./on-fault-limit
204 if [ $? -ne 0 ]; then
205         echo "[FAIL]"
206         exitcode=1
207 else
208         echo "[PASS]"
209 fi
210
211 echo "--------------------"
212 echo "running map_populate"
213 echo "--------------------"
214 ./map_populate
215 if [ $? -ne 0 ]; then
216         echo "[FAIL]"
217         exitcode=1
218 else
219         echo "[PASS]"
220 fi
221
222 echo "-------------------------"
223 echo "running mlock-random-test"
224 echo "-------------------------"
225 ./mlock-random-test
226 if [ $? -ne 0 ]; then
227         echo "[FAIL]"
228         exitcode=1
229 else
230         echo "[PASS]"
231 fi
232
233 echo "--------------------"
234 echo "running mlock2-tests"
235 echo "--------------------"
236 ./mlock2-tests
237 if [ $? -ne 0 ]; then
238         echo "[FAIL]"
239         exitcode=1
240 else
241         echo "[PASS]"
242 fi
243
244 echo "-----------------"
245 echo "running thuge-gen"
246 echo "-----------------"
247 ./thuge-gen
248 if [ $? -ne 0 ]; then
249         echo "[FAIL]"
250         exitcode=1
251 else
252         echo "[PASS]"
253 fi
254
255 if [ $VADDR64 -ne 0 ]; then
256 echo "-----------------------------"
257 echo "running virtual_address_range"
258 echo "-----------------------------"
259 ./virtual_address_range
260 if [ $? -ne 0 ]; then
261         echo "[FAIL]"
262         exitcode=1
263 else
264         echo "[PASS]"
265 fi
266
267 echo "-----------------------------"
268 echo "running virtual address 128TB switch test"
269 echo "-----------------------------"
270 ./va_128TBswitch
271 if [ $? -ne 0 ]; then
272     echo "[FAIL]"
273     exitcode=1
274 else
275     echo "[PASS]"
276 fi
277 fi # VADDR64
278
279 echo "------------------------------------"
280 echo "running vmalloc stability smoke test"
281 echo "------------------------------------"
282 ./test_vmalloc.sh smoke
283 ret_val=$?
284
285 if [ $ret_val -eq 0 ]; then
286         echo "[PASS]"
287 elif [ $ret_val -eq $ksft_skip ]; then
288          echo "[SKIP]"
289          exitcode=$ksft_skip
290 else
291         echo "[FAIL]"
292         exitcode=1
293 fi
294
295 echo "------------------------------------"
296 echo "running MREMAP_DONTUNMAP smoke test"
297 echo "------------------------------------"
298 ./mremap_dontunmap
299 ret_val=$?
300
301 if [ $ret_val -eq 0 ]; then
302         echo "[PASS]"
303 elif [ $ret_val -eq $ksft_skip ]; then
304          echo "[SKIP]"
305          exitcode=$ksft_skip
306 else
307         echo "[FAIL]"
308         exitcode=1
309 fi
310 exit $exitcode