Изменение конфигурации актор-системы
Актор-система — основа YDB, каждый компонент системы представляется одним или несколькими акторами.
Каждый актор распределен в определенный ExecutorPool, соответствующий задаче актора.
Изменение конфигурации поможет более точно распределить количество зарезервированных ядер для каждого типа задач.
Описание конфига актор-системы
Конфиг актор-системы состоит из перечисления ExecutorPool'ов, сопоставления ExecutorPool с видами задач и конфигураций шедулера актор-системы.
На данный момент есть следующие типы задач и соответствующие им пулы:
- System - предназначен для выполнения быстрых внутренних операций YDB;
- User - включает в себя всю пользовательскую нагрузку по обработке и выполнению входящих запросов;
- Batch - задачи, которые не имеют строгого лимита на время выполнения, в основном выполнение фоновых операций;
- IO - отвечает за выполнение всех задач с блокирующими операциями (как пример запись логов в файл);
- IC - Interconnect, включает всю нагрузку связанную с коммуникацией между узлами.
Каждый пул описывается полем Executor, как в примере ниже.
Executor {
Type: BASIC
Threads: 9
SpinThreshold: 1
Name: "System"
}
Описание основных полей:
- Type - на данный момент может иметь два типа: BASIC и IO. Все пулы, кроме IO, имеют тип BASIC;
- Threads - количество потоков (количество параллельно работающих акторов) в данном пуле;
- SpinThreshold - количество тактов процессора перед уходом в сон при отсутствии задач, которое будет исполнять поток, выполняющий работу акторов (влияет на потребление cpu и latency запросов во время слабой нагрузки);
- Name - название пула, которое будет отображаться у узла в мониторинге.
Сопоставление пулов с типами задач происходит заданием порядкового номера пула в специальные поля. Пулы нумеруются с нуля, также на один пул может повесить несколько типов задач.
Список полей с их задачами:
- SysExecutor - System
- UserExecutor - User
- BatchExecutor - Batch
- IoExecutor - IO
Пример:
SysExecutor: 0
UserExecutor: 1
BatchExecutor: 2
IoExecutor: 3
IC пул задается другим способом, через ServiceExecutor, как в примере ниже.
ServiceExecutor {
ServiceName: "Interconnect"
ExecutorId: 4
}
Шедулер актор-системы отвечает за доставку отложенных сообщений между акторами и задается следующими параметрами:
- Resolution - минимальный шаг смещения времени в микросекундах;
- SpinThreshold - аналогично с параметром пула, количество тактов процессора перед уходом в сон при отсутствии сообщений;
- ProgressThreshold - максимальный шаг смещения времени в микросекундах.
В случае если по неизвестным причинам поток шедулера залип, то он будет отправлять сообщения по отстающему времени, смещая его каждый раз на ProgressThreshold.
Не рекомендуется менять конфиг шедулера. В конфигах пулов рекомендуется менять только количество потоков.
Пример конфига актор-системы по умолчанию:
Executor {
Type: BASIC
Threads: 9
SpinThreshold: 1
Name: "System"
}
Executor {
Type: BASIC
Threads: 16
SpinThreshold: 1
Name: "User"
}
Executor {
Type: BASIC
Threads: 7
SpinThreshold: 1
Name: "Batch"
}
Executor {
Type: IO
Threads: 1
Name: "IO"
}
Executor {
Type: BASIC
Threads: 3
SpinThreshold: 10
Name: "IC"
TimePerMailboxMicroSecs: 100
}
SysExecutor: 0
UserExecutor: 1
IoExecutor: 3
BatchExecutor: 2
ServiceExecutor {
ServiceName: "Interconnect"
ExecutorId: 4
}
На статических узлах
Статические узлы берут конфигурацию актор-системы из файла /opt/ydb/cfg/config.yaml
.
После замены конфигурации требуется перезапустить узел.
На динамических узлах
Динамические узлы берут конфигурацию из CMS, чтобы изменить ее, можно воспользоваться следующей командой:
ConfigureRequest {
Actions {
AddConfigItem {
ConfigItem {
// UsageScope: { ... }
Config {
ActorSystemConfig {
<конфиг актор-системы>
}
}
MergeStrategy: 3
}
}
}
}
```bash
ydbd -s <endpoint> admin console execute --domain=<domain> --retry=10 actorsystem.txt