2012-04-03 4 views
2

Im работает над программой, которая устанавливает сродство к процессу. У меня есть предопределенные данные, которые позволили мне рассчитать приблизительный процент 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 | Stage 1 | Stage 2 | Stage 3 
    --------------------------------- 
    1 | 35%  | 45%  | 55% 
    2 | 60%  | 70%  | 80% 
    3 | 85%  | 45%  | 105% 
    4 | 60%  | 45%  | 40% 

и ранжировать этап каждого процессора против другого (давая связей и то же значение), которое может привести к следующим образом:

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 

, а затем весу рейтинга самая сколько каждый процесс использует на каждом этапе, d добавляя окончательный вес ранга * на каждом этапе, чтобы получить целое число, чтобы определить, какое назначение ЦП лучше. В этом примере я давал бы стадию 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 имеет самую низкую сумму, поэтому наилучшим способом присвоить Process X значение. Я считаю, что в этом есть несколько перегибов, и я думаю, что может быть намного лучший способ сделать это (вот почему я спрашиваю вас!). Я просто подумал, что я объясню, что у меня есть, только чтобы дать вам представление о том, с чем я работаю.

Редактировать: Я должен добавить, что вы не можете просто суммировать этапы для каждого процессора, а затем применять алгоритм сортировки. Каждый этап должен оставаться ниже 100%, и если вы суммируете этапы, вы можете непреднамеренно назначить процесс процессору, у которого нет места для него. IE, присваивая процесс Y 90%/20%/30% (в предположении суммирования этапов), назначаемый ЦП 1 с 20%/30%/40%. Сумма этапов для этого ЦП может быть меньше любого другого ЦП, но добавление этапа 1 процесса Y (90%) к этапу 1 ЦП 1 (20%) лучше, чем 100%, и приведет к переполнению.

Суммирование этапов следует избегать в любом месте, поскольку оно скрывает возможные проблемы.

Что я считаю этим действительно сводится к тому, что ... Как вы сортируете наборы данных? Поскольку каждый процессор представляет собой набор данных (этап 1, этап 2, этап 3), который мне нужно отсортировать, чтобы определить назначение процесса.

Редактировать 2: Я просто закончил свое описание здесь.

ответ

0

Итак, вы говорите, что хотите сортировать PROCESSES, чтобы вы могли планировать как можно больше из них, чтобы работать под текущей балансировкой нагрузки на процессоры?

Это как проблема 01- knapsack, за исключением трех размеров (ступеней) вместо двух (размер, вес). Я полагаю, что решения для Knapsack (динамическое программирование или жадные) также будут работать для вас.

Смежные вопросы