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
5mnt=./huge
6exitcode=0
7
8#get huge pagesize and freepages from /proc/meminfo
9while read name size unit; do
10 if [ "$name" = "HugePages_Free:" ]; then
11 freepgs=$size
12 fi
13 if [ "$name" = "Hugepagesize:" ]; then
14 hpgsize_KB=$size
15 fi
16done < /proc/meminfo
17
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.
23nr_cpus=$(nproc)
24hpgsize_MB=$((hpgsize_KB / 1024))
25half_ufd_size_MB=$((((nr_cpus * hpgsize_MB + 127) / 128) * 128))
26needmem_KB=$((half_ufd_size_MB * 2 * 1024))
27
28#set proper nr_hugepages
29if [ -n "$freepgs" ] && [ -n "$hpgsize_KB" ]; then
30 nr_hugepgs=`cat /proc/sys/vm/nr_hugepages`
31 needpgs=$((needmem_KB / hpgsize_KB))
32 tries=2
33 while [ $tries -gt 0 ] && [ $freepgs -lt $needpgs ]; do
34 lackpgs=$(( $needpgs - $freepgs ))
35 echo 3 > /proc/sys/vm/drop_caches
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
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
52 fi
53else
54 echo "no hugetlbfs support in kernel?"
55 exit 1
56fi
57
58mkdir $mnt
59mount -t hugetlbfs none $mnt
60
61echo "---------------------"
62echo "running hugepage-mmap"
63echo "---------------------"
64./hugepage-mmap
65if [ $? -ne 0 ]; then
66 echo "[FAIL]"
67 exitcode=1
68else
69 echo "[PASS]"
70fi
71
72shmmax=`cat /proc/sys/kernel/shmmax`
73shmall=`cat /proc/sys/kernel/shmall`
74echo 268435456 > /proc/sys/kernel/shmmax
75echo 4194304 > /proc/sys/kernel/shmall
76echo "--------------------"
77echo "running hugepage-shm"
78echo "--------------------"
79./hugepage-shm
80if [ $? -ne 0 ]; then
81 echo "[FAIL]"
82 exitcode=1
83else
84 echo "[PASS]"
85fi
86echo $shmmax > /proc/sys/kernel/shmmax
87echo $shmall > /proc/sys/kernel/shmall
88
89echo "-------------------"
90echo "running map_hugetlb"
91echo "-------------------"
92./map_hugetlb
93if [ $? -ne 0 ]; then
94 echo "[FAIL]"
95 exitcode=1
96else
97 echo "[PASS]"
98fi
99
100echo "NOTE: The above hugetlb tests provide minimal coverage. Use"
101echo " https://github.com/libhugetlbfs/libhugetlbfs.git for"
102echo " hugetlb regression testing."
103
104echo "-------------------"
105echo "running userfaultfd"
106echo "-------------------"
107./userfaultfd anon 128 32
108if [ $? -ne 0 ]; then
109 echo "[FAIL]"
110 exitcode=1
111else
112 echo "[PASS]"
113fi
114
115echo "---------------------------"
116echo "running userfaultfd_hugetlb"
117echo "---------------------------"
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
121if [ $? -ne 0 ]; then
122 echo "[FAIL]"
123 exitcode=1
124else
125 echo "[PASS]"
126fi
127rm -f $mnt/ufd_test_file
128
129echo "-------------------------"
130echo "running userfaultfd_shmem"
131echo "-------------------------"
132./userfaultfd shmem 128 32
133if [ $? -ne 0 ]; then
134 echo "[FAIL]"
135 exitcode=1
136else
137 echo "[PASS]"
138fi
139
140#cleanup
141umount $mnt
142rm -rf $mnt
143echo $nr_hugepgs > /proc/sys/vm/nr_hugepages
144
145echo "-----------------------"
146echo "running compaction_test"
147echo "-----------------------"
148./compaction_test
149if [ $? -ne 0 ]; then
150 echo "[FAIL]"
151 exitcode=1
152else
153 echo "[PASS]"
154fi
155
156echo "----------------------"
157echo "running on-fault-limit"
158echo "----------------------"
159sudo -u nobody ./on-fault-limit
160if [ $? -ne 0 ]; then
161 echo "[FAIL]"
162 exitcode=1
163else
164 echo "[PASS]"
165fi
166
167echo "--------------------"
168echo "running mlock2-tests"
169echo "--------------------"
170./mlock2-tests
171if [ $? -ne 0 ]; then
172 echo "[FAIL]"
173 exitcode=1
174else
175 echo "[PASS]"
176fi
177
178echo "-----------------------------"
179echo "running virtual_address_range"
180echo "-----------------------------"
181./virtual_address_range
182if [ $? -ne 0 ]; then
183 echo "[FAIL]"
184 exitcode=1
185else
186 echo "[PASS]"
187fi
188
189echo "-----------------------------"
190echo "running virtual address 128TB switch test"
191echo "-----------------------------"
192./va_128TBswitch
193if [ $? -ne 0 ]; then
194 echo "[FAIL]"
195 exitcode=1
196else
197 echo "[PASS]"
198fi
199
200exit $exitcode