Linux kernel mirror (for testing)
git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel
os
linux
1#!/bin/bash
2# SPDX-License-Identifier: GPL-2.0
3#please run as root
4
5# Kselftest framework requirement - SKIP code is 4.
6ksft_skip=4
7
8mnt=./huge
9exitcode=0
10
11#get huge pagesize and freepages from /proc/meminfo
12while 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
19done < /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.
26nr_cpus=$(nproc)
27hpgsize_MB=$((hpgsize_KB / 1024))
28half_ufd_size_MB=$((((nr_cpus * hpgsize_MB + 127) / 128) * 128))
29needmem_KB=$((half_ufd_size_MB * 2 * 1024))
30
31#set proper nr_hugepages
32if [ -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
56else
57 echo "no hugetlbfs support in kernel?"
58 exit 1
59fi
60
61#filter 64bit architectures
62ARCH64STR="arm64 ia64 mips64 parisc64 ppc64 ppc64le riscv64 s390x sh64 sparc64 x86_64"
63if [ -z $ARCH ]; then
64 ARCH=`uname -m 2>/dev/null | sed -e 's/aarch64.*/arm64/'`
65fi
66VADDR64=0
67echo "$ARCH64STR" | grep $ARCH && VADDR64=1
68
69mkdir $mnt
70mount -t hugetlbfs none $mnt
71
72echo "---------------------"
73echo "running hugepage-mmap"
74echo "---------------------"
75./hugepage-mmap
76if [ $? -ne 0 ]; then
77 echo "[FAIL]"
78 exitcode=1
79else
80 echo "[PASS]"
81fi
82
83shmmax=`cat /proc/sys/kernel/shmmax`
84shmall=`cat /proc/sys/kernel/shmall`
85echo 268435456 > /proc/sys/kernel/shmmax
86echo 4194304 > /proc/sys/kernel/shmall
87echo "--------------------"
88echo "running hugepage-shm"
89echo "--------------------"
90./hugepage-shm
91if [ $? -ne 0 ]; then
92 echo "[FAIL]"
93 exitcode=1
94else
95 echo "[PASS]"
96fi
97echo $shmmax > /proc/sys/kernel/shmmax
98echo $shmall > /proc/sys/kernel/shmall
99
100echo "-------------------"
101echo "running map_hugetlb"
102echo "-------------------"
103./map_hugetlb
104if [ $? -ne 0 ]; then
105 echo "[FAIL]"
106 exitcode=1
107else
108 echo "[PASS]"
109fi
110
111echo "NOTE: The above hugetlb tests provide minimal coverage. Use"
112echo " https://github.com/libhugetlbfs/libhugetlbfs.git for"
113echo " hugetlb regression testing."
114
115echo "---------------------------"
116echo "running map_fixed_noreplace"
117echo "---------------------------"
118./map_fixed_noreplace
119if [ $? -ne 0 ]; then
120 echo "[FAIL]"
121 exitcode=1
122else
123 echo "[PASS]"
124fi
125
126echo "------------------------------------------------------"
127echo "running: gup_test -u # get_user_pages_fast() benchmark"
128echo "------------------------------------------------------"
129./gup_test -u
130if [ $? -ne 0 ]; then
131 echo "[FAIL]"
132 exitcode=1
133else
134 echo "[PASS]"
135fi
136
137echo "------------------------------------------------------"
138echo "running: gup_test -a # pin_user_pages_fast() benchmark"
139echo "------------------------------------------------------"
140./gup_test -a
141if [ $? -ne 0 ]; then
142 echo "[FAIL]"
143 exitcode=1
144else
145 echo "[PASS]"
146fi
147
148echo "------------------------------------------------------------"
149echo "# Dump pages 0, 19, and 4096, using pin_user_pages:"
150echo "running: gup_test -ct -F 0x1 0 19 0x1000 # dump_page() test"
151echo "------------------------------------------------------------"
152./gup_test -ct -F 0x1 0 19 0x1000
153if [ $? -ne 0 ]; then
154 echo "[FAIL]"
155 exitcode=1
156else
157 echo "[PASS]"
158fi
159
160echo "-------------------"
161echo "running userfaultfd"
162echo "-------------------"
163./userfaultfd anon 20 16
164if [ $? -ne 0 ]; then
165 echo "[FAIL]"
166 exitcode=1
167else
168 echo "[PASS]"
169fi
170
171echo "---------------------------"
172echo "running userfaultfd_hugetlb"
173echo "---------------------------"
174# Test requires source and destination huge pages. Size of source
175# (half_ufd_size_MB) is passed as argument to test.
176./userfaultfd hugetlb $half_ufd_size_MB 32 $mnt/ufd_test_file
177if [ $? -ne 0 ]; then
178 echo "[FAIL]"
179 exitcode=1
180else
181 echo "[PASS]"
182fi
183rm -f $mnt/ufd_test_file
184
185echo "-------------------------"
186echo "running userfaultfd_shmem"
187echo "-------------------------"
188./userfaultfd shmem 20 16
189if [ $? -ne 0 ]; then
190 echo "[FAIL]"
191 exitcode=1
192else
193 echo "[PASS]"
194fi
195
196#cleanup
197umount $mnt
198rm -rf $mnt
199echo $nr_hugepgs > /proc/sys/vm/nr_hugepages
200
201echo "-----------------------"
202echo "running compaction_test"
203echo "-----------------------"
204./compaction_test
205if [ $? -ne 0 ]; then
206 echo "[FAIL]"
207 exitcode=1
208else
209 echo "[PASS]"
210fi
211
212echo "----------------------"
213echo "running on-fault-limit"
214echo "----------------------"
215sudo -u nobody ./on-fault-limit
216if [ $? -ne 0 ]; then
217 echo "[FAIL]"
218 exitcode=1
219else
220 echo "[PASS]"
221fi
222
223echo "--------------------"
224echo "running map_populate"
225echo "--------------------"
226./map_populate
227if [ $? -ne 0 ]; then
228 echo "[FAIL]"
229 exitcode=1
230else
231 echo "[PASS]"
232fi
233
234echo "-------------------------"
235echo "running mlock-random-test"
236echo "-------------------------"
237./mlock-random-test
238if [ $? -ne 0 ]; then
239 echo "[FAIL]"
240 exitcode=1
241else
242 echo "[PASS]"
243fi
244
245echo "--------------------"
246echo "running mlock2-tests"
247echo "--------------------"
248./mlock2-tests
249if [ $? -ne 0 ]; then
250 echo "[FAIL]"
251 exitcode=1
252else
253 echo "[PASS]"
254fi
255
256echo "-------------------"
257echo "running mremap_test"
258echo "-------------------"
259./mremap_test
260if [ $? -ne 0 ]; then
261 echo "[FAIL]"
262 exitcode=1
263else
264 echo "[PASS]"
265fi
266
267echo "-----------------"
268echo "running thuge-gen"
269echo "-----------------"
270./thuge-gen
271if [ $? -ne 0 ]; then
272 echo "[FAIL]"
273 exitcode=1
274else
275 echo "[PASS]"
276fi
277
278if [ $VADDR64 -ne 0 ]; then
279echo "-----------------------------"
280echo "running virtual_address_range"
281echo "-----------------------------"
282./virtual_address_range
283if [ $? -ne 0 ]; then
284 echo "[FAIL]"
285 exitcode=1
286else
287 echo "[PASS]"
288fi
289
290echo "-----------------------------"
291echo "running virtual address 128TB switch test"
292echo "-----------------------------"
293./va_128TBswitch
294if [ $? -ne 0 ]; then
295 echo "[FAIL]"
296 exitcode=1
297else
298 echo "[PASS]"
299fi
300fi # VADDR64
301
302echo "------------------------------------"
303echo "running vmalloc stability smoke test"
304echo "------------------------------------"
305./test_vmalloc.sh smoke
306ret_val=$?
307
308if [ $ret_val -eq 0 ]; then
309 echo "[PASS]"
310elif [ $ret_val -eq $ksft_skip ]; then
311 echo "[SKIP]"
312 exitcode=$ksft_skip
313else
314 echo "[FAIL]"
315 exitcode=1
316fi
317
318echo "------------------------------------"
319echo "running MREMAP_DONTUNMAP smoke test"
320echo "------------------------------------"
321./mremap_dontunmap
322ret_val=$?
323
324if [ $ret_val -eq 0 ]; then
325 echo "[PASS]"
326elif [ $ret_val -eq $ksft_skip ]; then
327 echo "[SKIP]"
328 exitcode=$ksft_skip
329else
330 echo "[FAIL]"
331 exitcode=1
332fi
333
334echo "running HMM smoke test"
335echo "------------------------------------"
336./test_hmm.sh smoke
337ret_val=$?
338
339if [ $ret_val -eq 0 ]; then
340 echo "[PASS]"
341elif [ $ret_val -eq $ksft_skip ]; then
342 echo "[SKIP]"
343 exitcode=$ksft_skip
344else
345 echo "[FAIL]"
346 exitcode=1
347fi
348
349exit $exitcode