def preempt_job()

in cluster-trace-gpu-v2020/simulator/scheduler.py [0:0]


    def preempt_job(self, cluster=None):
        cluster = cluster if cluster is not None else self.cluster
        if all([n.idl_gpus for n in cluster.node_list]) >= 0 and \
            all([n.idl_cpus for n in cluster.node_list]) >= 0:
            return 0  # No resource contention, bypass preemption

        preempted_job_list = []
        if self.preempt_policy in PREEMPT_POLICY_DICT.keys():
            # Pre node preemption: self.preempt_job_node(node)
            for node in cluster.node_list:
                # As long as the resources are sufficient, no proactive preempt for now.
                if node.idl_gpus < 0 or node.idl_cpus < 0 or len(preempted_job_list) > 0:
                    print_fn("%sPreempt jobs on %s" % (cluster.log_prefix, node))
                    preempted_job_list = self.preempt_job_node(node, preempted_job_list)
            for job in preempted_job_list:
                print_fn("%sOFF : %s" % (cluster.log_prefix, job))
        else:
            raise NotImplementedError("Preempting job policies not implemented")

        for job in preempted_job_list:
            cluster.job_list.append(job)
            # Update Job
            job['wasted'] += job['progress']
            job['on_time'] = 0
            job['progress'] = 0
            job['node'] = None