From: "Paul E. McKenney" <paulmck@linux.vnet.ibm.com>
To: linux-kernel@vger.kernel.org
Cc: mingo@kernel.org, jiangshanlai@gmail.com, dipankar@in.ibm.com,
akpm@linux-foundation.org, mathieu.desnoyers@efficios.com,
josh@joshtriplett.org, tglx@linutronix.de, peterz@infradead.org,
rostedt@goodmis.org, dhowells@redhat.com, edumazet@google.com,
dvhart@linux.intel.com, fweisbec@gmail.com, oleg@redhat.com,
bobby.prani@gmail.com,
"Paul E. McKenney" <paulmck@linux.vnet.ibm.com>
Subject: [PATCH tip/core/rcu 10/24] rcutorture: Make scripts analyze rcuperf trace data, if present
Date: Tue, 12 Apr 2016 08:43:43 -0700 [thread overview]
Message-ID: <1460475837-26498-10-git-send-email-paulmck@linux.vnet.ibm.com> (raw)
In-Reply-To: <20160412154332.GA24983@linux.vnet.ibm.com>
The rcuperf event-trace data is more accurate than are the rcuperf
printk()s because locking keeps things ordered. This commit therefore
parses and analyzes this event-trace data if present, and falls back on
the printk()s otherwise.
Signed-off-by: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
---
.../rcutorture/bin/kvm-recheck-rcuperf-ftrace.sh | 121 +++++++++++++++++++++
.../rcutorture/bin/kvm-recheck-rcuperf.sh | 8 ++
2 files changed, 129 insertions(+)
create mode 100755 tools/testing/selftests/rcutorture/bin/kvm-recheck-rcuperf-ftrace.sh
diff --git a/tools/testing/selftests/rcutorture/bin/kvm-recheck-rcuperf-ftrace.sh b/tools/testing/selftests/rcutorture/bin/kvm-recheck-rcuperf-ftrace.sh
new file mode 100755
index 000000000000..f79b0e9e84fc
--- /dev/null
+++ b/tools/testing/selftests/rcutorture/bin/kvm-recheck-rcuperf-ftrace.sh
@@ -0,0 +1,121 @@
+#!/bin/bash
+#
+# Analyze a given results directory for rcuperf performance measurements,
+# looking for ftrace data. Exits with 0 if data was found, analyzed, and
+# printed. Intended to be invoked from kvm-recheck-rcuperf.sh after
+# argument checking.
+#
+# Usage: kvm-recheck-rcuperf-ftrace.sh resdir
+#
+# 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 will 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, you can access it online at
+# http://www.gnu.org/licenses/gpl-2.0.html.
+#
+# Copyright (C) IBM Corporation, 2016
+#
+# Authors: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
+
+i="$1"
+. tools/testing/selftests/rcutorture/bin/functions.sh
+
+if test "`grep -c 'rcu_exp_grace_period.*start' < $i/console.log`" -lt 100
+then
+ exit 10
+fi
+
+sed -e 's/^\[[^]]*]//' < $i/console.log |
+grep 'us : rcu_exp_grace_period' |
+sed -e 's/us : / : /' |
+tr -d '\015' |
+awk '
+$8 == "start" {
+ if (starttask != "")
+ nlost++;
+ starttask = $1;
+ starttime = $3;
+ startseq = $7;
+}
+
+$8 == "end" {
+ if (starttask == $1 && startseq == $7) {
+ curgpdur = $3 - starttime;
+ gptimes[++n] = curgpdur;
+ gptaskcnt[starttask]++;
+ sum += curgpdur;
+ if (curgpdur > 1000)
+ print "Long GP " starttime "us to " $3 "us (" curgpdur "us)";
+ starttask = "";
+ } else {
+ # Lost a message or some such, reset.
+ starttask = "";
+ nlost++;
+ }
+}
+
+$8 == "done" {
+ piggybackcnt[$1]++;
+}
+
+END {
+ newNR = asort(gptimes);
+ if (newNR <= 0) {
+ print "No ftrace records found???"
+ exit 10;
+ }
+ pct50 = int(newNR * 50 / 100);
+ if (pct50 < 1)
+ pct50 = 1;
+ pct90 = int(newNR * 90 / 100);
+ if (pct90 < 1)
+ pct90 = 1;
+ pct99 = int(newNR * 99 / 100);
+ if (pct99 < 1)
+ pct99 = 1;
+ div = 10 ** int(log(gptimes[pct90]) / log(10) + .5) / 100;
+ print "Histogram bucket size: " div;
+ last = gptimes[1] - 10;
+ count = 0;
+ for (i = 1; i <= newNR; i++) {
+ current = div * int(gptimes[i] / div);
+ if (last == current) {
+ count++;
+ } else {
+ if (count > 0)
+ print last, count;
+ count = 1;
+ last = current;
+ }
+ }
+ if (count > 0)
+ print last, count;
+ print "Distribution of grace periods across tasks:";
+ for (i in gptaskcnt) {
+ print "\t" i, gptaskcnt[i];
+ nbatches += gptaskcnt[i];
+ }
+ ngps = nbatches;
+ print "Distribution of piggybacking across tasks:";
+ for (i in piggybackcnt) {
+ print "\t" i, piggybackcnt[i];
+ ngps += piggybackcnt[i];
+ }
+ print "Average grace-period duration: " sum / newNR " microseconds";
+ print "Minimum grace-period duration: " gptimes[1];
+ print "50th percentile grace-period duration: " gptimes[pct50];
+ print "90th percentile grace-period duration: " gptimes[pct90];
+ print "99th percentile grace-period duration: " gptimes[pct99];
+ print "Maximum grace-period duration: " gptimes[newNR];
+ print "Grace periods: " ngps + 0 " Batches: " nbatches + 0 " Ratio: " ngps / nbatches " Lost: " nlost + 0;
+ print "Computed from ftrace data.";
+}'
+exit 0
diff --git a/tools/testing/selftests/rcutorture/bin/kvm-recheck-rcuperf.sh b/tools/testing/selftests/rcutorture/bin/kvm-recheck-rcuperf.sh
index 1f72df8eedc7..8f3121afc716 100755
--- a/tools/testing/selftests/rcutorture/bin/kvm-recheck-rcuperf.sh
+++ b/tools/testing/selftests/rcutorture/bin/kvm-recheck-rcuperf.sh
@@ -30,8 +30,15 @@ else
echo Unreadable results directory: $i
exit 1
fi
+PATH=`pwd`/tools/testing/selftests/rcutorture/bin:$PATH; export PATH
. tools/testing/selftests/rcutorture/bin/functions.sh
+if kvm-recheck-rcuperf-ftrace.sh $i
+then
+ # ftrace data was successfully analyzed, call it good!
+ exit 0
+fi
+
configfile=`echo $i | sed -e 's/^.*\///'`
sed -e 's/^\[[^]]*]//' < $i/console.log |
@@ -85,4 +92,5 @@ END {
print "99th percentile grace-period duration: " gptimes[pct99];
print "Maximum grace-period duration: " gptimes[newNR];
print "Grace periods: " ngps + 0 " Batches: " nbatches + 0 " Ratio: " ngps / nbatches;
+ print "Computed from rcuperf printk output.";
}'
--
2.5.2
next prev parent reply other threads:[~2016-04-12 15:43 UTC|newest]
Thread overview: 25+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-04-12 15:43 [PATCH tip/core/rcu 0/24] Torture-test changes for 4.7 Paul E. McKenney
2016-04-12 15:43 ` [PATCH tip/core/rcu 01/24] rcutorture: Update scripting to accommodate rcuperf Paul E. McKenney
2016-04-12 15:43 ` [PATCH tip/core/rcu 02/24] rcutorture: Allow for rcupdate.rcu_normal Paul E. McKenney
2016-04-12 15:43 ` [PATCH tip/core/rcu 03/24] rcutorture: Expedited-GP batch progress access to torturing Paul E. McKenney
2016-04-12 15:43 ` [PATCH tip/core/rcu 04/24] rcutorture: Add RCU grace-period performance tests Paul E. McKenney
2016-04-12 15:43 ` [PATCH tip/core/rcu 05/24] rcutorture: Documentation for rcuperf kernel parameters Paul E. McKenney
2016-04-12 15:43 ` [PATCH tip/core/rcu 06/24] rcutorture: Bind rcuperf reader/writer kthreads to CPUs Paul E. McKenney
2016-04-12 15:43 ` [PATCH tip/core/rcu 07/24] rcutorture: Set rcuperf writer kthreads to real-time priority Paul E. McKenney
2016-04-12 15:43 ` [PATCH tip/core/rcu 08/24] rcutorture: Print measure of batching efficiency Paul E. McKenney
2016-04-12 15:43 ` [PATCH tip/core/rcu 09/24] rcutorture: Make rcuperf collect expedited event-trace data Paul E. McKenney
2016-04-12 15:43 ` Paul E. McKenney [this message]
2016-04-12 15:43 ` [PATCH tip/core/rcu 11/24] rcutorture: Add rcuperf holdoff boot parameter to reduce interference Paul E. McKenney
2016-04-12 15:43 ` [PATCH tip/core/rcu 12/24] rcutorture: Avoid RCU CPU stall warning and RT throttling Paul E. McKenney
2016-04-12 15:43 ` [PATCH tip/core/rcu 13/24] rcutorture: Add largish-system rcuperf scenario Paul E. McKenney
2016-04-12 15:43 ` [PATCH tip/core/rcu 14/24] rcuperf: Do not wake up shutdown wait queue if "shutdown" is false Paul E. McKenney
2016-04-12 15:43 ` [PATCH tip/core/rcu 15/24] rcutorture: Remove redundant initialization to zero Paul E. McKenney
2016-04-12 15:43 ` [PATCH tip/core/rcu 16/24] rcutorture: Consider FROZEN hotplug notifier transitions Paul E. McKenney
2016-04-12 15:43 ` [PATCH tip/core/rcu 17/24] torture: Clarify refusal to run more than one torture test Paul E. McKenney
2016-04-12 15:43 ` [PATCH tip/core/rcu 18/24] torture: Kill qemu, not parent process Paul E. McKenney
2016-04-12 15:43 ` [PATCH tip/core/rcu 19/24] rcutorture: Convert test duration to seconds early Paul E. McKenney
2016-04-12 15:43 ` [PATCH tip/core/rcu 20/24] rcutorture: Add OS-jitter capability Paul E. McKenney
2016-04-12 15:43 ` [PATCH tip/core/rcu 21/24] rcutorture: Don't rebuild identical kernel Paul E. McKenney
2016-04-12 15:43 ` [PATCH tip/core/rcu 22/24] rcutorture: Dump trace buffer upon shutdown Paul E. McKenney
2016-04-12 15:43 ` [PATCH tip/core/rcu 23/24] rcutorture: Add irqs-disabled test for call_rcu() Paul E. McKenney
2016-04-12 15:43 ` [PATCH tip/core/rcu 24/24] rcutorture: Add boot-time adjustment of leaf fanout Paul E. McKenney
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=1460475837-26498-10-git-send-email-paulmck@linux.vnet.ibm.com \
--to=paulmck@linux.vnet.ibm.com \
--cc=akpm@linux-foundation.org \
--cc=bobby.prani@gmail.com \
--cc=dhowells@redhat.com \
--cc=dipankar@in.ibm.com \
--cc=dvhart@linux.intel.com \
--cc=edumazet@google.com \
--cc=fweisbec@gmail.com \
--cc=jiangshanlai@gmail.com \
--cc=josh@joshtriplett.org \
--cc=linux-kernel@vger.kernel.org \
--cc=mathieu.desnoyers@efficios.com \
--cc=mingo@kernel.org \
--cc=oleg@redhat.com \
--cc=peterz@infradead.org \
--cc=rostedt@goodmis.org \
--cc=tglx@linutronix.de \
/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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®