С контрольными группами (cgroups) вы можете добиться выделения ресурсов для:
Когда два или более процессов могут использовать слишком большая часть ресурса, чтобы другие не получили справедливого шанса, вы можете использовать группы, чтобы сказать им: если вы t для одного и того же ресурса один из вас не может получить более 60%, а другой - не более 30% и т. д. Если нет гонок для одного и того же ресурса, у нас есть один запросчик. Он может использовать то, что хочет, пока другой процесс не попытается его использовать.
Examples of I/O Throttling
Introduction to Linux Control Groups
Что касается расширения, когда аппарат находится в режиме ожидания: если вы используете полностью Fair Scheduler (CFS), контрольную группу можно получить больше выделенного процессорного времени, если имеется достаточное количество холостых циклов процессора доступный в системе.
Redhat resource management guide:
Когда задачи в одной контрольной группе простаивают и не использует время процессора, это влево с течением времени собирается в глобальный пул неиспользованных циклов процессора. Другие контрольные группы могут занимать циклы процессора из этого пула
cpusets.txt documentation
А если запустить CPU из задач его runqueue, процессор попытаться вытащить дополнительных задач из других занятых процессоров до помогите им, прежде чем он будет простоя.
Конечно, для поиска подвижных задач и/или простаивающих процессоров, планировщик может не искать все процессоры в домене каждые раз. На самом деле, в некоторых архитектурах диапазоны поиска на событиях ограничены в том же сокете или узле, где находится ЦП, а баланс нагрузки по тику просматривает все.
Например, предположим, что CPU Z относительно далеко от CPU X. Даже если CPU Z простаивает в то время как процессор X и братья заняты, планировщик не может мигрировать активированную задачи B от X до Z, так как он находится вне его диапазона поиска. Как результат результат, задача B на процессоре X должна ждать задачи A или подождать баланс нагрузки на следующем тике. Для некоторых приложений в особой ситуации ожидания 1 тик может быть слишком длинным.
Немногие другие методы для достижения изоляции ресурсов: nice
(используется для простых настроек), cpulimit
- статическое распределение ресурсов, когда другие процессоры простаивают, акции не заимствованы для других процессов.
> пропорциональное использование всех ресурсов < > Изоляция производительности <Это трудно смешивать. Вы либо ограничиваете ресурсы контейнера (лимиты могут перекрываться), либо предоставляют доступ ко всем ресурсам, и надеются, что планировщики внутри Linux достаточно справедливы (CFS, CFQ и т. Д.) – myaut
Достаточно справедливо. Может быть, я должен уточнить. Я имею в виду, что если какой-либо контейнер хочет использовать 4 ядра, 2 Гб оперативной памяти, 10 Мбит/с диска и 20 Мбит/с сети, это должно быть гарантировано так много, но мы также должны масштабироваться, когда на машине больше ничего не работает. – sydraz