Back to home page

OSCL-LXR

 
 

    


0001 #!/bin/sh
0002 # SPDX-License-Identifier: GPL-2.0-or-later
0003 # Copyright (c) 2015 Oracle and/or its affiliates. All Rights Reserved.
0004 #
0005 # Author: Alexey Kodanev <alexey.kodanev@oracle.com>
0006 # Modified: Naresh Kamboju <naresh.kamboju@linaro.org>
0007 
0008 dev_makeswap=-1
0009 dev_mounted=-1
0010 dev_start=0
0011 dev_end=-1
0012 module_load=-1
0013 sys_control=-1
0014 # Kselftest framework requirement - SKIP code is 4.
0015 ksft_skip=4
0016 kernel_version=`uname -r | cut -d'.' -f1,2`
0017 kernel_major=${kernel_version%.*}
0018 kernel_minor=${kernel_version#*.}
0019 
0020 trap INT
0021 
0022 check_prereqs()
0023 {
0024         local msg="skip all tests:"
0025         local uid=$(id -u)
0026 
0027         if [ $uid -ne 0 ]; then
0028                 echo $msg must be run as root >&2
0029                 exit $ksft_skip
0030         fi
0031 }
0032 
0033 kernel_gte()
0034 {
0035         major=${1%.*}
0036         minor=${1#*.}
0037 
0038         if [ $kernel_major -gt $major ]; then
0039                 return 0
0040         elif [[ $kernel_major -eq $major && $kernel_minor -ge $minor ]]; then
0041                 return 0
0042         fi
0043 
0044         return 1
0045 }
0046 
0047 zram_cleanup()
0048 {
0049         echo "zram cleanup"
0050         local i=
0051         for i in $(seq $dev_start $dev_makeswap); do
0052                 swapoff /dev/zram$i
0053         done
0054 
0055         for i in $(seq $dev_start $dev_mounted); do
0056                 umount /dev/zram$i
0057         done
0058 
0059         for i in $(seq $dev_start $dev_end); do
0060                 echo 1 > /sys/block/zram${i}/reset
0061                 rm -rf zram$i
0062         done
0063 
0064         if [ $sys_control -eq 1 ]; then
0065                 for i in $(seq $dev_start $dev_end); do
0066                         echo $i > /sys/class/zram-control/hot_remove
0067                 done
0068         fi
0069 
0070         if [ $module_load -eq 1 ]; then
0071                 rmmod zram > /dev/null 2>&1
0072         fi
0073 }
0074 
0075 zram_load()
0076 {
0077         echo "create '$dev_num' zram device(s)"
0078 
0079         # zram module loaded, new kernel
0080         if [ -d "/sys/class/zram-control" ]; then
0081                 echo "zram modules already loaded, kernel supports" \
0082                         "zram-control interface"
0083                 dev_start=$(ls /dev/zram* | wc -w)
0084                 dev_end=$(($dev_start + $dev_num - 1))
0085                 sys_control=1
0086 
0087                 for i in $(seq $dev_start $dev_end); do
0088                         cat /sys/class/zram-control/hot_add > /dev/null
0089                 done
0090 
0091                 echo "all zram devices (/dev/zram$dev_start~$dev_end" \
0092                         "successfully created"
0093                 return 0
0094         fi
0095 
0096         # detect old kernel or built-in
0097         modprobe zram num_devices=$dev_num
0098         if [ ! -d "/sys/class/zram-control" ]; then
0099                 if grep -q '^zram' /proc/modules; then
0100                         rmmod zram > /dev/null 2>&1
0101                         if [ $? -ne 0 ]; then
0102                                 echo "zram module is being used on old kernel" \
0103                                         "without zram-control interface"
0104                                 exit $ksft_skip
0105                         fi
0106                 else
0107                         echo "test needs CONFIG_ZRAM=m on old kernel without" \
0108                                 "zram-control interface"
0109                         exit $ksft_skip
0110                 fi
0111                 modprobe zram num_devices=$dev_num
0112         fi
0113 
0114         module_load=1
0115         dev_end=$(($dev_num - 1))
0116         echo "all zram devices (/dev/zram0~$dev_end) successfully created"
0117 }
0118 
0119 zram_max_streams()
0120 {
0121         echo "set max_comp_streams to zram device(s)"
0122 
0123         kernel_gte 4.7
0124         if [ $? -eq 0 ]; then
0125                 echo "The device attribute max_comp_streams was"\
0126                                "deprecated in 4.7"
0127                 return 0
0128         fi
0129 
0130         local i=$dev_start
0131         for max_s in $zram_max_streams; do
0132                 local sys_path="/sys/block/zram${i}/max_comp_streams"
0133                 echo $max_s > $sys_path || \
0134                         echo "FAIL failed to set '$max_s' to $sys_path"
0135                 sleep 1
0136                 local max_streams=$(cat $sys_path)
0137 
0138                 [ "$max_s" -ne "$max_streams" ] && \
0139                         echo "FAIL can't set max_streams '$max_s', get $max_stream"
0140 
0141                 i=$(($i + 1))
0142                 echo "$sys_path = '$max_streams'"
0143         done
0144 
0145         echo "zram max streams: OK"
0146 }
0147 
0148 zram_compress_alg()
0149 {
0150         echo "test that we can set compression algorithm"
0151 
0152         local i=$dev_start
0153         local algs=$(cat /sys/block/zram${i}/comp_algorithm)
0154         echo "supported algs: $algs"
0155 
0156         for alg in $zram_algs; do
0157                 local sys_path="/sys/block/zram${i}/comp_algorithm"
0158                 echo "$alg" >   $sys_path || \
0159                         echo "FAIL can't set '$alg' to $sys_path"
0160                 i=$(($i + 1))
0161                 echo "$sys_path = '$alg'"
0162         done
0163 
0164         echo "zram set compression algorithm: OK"
0165 }
0166 
0167 zram_set_disksizes()
0168 {
0169         echo "set disk size to zram device(s)"
0170         local i=$dev_start
0171         for ds in $zram_sizes; do
0172                 local sys_path="/sys/block/zram${i}/disksize"
0173                 echo "$ds" >    $sys_path || \
0174                         echo "FAIL can't set '$ds' to $sys_path"
0175 
0176                 i=$(($i + 1))
0177                 echo "$sys_path = '$ds'"
0178         done
0179 
0180         echo "zram set disksizes: OK"
0181 }
0182 
0183 zram_set_memlimit()
0184 {
0185         echo "set memory limit to zram device(s)"
0186 
0187         local i=$dev_start
0188         for ds in $zram_mem_limits; do
0189                 local sys_path="/sys/block/zram${i}/mem_limit"
0190                 echo "$ds" >    $sys_path || \
0191                         echo "FAIL can't set '$ds' to $sys_path"
0192 
0193                 i=$(($i + 1))
0194                 echo "$sys_path = '$ds'"
0195         done
0196 
0197         echo "zram set memory limit: OK"
0198 }
0199 
0200 zram_makeswap()
0201 {
0202         echo "make swap with zram device(s)"
0203         local i=$dev_start
0204         for i in $(seq $dev_start $dev_end); do
0205                 mkswap /dev/zram$i > err.log 2>&1
0206                 if [ $? -ne 0 ]; then
0207                         cat err.log
0208                         echo "FAIL mkswap /dev/zram$1 failed"
0209                 fi
0210 
0211                 swapon /dev/zram$i > err.log 2>&1
0212                 if [ $? -ne 0 ]; then
0213                         cat err.log
0214                         echo "FAIL swapon /dev/zram$1 failed"
0215                 fi
0216 
0217                 echo "done with /dev/zram$i"
0218                 dev_makeswap=$i
0219         done
0220 
0221         echo "zram making zram mkswap and swapon: OK"
0222 }
0223 
0224 zram_swapoff()
0225 {
0226         local i=
0227         for i in $(seq $dev_start $dev_end); do
0228                 swapoff /dev/zram$i > err.log 2>&1
0229                 if [ $? -ne 0 ]; then
0230                         cat err.log
0231                         echo "FAIL swapoff /dev/zram$i failed"
0232                 fi
0233         done
0234         dev_makeswap=-1
0235 
0236         echo "zram swapoff: OK"
0237 }
0238 
0239 zram_makefs()
0240 {
0241         local i=$dev_start
0242         for fs in $zram_filesystems; do
0243                 # if requested fs not supported default it to ext2
0244                 which mkfs.$fs > /dev/null 2>&1 || fs=ext2
0245 
0246                 echo "make $fs filesystem on /dev/zram$i"
0247                 mkfs.$fs /dev/zram$i > err.log 2>&1
0248                 if [ $? -ne 0 ]; then
0249                         cat err.log
0250                         echo "FAIL failed to make $fs on /dev/zram$i"
0251                 fi
0252                 i=$(($i + 1))
0253                 echo "zram mkfs.$fs: OK"
0254         done
0255 }
0256 
0257 zram_mount()
0258 {
0259         local i=0
0260         for i in $(seq $dev_start $dev_end); do
0261                 echo "mount /dev/zram$i"
0262                 mkdir zram$i
0263                 mount /dev/zram$i zram$i > /dev/null || \
0264                         echo "FAIL mount /dev/zram$i failed"
0265                 dev_mounted=$i
0266         done
0267 
0268         echo "zram mount of zram device(s): OK"
0269 }