负载平衡排序算法

时间:2012-04-03 16:44:57

标签: algorithm load load-balancing

我正在开发一个为流程设置亲和力的程序。我有预先确定的数据,这些数据允许我计算一个过程在程序生命的三个阶段中的每个阶段使用的CPU(或核心)的粗略百分比。每个过程都有这三个相同的阶段,我在这三个阶段的每一个阶段都预先确定了每个过程的数据。我正在尝试确定可以对进程进行排序的最佳算法。踢球者是我不能单独对每个阶段进行排序。对于过程X,在与算法中的过程Y进行比较时,必须考虑所有三个阶段。作为一些组成数据的例子:

    CPU's currently at the following loads:

    CPU | Stage 1 | Stage 2 | Stage 3
    ---------------------------------
    1   | 25%     | 25%     | 25%
    2   | 50%     | 50%     | 50%
    3   | 75%     | 25%     | 75%
    4   | 50%     | 25%     | 10%

    Process X was pre-determined to take up 
    10% in stage 1, 20% in stage 2, and 30% in stage 3.

到目前为止我想出的是添加X进程占用每个CPU的预定百分比,这将导致:

    CPU | Stage 1 | Stage 2 | Stage 3
    ---------------------------------
    1   | 35%     | 45%     | 55%
    2   | 60%     | 70%     | 80%
    3   | 85%     | 45%     | 105%
    4   | 60%     | 45%     | 40%

并将每个CPU的阶段与另一个阶段进行排名(给予相同的值),这将导致:

    CPU | Stage 1 | Stage 2 | Stage 3
    ---------------------------------
    1   | Rank 1  | Rank 1  | Rank 2
    2   | Rank 2  | Rank 2  | Rank 3
    3   | Rank 3  | Rank 1  | Rank 4
    4   | Rank 2  | Rank 1  | Rank 1

然后按每个进程在每个阶段使用的程度对排名进行加权,并在每个阶段添加最终排名*权重以获得一个整数以确定哪个CPU分配最佳。在这个例子中,我将给出阶段3,权重为3,因为它是此过程的最高值阶段,阶段2为权重2,阶段1权重为1,原因与阶段3相同。这将导致:

    CPU | Stage 1 | Stage 2 | Stage 3 | Sum
    -----------------------------------------
    1   | 1       | 2       | 6       | 9
    2   | 2       | 4       | 9       | 15
    3   | 3       | 2       | 12      | 17
    4   | 2       | 2       | 3       | 7

由于CPU 4具有最低的总和,因此它是分配进程X的最佳选择。我相信还有一些问题,我认为可能会有更好的方法(这就是我问你的原因!)。我只是想我会解释到目前为止所做的事情,只是为了让你知道我在做什么。

编辑:我应该补充一点,你不能简单地将每个CPU的阶段相加,然后应用排序算法。每个阶段必须保持在100%以下,如果你总结阶段,你可能会无意中将进程分配给没有空间的CPU。 IE,分配具有90%/ 20%/ 30%的过程Y被计算(在对阶段求和的假设下),以20%/ 30%/ 40%分配给CPU 1。此CPU的各级的总和可能比任何其他CPU少,但是将进程Y的第1阶段(90%)添加到CPU 1的第1阶段(20%)比100%更好,并且会导致溢出。

应该避免对各个阶段进行总结,因为它隐藏了可能的问题。

我认为这真的归结为......你如何对数据集进行排序?由于每个CPU本质上都是一个数据集(阶段1,阶段2,阶段3),我需要对其进行排序以确定流程分配。

编辑2:我刚刚结束了我的描述。

1 个答案:

答案 0 :(得分:0)

所以你说你想对PROCESSES进行排序,以便你可以安排尽可能多的进程在CPU的当前平衡负载下运行?

这就像01 - knapsack问题,除了有三个维度(阶段)而不是两个(大小,权重)。我认为Knapsack(动态编程或贪婪)的解决方案也适合你。