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