in cluster-trace-gpu-v2020/simulator/job_history.py [0:0]
def stats_add_done_job(self, job):
window_list = [] # Could use deque for better performance
user = job['user']
dur = job['duration']
if user not in self.user_job_stats:
assert user not in self.job_window_list_dict
self.job_window_list_dict[user] = [dur]
self.user_job_stats[user] = {
'num_job': 1,
'dur_avg': dur,
'dur_mva': dur,
'dur_har': min(1, 1 / dur) # Harmonic mean
}
else:
job_win_list = self.job_window_list_dict[user]
length = len(job_win_list)
if length >= self.window:
job_win_list.pop(0)
job_win_list.append(dur)
dur_avg = self.user_job_stats[user]['dur_avg']
dur_har = self.user_job_stats[user]['dur_har']
num_job = self.user_job_stats[user]['num_job']
dur_avg = dur_avg + (dur - dur_avg) / (num_job + 1)
dur_har = dur_har + (min(1, 1/dur) - dur_har) / (num_job + 1)
self.user_job_stats[user] = {
'num_job': num_job + 1,
'dur_avg': dur_avg,
'dur_mva': sum(job_win_list)/len(job_win_list),
'dur_har': dur_har
}