in gpudirect-tcpxo/topology-scheduler/schedule-daemon.py [0:0]
def calculate_pods_assignment(sorted_nodes, sorted_pods):
"""Calculates the best assignment for pods."""
assignment = [-i for i in reversed(range(1, len(sorted_pods) + 1))]
best_assignment = []
minimum_distance = 1000000000
while True:
all_ok = True
i = len(assignment) - 1
while i >= 0 and all_ok:
assignment[i] += 1
if assignment[i] == len(sorted_nodes):
break
if assignment[i] >= 0 and can_schedule(
sorted_nodes[assignment[i]], sorted_pods[i]
):
i -= 1
elif i < len(assignment) - 1 and assignment[i] == assignment[i + 1] - 1:
all_ok = False
if assignment[-1] == len(sorted_nodes):
break
if all_ok:
new_distance = 0
for i in range(1, len(sorted_pods)):
new_distance += node_topology_distance(
sorted_nodes[assignment[i]], sorted_nodes[assignment[i - 1]]
)
if new_distance < minimum_distance:
best_assignment = assignment.copy()
minimum_distance = new_distance
return best_assignment