Naresh Kamboju | f21fb79 | 2015-08-18 12:31:59 +0530 | [diff] [blame] | 1 | #!/bin/bash |
| 2 | # Copyright (c) 2015 Oracle and/or its affiliates. All Rights Reserved. |
| 3 | # |
| 4 | # This program is free software; you can redistribute it and/or |
| 5 | # modify it under the terms of the GNU General Public License as |
| 6 | # published by the Free Software Foundation; either version 2 of |
| 7 | # the License, or (at your option) any later version. |
| 8 | # |
| 9 | # This program is distributed in the hope that it would be useful, |
| 10 | # but WITHOUT ANY WARRANTY; without even the implied warranty of |
| 11 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
| 12 | # GNU General Public License for more details. |
| 13 | # |
| 14 | # Test creates several zram devices with different filesystems on them. |
| 15 | # It fills each device with zeros and checks that compression works. |
| 16 | # |
| 17 | # Author: Alexey Kodanev <alexey.kodanev@oracle.com> |
| 18 | # Modified: Naresh Kamboju <naresh.kamboju@linaro.org> |
| 19 | |
| 20 | TCID="zram01" |
| 21 | ERR_CODE=0 |
| 22 | |
| 23 | . ./zram_lib.sh |
| 24 | |
| 25 | # Test will create the following number of zram devices: |
| 26 | dev_num=1 |
| 27 | # This is a list of parameters for zram devices. |
| 28 | # Number of items must be equal to 'dev_num' parameter. |
| 29 | zram_max_streams="2" |
| 30 | |
| 31 | # The zram sysfs node 'disksize' value can be either in bytes, |
| 32 | # or you can use mem suffixes. But in some old kernels, mem |
| 33 | # suffixes are not supported, for example, in RHEL6.6GA's kernel |
| 34 | # layer, it uses strict_strtoull() to parse disksize which does |
| 35 | # not support mem suffixes, in some newer kernels, they use |
| 36 | # memparse() which supports mem suffixes. So here we just use |
| 37 | # bytes to make sure everything works correctly. |
| 38 | zram_sizes="2097152" # 2MB |
| 39 | zram_mem_limits="2M" |
| 40 | zram_filesystems="ext4" |
| 41 | zram_algs="lzo" |
| 42 | |
| 43 | zram_fill_fs() |
| 44 | { |
| 45 | local mem_free0=$(free -m | awk 'NR==2 {print $4}') |
| 46 | |
| 47 | for i in $(seq 0 $(($dev_num - 1))); do |
| 48 | echo "fill zram$i..." |
| 49 | local b=0 |
| 50 | while [ true ]; do |
| 51 | dd conv=notrunc if=/dev/zero of=zram${i}/file \ |
| 52 | oflag=append count=1 bs=1024 status=none \ |
| 53 | > /dev/null 2>&1 || break |
| 54 | b=$(($b + 1)) |
| 55 | done |
| 56 | echo "zram$i can be filled with '$b' KB" |
| 57 | done |
| 58 | |
| 59 | local mem_free1=$(free -m | awk 'NR==2 {print $4}') |
| 60 | local used_mem=$(($mem_free0 - $mem_free1)) |
| 61 | |
| 62 | local total_size=0 |
| 63 | for sm in $zram_sizes; do |
| 64 | local s=$(echo $sm | sed 's/M//') |
| 65 | total_size=$(($total_size + $s)) |
| 66 | done |
| 67 | |
| 68 | echo "zram used ${used_mem}M, zram disk sizes ${total_size}M" |
| 69 | |
| 70 | local v=$((100 * $total_size / $used_mem)) |
| 71 | |
| 72 | if [ "$v" -lt 100 ]; then |
| 73 | echo "FAIL compression ratio: 0.$v:1" |
| 74 | ERR_CODE=-1 |
| 75 | zram_cleanup |
| 76 | return |
| 77 | fi |
| 78 | |
| 79 | echo "zram compression ratio: $(echo "scale=2; $v / 100 " | bc):1: OK" |
| 80 | } |
| 81 | |
Naresh Kamboju | 2dfb28e | 2015-08-31 17:11:55 +0530 | [diff] [blame] | 82 | check_prereqs |
Naresh Kamboju | f21fb79 | 2015-08-18 12:31:59 +0530 | [diff] [blame] | 83 | zram_load |
| 84 | zram_max_streams |
| 85 | zram_compress_alg |
| 86 | zram_set_disksizes |
| 87 | zram_set_memlimit |
| 88 | zram_makefs |
| 89 | zram_mount |
| 90 | |
| 91 | zram_fill_fs |
| 92 | zram_cleanup |
| 93 | zram_unload |
| 94 | |
| 95 | if [ $ERR_CODE -ne 0 ]; then |
| 96 | echo "$TCID : [FAIL]" |
| 97 | else |
| 98 | echo "$TCID : [PASS]" |
| 99 | fi |