actor_system_config

Основной потребитель CPU — акторная система. Все акторы, в зависимости от своего типа, выполняются в одном из пулов (параметр name). Конфигурирование заключается в распределении ядер процессора узла по пулам акторной системы. При выделении процессорных ядер пулам нужно учитывать, что PDisk и gRPC API работают вне акторной системы и требуют отдельных ресурсов.

Вы можете использовать автоматическое или ручное конфигурирование акторной системы. В секции actor_system_config укажите:

  • тип узла и количество ядер CPU, выделяемых процессу ydbd в случае использования автоматической конфигурирования;
  • количество ядер CPU для каждой подсистемы кластера YDB при использовании ручного конфигурирования.

Автоматическое конфигурирование является адаптивным, т.е. подстраивается под текущую нагрузку системы. Его рекомендуется использовать в большинстве случаев.

Ручное конфигурирование может быть полезно в случае, когда какой-либо пул акторной системы в процессе работы оказывается перегружен и это влияет на общую производительность БД. Отслеживать нагрузку пулов можно на странице мониторинга в Embedded UI.

Автоматическое конфигурирование

Пример секции actor_system_config для автоматического конфигурирования акторной системы:

actor_system_config:
  use_auto_config: true
  node_type: STORAGE
  cpu_count: 10
Параметр Описание
use_auto_config Включение автоматического конфигурирования акторной системы.
node_type Тип узла. Определяет ожидаемую нагрузку и соотношение ядер CPU между пулами. Одно из значений:
  • STORAGE — узел работает с блочными устройствами и отвечает за Distributed Storage;
  • COMPUTE — узел обслуживает пользовательскую нагрузку;
  • HYBRID — узел работает со смешанной нагрузкой или потребление System, User и IC узла под нагрузкой приблизительно одинаково.
cpu_count Количество ядер CPU, выделенных узлу.

Ручное конфигурирование

Пример секции actor_system_config для ручного конфигурирования акторной системы:

actor_system_config:
  executor:
  - name: System
    spin_threshold: 0
    threads: 2
    type: BASIC
  - name: User
    spin_threshold: 0
    threads: 3
    type: BASIC
  - name: Batch
    spin_threshold: 0
    threads: 2
    type: BASIC
  - name: IO
    threads: 1
    time_per_mailbox_micro_secs: 100
    type: IO
  - name: IC
    spin_threshold: 10
    threads: 1
    time_per_mailbox_micro_secs: 100
    type: BASIC
  scheduler:
    progress_threshold: 10000
    resolution: 256
    spin_threshold: 0
Параметр Описание
executor Конфигурация пулов.
В конфигах пулов рекомендуется менять только количество ядер процессора (параметр threads).
name Имя пула, определяет его назначение. Одно из значений:
  • System — предназначен для выполнения быстрых внутренних операций YDB (обслуживает системные таблетки, State Storage, ввод и вывод Distributed Storage, Erasure Сoding);
  • User — обслуживает пользовательскую нагрузку (пользовательские таблетки, выполнение запросов в Query Processor);
  • Batch — обслуживает задачи, которые не имеют строгого лимита на время выполнения, фоновых операции (сборка мусора, тяжелые запросы Query Processor);
  • IO — отвечает за выполнение всех задач с блокирующими операциями (аутентификация, запись логов в файл);
  • IC — Interconnect, включает нагрузку, связанную с коммуникацией между узлами (системные вызовы для ожидания и отправки по сети данных, сериализация данных, разрезание и склеивание сообщений).
spin_threshold Количество тактов процессора перед уходом в сон при отсутствии сообщений. Состояние сна снижает энергопотребление, но может увеличивать latency запросов во время слабой нагрузки.
threads Количество ядер процессора, выделенных пулу.
Не рекомендуется суммарно назначать в пулы System, User, Batch, IC больше ядер, чем доступно в системе.
max_threads Максимальное количество ядер процессора, которые могут быть выданы пулу в случае использования простаивающих ядер из других пулов. При выставлении параметра включается механизм увеличения размера пула при полном потреблении пула и наличия свободных ядер.
Проверка текущей нагрузки и перераспределение ядер происходит 1 раз в секунду.
max_avg_ping_deviation Дополнительное условие для расширения пула по количеству ядер. При потреблении более чем 90% ядер процессора, выделенных пулу, требуется ухудшение показателя SelfPing более чем на max_avg_ping_deviation микросекунд от ожидаемых 10 миллисекунд.
time_per_mailbox_micro_secs Количество сообщений в каждом акторе, которое будет обработано перед переключением на другой актор.
type Тип пула. Одно из значений:
  • IO — укажите для пула IO;
  • BASIC — укажите для всех остальных пулов.
scheduler Конфигурация шедулера. Шедулер акторной системы отвечает за доставку отложенных сообщений между акторами.
Не рекомендуется изменять параметры шедулера по умолчанию.
progress_threshold В акторной системе есть возможность запросить отправку сообщения в будущем по расписанию. Возможна ситуация, когда в определенный момент времени системе не удастся отправить все запланированные сообщения. В этом случае система начинает рассылать сообщения в «виртуальном времени», обрабатывая в каждом цикле отправку сообщений за период, не превышающий progress_threshold в микросекундах, и продвигая виртуальное время на progress_threshold, пока оно не догонит реальное.
resolution При составлении расписания отправки сообщений используются дискретные временные слоты. Длительность слота задается параметром resolution в микросекундах.
Предыдущая
Следующая