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