Характеристики пулов

В данном разделе рассмотрены характеристики и настройки деревьев пулов, пулов и операций.

Характеристики деревьев пулов

Дерево пулов имеет следующие атрибуты:

  • nodes_filter — фильтр для выбора узлов кластера, принадлежащих дереву (подробнее читайте в разделе Тегирование нод кластера);
  • max_operation_count — значение по умолчанию для максимального числа одновременно запущенных (running + pending) операций в корневом пуле;
  • max_operation_count_per_pool — значение по умолчанию для максимального числа одновременно запущенных операций в пуле. Может быть перезаписано настройкой на пуле;
  • max_running_operation_count— значение по умолчанию для максимального числа одновременно выполняющихся (running) операций в корневом пуле;
  • max_running_operation_count_per_pool — значение по умолчанию для максимального числа одновременно выполняющихся операций в пуле. Может быть перезаписано настройкой на пуле;
  • default_parent_pool — пул по умолчанию, в котором будут запускаться операции, в спецификации которых не указан пул;
  • enable_pool_starvation — разрешить «страдания» пулов (подробнее можно прочитать в разделе Вытеснение);
  • forbid_immediate_operations_in_root — разрешить запуск операций в корневом пуле дерева;
  • max_ephemeral_pool_per_user — максимальное количество эфемерных пулов для каждого пользователя. Эфемерный пул — пул, который был указан в спецификации, но для которого нет явно заведенного узла в Кипарисе;
  • fair_share_preemption_timeout — время пребывания операции ниже её fair_share, после которого для запуска джобов операции начнётся вытеснение;
  • fair_share_starvation_tolerance — толерантность, используемая при сравнении usage-ratio с fair_share: операция считается страдающей, если usage-ratio < fair_share * tolerance;
  • non_preemptible_resource_usage_threshold — операция не будет участвовать в вытеснении (preemption), если ее потребление ресурсов будет меньше данного значения;

Атрибуты fair_share_preemption_timeout и fair_share_starvation_tolerance могут быть переопределены в спецификации операции.

Дерево представляет из себя объект scheduler_pool_tree на первом уровне директории //sys/pool_trees в Кипарисе. Атрибуты, перечисленные выше, являются атрибутами этого объекта. У узла //sys/pool_trees имеется атрибут default_tree, в котором можно указать дерево по умолчанию. Будет использовано для операций, у которых не указана опция pool_trees.

Характеристики пулов

Каждый пул (pool) обладает следующими характеристиками. В скобках указаны значения по умолчанию.

  • weight (1) — действительное неотрицательное число, отвечающее за то, в какой пропорции данному поддереву необходимо предоставлять ресурсы родительского пула. В случае, когда у пула есть два дочерних пула с весами 2 и 1, ресурсы родителя будут делиться между ними в пропорции 2:1;
  • strong_guarantee_resources — словарь, в котором записаны гарантированные ресурсы для данного пула (user_slots, cpu, memory);

Примечание

