1fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#!/bin/sh 2fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 3fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavindebug=false;args=;time=true 4fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 5fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin# temporary files used by this script 6fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinmy_awk=/tmp/.uptime.$$.awk 7fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinmy_log=/tmp/.uptime.$$.log 8fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 9fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin# check for arguments - to override temporary file names 10fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinyes=true 11fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinwhile $yes && [ $# -gt 1 ] 12fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavindo 13fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin case $1 in 14fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin -v) 15fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin # verbose mode: print collected info 16fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin debug=true 17fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin shift 18fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin ;; 19fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin -vv) 20fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin # super verbose mode: print collected info and debug awk script 21fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin debug=true 22fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin args="$args debug=1" 23fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin shift 24fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin ;; 25fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin -notime) 26fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin # do not use time 27fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin time=false 28fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin shift 29fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin ;; 30fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin -CPU=*) 31fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin # CPU speed 32fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin args="$args `echo "$1" | cut -c2-`" 33fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin shift 34fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin ;; 35fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin *) 36fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin yes=false 37fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin ;; 38fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin esac 39fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavindone 40fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 41fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavincat >$my_awk <<"AWKSCRIPT" 42fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 43fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinBEGIN { 44fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin FS=" " 45fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin factor=0; # we are measuring after-before as (-before) + (after), 46fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin # so the factor before the test is -1, after the test is 47fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin # +1. 48fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin uptime_total = 0; # total system uptime (before/after) 49fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin uptime_idle = 0; # total idle uptime (before/after) 50fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin proctime_total = 0; # total time the test was running 51fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin proctime_work = 0; # total CPU time that the test was using 52fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin cpu_time = 0; # total time the CPU stats were measured on 53fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin cpu_MHz = 0; # total kHz work for the CPU 54fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin cpu_eMHz = 0; # effective CPU operating point 55fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin delete MHZtime; # total time spent in various power states 56fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin kernel = 0; # don't print separate kernel time statistics 57fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 58fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin # get variable assignments from ARGV 59fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin for (i=1; i<ARGC; i++) 60fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 61fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin arg = ARGV[i]; 62fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (gsub("^CPU=", "",arg)) { cpu_eMHz = arg; } 63fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else if (gsub("^debug=", "",arg)) { debug = arg; } 64fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else if (arg == "kernel") { kernel = 1; } 65fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else continue; 66fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin delete ARGV[i]; # we can do this is AWK, and we don't need to decrement i 67fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 68fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin} 69fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 70fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/^[0-9]+\./ { # /proc/uptime lines 71fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin # the first time an uptime line is encountered factor should be -1, the 72fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin # second time it should be 1. We set it to 0 at the beginning, so we use 73fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin # that to decide if it is the 1st uptime line 74fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin factor = factor ? 1 : -1 75fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin # get uptime stats (for beginning or end) 76fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin uptime_total += factor * $1 77fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin uptime_idle += factor * $2 78fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (debug) 79fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 80fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin print "got(/proc/uptime):", $0, "=>", factor, uptime_total, uptime_idle 81fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 82fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin} 83fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 84fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/^[0-9]+ / { # /sys/devices/system/cpu/cpu0/cpufreq/stats/time_in_state lines 85fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin # get time spent in various power states (in 10ms) 86fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin MHZtime[$1] += factor * $2 * 0.01 87fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin cpu_time += factor * $2 * 0.01 88fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin cpu_MHz += factor * $1 * $2 / 100000 # (CPU freq is in kHz) 89fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (debug) 90fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 91fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin print "got(/sys/..time_in_state):", $0, "=>", factor, cpu_time, cpu_MHz, MHZtime[$1] 92fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 93fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin} 94fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 95fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/^(real|user|sys)/ { 96fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin # test has run 97fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin factor=1 98fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin # get time (from h m s notation to seconds) 99fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin time=0 100fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin for (i = 2; i <= NF; i++) 101fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 102fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if ($i ~ /h/) 103fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 104fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin time += 3600 * $i 105fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 106fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else if ($i ~ /m/) 107fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 108fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin time += 60 * $i 109fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 110fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else 111fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { # this works for both POSIX and normal output 112fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin time += 1 * $i 113fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 114fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (debug) 115fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 116fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin print "got (" $i ") =>", time 117fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 118fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 119fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 120fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if ($1 ~ /real/) 121fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 122fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin proctime_total = time 123fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 124fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else 125fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 126fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin proctime_work += time; 127fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (kernel && ($1 ~ /sys/)) 128fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 129fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin proctime_kernel += time; 130fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 131fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 132fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 133fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (debug) 134fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 135fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin print "got(time)", $0, "=>", proctime_total, proctime_work 136fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 137fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin} 138fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 139fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinEND { 140fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin print "ARMtime Results" 141fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 142fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (proctime_total) 143fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 144fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin dur_time = ", " proctime_total " (time)" 145fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 146fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (cpu_time) 147fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 148fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin dur_cpu = ", " cpu_time " (cpu-stats)" 149fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 150fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 151fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin print " Test duration:", uptime_total, "(uptime)" dur_time dur_cpu 152fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 153fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin # calculate CPU MHz for test 154fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin cpu_states = 0 155fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin for (i in MHZtime) 156fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 157fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (MHZtime[i] > 0) 158fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 159fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin print " ARM-CPU time at", i/1000, "MHz: ", MHZtime[i], "s" 160fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin cpu_states ++; 161fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 162fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 163fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 164fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (cpu_time) 165fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 166fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin cpu_eMHz = cpu_MHz/cpu_time 167fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 168fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else if (cpu_states) 169fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 170fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin cpu_eMHz /= cpu_states 171fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 172fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else if (cpu_eMHz == 0) 173fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 174fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin "grep mpu /proc/omap_clocks /proc/ckomap24xx" | getline clock_speed 175fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin split(clock_speed, clock_speeds) 176fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (debug) { 177fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin print "got", clock_speed 178fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin print "got", clock_speeds[1], clock_speeds[2], clock_speeds[3] 179fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 180fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin cpu_eMHz = clock_speeds[3] / 1000000 181fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 182fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 183fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin # mark ~ if we are not sure about the CPU-speed (e.g. if we had more than one 184fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin # power states during the test run) 185fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin cpu_sureness = (cpu_states == 1) ? "" : "~" 186fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 187fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin cpu_eMHz /= 100 # so we can multiply with the %-s 188fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (uptime_total > 0) 189fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 190fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin # WE always will use uptime total 191fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin uptime_idle -= uptime_total 192fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin util = int(0.5 - 1000 * uptime_idle/uptime_total) / 10 193fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 194fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin # don't let utilization be negative (because it is infact 0) 195fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (util < 0) 196fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 197fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin util = 0 198fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 199fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 200fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin print " Total ARM-CPU utilization:", util "% =", cpu_sureness (util * cpu_eMHz), "eMHz" 201fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (proctime_total) 202fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 203fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin util = int(0.5 + 1000 * proctime_work/uptime_total) / 10 204fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin print " Test ARM-CPU utilization:", util "% =", cpu_sureness (util * cpu_eMHz), "eMHz" 205fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 206fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (kernel) 207fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 208fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin util = int(0.5 + 1000 * proctime_kernel/uptime_total) / 10 209fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin proc_util = int(0.5 + 1000 * proctime_kernel/proctime_work) / 10 210fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin print " Test's kernel space util.:", util "% =", cpu_sureness (util * cpu_eMHz), "eMHz (" proc_util "% of test thread)" 211fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 212fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 213fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 214fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin} 215fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinAWKSCRIPT 216fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 217fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin# run measurement 218fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavincat /proc/uptime /sys/devices/system/cpu/cpu0/cpufreq/stats/time_in_state >$my_log 219fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinif $time 220fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinthen 221fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin time -p $* 2>>$my_log 222fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinelse 223fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin $* 224fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinfi 225fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavincat /proc/uptime /sys/devices/system/cpu/cpu0/cpufreq/stats/time_in_state >>$my_log 226fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 227fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin# evaluate and debug 228fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin$debug && cat $my_log 229fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinawk -f $my_awk $args $my_log 230fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 231fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin# remove temporary files 232fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinrm $my_log $my_awk 233fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 234