xref: /aosp_15_r20/external/linux-kselftest/tools/testing/selftests/zram/zram01.sh (revision 053f45be4e351dfd5e965df293cd45b779f579ee)
1*053f45beSAndroid Build Coastguard Worker#!/bin/bash
2*053f45beSAndroid Build Coastguard Worker# SPDX-License-Identifier: GPL-2.0-or-later
3*053f45beSAndroid Build Coastguard Worker# Copyright (c) 2015 Oracle and/or its affiliates. All Rights Reserved.
4*053f45beSAndroid Build Coastguard Worker#
5*053f45beSAndroid Build Coastguard Worker# Test creates several zram devices with different filesystems on them.
6*053f45beSAndroid Build Coastguard Worker# It fills each device with zeros and checks that compression works.
7*053f45beSAndroid Build Coastguard Worker#
8*053f45beSAndroid Build Coastguard Worker# Author: Alexey Kodanev <[email protected]>
9*053f45beSAndroid Build Coastguard Worker# Modified: Naresh Kamboju <[email protected]>
10*053f45beSAndroid Build Coastguard Worker
11*053f45beSAndroid Build Coastguard WorkerTCID="zram01"
12*053f45beSAndroid Build Coastguard WorkerERR_CODE=0
13*053f45beSAndroid Build Coastguard Worker
14*053f45beSAndroid Build Coastguard Worker. ./zram_lib.sh
15*053f45beSAndroid Build Coastguard Worker
16*053f45beSAndroid Build Coastguard Worker# Test will create the following number of zram devices:
17*053f45beSAndroid Build Coastguard Workerdev_num=1
18*053f45beSAndroid Build Coastguard Worker# This is a list of parameters for zram devices.
19*053f45beSAndroid Build Coastguard Worker# Number of items must be equal to 'dev_num' parameter.
20*053f45beSAndroid Build Coastguard Workerzram_max_streams="2"
21*053f45beSAndroid Build Coastguard Worker
22*053f45beSAndroid Build Coastguard Worker# The zram sysfs node 'disksize' value can be either in bytes,
23*053f45beSAndroid Build Coastguard Worker# or you can use mem suffixes. But in some old kernels, mem
24*053f45beSAndroid Build Coastguard Worker# suffixes are not supported, for example, in RHEL6.6GA's kernel
25*053f45beSAndroid Build Coastguard Worker# layer, it uses strict_strtoull() to parse disksize which does
26*053f45beSAndroid Build Coastguard Worker# not support mem suffixes, in some newer kernels, they use
27*053f45beSAndroid Build Coastguard Worker# memparse() which supports mem suffixes. So here we just use
28*053f45beSAndroid Build Coastguard Worker# bytes to make sure everything works correctly.
29*053f45beSAndroid Build Coastguard Workerzram_sizes="2097152" # 2MB
30*053f45beSAndroid Build Coastguard Workerzram_mem_limits="2M"
31*053f45beSAndroid Build Coastguard Workerzram_filesystems="ext4"
32*053f45beSAndroid Build Coastguard Workerzram_algs="lzo"
33*053f45beSAndroid Build Coastguard Worker
34*053f45beSAndroid Build Coastguard Workerzram_fill_fs()
35*053f45beSAndroid Build Coastguard Worker{
36*053f45beSAndroid Build Coastguard Worker	for i in $(seq $dev_start $dev_end); do
37*053f45beSAndroid Build Coastguard Worker		echo "fill zram$i..."
38*053f45beSAndroid Build Coastguard Worker		local b=0
39*053f45beSAndroid Build Coastguard Worker		while [ true ]; do
40*053f45beSAndroid Build Coastguard Worker			dd conv=notrunc if=/dev/zero of=zram${i}/file \
41*053f45beSAndroid Build Coastguard Worker				oflag=append count=1 bs=1024 status=none \
42*053f45beSAndroid Build Coastguard Worker				> /dev/null 2>&1 || break
43*053f45beSAndroid Build Coastguard Worker			b=$(($b + 1))
44*053f45beSAndroid Build Coastguard Worker		done
45*053f45beSAndroid Build Coastguard Worker		echo "zram$i can be filled with '$b' KB"
46*053f45beSAndroid Build Coastguard Worker
47*053f45beSAndroid Build Coastguard Worker		local mem_used_total=`awk '{print $3}' "/sys/block/zram$i/mm_stat"`
48*053f45beSAndroid Build Coastguard Worker		local v=$((100 * 1024 * $b / $mem_used_total))
49*053f45beSAndroid Build Coastguard Worker		if [ "$v" -lt 100 ]; then
50*053f45beSAndroid Build Coastguard Worker			 echo "FAIL compression ratio: 0.$v:1"
51*053f45beSAndroid Build Coastguard Worker			 ERR_CODE=-1
52*053f45beSAndroid Build Coastguard Worker			 return
53*053f45beSAndroid Build Coastguard Worker		fi
54*053f45beSAndroid Build Coastguard Worker
55*053f45beSAndroid Build Coastguard Worker		echo "zram compression ratio: $(echo "scale=2; $v / 100 " | bc):1: OK"
56*053f45beSAndroid Build Coastguard Worker	done
57*053f45beSAndroid Build Coastguard Worker}
58*053f45beSAndroid Build Coastguard Worker
59*053f45beSAndroid Build Coastguard Workercheck_prereqs
60*053f45beSAndroid Build Coastguard Workerzram_load
61*053f45beSAndroid Build Coastguard Workerzram_max_streams
62*053f45beSAndroid Build Coastguard Workerzram_compress_alg
63*053f45beSAndroid Build Coastguard Workerzram_set_disksizes
64*053f45beSAndroid Build Coastguard Workerzram_set_memlimit
65*053f45beSAndroid Build Coastguard Workerzram_makefs
66*053f45beSAndroid Build Coastguard Workerzram_mount
67*053f45beSAndroid Build Coastguard Worker
68*053f45beSAndroid Build Coastguard Workerzram_fill_fs
69*053f45beSAndroid Build Coastguard Workerzram_cleanup
70*053f45beSAndroid Build Coastguard Worker
71*053f45beSAndroid Build Coastguard Workerif [ $ERR_CODE -ne 0 ]; then
72*053f45beSAndroid Build Coastguard Worker	echo "$TCID : [FAIL]"
73*053f45beSAndroid Build Coastguard Workerelse
74*053f45beSAndroid Build Coastguard Worker	echo "$TCID : [PASS]"
75*053f45beSAndroid Build Coastguard Workerfi
76