run_vmtests 4.3 KB

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