162306a36Sopenharmony_ci#!/bin/bash
262306a36Sopenharmony_ci# SPDX-License-Identifier: GPL-2.0+
362306a36Sopenharmony_ci#
462306a36Sopenharmony_ci# Analyze a given results directory for rcutorture progress.
562306a36Sopenharmony_ci#
662306a36Sopenharmony_ci# Usage: kvm-recheck-rcu.sh resdir
762306a36Sopenharmony_ci#
862306a36Sopenharmony_ci# Copyright (C) IBM Corporation, 2014
962306a36Sopenharmony_ci#
1062306a36Sopenharmony_ci# Authors: Paul E. McKenney <paulmck@linux.ibm.com>
1162306a36Sopenharmony_ci
1262306a36Sopenharmony_cii="$1"
1362306a36Sopenharmony_ciif test -d "$i" -a -r "$i"
1462306a36Sopenharmony_cithen
1562306a36Sopenharmony_ci	:
1662306a36Sopenharmony_cielse
1762306a36Sopenharmony_ci	echo Unreadable results directory: $i
1862306a36Sopenharmony_ci	exit 1
1962306a36Sopenharmony_cifi
2062306a36Sopenharmony_ci. functions.sh
2162306a36Sopenharmony_ci
2262306a36Sopenharmony_ciconfigfile=`echo $i | sed -e 's/^.*\///'`
2362306a36Sopenharmony_cingps=`grep ver: $i/console.log 2> /dev/null | tail -1 | sed -e 's/^.* ver: //' -e 's/ .*$//'`
2462306a36Sopenharmony_cistopstate="`grep 'End-test grace-period state: g' $i/console.log 2> /dev/null |
2562306a36Sopenharmony_ci	    tail -1 | sed -e 's/^\[[ 0-9.]*] //' |
2662306a36Sopenharmony_ci	    awk '{ print \"[\" $1 \" \" $5 \" \" $6 \" \" $7 \"]\"; }' |
2762306a36Sopenharmony_ci	    tr -d '\012\015'`"
2862306a36Sopenharmony_cifwdprog="`grep 'rcu_torture_fwd_prog n_max_cbs: ' $i/console.log 2> /dev/null | sed -e 's/^\[[^]]*] //' | sort -k3nr | head -1 | awk '{ print $2 " " $3 }' | tr -d '\015'`"
2962306a36Sopenharmony_ciif test -z "$ngps"
3062306a36Sopenharmony_cithen
3162306a36Sopenharmony_ci	echo "$configfile ------- " $stopstate
3262306a36Sopenharmony_cielse
3362306a36Sopenharmony_ci	title="$configfile ------- $ngps GPs"
3462306a36Sopenharmony_ci	dur=`grep -v '^#' $i/qemu-cmd | sed -e 's/^.* rcutorture.shutdown_secs=//' -e 's/ .*$//'`
3562306a36Sopenharmony_ci	if test -z "$dur"
3662306a36Sopenharmony_ci	then
3762306a36Sopenharmony_ci		:
3862306a36Sopenharmony_ci	else
3962306a36Sopenharmony_ci		ngpsps=`awk -v ngps=$ngps -v dur=$dur '
4062306a36Sopenharmony_ci			BEGIN { print ngps / dur }' < /dev/null`
4162306a36Sopenharmony_ci		title="$title ($ngpsps/s)"
4262306a36Sopenharmony_ci	fi
4362306a36Sopenharmony_ci	echo $title $stopstate $fwdprog
4462306a36Sopenharmony_ci	nclosecalls=`grep --binary-files=text 'torture: Reader Batch' $i/console.log | tail -1 | \
4562306a36Sopenharmony_ci		awk -v sum=0 '
4662306a36Sopenharmony_ci		{
4762306a36Sopenharmony_ci			for (i = 0; i <= NF; i++) {
4862306a36Sopenharmony_ci				sum += $i;
4962306a36Sopenharmony_ci				if ($i ~ /Batch:/) {
5062306a36Sopenharmony_ci					sum = 0;
5162306a36Sopenharmony_ci					i = i + 2;
5262306a36Sopenharmony_ci				}
5362306a36Sopenharmony_ci			}
5462306a36Sopenharmony_ci		}
5562306a36Sopenharmony_ci
5662306a36Sopenharmony_ci		END {
5762306a36Sopenharmony_ci			print sum
5862306a36Sopenharmony_ci		}'`
5962306a36Sopenharmony_ci	if test -z "$nclosecalls"
6062306a36Sopenharmony_ci	then
6162306a36Sopenharmony_ci		exit 0
6262306a36Sopenharmony_ci	fi
6362306a36Sopenharmony_ci	if test "$nclosecalls" -eq 0
6462306a36Sopenharmony_ci	then
6562306a36Sopenharmony_ci		exit 0
6662306a36Sopenharmony_ci	fi
6762306a36Sopenharmony_ci	# Compute number of close calls per tenth of an hour
6862306a36Sopenharmony_ci	nclosecalls10=`awk -v nclosecalls=$nclosecalls -v dur=$dur 'BEGIN { print int(nclosecalls * 36000 / dur) }' < /dev/null`
6962306a36Sopenharmony_ci	if test $nclosecalls10 -gt 5 -a $nclosecalls -gt 1
7062306a36Sopenharmony_ci	then
7162306a36Sopenharmony_ci		print_bug $nclosecalls "Reader Batch close calls in" $(($dur/60)) minute run: $i
7262306a36Sopenharmony_ci	else
7362306a36Sopenharmony_ci		print_warning $nclosecalls "Reader Batch close calls in" $(($dur/60)) minute run: $i
7462306a36Sopenharmony_ci	fi
7562306a36Sopenharmony_ci	echo $nclosecalls "Reader Batch close calls in" $(($dur/60)) minute run: $i > $i/console.log.rcu.diags
7662306a36Sopenharmony_cifi
77