Лимиты на количество операций

В системе 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 операции, состоящие более чем из одного джоба. Формально такие операции будут считаться легковесными, но время их запуска может быть выше обычного.