^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1) #!/bin/bash
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2) # SPDX-License-Identifier: GPL-2.0-or-later
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3) # Copyright (c) 2015 Oracle and/or its affiliates. All Rights Reserved.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4) #
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5) # Test creates several zram devices with different filesystems on them.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6) # It fills each device with zeros and checks that compression works.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 7) #
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 8) # Author: Alexey Kodanev <alexey.kodanev@oracle.com>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 9) # Modified: Naresh Kamboju <naresh.kamboju@linaro.org>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11) TCID="zram01"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 12) ERR_CODE=0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 13)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 14) . ./zram_lib.sh
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 15)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 16) # Test will create the following number of zram devices:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 17) dev_num=1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 18) # This is a list of parameters for zram devices.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 19) # Number of items must be equal to 'dev_num' parameter.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 20) zram_max_streams="2"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 21)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 22) # The zram sysfs node 'disksize' value can be either in bytes,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 23) # or you can use mem suffixes. But in some old kernels, mem
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 24) # suffixes are not supported, for example, in RHEL6.6GA's kernel
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 25) # layer, it uses strict_strtoull() to parse disksize which does
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 26) # not support mem suffixes, in some newer kernels, they use
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 27) # memparse() which supports mem suffixes. So here we just use
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 28) # bytes to make sure everything works correctly.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 29) zram_sizes="2097152" # 2MB
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 30) zram_mem_limits="2M"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 31) zram_filesystems="ext4"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 32) zram_algs="lzo"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 33)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 34) zram_fill_fs()
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 35) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 36) for i in $(seq $dev_start $dev_end); do
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 37) echo "fill zram$i..."
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 38) local b=0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 39) while [ true ]; do
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 40) dd conv=notrunc if=/dev/zero of=zram${i}/file \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 41) oflag=append count=1 bs=1024 status=none \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 42) > /dev/null 2>&1 || break
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 43) b=$(($b + 1))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 44) done
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 45) echo "zram$i can be filled with '$b' KB"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 46)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 47) local mem_used_total=`awk '{print $3}' "/sys/block/zram$i/mm_stat"`
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 48) local v=$((100 * 1024 * $b / $mem_used_total))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 49) if [ "$v" -lt 100 ]; then
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 50) echo "FAIL compression ratio: 0.$v:1"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 51) ERR_CODE=-1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 52) return
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 53) fi
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 54)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 55) echo "zram compression ratio: $(echo "scale=2; $v / 100 " | bc):1: OK"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 56) done
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 57) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 58)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 59) check_prereqs
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 60) zram_load
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 61) zram_max_streams
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 62) zram_compress_alg
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 63) zram_set_disksizes
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 64) zram_set_memlimit
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 65) zram_makefs
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 66) zram_mount
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 67)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 68) zram_fill_fs
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 69) zram_cleanup
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 70)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 71) if [ $ERR_CODE -ne 0 ]; then
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 72) echo "$TCID : [FAIL]"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 73) else
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 74) echo "$TCID : [PASS]"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 75) fi