zram_lib.sh 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236
  1. #!/bin/sh
  2. # Copyright (c) 2015 Oracle and/or its affiliates. All Rights Reserved.
  3. #
  4. # This program is free software; you can redistribute it and/or
  5. # modify it under the terms of the GNU General Public License as
  6. # published by the Free Software Foundation; either version 2 of
  7. # the License, or (at your option) any later version.
  8. #
  9. # This program is distributed in the hope that it would be useful,
  10. # but WITHOUT ANY WARRANTY; without even the implied warranty of
  11. # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  12. # GNU General Public License for more details.
  13. #
  14. # Author: Alexey Kodanev <alexey.kodanev@oracle.com>
  15. # Modified: Naresh Kamboju <naresh.kamboju@linaro.org>
  16. MODULE=0
  17. dev_makeswap=-1
  18. dev_mounted=-1
  19. # Kselftest framework requirement - SKIP code is 4.
  20. ksft_skip=4
  21. trap INT
  22. check_prereqs()
  23. {
  24. local msg="skip all tests:"
  25. local uid=$(id -u)
  26. if [ $uid -ne 0 ]; then
  27. echo $msg must be run as root >&2
  28. exit $ksft_skip
  29. fi
  30. }
  31. zram_cleanup()
  32. {
  33. echo "zram cleanup"
  34. local i=
  35. for i in $(seq 0 $dev_makeswap); do
  36. swapoff /dev/zram$i
  37. done
  38. for i in $(seq 0 $dev_mounted); do
  39. umount /dev/zram$i
  40. done
  41. for i in $(seq 0 $(($dev_num - 1))); do
  42. echo 1 > /sys/block/zram${i}/reset
  43. rm -rf zram$i
  44. done
  45. }
  46. zram_unload()
  47. {
  48. if [ $MODULE -ne 0 ] ; then
  49. echo "zram rmmod zram"
  50. rmmod zram > /dev/null 2>&1
  51. fi
  52. }
  53. zram_load()
  54. {
  55. # check zram module exists
  56. MODULE_PATH=/lib/modules/`uname -r`/kernel/drivers/block/zram/zram.ko
  57. if [ -f $MODULE_PATH ]; then
  58. MODULE=1
  59. echo "create '$dev_num' zram device(s)"
  60. modprobe zram num_devices=$dev_num
  61. if [ $? -ne 0 ]; then
  62. echo "failed to insert zram module"
  63. exit 1
  64. fi
  65. dev_num_created=$(ls /dev/zram* | wc -w)
  66. if [ "$dev_num_created" -ne "$dev_num" ]; then
  67. echo "unexpected num of devices: $dev_num_created"
  68. ERR_CODE=-1
  69. else
  70. echo "zram load module successful"
  71. fi
  72. elif [ -b /dev/zram0 ]; then
  73. echo "/dev/zram0 device file found: OK"
  74. else
  75. echo "ERROR: No zram.ko module or no /dev/zram0 device found"
  76. echo "$TCID : CONFIG_ZRAM is not set"
  77. exit 1
  78. fi
  79. }
  80. zram_max_streams()
  81. {
  82. echo "set max_comp_streams to zram device(s)"
  83. local i=0
  84. for max_s in $zram_max_streams; do
  85. local sys_path="/sys/block/zram${i}/max_comp_streams"
  86. echo $max_s > $sys_path || \
  87. echo "FAIL failed to set '$max_s' to $sys_path"
  88. sleep 1
  89. local max_streams=$(cat $sys_path)
  90. [ "$max_s" -ne "$max_streams" ] && \
  91. echo "FAIL can't set max_streams '$max_s', get $max_stream"
  92. i=$(($i + 1))
  93. echo "$sys_path = '$max_streams' ($i/$dev_num)"
  94. done
  95. echo "zram max streams: OK"
  96. }
  97. zram_compress_alg()
  98. {
  99. echo "test that we can set compression algorithm"
  100. local algs=$(cat /sys/block/zram0/comp_algorithm)
  101. echo "supported algs: $algs"
  102. local i=0
  103. for alg in $zram_algs; do
  104. local sys_path="/sys/block/zram${i}/comp_algorithm"
  105. echo "$alg" > $sys_path || \
  106. echo "FAIL can't set '$alg' to $sys_path"
  107. i=$(($i + 1))
  108. echo "$sys_path = '$alg' ($i/$dev_num)"
  109. done
  110. echo "zram set compression algorithm: OK"
  111. }
  112. zram_set_disksizes()
  113. {
  114. echo "set disk size to zram device(s)"
  115. local i=0
  116. for ds in $zram_sizes; do
  117. local sys_path="/sys/block/zram${i}/disksize"
  118. echo "$ds" > $sys_path || \
  119. echo "FAIL can't set '$ds' to $sys_path"
  120. i=$(($i + 1))
  121. echo "$sys_path = '$ds' ($i/$dev_num)"
  122. done
  123. echo "zram set disksizes: OK"
  124. }
  125. zram_set_memlimit()
  126. {
  127. echo "set memory limit to zram device(s)"
  128. local i=0
  129. for ds in $zram_mem_limits; do
  130. local sys_path="/sys/block/zram${i}/mem_limit"
  131. echo "$ds" > $sys_path || \
  132. echo "FAIL can't set '$ds' to $sys_path"
  133. i=$(($i + 1))
  134. echo "$sys_path = '$ds' ($i/$dev_num)"
  135. done
  136. echo "zram set memory limit: OK"
  137. }
  138. zram_makeswap()
  139. {
  140. echo "make swap with zram device(s)"
  141. local i=0
  142. for i in $(seq 0 $(($dev_num - 1))); do
  143. mkswap /dev/zram$i > err.log 2>&1
  144. if [ $? -ne 0 ]; then
  145. cat err.log
  146. echo "FAIL mkswap /dev/zram$1 failed"
  147. fi
  148. swapon /dev/zram$i > err.log 2>&1
  149. if [ $? -ne 0 ]; then
  150. cat err.log
  151. echo "FAIL swapon /dev/zram$1 failed"
  152. fi
  153. echo "done with /dev/zram$i"
  154. dev_makeswap=$i
  155. done
  156. echo "zram making zram mkswap and swapon: OK"
  157. }
  158. zram_swapoff()
  159. {
  160. local i=
  161. for i in $(seq 0 $dev_makeswap); do
  162. swapoff /dev/zram$i > err.log 2>&1
  163. if [ $? -ne 0 ]; then
  164. cat err.log
  165. echo "FAIL swapoff /dev/zram$i failed"
  166. fi
  167. done
  168. dev_makeswap=-1
  169. echo "zram swapoff: OK"
  170. }
  171. zram_makefs()
  172. {
  173. local i=0
  174. for fs in $zram_filesystems; do
  175. # if requested fs not supported default it to ext2
  176. which mkfs.$fs > /dev/null 2>&1 || fs=ext2
  177. echo "make $fs filesystem on /dev/zram$i"
  178. mkfs.$fs /dev/zram$i > err.log 2>&1
  179. if [ $? -ne 0 ]; then
  180. cat err.log
  181. echo "FAIL failed to make $fs on /dev/zram$i"
  182. fi
  183. i=$(($i + 1))
  184. echo "zram mkfs.$fs: OK"
  185. done
  186. }
  187. zram_mount()
  188. {
  189. local i=0
  190. for i in $(seq 0 $(($dev_num - 1))); do
  191. echo "mount /dev/zram$i"
  192. mkdir zram$i
  193. mount /dev/zram$i zram$i > /dev/null || \
  194. echo "FAIL mount /dev/zram$i failed"
  195. dev_mounted=$i
  196. done
  197. echo "zram mount of zram device(s): OK"
  198. }