zram_lib.sh 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233
  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. trap INT
  20. check_prereqs()
  21. {
  22. local msg="skip all tests:"
  23. local uid=$(id -u)
  24. if [ $uid -ne 0 ]; then
  25. echo $msg must be run as root >&2
  26. exit 0
  27. fi
  28. }
  29. zram_cleanup()
  30. {
  31. echo "zram cleanup"
  32. local i=
  33. for i in $(seq 0 $dev_makeswap); do
  34. swapoff /dev/zram$i
  35. done
  36. for i in $(seq 0 $dev_mounted); do
  37. umount /dev/zram$i
  38. done
  39. for i in $(seq 0 $(($dev_num - 1))); do
  40. echo 1 > /sys/block/zram${i}/reset
  41. rm -rf zram$i
  42. done
  43. }
  44. zram_unload()
  45. {
  46. if [ $MODULE -ne 0 ] ; then
  47. echo "zram rmmod zram"
  48. rmmod zram > /dev/null 2>&1
  49. fi
  50. }
  51. zram_load()
  52. {
  53. # check zram module exists
  54. MODULE_PATH=/lib/modules/`uname -r`/kernel/drivers/block/zram/zram.ko
  55. if [ -f $MODULE_PATH ]; then
  56. MODULE=1
  57. echo "create '$dev_num' zram device(s)"
  58. modprobe zram num_devices=$dev_num
  59. if [ $? -ne 0 ]; then
  60. echo "failed to insert zram module"
  61. exit 1
  62. fi
  63. dev_num_created=$(ls /dev/zram* | wc -w)
  64. if [ "$dev_num_created" -ne "$dev_num" ]; then
  65. echo "unexpected num of devices: $dev_num_created"
  66. ERR_CODE=-1
  67. else
  68. echo "zram load module successful"
  69. fi
  70. elif [ -b /dev/zram0 ]; then
  71. echo "/dev/zram0 device file found: OK"
  72. else
  73. echo "ERROR: No zram.ko module or no /dev/zram0 device found"
  74. echo "$TCID : CONFIG_ZRAM is not set"
  75. exit 1
  76. fi
  77. }
  78. zram_max_streams()
  79. {
  80. echo "set max_comp_streams to zram device(s)"
  81. local i=0
  82. for max_s in $zram_max_streams; do
  83. local sys_path="/sys/block/zram${i}/max_comp_streams"
  84. echo $max_s > $sys_path || \
  85. echo "FAIL failed to set '$max_s' to $sys_path"
  86. sleep 1
  87. local max_streams=$(cat $sys_path)
  88. [ "$max_s" -ne "$max_streams" ] && \
  89. echo "FAIL can't set max_streams '$max_s', get $max_stream"
  90. i=$(($i + 1))
  91. echo "$sys_path = '$max_streams' ($i/$dev_num)"
  92. done
  93. echo "zram max streams: OK"
  94. }
  95. zram_compress_alg()
  96. {
  97. echo "test that we can set compression algorithm"
  98. local algs=$(cat /sys/block/zram0/comp_algorithm)
  99. echo "supported algs: $algs"
  100. local i=0
  101. for alg in $zram_algs; do
  102. local sys_path="/sys/block/zram${i}/comp_algorithm"
  103. echo "$alg" > $sys_path || \
  104. echo "FAIL can't set '$alg' to $sys_path"
  105. i=$(($i + 1))
  106. echo "$sys_path = '$alg' ($i/$dev_num)"
  107. done
  108. echo "zram set compression algorithm: OK"
  109. }
  110. zram_set_disksizes()
  111. {
  112. echo "set disk size to zram device(s)"
  113. local i=0
  114. for ds in $zram_sizes; do
  115. local sys_path="/sys/block/zram${i}/disksize"
  116. echo "$ds" > $sys_path || \
  117. echo "FAIL can't set '$ds' to $sys_path"
  118. i=$(($i + 1))
  119. echo "$sys_path = '$ds' ($i/$dev_num)"
  120. done
  121. echo "zram set disksizes: OK"
  122. }
  123. zram_set_memlimit()
  124. {
  125. echo "set memory limit to zram device(s)"
  126. local i=0
  127. for ds in $zram_mem_limits; do
  128. local sys_path="/sys/block/zram${i}/mem_limit"
  129. echo "$ds" > $sys_path || \
  130. echo "FAIL can't set '$ds' to $sys_path"
  131. i=$(($i + 1))
  132. echo "$sys_path = '$ds' ($i/$dev_num)"
  133. done
  134. echo "zram set memory limit: OK"
  135. }
  136. zram_makeswap()
  137. {
  138. echo "make swap with zram device(s)"
  139. local i=0
  140. for i in $(seq 0 $(($dev_num - 1))); do
  141. mkswap /dev/zram$i > err.log 2>&1
  142. if [ $? -ne 0 ]; then
  143. cat err.log
  144. echo "FAIL mkswap /dev/zram$1 failed"
  145. fi
  146. swapon /dev/zram$i > err.log 2>&1
  147. if [ $? -ne 0 ]; then
  148. cat err.log
  149. echo "FAIL swapon /dev/zram$1 failed"
  150. fi
  151. echo "done with /dev/zram$i"
  152. dev_makeswap=$i
  153. done
  154. echo "zram making zram mkswap and swapon: OK"
  155. }
  156. zram_swapoff()
  157. {
  158. local i=
  159. for i in $(seq 0 $dev_makeswap); do
  160. swapoff /dev/zram$i > err.log 2>&1
  161. if [ $? -ne 0 ]; then
  162. cat err.log
  163. echo "FAIL swapoff /dev/zram$i failed"
  164. fi
  165. done
  166. dev_makeswap=-1
  167. echo "zram swapoff: OK"
  168. }
  169. zram_makefs()
  170. {
  171. local i=0
  172. for fs in $zram_filesystems; do
  173. # if requested fs not supported default it to ext2
  174. which mkfs.$fs > /dev/null 2>&1 || fs=ext2
  175. echo "make $fs filesystem on /dev/zram$i"
  176. mkfs.$fs /dev/zram$i > err.log 2>&1
  177. if [ $? -ne 0 ]; then
  178. cat err.log
  179. echo "FAIL failed to make $fs on /dev/zram$i"
  180. fi
  181. i=$(($i + 1))
  182. echo "zram mkfs.$fs: OK"
  183. done
  184. }
  185. zram_mount()
  186. {
  187. local i=0
  188. for i in $(seq 0 $(($dev_num - 1))); do
  189. echo "mount /dev/zram$i"
  190. mkdir zram$i
  191. mount /dev/zram$i zram$i > /dev/null || \
  192. echo "FAIL mount /dev/zram$i failed"
  193. dev_mounted=$i
  194. done
  195. echo "zram mount of zram device(s): OK"
  196. }