diff options
author | Glenn Elliott <gelliott@cs.unc.edu> | 2014-01-17 22:16:42 -0500 |
---|---|---|
committer | Glenn Elliott <gelliott@cs.unc.edu> | 2014-01-17 22:16:42 -0500 |
commit | c6106e3eb375824fc20604ddfa845e6d8baa5198 (patch) | |
tree | 905686602f6892832e5edb6c89122491050f3bd4 /parse/sched.py | |
parent | 69bdd9a6095fbd85cc90447862cc898c3391b3a7 (diff) |
BUG FIX: TimeTracker average computation
The formula for computing the running average was incorrect.
This patch fixes that. It also renames the putput fields
to make grouping similar values on the screen (by lexical order)
easier.
Diffstat (limited to 'parse/sched.py')
-rw-r--r-- | parse/sched.py | 69 |
1 files changed, 35 insertions, 34 deletions
diff --git a/parse/sched.py b/parse/sched.py index 0ab16ce..d773c8a 100644 --- a/parse/sched.py +++ b/parse/sched.py | |||
@@ -44,9 +44,9 @@ class TimeTracker: | |||
44 | dur = etime - stime | 44 | dur = etime - stime |
45 | if self.validator(dur): | 45 | if self.validator(dur): |
46 | self.max = max(self.max, dur) | 46 | self.max = max(self.max, dur) |
47 | self.avg *= float(self.num / (self.num + 1)) | 47 | old_avg = self.avg * self.num |
48 | self.num += 1 | 48 | self.num += 1 |
49 | self.avg += dur / float(self.num) | 49 | self.avg = (old_avg + dur) / float(self.num) |
50 | 50 | ||
51 | # Give up on some jobs if they've been hanging around too long. | 51 | # Give up on some jobs if they've been hanging around too long. |
52 | # While not strictly needed, it helps improve performance and | 52 | # While not strictly needed, it helps improve performance and |
@@ -248,12 +248,13 @@ class ReleaseRecord(SchedRecord): | |||
248 | data.pgm_misses.start_time(self, self.deadline) | 248 | data.pgm_misses.start_time(self, self.deadline) |
249 | data.pgm_lateness.start_time(self, self.deadline) | 249 | data.pgm_lateness.start_time(self, self.deadline) |
250 | 250 | ||
251 | ntype = task_dict[self.pid].pgm_params.node_type | 251 | if data.pgm_params: |
252 | if ntype == PGM_SRC or ntype == PGM_SRC_SINK: | 252 | ntype = data.pgm_params.node_type |
253 | gid = task_dict[self.pid].pgm_params.gid | 253 | if ntype == PGM_SRC or ntype == PGM_SRC_SINK: |
254 | gdata = graph_dict[gid] | 254 | gid = data.pgm_params.gid |
255 | gdata.jobs += 1 | 255 | gdata = graph_dict[gid] |
256 | gdata.response.start_time(self, self.when) | 256 | gdata.jobs += 1 |
257 | gdata.response.start_time(self, self.when) | ||
257 | 258 | ||
258 | class CompletionRecord(SchedRecord): | 259 | class CompletionRecord(SchedRecord): |
259 | FIELDS = [('when', c_uint64)] | 260 | FIELDS = [('when', c_uint64)] |
@@ -422,38 +423,38 @@ def extract_sched_data(result, data_dir, work_dir): | |||
422 | # start with basic task information | 423 | # start with basic task information |
423 | stat_data["miss-ratio" ].append(miss_ratio) | 424 | stat_data["miss-ratio" ].append(miss_ratio) |
424 | 425 | ||
425 | stat_data["max-response"].append(float(response.max)/NSEC_PER_MSEC) | 426 | stat_data["response-max"].append(float(response.max)/NSEC_PER_MSEC) |
426 | stat_data["avg-response"].append(response.avg/NSEC_PER_MSEC) | 427 | stat_data["response-avg"].append(response.avg/NSEC_PER_MSEC) |
427 | stat_data["max-response-prop"].append(float(response.max) / tdata.params.period) | 428 | stat_data["response-prop-max"].append(float(response.max) / tdata.params.period) |
428 | stat_data["avg-response-prop"].append(response.avg / tdata.params.period) | 429 | stat_data["response-prop-avg"].append(response.avg / tdata.params.period) |
429 | 430 | ||
430 | stat_data["max-tard"].append(float(miss.max)/NSEC_PER_MSEC) | 431 | stat_data["tard-max"].append(float(miss.max)/NSEC_PER_MSEC) |
431 | stat_data["avg-tard"].append(avg_tard/NSEC_PER_MSEC) | 432 | stat_data["tard-avg"].append(avg_tard/NSEC_PER_MSEC) |
432 | stat_data["max-tard-prop"].append(float(miss.max) / tdata.params.period) | 433 | stat_data["tard-prop-max"].append(float(miss.max) / tdata.params.period) |
433 | stat_data["avg-tard-prop"].append(avg_tard / tdata.params.period) | 434 | stat_data["tard-prop-avg"].append(avg_tard / tdata.params.period) |
434 | 435 | ||
435 | stat_data["max-response"].append(float(lateness.max)/NSEC_PER_MSEC) | 436 | stat_data["lateness-max"].append(float(lateness.max)/NSEC_PER_MSEC) |
436 | stat_data["avg-response"].append(lateness.avg/NSEC_PER_MSEC) | 437 | stat_data["lateness-avg"].append(lateness.avg/NSEC_PER_MSEC) |
437 | stat_data["max-response-prop"].append(float(lateness.max) / tdata.params.period) | 438 | stat_data["lateness-prop-max"].append(float(lateness.max) / tdata.params.period) |
438 | stat_data["avg-response-prop"].append(lateness.avg / tdata.params.period) | 439 | stat_data["lateness-prop-avg"].append(lateness.avg / tdata.params.period) |
439 | 440 | ||
440 | # same data, but with PGM-adjusted release times (shifted deadlines) | 441 | # same data, but with PGM-adjusted release times (shifted deadlines) |
441 | stat_data["pgm-miss-ratio" ].append(pgm_miss_ratio) | 442 | stat_data["pgm-miss-ratio" ].append(pgm_miss_ratio) |
442 | 443 | ||
443 | stat_data["pgm-max-response"].append(float(pgm_response.max)/NSEC_PER_MSEC) | 444 | stat_data["pgm-response-max"].append(float(pgm_response.max)/NSEC_PER_MSEC) |
444 | stat_data["pgm-avg-response"].append(pgm_response.avg/NSEC_PER_MSEC) | 445 | stat_data["pgm-response-avg"].append(pgm_response.avg/NSEC_PER_MSEC) |
445 | stat_data["pgm-max-response-prop"].append(float(pgm_response.max) / tdata.params.period) | 446 | stat_data["pgm-response-prop-max"].append(float(pgm_response.max) / tdata.params.period) |
446 | stat_data["pgm-avg-response-prop"].append(pgm_response.avg / tdata.params.period) | 447 | stat_data["pgm-response-prop-avg"].append(pgm_response.avg / tdata.params.period) |
447 | 448 | ||
448 | stat_data["pgm-max-tard"].append(float(pgm_miss.max)/NSEC_PER_MSEC) | 449 | stat_data["pgm-tard-max"].append(float(pgm_miss.max)/NSEC_PER_MSEC) |
449 | stat_data["pgm-avg-tard"].append(pgm_avg_tard/NSEC_PER_MSEC) | 450 | stat_data["pgm-tard-avg"].append(pgm_avg_tard/NSEC_PER_MSEC) |
450 | stat_data["pgm-max-tard-prop"].append(float(pgm_miss.max) / tdata.params.period) | 451 | stat_data["pgm-tard-prop-max"].append(float(pgm_miss.max) / tdata.params.period) |
451 | stat_data["pgm-avg-tard-prop"].append(pgm_avg_tard / tdata.params.period) | 452 | stat_data["pgm-tard-prop-avg"].append(pgm_avg_tard / tdata.params.period) |
452 | 453 | ||
453 | stat_data["pgm-max-response"].append(float(pgm_lateness.max)/NSEC_PER_MSEC) | 454 | stat_data["pgm-lateness-max"].append(float(pgm_lateness.max)/NSEC_PER_MSEC) |
454 | stat_data["pgm-avg-response"].append(pgm_lateness.avg/NSEC_PER_MSEC) | 455 | stat_data["pgm-lateness-avg"].append(pgm_lateness.avg/NSEC_PER_MSEC) |
455 | stat_data["pgm-max-response-prop"].append(float(pgm_lateness.max) / tdata.params.period) | 456 | stat_data["pgm-lateness-prop-max"].append(float(pgm_lateness.max) / tdata.params.period) |
456 | stat_data["pgm-avg-response-prop"].append(pgm_lateness.avg / tdata.params.period) | 457 | stat_data["pgm-lateness-prop-avg"].append(pgm_lateness.avg / tdata.params.period) |
457 | 458 | ||
458 | for gid, gdata in graph_dict.iteritems(): | 459 | for gid, gdata in graph_dict.iteritems(): |
459 | if not gdata.params: | 460 | if not gdata.params: |
@@ -469,8 +470,8 @@ def extract_sched_data(result, data_dir, work_dir): | |||
469 | log_once(LOSS_MSG) | 470 | log_once(LOSS_MSG) |
470 | continue | 471 | continue |
471 | 472 | ||
472 | gstat_data["graph-max-response"].append(float(response.max)/NSEC_PER_MSEC) | 473 | gstat_data["graph-response-max"].append(float(response.max)/NSEC_PER_MSEC) |
473 | gstat_data["graph-avg-response"].append(response.avg/NSEC_PER_MSEC) | 474 | gstat_data["graph-response-avg"].append(response.avg/NSEC_PER_MSEC) |
474 | 475 | ||
475 | # Summarize value groups | 476 | # Summarize value groups |
476 | for name, data in stat_data.iteritems(): | 477 | for name, data in stat_data.iteritems(): |