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 между пулами. Одно из значений:
|
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 |
Имя пула, определяет его назначение. Одно из значений:
|
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 |
Тип пула. Одно из значений:
|
scheduler |
Конфигурация шедулера. Шедулер акторной системы отвечает за доставку отложенных сообщений между акторами. Не рекомендуется изменять параметры шедулера по умолчанию. |
progress_threshold |
В акторной системе есть возможность запросить отправку сообщения в будущем по расписанию. Возможна ситуация, когда в определенный момент времени системе не удастся отправить все запланированные сообщения. В этом случае система начинает рассылать сообщения в «виртуальном времени», обрабатывая в каждом цикле отправку сообщений за период, не превышающий progress_threshold в микросекундах, и продвигая виртуальное время на progress_threshold, пока оно не догонит реальное. |
resolution |
При составлении расписания отправки сообщений используются дискретные временные слоты. Длительность слота задается параметром resolution в микросекундах. |