Пример настройки пулов

Рассмотрим структуру пулов проекта, операции которого можно разделить на три класса: ручные запросы (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 с бо́льшим приоритетом.