run_vmtests 4.5 KB

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