1 #!/bin/bash 1 #!/bin/bash 2 # SPDX-License-Identifier: GPL-2.0+ 2 # SPDX-License-Identifier: GPL-2.0+ 3 # 3 # 4 # Analyze a given results directory for rcusca 4 # Analyze a given results directory for rcuscale scalability measurements. 5 # 5 # 6 # Usage: kvm-recheck-rcuscale.sh resdir 6 # Usage: kvm-recheck-rcuscale.sh resdir 7 # 7 # 8 # Copyright (C) IBM Corporation, 2016 8 # Copyright (C) IBM Corporation, 2016 9 # 9 # 10 # Authors: Paul E. McKenney <paulmck@linux.ibm. 10 # Authors: Paul E. McKenney <paulmck@linux.ibm.com> 11 11 12 i="$1" 12 i="$1" 13 if test -d "$i" -a -r "$i" 13 if test -d "$i" -a -r "$i" 14 then 14 then 15 : 15 : 16 else 16 else 17 echo Unreadable results directory: $i 17 echo Unreadable results directory: $i 18 exit 1 18 exit 1 19 fi 19 fi 20 PATH=`pwd`/tools/testing/selftests/rcutorture/ 20 PATH=`pwd`/tools/testing/selftests/rcutorture/bin:$PATH; export PATH 21 . functions.sh 21 . functions.sh 22 22 23 if kvm-recheck-rcuscale-ftrace.sh $i 23 if kvm-recheck-rcuscale-ftrace.sh $i 24 then 24 then 25 # ftrace data was successfully analyze 25 # ftrace data was successfully analyzed, call it good! 26 exit 0 26 exit 0 27 fi 27 fi 28 28 29 configfile=`echo $i | sed -e 's/^.*\///'` 29 configfile=`echo $i | sed -e 's/^.*\///'` 30 30 31 sed -e 's/^\[[^]]*]//' < $i/console.log | 31 sed -e 's/^\[[^]]*]//' < $i/console.log | 32 awk ' 32 awk ' 33 /-scale: .* gps: .* batches:/ { 33 /-scale: .* gps: .* batches:/ { 34 ngps = $9; 34 ngps = $9; 35 nbatches = 1; 35 nbatches = 1; 36 } 36 } 37 37 38 /-scale: .*writer-duration/ { 38 /-scale: .*writer-duration/ { 39 gptimes[++n] = $5 / 1000.; 39 gptimes[++n] = $5 / 1000.; 40 sum += $5 / 1000.; 40 sum += $5 / 1000.; 41 } 41 } 42 42 43 /rcu_scale: Grace-period kthread CPU time/ { 43 /rcu_scale: Grace-period kthread CPU time/ { 44 cputime = $6; 44 cputime = $6; 45 } 45 } 46 46 47 END { 47 END { 48 newNR = asort(gptimes); 48 newNR = asort(gptimes); 49 if (newNR <= 0) { 49 if (newNR <= 0) { 50 print "No rcuscale records fou 50 print "No rcuscale records found???" 51 exit; 51 exit; 52 } 52 } 53 pct50 = int(newNR * 50 / 100); 53 pct50 = int(newNR * 50 / 100); 54 if (pct50 < 1) 54 if (pct50 < 1) 55 pct50 = 1; 55 pct50 = 1; 56 pct90 = int(newNR * 90 / 100); 56 pct90 = int(newNR * 90 / 100); 57 if (pct90 < 1) 57 if (pct90 < 1) 58 pct90 = 1; 58 pct90 = 1; 59 pct99 = int(newNR * 99 / 100); 59 pct99 = int(newNR * 99 / 100); 60 if (pct99 < 1) 60 if (pct99 < 1) 61 pct99 = 1; 61 pct99 = 1; 62 div = 10 ** int(log(gptimes[pct90]) / 62 div = 10 ** int(log(gptimes[pct90]) / log(10) + .5) / 100; 63 print "Histogram bucket size: " div; 63 print "Histogram bucket size: " div; 64 last = gptimes[1] - 10; 64 last = gptimes[1] - 10; 65 count = 0; 65 count = 0; 66 for (i = 1; i <= newNR; i++) { 66 for (i = 1; i <= newNR; i++) { 67 current = div * int(gptimes[i] 67 current = div * int(gptimes[i] / div); 68 if (last == current) { 68 if (last == current) { 69 count++; 69 count++; 70 } else { 70 } else { 71 if (count > 0) 71 if (count > 0) 72 print last, co 72 print last, count; 73 count = 1; 73 count = 1; 74 last = current; 74 last = current; 75 } 75 } 76 } 76 } 77 if (count > 0) 77 if (count > 0) 78 print last, count; 78 print last, count; 79 print "Average grace-period duration: 79 print "Average grace-period duration: " sum / newNR " microseconds"; 80 print "Minimum grace-period duration: 80 print "Minimum grace-period duration: " gptimes[1]; 81 print "50th percentile grace-period du 81 print "50th percentile grace-period duration: " gptimes[pct50]; 82 print "90th percentile grace-period du 82 print "90th percentile grace-period duration: " gptimes[pct90]; 83 print "99th percentile grace-period du 83 print "99th percentile grace-period duration: " gptimes[pct99]; 84 print "Maximum grace-period duration: 84 print "Maximum grace-period duration: " gptimes[newNR]; 85 if (cputime != "") 85 if (cputime != "") 86 cpustr = " CPU: " cputime; 86 cpustr = " CPU: " cputime; 87 print "Grace periods: " ngps + 0 " Bat 87 print "Grace periods: " ngps + 0 " Batches: " nbatches + 0 " Ratio: " ngps / nbatches cpustr; 88 print "Computed from rcuscale printk o 88 print "Computed from rcuscale printk output."; 89 }' 89 }'
Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.