Loading...
1#!/bin/bash
2#please run as root
3
4#we need 256M, below is the size in kB
5needmem=262144
6mnt=./huge
7exitcode=0
8
9#get pagesize and freepages from /proc/meminfo
10while 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
17done < /proc/meminfo
18
19#set proper nr_hugepages
20if [ -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
44else
45 echo "no hugetlbfs support in kernel?"
46 exit 1
47fi
48
49mkdir $mnt
50mount -t hugetlbfs none $mnt
51
52echo "--------------------"
53echo "running hugepage-mmap"
54echo "--------------------"
55./hugepage-mmap
56if [ $? -ne 0 ]; then
57 echo "[FAIL]"
58 exitcode=1
59else
60 echo "[PASS]"
61fi
62
63shmmax=`cat /proc/sys/kernel/shmmax`
64shmall=`cat /proc/sys/kernel/shmall`
65echo 268435456 > /proc/sys/kernel/shmmax
66echo 4194304 > /proc/sys/kernel/shmall
67echo "--------------------"
68echo "running hugepage-shm"
69echo "--------------------"
70./hugepage-shm
71if [ $? -ne 0 ]; then
72 echo "[FAIL]"
73 exitcode=1
74else
75 echo "[PASS]"
76fi
77echo $shmmax > /proc/sys/kernel/shmmax
78echo $shmall > /proc/sys/kernel/shmall
79
80echo "--------------------"
81echo "running map_hugetlb"
82echo "--------------------"
83./map_hugetlb
84if [ $? -ne 0 ]; then
85 echo "[FAIL]"
86 exitcode=1
87else
88 echo "[PASS]"
89fi
90
91echo "NOTE: The above hugetlb tests provide minimal coverage. Use"
92echo " https://github.com/libhugetlbfs/libhugetlbfs.git for"
93echo " hugetlb regression testing."
94
95echo "--------------------"
96echo "running userfaultfd"
97echo "--------------------"
98./userfaultfd 128 32
99if [ $? -ne 0 ]; then
100 echo "[FAIL]"
101 exitcode=1
102else
103 echo "[PASS]"
104fi
105
106#cleanup
107umount $mnt
108rm -rf $mnt
109echo $nr_hugepgs > /proc/sys/vm/nr_hugepages
110
111echo "-----------------------"
112echo "running compaction_test"
113echo "-----------------------"
114./compaction_test
115if [ $? -ne 0 ]; then
116 echo "[FAIL]"
117 exitcode=1
118else
119 echo "[PASS]"
120fi
121
122echo "--------------------"
123echo "running on-fault-limit"
124echo "--------------------"
125sudo -u nobody ./on-fault-limit
126if [ $? -ne 0 ]; then
127 echo "[FAIL]"
128 exitcode=1
129else
130 echo "[PASS]"
131fi
132
133echo "--------------------"
134echo "running mlock2-tests"
135echo "--------------------"
136./mlock2-tests
137if [ $? -ne 0 ]; then
138 echo "[FAIL]"
139 exitcode=1
140else
141 echo "[PASS]"
142fi
143
144exit $exitcode
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_benchmark -U' (normal/slow gup)"
128echo "--------------------------------------------"
129./gup_benchmark -U
130if [ $? -ne 0 ]; then
131 echo "[FAIL]"
132 exitcode=1
133else
134 echo "[PASS]"
135fi
136
137echo "------------------------------------------"
138echo "running gup_benchmark -b (pin_user_pages)"
139echo "------------------------------------------"
140./gup_benchmark -b
141if [ $? -ne 0 ]; then
142 echo "[FAIL]"
143 exitcode=1
144else
145 echo "[PASS]"
146fi
147
148echo "-------------------"
149echo "running userfaultfd"
150echo "-------------------"
151./userfaultfd anon 128 32
152if [ $? -ne 0 ]; then
153 echo "[FAIL]"
154 exitcode=1
155else
156 echo "[PASS]"
157fi
158
159echo "---------------------------"
160echo "running userfaultfd_hugetlb"
161echo "---------------------------"
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
165if [ $? -ne 0 ]; then
166 echo "[FAIL]"
167 exitcode=1
168else
169 echo "[PASS]"
170fi
171rm -f $mnt/ufd_test_file
172
173echo "-------------------------"
174echo "running userfaultfd_shmem"
175echo "-------------------------"
176./userfaultfd shmem 128 32
177if [ $? -ne 0 ]; then
178 echo "[FAIL]"
179 exitcode=1
180else
181 echo "[PASS]"
182fi
183
184#cleanup
185umount $mnt
186rm -rf $mnt
187echo $nr_hugepgs > /proc/sys/vm/nr_hugepages
188
189echo "-----------------------"
190echo "running compaction_test"
191echo "-----------------------"
192./compaction_test
193if [ $? -ne 0 ]; then
194 echo "[FAIL]"
195 exitcode=1
196else
197 echo "[PASS]"
198fi
199
200echo "----------------------"
201echo "running on-fault-limit"
202echo "----------------------"
203sudo -u nobody ./on-fault-limit
204if [ $? -ne 0 ]; then
205 echo "[FAIL]"
206 exitcode=1
207else
208 echo "[PASS]"
209fi
210
211echo "--------------------"
212echo "running map_populate"
213echo "--------------------"
214./map_populate
215if [ $? -ne 0 ]; then
216 echo "[FAIL]"
217 exitcode=1
218else
219 echo "[PASS]"
220fi
221
222echo "-------------------------"
223echo "running mlock-random-test"
224echo "-------------------------"
225./mlock-random-test
226if [ $? -ne 0 ]; then
227 echo "[FAIL]"
228 exitcode=1
229else
230 echo "[PASS]"
231fi
232
233echo "--------------------"
234echo "running mlock2-tests"
235echo "--------------------"
236./mlock2-tests
237if [ $? -ne 0 ]; then
238 echo "[FAIL]"
239 exitcode=1
240else
241 echo "[PASS]"
242fi
243
244echo "-----------------"
245echo "running thuge-gen"
246echo "-----------------"
247./thuge-gen
248if [ $? -ne 0 ]; then
249 echo "[FAIL]"
250 exitcode=1
251else
252 echo "[PASS]"
253fi
254
255if [ $VADDR64 -ne 0 ]; then
256echo "-----------------------------"
257echo "running virtual_address_range"
258echo "-----------------------------"
259./virtual_address_range
260if [ $? -ne 0 ]; then
261 echo "[FAIL]"
262 exitcode=1
263else
264 echo "[PASS]"
265fi
266
267echo "-----------------------------"
268echo "running virtual address 128TB switch test"
269echo "-----------------------------"
270./va_128TBswitch
271if [ $? -ne 0 ]; then
272 echo "[FAIL]"
273 exitcode=1
274else
275 echo "[PASS]"
276fi
277fi # VADDR64
278
279echo "------------------------------------"
280echo "running vmalloc stability smoke test"
281echo "------------------------------------"
282./test_vmalloc.sh smoke
283ret_val=$?
284
285if [ $ret_val -eq 0 ]; then
286 echo "[PASS]"
287elif [ $ret_val -eq $ksft_skip ]; then
288 echo "[SKIP]"
289 exitcode=$ksft_skip
290else
291 echo "[FAIL]"
292 exitcode=1
293fi
294
295echo "------------------------------------"
296echo "running MREMAP_DONTUNMAP smoke test"
297echo "------------------------------------"
298./mremap_dontunmap
299ret_val=$?
300
301if [ $ret_val -eq 0 ]; then
302 echo "[PASS]"
303elif [ $ret_val -eq $ksft_skip ]; then
304 echo "[SKIP]"
305 exitcode=$ksft_skip
306else
307 echo "[FAIL]"
308 exitcode=1
309fi
310
311echo "running HMM smoke test"
312echo "------------------------------------"
313./test_hmm.sh smoke
314ret_val=$?
315
316if [ $ret_val -eq 0 ]; then
317 echo "[PASS]"
318elif [ $ret_val -eq $ksft_skip ]; then
319 echo "[SKIP]"
320 exitcode=$ksft_skip
321else
322 echo "[FAIL]"
323 exitcode=1
324fi
325
326exit $exitcode