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