1#!/bin/bash 2# SPDX-License-Identifier: GPL-2.0+ 3# 4# Analyze a given results directory for rcuscale scalability measurements. 5# 6# Usage: kvm-recheck-rcuscale.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 23if kvm-recheck-rcuscale-ftrace.sh $i 24then 25 # ftrace data was successfully analyzed, call it good! 26 exit 0 27fi 28 29configfile=`echo $i | sed -e 's/^.*\///'` 30 31sed -e 's/^\[[^]]*]//' < $i/console.log | 32awk ' 33/-scale: .* gps: .* batches:/ { 34 ngps = $9; 35 nbatches = 1; 36} 37 38/-scale: .*writer-duration/ { 39 gptimes[++n] = $5 / 1000.; 40 sum += $5 / 1000.; 41} 42 43END { 44 newNR = asort(gptimes); 45 if (newNR <= 0) { 46 print "No rcuscale records found???" 47 exit; 48 } 49 pct50 = int(newNR * 50 / 100); 50 if (pct50 < 1) 51 pct50 = 1; 52 pct90 = int(newNR * 90 / 100); 53 if (pct90 < 1) 54 pct90 = 1; 55 pct99 = int(newNR * 99 / 100); 56 if (pct99 < 1) 57 pct99 = 1; 58 div = 10 ** int(log(gptimes[pct90]) / log(10) + .5) / 100; 59 print "Histogram bucket size: " div; 60 last = gptimes[1] - 10; 61 count = 0; 62 for (i = 1; i <= newNR; i++) { 63 current = div * int(gptimes[i] / div); 64 if (last == current) { 65 count++; 66 } else { 67 if (count > 0) 68 print last, count; 69 count = 1; 70 last = current; 71 } 72 } 73 if (count > 0) 74 print last, count; 75 print "Average grace-period duration: " sum / newNR " microseconds"; 76 print "Minimum grace-period duration: " gptimes[1]; 77 print "50th percentile grace-period duration: " gptimes[pct50]; 78 print "90th percentile grace-period duration: " gptimes[pct90]; 79 print "99th percentile grace-period duration: " gptimes[pct99]; 80 print "Maximum grace-period duration: " gptimes[newNR]; 81 print "Grace periods: " ngps + 0 " Batches: " nbatches + 0 " Ratio: " ngps / nbatches; 82 print "Computed from rcuscale printk output."; 83}' 84