One of the possible ways to test RCU is to use rcutorture kernel module.
The test requires that kernel configured with CONFIG_RCU_TORTURE_TEST.
It runs rcutorture module using particular options and then inspects
dmesg output for module's test results.
For more information, please read Linux Documentation: RCU/torture.txt

Signed-off-by: Alexey Kodanev <[email protected]>
---
 runtest/kernel_misc                                |    1 +
 testcases/kernel/device-drivers/Makefile           |    1 +
 testcases/kernel/device-drivers/rcu/Makefile       |   22 ++++
 testcases/kernel/device-drivers/rcu/rcu_torture.sh |  120 ++++++++++++++++++++
 4 files changed, 144 insertions(+), 0 deletions(-)
 create mode 100644 testcases/kernel/device-drivers/rcu/Makefile
 create mode 100755 testcases/kernel/device-drivers/rcu/rcu_torture.sh

diff --git a/runtest/kernel_misc b/runtest/kernel_misc
index c1826fb..8f37cc6 100644
--- a/runtest/kernel_misc
+++ b/runtest/kernel_misc
@@ -7,3 +7,4 @@ tbio tbio
 ltp_acpi ltp_acpi
 ltp_acpi_cpufreq ltp_acpi_cpufreq
 uaccess uaccess
+rcu_torture.sh rcu_torture.sh
diff --git a/testcases/kernel/device-drivers/Makefile 
b/testcases/kernel/device-drivers/Makefile
index d207736..37b6c64 100644
--- a/testcases/kernel/device-drivers/Makefile
+++ b/testcases/kernel/device-drivers/Makefile
@@ -21,6 +21,7 @@ include $(top_srcdir)/include/mk/env_pre.mk
 SUBDIRS                := acpi \
                   block \
                   pci \
+                  rcu \
                   rtc \
                   tbio \
                   uaccess
diff --git a/testcases/kernel/device-drivers/rcu/Makefile 
b/testcases/kernel/device-drivers/rcu/Makefile
new file mode 100644
index 0000000..96c6b5b
--- /dev/null
+++ b/testcases/kernel/device-drivers/rcu/Makefile
@@ -0,0 +1,22 @@
+# Copyright (c) 2014 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
+
+top_srcdir     ?= ../../../..
+include $(top_srcdir)/include/mk/testcases.mk
+
+INSTALL_TARGETS                := rcu_torture.sh
+
+include $(top_srcdir)/include/mk/generic_leaf_target.mk
diff --git a/testcases/kernel/device-drivers/rcu/rcu_torture.sh 
b/testcases/kernel/device-drivers/rcu/rcu_torture.sh
new file mode 100755
index 0000000..c3db889
--- /dev/null
+++ b/testcases/kernel/device-drivers/rcu/rcu_torture.sh
@@ -0,0 +1,120 @@
+#!/bin/sh
+# Copyright (c) 2014 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
+#
+# Author: Alexey Kodanev <[email protected]>
+#
+# One of the possible ways to test RCU is to use rcutorture kernel module.
+# The test requiers that kernel configured with CONFIG_RCU_TORTURE_TEST.
+# It runs rcutorture module using particular options and then inspects
+# dmesg output for module's test results.
+# For more information, please read Linux Documentation: RCU/torture.txt
+
+export RC=0
+export TST_TOTAL=14
+export TCID="rcu_torture"
+export TST_COUNT=0
+# default options
+test_time=60
+num_readers=10
+num_writers=5
+
+while getopts :ht:r:w: opt; do
+       case "$opt" in
+       h)
+               echo "Usage:"
+               echo "h        help"
+               echo "t x      time in seconds for each test-case"
+               echo "r x      number of readers"
+               echo "w x      number of writers"
+               exit 0
+       ;;
+       t) test_time=$OPTARG ;;
+       r) num_readers=$OPTARG ;;
+       w) num_writers=$OPTARG ;;
+       *)
+               tst_brkm TBROK NULL "unknown option: $opt"
+               exit 2
+       ;;
+       esac
+done
+
+cleanup()
+{
+       rmmod rcutorture > /dev/null 2>&1
+}
+
+if [ "`id -u`" -ne 0 ]; then
+       tst_brkm TCONF NULL "Test must be run as root"
+       exit 0
+fi
+
+# check if module is present
+modprobe rcutorture > /dev/null 2>&1
+if [ $? -ne 0 ]; then
+       tst_brkm TCONF NULL "Test requiers rcutorture module"
+       exit 0
+fi
+cleanup
+
+trap cleanup EXIT
+
+rcu_type="rcu rcu_sync rcu_expedited rcu_bh rcu_bh_sync rcu_bh_expedited \
+          srcu srcu_sync srcu_expedited srcu_raw srcu_raw_sync sched \
+          sched_sync sched_expedited"
+
+est_time=`echo "scale=2; $test_time * $TST_TOTAL / 60 " | bc`
+tst_resm TINFO "estimate time $est_time min"
+
+for type in $rcu_type; do
+
+       tst_resm TINFO "tc$TST_COUNT: $type running ($test_time sec)..."
+
+       modprobe rcutorture nreaders=$num_readers nfakewriters=$num_writers \
+                stat_interval=60 test_no_idle_hz=1 shuffle_interval=3 \
+                stutter=5 irqreader=1 fqs_duration=0 fqs_holdoff=0 \
+                fqs_stutter=3 test_boost=1 test_boost_interval=7 \
+                test_boost_duration=4 shutdown_secs=0 \
+                stall_cpu=0 stall_cpu_holdoff=10 n_barrier_cbs=0 \
+                onoff_interval=0 onoff_holdoff=0 torture_type=$type \
+                > /dev/null 2>&1
+
+       if [ $? -ne 0 ]; then
+               tst_brkm TBROK NULL "failed to load module"
+               exit 2
+       fi
+
+       sleep $test_time
+
+       rmmod rcutorture > /dev/null 2>&1
+       if [ $? -ne 0 ]; then
+               tst_brkm TBROK NULL "failed to unload module"
+               exit 2
+       fi
+
+       # check module status in dmesg
+       result_str=`dmesg | tail -n 1`
+       echo "$result_str" | grep SUCCESS > /dev/null 2>&1
+       if [ $? -eq 0 ]; then
+               tst_resm TPASS "tc$TST_COUNT: completed"
+       else
+               tst_resm TFAIL "tc$TST_COUNT: failed, please check dmesg"
+               RC=1
+       fi
+       TST_COUNT=$(( $TST_COUNT + 1 ))
+done
+
+exit $RC
-- 
1.7.1


------------------------------------------------------------------------------
Managing the Performance of Cloud-Based Applications
Take advantage of what the Cloud has to offer - Avoid Common Pitfalls.
Read the Whitepaper.
http://pubads.g.doubleclick.net/gampad/clk?id=121051231&iu=/4140/ostg.clktrk
_______________________________________________
Ltp-list mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/ltp-list

Reply via email to