From c6106e3eb375824fc20604ddfa845e6d8baa5198 Mon Sep 17 00:00:00 2001 From: Glenn Elliott Date: Fri, 17 Jan 2014 22:16:42 -0500 Subject: 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. --- parse/sched.py | 69 +++++++++++++++++++++++++++++----------------------------- 1 file changed, 35 insertions(+), 34 deletions(-) (limited to 'parse/sched.py') 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: dur = etime - stime if self.validator(dur): self.max = max(self.max, dur) - self.avg *= float(self.num / (self.num + 1)) + old_avg = self.avg * self.num self.num += 1 - self.avg += dur / float(self.num) + self.avg = (old_avg + dur) / float(self.num) # Give up on some jobs if they've been hanging around too long. # While not strictly needed, it helps improve performance and @@ -248,12 +248,13 @@ class ReleaseRecord(SchedRecord): data.pgm_misses.start_time(self, self.deadline) data.pgm_lateness.start_time(self, self.deadline) - ntype = task_dict[self.pid].pgm_params.node_type - if ntype == PGM_SRC or ntype == PGM_SRC_SINK: - gid = task_dict[self.pid].pgm_params.gid - gdata = graph_dict[gid] - gdata.jobs += 1 - gdata.response.start_time(self, self.when) + if data.pgm_params: + ntype = data.pgm_params.node_type + if ntype == PGM_SRC or ntype == PGM_SRC_SINK: + gid = data.pgm_params.gid + gdata = graph_dict[gid] + gdata.jobs += 1 + gdata.response.start_time(self, self.when) class CompletionRecord(SchedRecord): FIELDS = [('when', c_uint64)] @@ -422,38 +423,38 @@ def extract_sched_data(result, data_dir, work_dir): # start with basic task information stat_data["miss-ratio" ].append(miss_ratio) - stat_data["max-response"].append(float(response.max)/NSEC_PER_MSEC) - stat_data["avg-response"].append(response.avg/NSEC_PER_MSEC) - stat_data["max-response-prop"].append(float(response.max) / tdata.params.period) - stat_data["avg-response-prop"].append(response.avg / tdata.params.period) + stat_data["response-max"].append(float(response.max)/NSEC_PER_MSEC) + stat_data["response-avg"].append(response.avg/NSEC_PER_MSEC) + stat_data["response-prop-max"].append(float(response.max) / tdata.params.period) + stat_data["response-prop-avg"].append(response.avg / tdata.params.period) - stat_data["max-tard"].append(float(miss.max)/NSEC_PER_MSEC) - stat_data["avg-tard"].append(avg_tard/NSEC_PER_MSEC) - stat_data["max-tard-prop"].append(float(miss.max) / tdata.params.period) - stat_data["avg-tard-prop"].append(avg_tard / tdata.params.period) + stat_data["tard-max"].append(float(miss.max)/NSEC_PER_MSEC) + stat_data["tard-avg"].append(avg_tard/NSEC_PER_MSEC) + stat_data["tard-prop-max"].append(float(miss.max) / tdata.params.period) + stat_data["tard-prop-avg"].append(avg_tard / tdata.params.period) - stat_data["max-response"].append(float(lateness.max)/NSEC_PER_MSEC) - stat_data["avg-response"].append(lateness.avg/NSEC_PER_MSEC) - stat_data["max-response-prop"].append(float(lateness.max) / tdata.params.period) - stat_data["avg-response-prop"].append(lateness.avg / tdata.params.period) + stat_data["lateness-max"].append(float(lateness.max)/NSEC_PER_MSEC) + stat_data["lateness-avg"].append(lateness.avg/NSEC_PER_MSEC) + stat_data["lateness-prop-max"].append(float(lateness.max) / tdata.params.period) + stat_data["lateness-prop-avg"].append(lateness.avg / tdata.params.period) # same data, but with PGM-adjusted release times (shifted deadlines) stat_data["pgm-miss-ratio" ].append(pgm_miss_ratio) - stat_data["pgm-max-response"].append(float(pgm_response.max)/NSEC_PER_MSEC) - stat_data["pgm-avg-response"].append(pgm_response.avg/NSEC_PER_MSEC) - stat_data["pgm-max-response-prop"].append(float(pgm_response.max) / tdata.params.period) - stat_data["pgm-avg-response-prop"].append(pgm_response.avg / tdata.params.period) + stat_data["pgm-response-max"].append(float(pgm_response.max)/NSEC_PER_MSEC) + stat_data["pgm-response-avg"].append(pgm_response.avg/NSEC_PER_MSEC) + stat_data["pgm-response-prop-max"].append(float(pgm_response.max) / tdata.params.period) + stat_data["pgm-response-prop-avg"].append(pgm_response.avg / tdata.params.period) - stat_data["pgm-max-tard"].append(float(pgm_miss.max)/NSEC_PER_MSEC) - stat_data["pgm-avg-tard"].append(pgm_avg_tard/NSEC_PER_MSEC) - stat_data["pgm-max-tard-prop"].append(float(pgm_miss.max) / tdata.params.period) - stat_data["pgm-avg-tard-prop"].append(pgm_avg_tard / tdata.params.period) + stat_data["pgm-tard-max"].append(float(pgm_miss.max)/NSEC_PER_MSEC) + stat_data["pgm-tard-avg"].append(pgm_avg_tard/NSEC_PER_MSEC) + stat_data["pgm-tard-prop-max"].append(float(pgm_miss.max) / tdata.params.period) + stat_data["pgm-tard-prop-avg"].append(pgm_avg_tard / tdata.params.period) - stat_data["pgm-max-response"].append(float(pgm_lateness.max)/NSEC_PER_MSEC) - stat_data["pgm-avg-response"].append(pgm_lateness.avg/NSEC_PER_MSEC) - stat_data["pgm-max-response-prop"].append(float(pgm_lateness.max) / tdata.params.period) - stat_data["pgm-avg-response-prop"].append(pgm_lateness.avg / tdata.params.period) + stat_data["pgm-lateness-max"].append(float(pgm_lateness.max)/NSEC_PER_MSEC) + stat_data["pgm-lateness-avg"].append(pgm_lateness.avg/NSEC_PER_MSEC) + stat_data["pgm-lateness-prop-max"].append(float(pgm_lateness.max) / tdata.params.period) + stat_data["pgm-lateness-prop-avg"].append(pgm_lateness.avg / tdata.params.period) for gid, gdata in graph_dict.iteritems(): if not gdata.params: @@ -469,8 +470,8 @@ def extract_sched_data(result, data_dir, work_dir): log_once(LOSS_MSG) continue - gstat_data["graph-max-response"].append(float(response.max)/NSEC_PER_MSEC) - gstat_data["graph-avg-response"].append(response.avg/NSEC_PER_MSEC) + gstat_data["graph-response-max"].append(float(response.max)/NSEC_PER_MSEC) + gstat_data["graph-response-avg"].append(response.avg/NSEC_PER_MSEC) # Summarize value groups for name, data in stat_data.iteritems(): -- cgit v1.2.2