zram_lib.sh 4.8 KB

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