From f2a25b1b998bf1b437e51d053fdeceff3cd3f005 Mon Sep 17 00:00:00 2001 From: streetycat <305190374@qq.com> Date: Mon, 18 Sep 2023 07:58:08 +0000 Subject: [PATCH 1/2] schedule same nodes with different weight --- src/aios_kernel/compute_kernel.py | 15 +++++++++++++++ src/aios_kernel/compute_node.py | 3 +++ 2 files changed, 18 insertions(+) diff --git a/src/aios_kernel/compute_kernel.py b/src/aios_kernel/compute_kernel.py index 82d5c55..a5f31b5 100644 --- a/src/aios_kernel/compute_kernel.py +++ b/src/aios_kernel/compute_kernel.py @@ -1,4 +1,5 @@ from abc import ABC, abstractmethod +import random from typing import Optional import logging import asyncio @@ -59,9 +60,23 @@ class ComputeKernel: asyncio.create_task(_run_task_loop()) def _schedule(self, task) -> ComputeNode: + # find all the node which supports this task + support_nodes = [] + total_weights = 0 for node in self.compute_nodes.values(): if node.is_support(task) is True: + support_nodes.append({ + "pos": total_weights, + "node": node + }) + total_weights += node.weight() + + # hit a random node with weight + hit_pos = random.randint(0, total_weights - 1) + for i in range(min(len(support_nodes) - 1, hit_pos), -1, -1): + if support_nodes[i]["pos"] <= hit_pos: return node + logger.warning( f"task {task.display()} is not support by any compute node") return None diff --git a/src/aios_kernel/compute_node.py b/src/aios_kernel/compute_node.py index 873fecd..0e05ed9 100644 --- a/src/aios_kernel/compute_node.py +++ b/src/aios_kernel/compute_node.py @@ -35,6 +35,9 @@ class ComputeNode(ABC): def is_local(self) -> bool: pass + def weight(self) -> int: + return 1 + def is_trusted(self) -> bool: return True From cecf8091988185d8331c6d919ae860402699b3e8 Mon Sep 17 00:00:00 2001 From: streetycat <305190374@qq.com> Date: Mon, 18 Sep 2023 08:03:34 +0000 Subject: [PATCH 2/2] add notes for a method --- src/aios_kernel/compute_node.py | 1 + 1 file changed, 1 insertion(+) diff --git a/src/aios_kernel/compute_node.py b/src/aios_kernel/compute_node.py index 0e05ed9..7ce7292 100644 --- a/src/aios_kernel/compute_node.py +++ b/src/aios_kernel/compute_node.py @@ -35,6 +35,7 @@ class ComputeNode(ABC): def is_local(self) -> bool: pass + # the hit weight when select this node in schedule def weight(self) -> int: return 1