aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBjoern B. Brandenburg <bbb@cs.unc.edu>2011-02-18 17:55:36 -0500
committerBjoern B. Brandenburg <bbb@cs.unc.edu>2011-02-18 17:55:36 -0500
commitc69e0012f6845fcfe8d89bc980c14b7993d99cde (patch)
treec001ea8da0884783758917a208f53a4ba422354c
parent6f06d564aaf93c89406cd3ff52bae03432cce2ae (diff)
tweak overhead plotting
-rwxr-xr-xoplot.py30
1 files changed, 26 insertions, 4 deletions
diff --git a/oplot.py b/oplot.py
index 2f7f0cb..e0b4c69 100755
--- a/oplot.py
+++ b/oplot.py
@@ -24,6 +24,9 @@ options = [
24 o('-i', '--iqr-extent', action='store', dest='extent', type='float', 24 o('-i', '--iqr-extent', action='store', dest='extent', type='float',
25 help='what extent to use for outlier removal'), 25 help='what extent to use for outlier removal'),
26 26
27 o('-c', '--cut-off', action='store', dest='cutoff', type='int',
28 help='max number of samples to use'),
29
27 ] 30 ]
28 31
29defaults = { 32defaults = {
@@ -35,12 +38,23 @@ defaults = {
35 # data processing 38 # data processing
36 'cycles' : 2128, # per usec 39 'cycles' : 2128, # per usec
37 'extent' : 3, 40 'extent' : 3,
41 'cutoff' : None,
38 42
39 # formatting options 43 # formatting options
40 'binsize' : 0.25, 44 'binsize' : 0.25,
41 } 45 }
42 46
43 47
48TXT = {
49 'RELEASE-LATENCY' : 'timer latency',
50 'RELEASE' : 'job release overhead',
51 'SCHED' : 'scheduling overhead',
52 'SCHED2' : 'post-scheduling overhead',
53 'CXS' : 'context-switch overhead',
54 'SEND-RESCHED' : 'IPI latency',
55 'TICK' : 'timer tick overhead',
56}
57
44def get_data(fname, scale, extend): 58def get_data(fname, scale, extend):
45 data = load_binary_file(fname) 59 data = load_binary_file(fname)
46 60
@@ -138,14 +152,22 @@ class OverheadPlotter(defapp.App):
138 data, max_idx, min_idx, iqr_max, iqr_min = get_data(datafile, 152 data, max_idx, min_idx, iqr_max, iqr_min = get_data(datafile,
139 scale, 153 scale,
140 self.options.extent) 154 self.options.extent)
155
156 if self.options.cutoff and len(data) > self.options.cutoff:
157 data = data[:self.options.cutoff]
158
141 samples = data[min_idx:max_idx] 159 samples = data[min_idx:max_idx]
142 discarded = (len(data) - len(samples)) / float(len(data)) * 100 160 discarded = (len(data) - len(samples)) / float(len(data)) * 100
143 max_cost = data[-1] 161 max_cost = data[-1]
144 162
145 p = self.make_plot(name) 163 p = self.make_plot(name)
146 164
147 iqr_label = "IQR: extent=%d threshold=%.2fus filtered=%.2f%%" % \ 165
148 (self.options.extent, iqr_max, discarded) 166 iqr_label = "\\n".join(["samples: total=%d filtered=%d (%.2f%%)",
167 "IQR: extent=%d threshold=%.2fus",
168 ]) % \
169 (len(data), len(data) - len(samples), discarded,
170 self.options.extent, iqr_max)
149 171
150 p.labels = [label(0.5, 0.9, 172 p.labels = [label(0.5, 0.9,
151 get_stats_label(samples), 173 get_stats_label(samples),
@@ -157,8 +179,8 @@ class OverheadPlotter(defapp.App):
157 179
158 p.setup_histogram(gap=1, boxwidth=1.0) 180 p.setup_histogram(gap=1, boxwidth=1.0)
159 181
160 p.title = "measured overheads scheduler=%s; overhead=%s; host=%s" \ 182 p.title = "%s: measured %s for %s tasks per processor (host=%s)" \
161 % (conf['scheduler'], conf['overhead'], conf['host']) 183 % (conf['scheduler'], TXT[conf['overhead']], conf['n'], conf['host'])
162 184
163 p.ylabel = "number of samples" 185 p.ylabel = "number of samples"
164 p.xlabel = "overhead in microseconds (bin size = %.2fus)" \ 186 p.xlabel = "overhead in microseconds (bin size = %.2fus)" \