Лимиты на количество операций
В системе YTsaurus существуют лимиты на число запускаемых операций в вычислительных пулах. Данные лимиты выступают защитным механизмом, ограничивая нагрузку на планировщик. Лимиты на количество операций бывают двух типов:
- Лимит на общее количество операций (
total_operation_count
). Ограничивает нагрузку на поддержание состояния дерева пулов и периодический пересчет fair share. - Лимит на количество выполняющихся операций (
running_operation_count
). Ограничивает нагрузку на планирование запуска новых аллокаций.
Если при запуске операции в пуле достигнут лимит на общее количество операций, то команда start_operation
завершится ошибкой. Если операция успешно запустилась, но при этом в пуле достигнут лимит на количество выполняющихся операций, операция перейдет в состояние pending
, добавится в очередь и будет ждать завершения текущих выполняющихся операций. В иерархической структуре пулов операция учитывается в лимитах всех своих пулов-предков, и описанные правила применяются, если достигнут лимит хотя бы в одном из них. В общем случае лимиты в разных пулах не зависят друг от друга. Возможна ситуация, при которой сумма лимитов в дочерних пулах превосходит лимит в родительском пуле.
Легковесные операции
Основную нагрузку на планировщик создает обработка хартбитов от exec-нод и планирование новых аллокаций. Объем этой работы напрямую зависит от количества операций, которые в данный момент участвуют в процессе планирования. Такие операции называются schedulable
. К примеру, выполняющаяся операция может не быть schedulable
, если у неё уже запущены все необходимые аллокации. Поскольку статус schedulable
может меняться в ходе выполнения операции, сложно ограничить количество таких операций. Поэтому для ограничения нагрузки используется консервативный лимит на количество выполняющихся операций.
Некоторые операции могут не быть schedulable
большую часть времени своей работы. К примеру, операция может состоять из единственного небольшого джоба, который запускается планировщиком достаточно быстро. В вышеописанной схеме подобные операции будут “вхолостую” занимать место в лимите на выполняющиеся операции, которое может быть ценным ресурсом в крупных инсталляциях YTsaurus. Специально для такого случая существует особый тип операций — легковесные операции. Такие операции не учитываются в счетчике running_operation_count
, соответственно, к ним не применяется лимит на количество выполняющихся операций. Легковесные операции по-прежнему учитываются в total_operation_count
, а также в специальном счетчике lightweight_running_operation_count
, на который нет ограничений.
Для того, чтобы операция стала легковесной, необходимо выполнить несколько условий:
- Операция должна иметь тип Vanilla.
- Пул, в котором запущена операция, должен быть настроен в режиме
fifo
. - Для пула должны быть включены легковесные операции. За это отвечает настройка
enable_lightweight_operations
, которая управляется администратором кластера YTsaurus.
Рекомендации по использованию
В пуле, для которого включены легковесные операции, допустимо запускать и не легковесные операции. Такие операции будут учитываться в счётчике running_operation_count
и для них будет применяться соответствующий лимит. Тем не менее, смешивание операций разных типов является антипаттерном и настоятельно не рекомендуется.
Алгоритм планировщика специальным образом учитывает легковесные операции и ожидает, что их джобы действительно смогут быть запущены за короткое время. В связи с этим не рекомендуется злоупотреблять и запускать в легковесных пулах тяжелые Vanilla
операции, состоящие более чем из одного джоба. Формально такие операции будут считаться легковесными, но время их запуска может быть выше обычного.