162306a36Sopenharmony_ci#!/bin/bash 262306a36Sopenharmony_ci# SPDX-License-Identifier: GPL-2.0+ 362306a36Sopenharmony_ci# 462306a36Sopenharmony_ci# Analyze a given results directory for refscale performance measurements. 562306a36Sopenharmony_ci# 662306a36Sopenharmony_ci# Usage: kvm-recheck-refscale.sh resdir 762306a36Sopenharmony_ci# 862306a36Sopenharmony_ci# Copyright (C) IBM Corporation, 2016 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_ciPATH=`pwd`/tools/testing/selftests/rcutorture/bin:$PATH; export PATH 2162306a36Sopenharmony_ci. functions.sh 2262306a36Sopenharmony_ci 2362306a36Sopenharmony_ciconfigfile=`echo $i | sed -e 's/^.*\///'` 2462306a36Sopenharmony_ci 2562306a36Sopenharmony_cised -e 's/^\[[^]]*]//' < $i/console.log | tr -d '\015' | 2662306a36Sopenharmony_ciawk -v configfile="$configfile" ' 2762306a36Sopenharmony_ci/^[ ]*Runs Time\(ns\) *$/ { 2862306a36Sopenharmony_ci if (dataphase + 0 == 0) { 2962306a36Sopenharmony_ci dataphase = 1; 3062306a36Sopenharmony_ci # print configfile, $0; 3162306a36Sopenharmony_ci } 3262306a36Sopenharmony_ci next; 3362306a36Sopenharmony_ci} 3462306a36Sopenharmony_ci 3562306a36Sopenharmony_ci/[^ ]*[0-9][0-9]* [0-9][0-9]*\.[0-9][0-9]*$/ { 3662306a36Sopenharmony_ci if (dataphase == 1) { 3762306a36Sopenharmony_ci # print $0; 3862306a36Sopenharmony_ci readertimes[++n] = $2; 3962306a36Sopenharmony_ci sum += $2; 4062306a36Sopenharmony_ci } 4162306a36Sopenharmony_ci next; 4262306a36Sopenharmony_ci} 4362306a36Sopenharmony_ci 4462306a36Sopenharmony_ci{ 4562306a36Sopenharmony_ci if (dataphase == 1) 4662306a36Sopenharmony_ci dataphase == 2; 4762306a36Sopenharmony_ci next; 4862306a36Sopenharmony_ci} 4962306a36Sopenharmony_ci 5062306a36Sopenharmony_ciEND { 5162306a36Sopenharmony_ci print configfile " results:"; 5262306a36Sopenharmony_ci newNR = asort(readertimes); 5362306a36Sopenharmony_ci if (newNR <= 0) { 5462306a36Sopenharmony_ci print "No refscale records found???" 5562306a36Sopenharmony_ci exit; 5662306a36Sopenharmony_ci } 5762306a36Sopenharmony_ci medianidx = int(newNR / 2); 5862306a36Sopenharmony_ci if (newNR == medianidx * 2) 5962306a36Sopenharmony_ci medianvalue = (readertimes[medianidx - 1] + readertimes[medianidx]) / 2; 6062306a36Sopenharmony_ci else 6162306a36Sopenharmony_ci medianvalue = readertimes[medianidx]; 6262306a36Sopenharmony_ci points = "Points:"; 6362306a36Sopenharmony_ci for (i = 1; i <= newNR; i++) 6462306a36Sopenharmony_ci points = points " " readertimes[i]; 6562306a36Sopenharmony_ci print points; 6662306a36Sopenharmony_ci print "Average reader duration: " sum / newNR " nanoseconds"; 6762306a36Sopenharmony_ci print "Minimum reader duration: " readertimes[1]; 6862306a36Sopenharmony_ci print "Median reader duration: " medianvalue; 6962306a36Sopenharmony_ci print "Maximum reader duration: " readertimes[newNR]; 7062306a36Sopenharmony_ci print "Computed from refscale printk output."; 7162306a36Sopenharmony_ci}' 72