def stats_add_done_job()

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
            }