From: Shuah Khan <shuahkh@osg.samsung.com>
To: Tyler Baker <tyler.baker@linaro.org>,
Naresh Kamboju <naresh.kamboju@linaro.org>
Cc: alexey.kodanev@oracle.com,
"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>,
lsk-team@linaro.org, Kevin Hilman <khilman@linaro.org>,
Milosz Wasilewski <milosz.wasilewski@linaro.org>
Subject: Re: [PATCH] selftests/zram: Adding zram tests
Date: Thu, 23 Jul 2015 09:03:53 -0600 [thread overview]
Message-ID: <55B10259.7000804@osg.samsung.com> (raw)
In-Reply-To: <CANMBJr5Rnd+eToLUJMcnFHzYc1RUCFE3sJ9u7kDLnB9kWTZjpg@mail.gmail.com>
On 07/22/2015 06:00 PM, Tyler Baker wrote:
> Hi Naresh,
>
> On 7 July 2015 at 05:03, <naresh.kamboju@linaro.org> wrote:
>> From: Naresh Kamboju <naresh.kamboju@linaro.org>
>>
>> zram_lib.sh: create library with initialization/cleanup functions
>> zram01.sh: creates general purpose ram disks with different filesystems
>> zram02.sh: creates block device for swap
>> README: ZRAM introduction and Kconfig required.
>> Makefile: To run zram tests
>
> (./zram01.sh && echo "selftests: zram01.sh [PASS]") || echo
> "selftests: zram01.sh [FAIL]"
> (./zram02.sh && echo "selftests: zram02.sh [PASS]") || echo
> "selftests: zram02.sh [FAIL]"
> (./zram_lib.sh && echo "selftests: zram_lib.sh [PASS]") || echo
> "selftests: zram_lib.sh [FAIL]"
>
> Above is the output from the run_kselftests.sh. Do we want to run
> zram_lib.sh as a test case as it just a library?
Please make sure test doesn't fail when zram isn't configured.
i.e it should exit gracefully with a message saying zram isn't
configured. Please see below:
>
>> Author: Alexey Kodanev <alexey.kodanev@oracle.com>
>> Signed-off-by: Naresh Kamboju <naresh.kamboju@linaro.org>
>> ---
>> tools/testing/selftests/Makefile | 1 +
>> tools/testing/selftests/zram/Makefile | 12 ++
>> tools/testing/selftests/zram/README | 39 ++++++
>> tools/testing/selftests/zram/zram01.sh | 102 ++++++++++++++
>> tools/testing/selftests/zram/zram02.sh | 57 ++++++++
>> tools/testing/selftests/zram/zram_lib.sh | 223 +++++++++++++++++++++++++++++++
>> 6 files changed, 434 insertions(+)
>> create mode 100644 tools/testing/selftests/zram/Makefile
>> create mode 100644 tools/testing/selftests/zram/README
>> create mode 100755 tools/testing/selftests/zram/zram01.sh
>> create mode 100755 tools/testing/selftests/zram/zram02.sh
>> create mode 100755 tools/testing/selftests/zram/zram_lib.sh
>>
>> diff --git a/tools/testing/selftests/Makefile b/tools/testing/selftests/Makefile
>> index 24ae9e8..9763dd9 100644
>> --- a/tools/testing/selftests/Makefile
>> +++ b/tools/testing/selftests/Makefile
>> @@ -22,6 +22,7 @@ endif
>> TARGETS += user
>> TARGETS += vm
>> TARGETS += x86
>> +TARGETS += zram
>> #Please keep the TARGETS list alphabetically sorted
>> # Run "make quicktest=1 run_tests" or
>> # "make quicktest=1 kselftest from top level Makefile
>> diff --git a/tools/testing/selftests/zram/Makefile b/tools/testing/selftests/zram/Makefile
>> new file mode 100644
>> index 0000000..a27a797
>> --- /dev/null
>> +++ b/tools/testing/selftests/zram/Makefile
>> @@ -0,0 +1,12 @@
>> +all:
>> +
>> +TEST_PROGS := zram01.sh zram02.sh zram_lib.sh
>> +
>> +include ../lib.mk
>> +
>> +run_tests:
>> + @/bin/bash ./zram01.sh; \
>> + /bin/bash ./zram02.sh
>> +
>> +clean:
>> + $(RM) err.log
>> diff --git a/tools/testing/selftests/zram/README b/tools/testing/selftests/zram/README
>> new file mode 100644
>> index 0000000..36db066
>> --- /dev/null
>> +++ b/tools/testing/selftests/zram/README
>> @@ -0,0 +1,39 @@
>> +zram: Compressed RAM based block devices
>> +----------------------------------------
>> +* Introduction
>> +
>> +The zram module creates RAM based block devices named /dev/zram<id>
>> +(<id> = 0, 1, ...). Pages written to these disks are compressed and stored
>> +in memory itself. These disks allow very fast I/O and compression provides
>> +good amounts of memory savings. Some of the usecases include /tmp storage,
>> +use as swap disks, various caches under /var and maybe many more :)
>> +
>> +Statistics for individual zram devices are exported through sysfs nodes at
>> +/sys/block/zram<id>/
>> +
>> +Kconfig required:
>> +CONFIG_ZRAM=y
>> +CONFIG_ZRAM_LZ4_COMPRESS=y
>> +CONFIG_ZPOOL=y
>> +CONFIG_ZSMALLOC=y
>> +
>> +ZRAM Testcases
>> +--------------
>> +zram_lib.sh: create library with initialization/cleanup functions
>> +
>> +Two functional tests: zram01 and zram02:
>> +zram01.sh: creates general purpose ram disks with ext4 filesystems
>> +zram02.sh: creates block device for swap
>> +
>> +Commands required for testing:
>> + - bc
>> + - dd
>> + - free
>> + - awk
>> + - mkswap
>> + - swapon
>> + - swapoff
>> + - mkfs/ mkfs.ext4
>> +
>> +For more information please refer:
>> +kernel-source-tree/Documentation/blockdev/zram.txt
>> diff --git a/tools/testing/selftests/zram/zram01.sh b/tools/testing/selftests/zram/zram01.sh
>> new file mode 100755
>> index 0000000..b63eb5d
>> --- /dev/null
>> +++ b/tools/testing/selftests/zram/zram01.sh
>> @@ -0,0 +1,102 @@
>> +#!/bin/bash
>> +# Copyright (c) 2015 Oracle and/or its affiliates. All Rights Reserved.
>> +#
>> +# This program is free software; you can redistribute it and/or
>> +# modify it under the terms of the GNU General Public License as
>> +# published by the Free Software Foundation; either version 2 of
>> +# the License, or (at your option) any later version.
>> +#
>> +# This program is distributed in the hope that it would be useful,
>> +# but WITHOUT ANY WARRANTY; without even the implied warranty of
>> +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
>> +# GNU General Public License for more details.
>> +#
>> +# You should have received a copy of the GNU General Public License
>> +# along with this program; if not, write the Free Software Foundation,
>> +# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
>
> checkpatch is complaining about including the FSF address, so lets remove it.
>
>> +#
>> +# Test creates several zram devices with different filesystems on them.
>> +# It fills each device with zeros and checks that compression works.
>> +#
>> +# Author: Alexey Kodanev <alexey.kodanev@oracle.com>
>> +# Modified: Naresh Kamboju <naresh.kamboju@linaro.org>
>> +
>> +TCID="zram01"
>> +ERR_CODE=0
>> +
>> +. ./zram_lib.sh
>> +
>> +# Test will create the following number of zram devices:
>> +dev_num=1
>> +# This is a list of parameters for zram devices.
>> +# Number of items must be equal to 'dev_num' parameter.
>> +zram_max_streams="2"
>> +
>> +# The zram sysfs node 'disksize' value can be either in bytes,
>> +# or you can use mem suffixes. But in some old kernels, mem
>> +# suffixes are not supported, for example, in RHEL6.6GA's kernel
>> +# layer, it uses strict_strtoull() to parse disksize which does
>> +# not support mem suffixes, in some newer kernels, they use
>> +# memparse() which supports mem suffixes. So here we just use
>> +# bytes to make sure everything works correctly.
>> +zram_sizes="2097152" # 2MB
>> +zram_mem_limits="2M"
>> +zram_filesystems="ext4"
>> +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
>> + while [ true ]; do
>> + dd conv=notrunc if=/dev/zero of=zram${i}/file \
>> + oflag=append count=1 bs=1024 status=none \
>> + > /dev/null 2>&1 || break
>> + 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 total_size=0
>> + for sm in $zram_sizes; do
>> + local s=$(echo $sm | sed 's/M//')
>> + total_size=$(($total_size + $s))
>> + 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"
>> +}
>> +
>> +zram_load
>> +zram_max_streams
>> +zram_compress_alg
>> +zram_set_disksizes
>> +zram_set_memlimit
>> +zram_makefs
>> +zram_mount
>> +
>> +zram_fill_fs
>> +zram_cleanup
>> +zram_unload
>> +
>> +if [ $ERR_CODE -ne 0 ]; then
>> + echo "$TCID : [FAIL]"
>> +else
>> + echo "$TCID : [PASS]"
>> +fi
>> diff --git a/tools/testing/selftests/zram/zram02.sh b/tools/testing/selftests/zram/zram02.sh
>> new file mode 100755
>> index 0000000..81855ce
>> --- /dev/null
>> +++ b/tools/testing/selftests/zram/zram02.sh
>> @@ -0,0 +1,57 @@
>> +#!/bin/bash
>> +# Copyright (c) 2015 Oracle and/or its affiliates. All Rights Reserved.
>> +#
>> +# This program is free software; you can redistribute it and/or
>> +# modify it under the terms of the GNU General Public License as
>> +# published by the Free Software Foundation; either version 2 of
>> +# the License, or (at your option) any later version.
>> +#
>> +# This program is distributed in the hope that it would be useful,
>> +# but WITHOUT ANY WARRANTY; without even the implied warranty of
>> +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
>> +# GNU General Public License for more details.
>> +#
>> +# You should have received a copy of the GNU General Public License
>> +# along with this program; if not, write the Free Software Foundation,
>> +# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
>
> Here as well.
>
>> +#
>> +# Test checks that we can create swap zram device.
>> +#
>> +# Author: Alexey Kodanev <alexey.kodanev@oracle.com>
>> +# Modified: Naresh Kamboju <naresh.kamboju@linaro.org>
>> +
>> +TCID="zram02"
>> +ERR_CODE=0
>> +
>> +. ./zram_lib.sh
>> +
>> +# Test will create the following number of zram devices:
>> +dev_num=1
>> +# This is a list of parameters for zram devices.
>> +# Number of items must be equal to 'dev_num' parameter.
>> +zram_max_streams="2"
>> +
>> +# The zram sysfs node 'disksize' value can be either in bytes,
>> +# or you can use mem suffixes. But in some old kernels, mem
>> +# suffixes are not supported, for example, in RHEL6.6GA's kernel
>> +# layer, it uses strict_strtoull() to parse disksize which does
>> +# not support mem suffixes, in some newer kernels, they use
>> +# memparse() which supports mem suffixes. So here we just use
>> +# bytes to make sure everything works correctly.
>> +zram_sizes="1048576" # 1M
>> +zram_mem_limits="1M"
>> +
>> +zram_load
>> +zram_max_streams
>> +zram_set_disksizes
>> +zram_set_memlimit
>> +zram_makeswap
>> +zram_swapoff
>> +zram_cleanup
>> +zram_unload
>> +
>> +if [ $ERR_CODE -ne 0 ]; then
>> + echo "$TCID : [FAIL]"
>> +else
>> + echo "$TCID : [PASS]"
>> +fi
>> diff --git a/tools/testing/selftests/zram/zram_lib.sh b/tools/testing/selftests/zram/zram_lib.sh
>> new file mode 100755
>> index 0000000..c40a1cf
>> --- /dev/null
>> +++ b/tools/testing/selftests/zram/zram_lib.sh
>> @@ -0,0 +1,223 @@
>> +#!/bin/sh
>> +# Copyright (c) 2015 Oracle and/or its affiliates. All Rights Reserved.
>> +#
>> +# This program is free software; you can redistribute it and/or
>> +# modify it under the terms of the GNU General Public License as
>> +# published by the Free Software Foundation; either version 2 of
>> +# the License, or (at your option) any later version.
>> +#
>> +# This program is distributed in the hope that it would be useful,
>> +# but WITHOUT ANY WARRANTY; without even the implied warranty of
>> +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
>> +# GNU General Public License for more details.
>> +#
>> +# You should have received a copy of the GNU General Public License
>> +# along with this program; if not, write the Free Software Foundation,
>> +# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
>
> And here again.
>
>> +#
>> +# Author: Alexey Kodanev <alexey.kodanev@oracle.com>
>> +# Modified: Naresh Kamboju <naresh.kamboju@linaro.org>
>> +
>> +MODULE=0
>> +dev_makeswap=-1
>> +dev_mounted=-1
>> +
>> +trap INT
>> +
>> +zram_cleanup()
>> +{
>> + echo "zram cleanup"
>> + local i=
>> + for i in $(seq 0 $dev_makeswap); do
>> + swapoff /dev/zram$i
>> + done
>> +
>> + for i in $(seq 0 $dev_mounted); do
>> + umount /dev/zram$i
>> + done
>> +
>> + for i in $(seq 0 $(($dev_num - 1))); do
>> + echo 1 > /sys/block/zram${i}/reset
>> + rm -rf zram$i
>> + done
>> +
>> +}
>> +
>> +zram_unload()
>> +{
>> + if [ $MODULE -ne 0 ] ; then
>> + echo "zram rmmod zram"
>> + rmmod zram > /dev/null 2>&1
>> + fi
>> +}
>> +
>> +zram_load()
>> +{
>> + # check zram module exists
>> + MODULE_PATH=/lib/modules/`uname -r`/kernel/drivers/zram/zram.ko
>> + if [ -f $MODULE_PATH ]; then
>> + MODULE=1
>> + echo "create '$dev_num' zram device(s)"
>> + modprobe zram num_devices=$dev_num || \
>> + echo "failed to insert zram module"
>> +
>> + dev_num_created=$(ls /dev/zram* | wc -w)
>> +
>> + if [ "$dev_num_created" -ne "$dev_num" ]; then
>> + echo "unexpected num of devices: $dev_num_created"
>> + ERR_CODE=-1
>> + else
>> + echo "zram load module successful"
>> + fi
>> + elif [ -b /dev/zram0 ]; then
>> + echo "/dev/zram0 device file found: OK"
>> + else
>> + echo "ERROR: No zram.ko module or no /dev/zram0 device found"
>> + echo "$TCID : CONFIG_ZRAM is not set"
>> + exit 1
>> + fi
In this case, when zram.ko module or no /dev/zram0 device found,
test should exit gracefully.
thanks,
-- Shuah
--
Shuah Khan
Sr. Linux Kernel Developer
Open Source Innovation Group
Samsung Research America (Silicon Valley)
shuahkh@osg.samsung.com | (970) 217-8978
next prev parent reply other threads:[~2015-07-23 15:04 UTC|newest]
Thread overview: 9+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-07-07 12:03 [PATCH] selftests/zram: Adding zram tests naresh.kamboju
2015-07-23 0:00 ` Tyler Baker
2015-07-23 15:03 ` Shuah Khan [this message]
2015-08-13 19:21 ` Naresh Kamboju
2015-08-13 19:39 ` Shuah Khan
2015-08-13 19:08 ` Naresh Kamboju
2015-08-13 19:36 ` Shuah Khan
[not found] ` <CADRr18PYhpcget82C1u_yODVpzLAt0W=DiexCRwn99Wjz5ZqJg@mail.gmail.com>
2015-07-27 1:46 ` Alex Shi
2015-08-14 11:44 ` Alexey Kodanev
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=55B10259.7000804@osg.samsung.com \
--to=shuahkh@osg.samsung.com \
--cc=alexey.kodanev@oracle.com \
--cc=khilman@linaro.org \
--cc=linux-kernel@vger.kernel.org \
--cc=lsk-team@linaro.org \
--cc=milosz.wasilewski@linaro.org \
--cc=naresh.kamboju@linaro.org \
--cc=tyler.baker@linaro.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.