mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2025-01-12 00:34:43 +08:00
79619cf515
Normal rcutorture checking overestimates grace periods somewhat due to the fact that there is a delay from a grace-period request until the start of the corresponding grace period and another delay from the end of that grace period to notification of the requestor. This means that rcutorture's detection of RCU bugs is less sensitive than it might be. It turns out that rcutorture also checks the underlying grace-period "completed" counter (displayed in Reader Batch output), which in theory allows rcutorture to do exact checks. In practice, memory misordering (by both compiler and CPU) can result in false positives. However, experience on x86 shows that these false positives are quite rare, occurring less than one time per 1,000 hours of testing. This commit therefore does the exact checking, giving a warning if any Reader Batch blows happen, and flagging an error if they happen more often than once every three hours in long tests. Signed-off-by: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
70 lines
2.1 KiB
Bash
Executable File
70 lines
2.1 KiB
Bash
Executable File
#!/bin/bash
|
|
#
|
|
# Analyze a given results directory for rcutorture progress.
|
|
#
|
|
# Usage: kvm-recheck-rcu.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, 2014
|
|
#
|
|
# Authors: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
|
|
|
|
i="$1"
|
|
if test -d $i
|
|
then
|
|
:
|
|
else
|
|
echo Unreadable results directory: $i
|
|
exit 1
|
|
fi
|
|
. tools/testing/selftests/rcutorture/bin/functions.sh
|
|
|
|
configfile=`echo $i | sed -e 's/^.*\///'`
|
|
ngps=`grep ver: $i/console.log 2> /dev/null | tail -1 | sed -e 's/^.* ver: //' -e 's/ .*$//'`
|
|
if test -z "$ngps"
|
|
then
|
|
echo "$configfile -------"
|
|
else
|
|
title="$configfile ------- $ngps grace periods"
|
|
dur=`sed -e 's/^.* rcutorture.shutdown_secs=//' -e 's/ .*$//' < $i/qemu-cmd 2> /dev/null`
|
|
if test -z "$dur"
|
|
then
|
|
:
|
|
else
|
|
ngpsps=`awk -v ngps=$ngps -v dur=$dur '
|
|
BEGIN { print ngps / dur }' < /dev/null`
|
|
title="$title ($ngpsps per second)"
|
|
fi
|
|
echo $title
|
|
nclosecalls=`grep --binary-files=text 'torture: Reader Batch' $i/console.log | tail -1 | awk '{for (i=NF-8;i<=NF;i++) sum+=$i; } END {print sum}'`
|
|
if test -z "$nclosecalls"
|
|
then
|
|
exit 0
|
|
fi
|
|
if test "$nclosecalls" -eq 0
|
|
then
|
|
exit 0
|
|
fi
|
|
# Compute number of close calls per tenth of an hour
|
|
nclosecalls10=`awk -v nclosecalls=$nclosecalls -v dur=$dur 'BEGIN { print int(nclosecalls * 36000 / dur) }' < /dev/null`
|
|
if test $nclosecalls10 -gt 5 -a $nclosecalls -gt 1
|
|
then
|
|
print_bug $nclosecalls "Reader Batch close calls in" $(($dur/60)) minute run: $i
|
|
else
|
|
print_warning $nclosecalls "Reader Batch close calls in" $(($dur/60)) minute run: $i
|
|
fi
|
|
fi
|