Автоматическая балансировка загрузки процессора для программы или группы программ под Linux?
Предположим следующую настройку: система (Ubuntu 14.04 LTS) с 40 ядрами, много оперативной памяти. Дополнительно программа, которая только частично многопоточная. То есть он постоянно переключается между работой на нескольких ядрах в течение нескольких часов, а затем только на одном ядре (также в течение нескольких часов).
Я хочу максимизировать использование ЦП этой машины, запустив эту программу параллельно, скажем, 10 раз, но я бы действительно хотел предотвратить ситуации, когда
- все 10 экземпляров хотят работать на всех 40 ядрах параллельно (ужасная очистка кеша)
- Я говорю каждому экземпляру использовать, скажем, максимум 4 ядра, но затем возникают ситуации, когда 9 из них находятся в одноядерном использовании, а десятый может на мгновение использовать все ядра, но не может, поскольку разрешено использовать только 4.
Вопрос: есть ли утилиты / расширения ОС, которые позволяют это? Использование "renice" не совсем то, что было бы необходимо, хотя, если бы существовал автоматический супервизор, позволяющий динамически сдавать в аренду процессы вверх или вниз, которые могут быть довольно близки. В идеале это будет работать примерно так: пока набор программ не максимизирует данные ресурсы ЦП, им разрешено получать столько, сколько они хотят. Но если они используют больше, то программа (ы) с самым длинным временем выполнения (или чем-то еще) получает наивысший приоритет для ЦП, что в конечном итоге приводит к истощению ресурсов других экземпляров.
Ближе всего я обнаружил контрольные группы (cgexec и друзья), но из того, что я могу сказать, можно определить только группы программ с фиксированным коэффициентом использования ЦП, например, программы в группе могут использовать не более 60% ЦП (даже если остальные 40% не используются), и нет способа предотвратить получение чего-либо всеми процессами (опять же, уничтожение кэшей ЦП).
1 ответ
Взгляните на набор задач, который позволяет вам установить, на каких ядрах (ЦП) может выполняться процесс.