1#!/bin/bash
2# SPDX-License-Identifier: GPL-2.0+
3#
4# Analyze a given results directory for refscale performance measurements.
5#
6# Usage: kvm-recheck-refscale.sh resdir
7#
8# Copyright (C) IBM Corporation, 2016
9#
10# Authors: Paul E. McKenney <paulmck@linux.ibm.com>
11
12i="$1"
13if test -d "$i" -a -r "$i"
14then
15	:
16else
17	echo Unreadable results directory: $i
18	exit 1
19fi
20PATH=`pwd`/tools/testing/selftests/rcutorture/bin:$PATH; export PATH
21. functions.sh
22
23configfile=`echo $i | sed -e 's/^.*\///'`
24
25sed -e 's/^\[[^]]*]//' < $i/console.log | tr -d '\015' |
26awk -v configfile="$configfile" '
27/^[ 	]*Runs	Time\(ns\) *$/ {
28	if (dataphase + 0 == 0) {
29		dataphase = 1;
30		# print configfile, $0;
31	}
32	next;
33}
34
35/[^ 	]*[0-9][0-9]*	[0-9][0-9]*\.[0-9][0-9]*$/ {
36	if (dataphase == 1) {
37		# print $0;
38		readertimes[++n] = $2;
39		sum += $2;
40	}
41	next;
42}
43
44{
45	if (dataphase == 1)
46		dataphase == 2;
47	next;
48}
49
50END {
51	print configfile " results:";
52	newNR = asort(readertimes);
53	if (newNR <= 0) {
54		print "No refscale records found???"
55		exit;
56	}
57	medianidx = int(newNR / 2);
58	if (newNR == medianidx * 2)
59		medianvalue = (readertimes[medianidx - 1] + readertimes[medianidx]) / 2;
60	else
61		medianvalue = readertimes[medianidx];
62	points = "Points:";
63	for (i = 1; i <= newNR; i++)
64		points = points " " readertimes[i];
65	print points;
66	print "Average reader duration: " sum / newNR " nanoseconds";
67	print "Minimum reader duration: " readertimes[1];
68	print "Median reader duration: " medianvalue;
69	print "Maximum reader duration: " readertimes[newNR];
70	print "Computed from refscale printk output.";
71}'
72