Пример настройки пулов
Рассмотрим структуру пулов проекта, операции которого можно разделить на три класса: ручные запросы (ad_hoc), батч-обработка и резервное копирование. В распоряжении проекта имеется квота в 100 вычислительных ядер и стандартные ограничения на количество операций. Требуется настроить пулы таким образом, чтобы ad_hoc операции выполнялись по возможности быстро и меньше ждали очереди на запуск. Для батч-обработки требуется использовать все свободные ресурсы, когда ad_hoc задач мало или они вовсе отсутствуют. Для операций резервного копирования необходима небольшая гарантия по ресурсам, чтобы процесс мог укладываться в отведённое время.
Для каждого класса операций необходимо создать отдельные пулы и поместить их в общий корневой пул проекта (project-root
). Настройки пулов приведены в таблице.
pool_name | CPU | weight | max_running_operation_count | max_operation_count |
---|---|---|---|---|
project-root |
100 | 1 | 10 | 50 |
project-root/project-ad_hoc |
80 | 1 | 10 | 50 |
project-root/project-batch |
0 | 10 | 4 | 50 |
project-root/project-backup |
20 | 1 | 2 | 50 |
Сумма гарантий по CPU всех потомков пула не должна превышать гарантии по CPU родительского пула. Переподписка по CPU не допускается, иначе такая конфигурация воспринимается планировщиком как ошибка и не применяется. Допускается переподписка по обоим ограничениям на число операций. Должно выполняться условие:
- значение
max_running_operation_count
каждого пула не может быть больше егоmax_operation_count
.
Если сумма ограничений max_running_operation_count
подпулов превышает аналогичное ограничение родительского пула, то может наступить ситуация, когда операция в каком-либо подпуле не сможет выполняться, даже если число выполняющихся операций в пуле не достигло ограничения. Это может произойти из-за того, что в других подпулах запущено и выполняется слишком много операций и их количество сравнялось с ограничением max_running_operation_count
родительского пула. Даже наличие гарантии по CPU у подпула в таком случае не приведёт к вытеснению уже работающих операций в других пулах. Вытесняться могут джобы, если их более одного в операции, но не сами операции.
В структуре пулов, приведённой в таблице, все гарантированные вычислительные ресурсы достаются пулам project-ad_hoc
и project-backup
в случае их полной загрузки, а джобы операций, запущенных в project-batch
, вытесняются. Но если операции хотя бы в одном из пулов с гарантиями не могут полностью утилизировать свой пул, невостребованные ресурсы могут быть переданы пулу project-batch
с бо́льшим приоритетом.