Алгоритм сортировки балансировки нагрузки - PullRequest
2 голосов
/ 03 апреля 2012

Я работаю над программой, которая устанавливает сродство к процессу. У меня есть заранее определенные данные, которые позволили мне рассчитать приблизительный процент ЦП (или ядра), который процесс использует на каждом из трех этапов жизни программы. Каждый процесс имеет эти три этапа, и у меня есть заранее определенные данные для каждого процесса на каждом из этих трех этапов. Я пытаюсь определить лучший алгоритм, который может сортировать процессы. Кикер, я не могу отсортировать каждый этап в отдельности Для процесса 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

, а затем взвесьте ранжирование по тому, сколько каждый процесс использует на каждом этапе, и прибавьте весовые коэффициенты * к каждому этапу, чтобы получить целое число, чтобы определить, какое назначение ЦП лучше. В этом примере я бы присвоил 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

Поскольку ЦП 4 имеет наименьшую сумму, поэтому лучше всего назначить Процесс X для. Я верю, что в этом все еще есть несколько изломов, и я думаю, что мог бы быть намного лучший способ сделать это (именно поэтому я спрашиваю Вас!). Я просто подумал, что объясню, что у меня есть, просто чтобы дать вам представление о том, с чем я работаю.

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

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

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

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

1 Ответ

0 голосов
/ 03 апреля 2012

То есть вы хотите отсортировать ПРОЦЕССЫ, чтобы можно было запланировать как можно больше из них для выполнения при текущей балансировке нагрузки на ЦП?

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

...