Skip to content

Commit

Permalink
selftests/zram01.sh: Fix compression ratio calculation
Browse files Browse the repository at this point in the history
[ Upstream commit d18da7e ]

zram01 uses `free -m` to measure zram memory usage. The results are no
sense because they are polluted by all running processes on the system.

We Should only calculate the free memory delta for the current process.
So use the third field of /sys/block/zram<id>/mm_stat to measure memory
usage instead. The file is available since kernel 4.1.

orig_data_size(first): uncompressed size of data stored in this disk.
compr_data_size(second): compressed size of data stored in this disk
mem_used_total(third): the amount of memory allocated for this disk

Also remove useless zram cleanup call in zram_fill_fs and so we don't
need to cleanup zram twice if fails.

Signed-off-by: Yang Xu <xuyang2018.jy@fujitsu.com>
Signed-off-by: Shuah Khan <skhan@linuxfoundation.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
  • Loading branch information
xuyang0410 authored and gregkh committed Feb 23, 2022
1 parent c966a56 commit 0086fef
Showing 1 changed file with 8 additions and 22 deletions.
30 changes: 8 additions & 22 deletions tools/testing/selftests/zram/zram01.sh
Expand Up @@ -33,8 +33,6 @@ zram_algs="lzo"

zram_fill_fs()
{
local mem_free0=$(free -m | awk 'NR==2 {print $4}')

for i in $(seq 0 $(($dev_num - 1))); do
echo "fill zram$i..."
local b=0
Expand All @@ -45,29 +43,17 @@ zram_fill_fs()
b=$(($b + 1))
done
echo "zram$i can be filled with '$b' KB"
done

local mem_free1=$(free -m | awk 'NR==2 {print $4}')
local used_mem=$(($mem_free0 - $mem_free1))
local mem_used_total=`awk '{print $3}' "/sys/block/zram$i/mm_stat"`
local v=$((100 * 1024 * $b / $mem_used_total))
if [ "$v" -lt 100 ]; then
echo "FAIL compression ratio: 0.$v:1"
ERR_CODE=-1
return
fi

local total_size=0
for sm in $zram_sizes; do
local s=$(echo $sm | sed 's/M//')
total_size=$(($total_size + $s))
echo "zram compression ratio: $(echo "scale=2; $v / 100 " | bc):1: OK"
done

echo "zram used ${used_mem}M, zram disk sizes ${total_size}M"

local v=$((100 * $total_size / $used_mem))

if [ "$v" -lt 100 ]; then
echo "FAIL compression ratio: 0.$v:1"
ERR_CODE=-1
zram_cleanup
return
fi

echo "zram compression ratio: $(echo "scale=2; $v / 100 " | bc):1: OK"
}

check_prereqs
Expand Down

0 comments on commit 0086fef

Please sign in to comment.