162306a36Sopenharmony_ci#!/bin/bash 262306a36Sopenharmony_ci# SPDX-License-Identifier: GPL-2.0-or-later 362306a36Sopenharmony_ci# Copyright (c) 2015 Oracle and/or its affiliates. All Rights Reserved. 462306a36Sopenharmony_ci# 562306a36Sopenharmony_ci# Test creates several zram devices with different filesystems on them. 662306a36Sopenharmony_ci# It fills each device with zeros and checks that compression works. 762306a36Sopenharmony_ci# 862306a36Sopenharmony_ci# Author: Alexey Kodanev <alexey.kodanev@oracle.com> 962306a36Sopenharmony_ci# Modified: Naresh Kamboju <naresh.kamboju@linaro.org> 1062306a36Sopenharmony_ci 1162306a36Sopenharmony_ciTCID="zram01" 1262306a36Sopenharmony_ciERR_CODE=0 1362306a36Sopenharmony_ci 1462306a36Sopenharmony_ci. ./zram_lib.sh 1562306a36Sopenharmony_ci 1662306a36Sopenharmony_ci# Test will create the following number of zram devices: 1762306a36Sopenharmony_cidev_num=1 1862306a36Sopenharmony_ci# This is a list of parameters for zram devices. 1962306a36Sopenharmony_ci# Number of items must be equal to 'dev_num' parameter. 2062306a36Sopenharmony_cizram_max_streams="2" 2162306a36Sopenharmony_ci 2262306a36Sopenharmony_ci# The zram sysfs node 'disksize' value can be either in bytes, 2362306a36Sopenharmony_ci# or you can use mem suffixes. But in some old kernels, mem 2462306a36Sopenharmony_ci# suffixes are not supported, for example, in RHEL6.6GA's kernel 2562306a36Sopenharmony_ci# layer, it uses strict_strtoull() to parse disksize which does 2662306a36Sopenharmony_ci# not support mem suffixes, in some newer kernels, they use 2762306a36Sopenharmony_ci# memparse() which supports mem suffixes. So here we just use 2862306a36Sopenharmony_ci# bytes to make sure everything works correctly. 2962306a36Sopenharmony_cizram_sizes="2097152" # 2MB 3062306a36Sopenharmony_cizram_mem_limits="2M" 3162306a36Sopenharmony_cizram_filesystems="ext4" 3262306a36Sopenharmony_cizram_algs="lzo" 3362306a36Sopenharmony_ci 3462306a36Sopenharmony_cizram_fill_fs() 3562306a36Sopenharmony_ci{ 3662306a36Sopenharmony_ci for i in $(seq $dev_start $dev_end); do 3762306a36Sopenharmony_ci echo "fill zram$i..." 3862306a36Sopenharmony_ci local b=0 3962306a36Sopenharmony_ci while [ true ]; do 4062306a36Sopenharmony_ci dd conv=notrunc if=/dev/zero of=zram${i}/file \ 4162306a36Sopenharmony_ci oflag=append count=1 bs=1024 status=none \ 4262306a36Sopenharmony_ci > /dev/null 2>&1 || break 4362306a36Sopenharmony_ci b=$(($b + 1)) 4462306a36Sopenharmony_ci done 4562306a36Sopenharmony_ci echo "zram$i can be filled with '$b' KB" 4662306a36Sopenharmony_ci 4762306a36Sopenharmony_ci local mem_used_total=`awk '{print $3}' "/sys/block/zram$i/mm_stat"` 4862306a36Sopenharmony_ci local v=$((100 * 1024 * $b / $mem_used_total)) 4962306a36Sopenharmony_ci if [ "$v" -lt 100 ]; then 5062306a36Sopenharmony_ci echo "FAIL compression ratio: 0.$v:1" 5162306a36Sopenharmony_ci ERR_CODE=-1 5262306a36Sopenharmony_ci return 5362306a36Sopenharmony_ci fi 5462306a36Sopenharmony_ci 5562306a36Sopenharmony_ci echo "zram compression ratio: $(echo "scale=2; $v / 100 " | bc):1: OK" 5662306a36Sopenharmony_ci done 5762306a36Sopenharmony_ci} 5862306a36Sopenharmony_ci 5962306a36Sopenharmony_cicheck_prereqs 6062306a36Sopenharmony_cizram_load 6162306a36Sopenharmony_cizram_max_streams 6262306a36Sopenharmony_cizram_compress_alg 6362306a36Sopenharmony_cizram_set_disksizes 6462306a36Sopenharmony_cizram_set_memlimit 6562306a36Sopenharmony_cizram_makefs 6662306a36Sopenharmony_cizram_mount 6762306a36Sopenharmony_ci 6862306a36Sopenharmony_cizram_fill_fs 6962306a36Sopenharmony_cizram_cleanup 7062306a36Sopenharmony_ci 7162306a36Sopenharmony_ciif [ $ERR_CODE -ne 0 ]; then 7262306a36Sopenharmony_ci echo "$TCID : [FAIL]" 7362306a36Sopenharmony_cielse 7462306a36Sopenharmony_ci echo "$TCID : [PASS]" 7562306a36Sopenharmony_cifi 76