18c2ecf20Sopenharmony_ci#!/bin/bash 28c2ecf20Sopenharmony_ci# SPDX-License-Identifier: GPL-2.0+ 38c2ecf20Sopenharmony_ci# 48c2ecf20Sopenharmony_ci# Analyze a given results directory for refscale performance measurements. 58c2ecf20Sopenharmony_ci# 68c2ecf20Sopenharmony_ci# Usage: kvm-recheck-refscale.sh resdir 78c2ecf20Sopenharmony_ci# 88c2ecf20Sopenharmony_ci# Copyright (C) IBM Corporation, 2016 98c2ecf20Sopenharmony_ci# 108c2ecf20Sopenharmony_ci# Authors: Paul E. McKenney <paulmck@linux.ibm.com> 118c2ecf20Sopenharmony_ci 128c2ecf20Sopenharmony_cii="$1" 138c2ecf20Sopenharmony_ciif test -d "$i" -a -r "$i" 148c2ecf20Sopenharmony_cithen 158c2ecf20Sopenharmony_ci : 168c2ecf20Sopenharmony_cielse 178c2ecf20Sopenharmony_ci echo Unreadable results directory: $i 188c2ecf20Sopenharmony_ci exit 1 198c2ecf20Sopenharmony_cifi 208c2ecf20Sopenharmony_ciPATH=`pwd`/tools/testing/selftests/rcutorture/bin:$PATH; export PATH 218c2ecf20Sopenharmony_ci. functions.sh 228c2ecf20Sopenharmony_ci 238c2ecf20Sopenharmony_ciconfigfile=`echo $i | sed -e 's/^.*\///'` 248c2ecf20Sopenharmony_ci 258c2ecf20Sopenharmony_cised -e 's/^\[[^]]*]//' < $i/console.log | tr -d '\015' | 268c2ecf20Sopenharmony_ciawk -v configfile="$configfile" ' 278c2ecf20Sopenharmony_ci/^[ ]*Runs Time\(ns\) *$/ { 288c2ecf20Sopenharmony_ci if (dataphase + 0 == 0) { 298c2ecf20Sopenharmony_ci dataphase = 1; 308c2ecf20Sopenharmony_ci # print configfile, $0; 318c2ecf20Sopenharmony_ci } 328c2ecf20Sopenharmony_ci next; 338c2ecf20Sopenharmony_ci} 348c2ecf20Sopenharmony_ci 358c2ecf20Sopenharmony_ci/[^ ]*[0-9][0-9]* [0-9][0-9]*\.[0-9][0-9]*$/ { 368c2ecf20Sopenharmony_ci if (dataphase == 1) { 378c2ecf20Sopenharmony_ci # print $0; 388c2ecf20Sopenharmony_ci readertimes[++n] = $2; 398c2ecf20Sopenharmony_ci sum += $2; 408c2ecf20Sopenharmony_ci } 418c2ecf20Sopenharmony_ci next; 428c2ecf20Sopenharmony_ci} 438c2ecf20Sopenharmony_ci 448c2ecf20Sopenharmony_ci{ 458c2ecf20Sopenharmony_ci if (dataphase == 1) 468c2ecf20Sopenharmony_ci dataphase == 2; 478c2ecf20Sopenharmony_ci next; 488c2ecf20Sopenharmony_ci} 498c2ecf20Sopenharmony_ci 508c2ecf20Sopenharmony_ciEND { 518c2ecf20Sopenharmony_ci print configfile " results:"; 528c2ecf20Sopenharmony_ci newNR = asort(readertimes); 538c2ecf20Sopenharmony_ci if (newNR <= 0) { 548c2ecf20Sopenharmony_ci print "No refscale records found???" 558c2ecf20Sopenharmony_ci exit; 568c2ecf20Sopenharmony_ci } 578c2ecf20Sopenharmony_ci medianidx = int(newNR / 2); 588c2ecf20Sopenharmony_ci if (newNR == medianidx * 2) 598c2ecf20Sopenharmony_ci medianvalue = (readertimes[medianidx - 1] + readertimes[medianidx]) / 2; 608c2ecf20Sopenharmony_ci else 618c2ecf20Sopenharmony_ci medianvalue = readertimes[medianidx]; 628c2ecf20Sopenharmony_ci points = "Points:"; 638c2ecf20Sopenharmony_ci for (i = 1; i <= newNR; i++) 648c2ecf20Sopenharmony_ci points = points " " readertimes[i]; 658c2ecf20Sopenharmony_ci print points; 668c2ecf20Sopenharmony_ci print "Average reader duration: " sum / newNR " nanoseconds"; 678c2ecf20Sopenharmony_ci print "Minimum reader duration: " readertimes[1]; 688c2ecf20Sopenharmony_ci print "Median reader duration: " medianvalue; 698c2ecf20Sopenharmony_ci print "Maximum reader duration: " readertimes[newNR]; 708c2ecf20Sopenharmony_ci print "Computed from refscale printk output."; 718c2ecf20Sopenharmony_ci}' 72