Стоит понимать, что гарантии будут выполнены только в том случае, если доминантный ресурс операции совпадает с гарантированным ресурсом.

  • resource_limits — словарь, в котором описаны ограничения на различные ресурсы данного пула (user_slots, cpu, memory);
  • mode (fair_share) — режим планирования, может принимать значения fair_share или fifo. В случае режима fifo, джобы выдаются дочерним операциям в порядке лексикографической сортировки по значениям параметров, указанных в атрибуте fifo_sort_parameters для данного пула. Например, если значение атрибута равно [start_time], джобы сперва будут выдаваться операциям с наименьшим временем старта;
  • max_running_operation_count (8) — ограничение на число одновременно выполняющихся (running) операций в пуле. Операции сверх этого лимита будут вставать в очередь и находиться в состоянии pending;
  • max_operation_count (50) — ограничение на число одновременно запущенных (running + pending) операций в пуле. При достижении указанного ограничения запуск новых операций в пуле будет завершаться с ошибкой;
  • fifo_sort_parameters (start_time) — порядок запуска операций в FIFO пуле. По умолчанию операции сортируются сперва по весу, а затем по времени запуска. Данный параметр позволяет изменять порядок операций в очереди. Поддерживаемые значения: start_time , weight, pending_job_count. По параметру weight сортировка делается в обратном порядке, то есть операции с большим весом будут идти раньше, то есть иметь больший приоритет. Значение pending_job_count позволяет приоритизировать маленькие операции (с малым количеством джобов);
  • forbid_immediate_operations — запрещает запуск операций непосредственно в данном пуле, на запуск операций в подпулах не распространяется;
  • create_ephemeral_subpools (false) — активирует режим, в котором для операций создается эфемерный подпул в данном пуле с именем poolname$username, где poolname имя текущего пула. Операция запускается в созданном эфемерном подпуле;
  • ephemeral_subpool_config — вложенная конфигурация эфемерных подпулов, создаваемых в текущем пуле. Имеет смысл только если задана опция create_ephemeral_subpools. В конфигурации можно указать mode, max_running_operation_count, max_operation_count;
  • offloading_settings — настройка, отвечающая за отселение части джобов пула в другое дерево, наравне с тем деревом, в котором находится пул. Отселение джобов работает для операций, запущенных после того как была выставлена настройка. Пример настройки: yt set //sys/pool_trees/<pool_tree>/<pool>/@offloading_settings '{<pool_tree_X>={pool=<pool_name_Y>}}'.

У каждого пула имеется свое уникальное (в рамках одного дерева) название. Имя выбранного для запуска операции пула отражается в настройках операции.

Внимание

Параметры max_running_operation_count и max_operation_count задаются (явно или неявно) на всех уровнях иерархии пулов и проверяются также на всех уровнях иерархии. В частности, запуск новой операции в пуле P возможен, если и только если как в P, так и во всех его родителях (вплоть до корня) количество запущенных операций меньше заданного ограничения. Аналогично для ограничения max_running_operation_count: операция в пуле P будет оставаться в состоянии pending до тех пор, пока в данном пуле или в каком-то из его родителей количество выполняющихся (running) операций больше либо равно ограничения max_running_operation_count. На каждом уровне иерархии возможна переподписка указанных ограничений. Данное обстоятельство нужно учитывать при заказах и изменениях ограничений пользовательских пулов. Для того, чтобы гарантировать пулу определенное количество операций нужно убедиться, что на всех уровнях вплоть до корня переподписка отсутствует.

Операции

Часть настроек, свойственных пулу, также доступна для операций и указывается в корне спецификации операции при запуске. К таким настройкам относятся: weight и resource_limits.

Например, можно указать в спецификации resource_limits={user_slots=200}, в этом случае у операции будет запущено не более 200 джобов одновременно в каждом дереве.

Настройка resource_limits, а также другие настройки могут быть заданы независимо для различных деревьев пулов.

Динамические характеристики операций и пулов

  • Fair share ratio — доля ресурсов кластера, которая гарантирована данной операции (пулу) в данный момент. Сумма fair share всех операций не превосходит единицы;
  • Guaranteed ratio — доля ресурсов кластера, которая гарантирована операции (пулу) при максимальной загрузке кластера;
  • Usage ratio — доля ресурсов кластера, которую сейчас потребляет операция или пул: все выполняющиеся джобы операции или пула. Сумма usage ratio всех операций может быть больше единицы, так как операции могут потреблять разные ресурсы, в то время как доля вычисляется по доминантному ресурсу.
  • Starving — флаг, указывающий, страдает ли операция. При наличии страдающей операции планировщик попытается прервать джобы не страдающих операций: сделать вытеснение — preemption, чтобы запустить джобы данной операции;
  • Demand ratio — характеристика, показывающая долю всех ресурсов кластера, которая требуется операции или пулу для завершения вычислений;
  • Dominant resource — доминантный ресурс операции или пула — тот ресурс, доля которого от ресурсов всего кластера наибольшая.

Динамические характеристики операций считаются для каждого дерева отдельно. Соответственно, операция может иметь несколько usage_ratio и так далее.

Объём ресурсов, который требуется операции для выполнения, подсчитывается путём суммирования потребностей всех джобов операции по каждому виду ресурсов.

Предыдущая