Commit 79619cf5 authored by Paul E. McKenney's avatar Paul E. McKenney
Browse files

rcutorture: Issue warnings on close calls due to Reader Batch blows



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: default avatarPaul E. McKenney <paulmck@linux.vnet.ibm.com>
parent 734d1680
Loading
Loading
Loading
Loading
+18 −0
Original line number Diff line number Diff line
@@ -30,6 +30,7 @@ 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/ .*$//'`
@@ -48,4 +49,21 @@ else
		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