diff --git a/docs/config/client.en.md b/docs/config/client.en.md index 986b40d5..0cd2420e 100644 --- a/docs/config/client.en.md +++ b/docs/config/client.en.md @@ -6,8 +6,8 @@ # Client Parameters -These parameters apply only to clients and affect their interaction with -the cluster. +These parameters apply only to Vitastor clients (QEMU, fio, NBD and so on) and +affect their interaction with the cluster. - [client_max_dirty_bytes](#client_max_dirty_bytes) - [client_max_dirty_ops](#client_max_dirty_ops) diff --git a/docs/config/client.ru.md b/docs/config/client.ru.md index a8652de9..bc96e537 100644 --- a/docs/config/client.ru.md +++ b/docs/config/client.ru.md @@ -6,7 +6,7 @@ # Параметры клиентского кода -Данные параметры применяются только к клиентам Vitastor (QEMU, fio, NBD) и +Данные параметры применяются только к клиентам Vitastor (QEMU, fio, NBD и т.п.) и затрагивают логику их работы с кластером. - [client_max_dirty_bytes](#client_max_dirty_bytes) diff --git a/docs/config/osd.en.md b/docs/config/osd.en.md index 2b160e7a..27945633 100644 --- a/docs/config/osd.en.md +++ b/docs/config/osd.en.md @@ -19,6 +19,7 @@ them, even without restarting by updating configuration in etcd. - [autosync_interval](#autosync_interval) - [autosync_writes](#autosync_writes) - [recovery_queue_depth](#recovery_queue_depth) +- [recovery_sleep_us](#recovery_sleep_us) - [recovery_pg_switch](#recovery_pg_switch) - [recovery_sync_batch](#recovery_sync_batch) - [readonly](#readonly) @@ -51,6 +52,13 @@ them, even without restarting by updating configuration in etcd. - [scrub_list_limit](#scrub_list_limit) - [scrub_find_best](#scrub_find_best) - [scrub_ec_max_bruteforce](#scrub_ec_max_bruteforce) +- [recovery_tune_interval](#recovery_tune_interval) +- [recovery_tune_util_low](#recovery_tune_util_low) +- [recovery_tune_util_high](#recovery_tune_util_high) +- [recovery_tune_client_util_low](#recovery_tune_client_util_low) +- [recovery_tune_client_util_high](#recovery_tune_client_util_high) +- [recovery_tune_agg_interval](#recovery_tune_agg_interval) +- [recovery_tune_sleep_min_us](#recovery_tune_sleep_min_us) ## etcd_report_interval @@ -135,12 +143,24 @@ operations before issuing an fsync operation internally. ## recovery_queue_depth - Type: integer -- Default: 4 +- Default: 1 - Can be changed online: yes -Maximum recovery operations per one primary OSD at any given moment of time. -Currently it's the only parameter available to tune the speed or recovery -and rebalancing, but it's planned to implement more. +Maximum recovery and rebalance operations initiated by each OSD in parallel. +Note that each OSD talks to a lot of other OSDs so actual number of parallel +recovery operations per each OSD is greater than just recovery_queue_depth. +Increasing this parameter can speedup recovery if [auto-tuning](#recovery_tune_interval) +allows it or if it is disabled. + +## recovery_sleep_us + +- Type: microseconds +- Default: 0 +- Can be changed online: yes + +Delay for all recovery- and rebalance- related operations. If non-zero, +such operations are artificially slowed down to reduce the impact on +client I/O. ## recovery_pg_switch @@ -508,3 +528,81 @@ the variant with most available equal copies is correct. For example, if you have 3 replicas and 1 of them differs, this one is considered to be corrupted. But if there is no "best" version with more copies than all others have then the object is also marked as inconsistent. + +## recovery_tune_interval + +- Type: seconds +- Default: 1 +- Can be changed online: yes + +Interval at which OSD re-considers client and recovery load and automatically +adjusts [recovery_sleep_us](#recovery_sleep_us). Recovery auto-tuning is +disabled if recovery_tune_interval is set to 0. + +Auto-tuning targets utilization. Utilization is a measure of load and is +equal to the product of iops and average latency (so it may be greater +than 1). You set "low" and "high" client utilization thresholds and two +corresponding target recovery utilization levels. OSD calculates desired +recovery utilization from client utilization using linear interpolation +and auto-tunes recovery operation delay to make actual recovery utilization +match desired. + +This allows to reduce recovery/rebalance impact on client operations. It is +of course impossible to remove it completely, but it should become adequate. +In some tests rebalance could earlier drop client write speed from 1.5 GB/s +to 50-100 MB/s, with default auto-tuning settings it now only reduces +to ~1 GB/s. + +## recovery_tune_util_low + +- Type: number +- Default: 0.1 +- Can be changed online: yes + +Desired recovery/rebalance utilization when client load is high, i.e. when +it is at or above recovery_tune_client_util_high. + +## recovery_tune_util_high + +- Type: number +- Default: 1 +- Can be changed online: yes + +Desired recovery/rebalance utilization when client load is low, i.e. when +it is at or below recovery_tune_client_util_low. + +## recovery_tune_client_util_low + +- Type: number +- Default: 0 +- Can be changed online: yes + +Client utilization considered "low". + +## recovery_tune_client_util_high + +- Type: number +- Default: 0.5 +- Can be changed online: yes + +Client utilization considered "high". + +## recovery_tune_agg_interval + +- Type: integer +- Default: 10 +- Can be changed online: yes + +The number of last auto-tuning iterations to use for calculating the +delay as average. Lower values result in quicker response to client +load change, higher values result in more stable delay. Default value of 10 +is usually fine. + +## recovery_tune_sleep_min_us + +- Type: microseconds +- Default: 10 +- Can be changed online: yes + +Minimum possible value for auto-tuned recovery_sleep_us. Values lower +than this value are changed to 0. diff --git a/docs/config/osd.ru.md b/docs/config/osd.ru.md index f7b3e8a7..b337f8f3 100644 --- a/docs/config/osd.ru.md +++ b/docs/config/osd.ru.md @@ -20,6 +20,7 @@ - [autosync_interval](#autosync_interval) - [autosync_writes](#autosync_writes) - [recovery_queue_depth](#recovery_queue_depth) +- [recovery_sleep_us](#recovery_sleep_us) - [recovery_pg_switch](#recovery_pg_switch) - [recovery_sync_batch](#recovery_sync_batch) - [readonly](#readonly) @@ -52,6 +53,13 @@ - [scrub_list_limit](#scrub_list_limit) - [scrub_find_best](#scrub_find_best) - [scrub_ec_max_bruteforce](#scrub_ec_max_bruteforce) +- [recovery_tune_interval](#recovery_tune_interval) +- [recovery_tune_util_low](#recovery_tune_util_low) +- [recovery_tune_util_high](#recovery_tune_util_high) +- [recovery_tune_client_util_low](#recovery_tune_client_util_low) +- [recovery_tune_client_util_high](#recovery_tune_client_util_high) +- [recovery_tune_agg_interval](#recovery_tune_agg_interval) +- [recovery_tune_sleep_min_us](#recovery_tune_sleep_min_us) ## etcd_report_interval @@ -138,13 +146,25 @@ OSD, чтобы успевать очищать журнал - без них OSD ## recovery_queue_depth - Тип: целое число -- Значение по умолчанию: 4 +- Значение по умолчанию: 1 - Можно менять на лету: да -Максимальное число операций восстановления на одном первичном OSD в любой -момент времени. На данный момент единственный параметр, который можно менять -для ускорения или замедления восстановления и перебалансировки данных, но -в планах реализация других параметров. +Максимальное число параллельных операций восстановления, инициируемых одним +OSD в любой момент времени. Имейте в виду, что каждый OSD обычно работает с +многими другими OSD, так что на практике параллелизм восстановления больше, +чем просто recovery_queue_depth. Увеличение значения этого параметра может +ускорить восстановление если [автотюнинг скорости](#recovery_tune_interval) +разрешает это или если он отключён. + +## recovery_sleep_us + +- Тип: микросекунды +- Значение по умолчанию: 0 +- Можно менять на лету: да + +Delay for all recovery- and rebalance- related operations. If non-zero, +such operations are artificially slowed down to reduce the impact on +client I/O. ## recovery_pg_switch @@ -535,3 +555,83 @@ EC (кодов коррекции ошибок) с более, чем 1 диск считается некорректной. Однако, если "лучшую" версию с числом доступных копий большим, чем у всех других версий, найти невозможно, то объект тоже маркируется неконсистентным. + +## recovery_tune_interval + +- Тип: секунды +- Значение по умолчанию: 1 +- Можно менять на лету: да + +Интервал, с которым OSD пересматривает клиентскую нагрузку и нагрузку +восстановления и автоматически подстраивает [recovery_sleep_us](#recovery_sleep_us). +Автотюнинг (автоподстройка) отключается, если recovery_tune_interval +устанавливается в значение 0. + +Автотюнинг регулирует утилизацию. Утилизация является мерой нагрузки +и равна произведению числа операций в секунду и средней задержки +(то есть, она может быть выше 1). Вы задаёте два уровня клиентской +утилизации - "низкий" и "высокий" (low и high) и два соответствующих +целевых уровня утилизации операциями восстановления. OSD рассчитывает +желаемый уровень утилизации восстановления линейной интерполяцией от +клиентской утилизации и подстраивает задержку операций восстановления +так, чтобы фактическая утилизация восстановления совпадала с желаемой. + +Это позволяет снизить влияние восстановления и ребаланса на клиентские +операции. Конечно, невозможно исключить такое влияние полностью, но оно +должно становиться адекватнее. В некоторых тестах перебалансировка могла +снижать клиентскую скорость записи с 1.5 ГБ/с до 50-100 МБ/с, а теперь, с +настройками автотюнинга по умолчанию, она снижается только до ~1 ГБ/с. + +## recovery_tune_util_low + +- Тип: число +- Значение по умолчанию: 0.1 +- Можно менять на лету: да + +Желаемая утилизация восстановления в моменты, когда клиентская нагрузка +высокая, то есть, находится на уровне или выше recovery_tune_client_util_high. + +## recovery_tune_util_high + +- Тип: число +- Значение по умолчанию: 1 +- Можно менять на лету: да + +Желаемая утилизация восстановления в моменты, когда клиентская нагрузка +низкая, то есть, находится на уровне или ниже recovery_tune_client_util_low. + +## recovery_tune_client_util_low + +- Тип: число +- Значение по умолчанию: 0 +- Можно менять на лету: да + +Клиентская утилизация, которая считается "низкой". + +## recovery_tune_client_util_high + +- Тип: число +- Значение по умолчанию: 0.5 +- Можно менять на лету: да + +Клиентская утилизация, которая считается "высокой". + +## recovery_tune_agg_interval + +- Тип: целое число +- Значение по умолчанию: 10 +- Можно менять на лету: да + +Число последних итераций автоподстройки для расчёта задержки как среднего +значения. Меньшие значения параметра ускоряют отклик на изменение нагрузки, +большие значения делают задержку стабильнее. Значение по умолчанию 10 +обычно нормальное и не требует изменений. + +## recovery_tune_sleep_min_us + +- Тип: микросекунды +- Значение по умолчанию: 10 +- Можно менять на лету: да + +Минимальное возможное значение авто-подстроенного recovery_sleep_us. +Значения ниже данного заменяются на 0. diff --git a/docs/config/src/make.js b/docs/config/src/make.js index 37a94022..4ae5eea9 100755 --- a/docs/config/src/make.js +++ b/docs/config/src/make.js @@ -38,6 +38,7 @@ const types = { bool: 'boolean', int: 'integer', sec: 'seconds', + float: 'number', ms: 'milliseconds', us: 'microseconds', }, @@ -46,6 +47,7 @@ const types = { bool: 'булево (да/нет)', int: 'целое число', sec: 'секунды', + float: 'число', ms: 'миллисекунды', us: 'микросекунды', }, diff --git a/docs/config/src/osd.yml b/docs/config/src/osd.yml index 53a2f7c8..c541c34e 100644 --- a/docs/config/src/osd.yml +++ b/docs/config/src/osd.yml @@ -107,17 +107,29 @@ принудительной отправкой fsync-а. - name: recovery_queue_depth type: int - default: 4 + default: 1 online: true info: | - Maximum recovery operations per one primary OSD at any given moment of time. - Currently it's the only parameter available to tune the speed or recovery - and rebalancing, but it's planned to implement more. + Maximum recovery and rebalance operations initiated by each OSD in parallel. + Note that each OSD talks to a lot of other OSDs so actual number of parallel + recovery operations per each OSD is greater than just recovery_queue_depth. + Increasing this parameter can speedup recovery if [auto-tuning](#recovery_tune_interval) + allows it or if it is disabled. info_ru: | - Максимальное число операций восстановления на одном первичном OSD в любой - момент времени. На данный момент единственный параметр, который можно менять - для ускорения или замедления восстановления и перебалансировки данных, но - в планах реализация других параметров. + Максимальное число параллельных операций восстановления, инициируемых одним + OSD в любой момент времени. Имейте в виду, что каждый OSD обычно работает с + многими другими OSD, так что на практике параллелизм восстановления больше, + чем просто recovery_queue_depth. Увеличение значения этого параметра может + ускорить восстановление если [автотюнинг скорости](#recovery_tune_interval) + разрешает это или если он отключён. +- name: recovery_sleep_us + type: us + default: 0 + online: true + info: | + Delay for all recovery- and rebalance- related operations. If non-zero, + such operations are artificially slowed down to reduce the impact on + client I/O. - name: recovery_pg_switch type: int default: 128 @@ -626,3 +638,101 @@ считается некорректной. Однако, если "лучшую" версию с числом доступных копий большим, чем у всех других версий, найти невозможно, то объект тоже маркируется неконсистентным. +- name: recovery_tune_interval + type: sec + default: 1 + online: true + info: | + Interval at which OSD re-considers client and recovery load and automatically + adjusts [recovery_sleep_us](#recovery_sleep_us). Recovery auto-tuning is + disabled if recovery_tune_interval is set to 0. + + Auto-tuning targets utilization. Utilization is a measure of load and is + equal to the product of iops and average latency (so it may be greater + than 1). You set "low" and "high" client utilization thresholds and two + corresponding target recovery utilization levels. OSD calculates desired + recovery utilization from client utilization using linear interpolation + and auto-tunes recovery operation delay to make actual recovery utilization + match desired. + + This allows to reduce recovery/rebalance impact on client operations. It is + of course impossible to remove it completely, but it should become adequate. + In some tests rebalance could earlier drop client write speed from 1.5 GB/s + to 50-100 MB/s, with default auto-tuning settings it now only reduces + to ~1 GB/s. + info_ru: | + Интервал, с которым OSD пересматривает клиентскую нагрузку и нагрузку + восстановления и автоматически подстраивает [recovery_sleep_us](#recovery_sleep_us). + Автотюнинг (автоподстройка) отключается, если recovery_tune_interval + устанавливается в значение 0. + + Автотюнинг регулирует утилизацию. Утилизация является мерой нагрузки + и равна произведению числа операций в секунду и средней задержки + (то есть, она может быть выше 1). Вы задаёте два уровня клиентской + утилизации - "низкий" и "высокий" (low и high) и два соответствующих + целевых уровня утилизации операциями восстановления. OSD рассчитывает + желаемый уровень утилизации восстановления линейной интерполяцией от + клиентской утилизации и подстраивает задержку операций восстановления + так, чтобы фактическая утилизация восстановления совпадала с желаемой. + + Это позволяет снизить влияние восстановления и ребаланса на клиентские + операции. Конечно, невозможно исключить такое влияние полностью, но оно + должно становиться адекватнее. В некоторых тестах перебалансировка могла + снижать клиентскую скорость записи с 1.5 ГБ/с до 50-100 МБ/с, а теперь, с + настройками автотюнинга по умолчанию, она снижается только до ~1 ГБ/с. +- name: recovery_tune_util_low + type: float + default: 0.1 + online: true + info: | + Desired recovery/rebalance utilization when client load is high, i.e. when + it is at or above recovery_tune_client_util_high. + info_ru: | + Желаемая утилизация восстановления в моменты, когда клиентская нагрузка + высокая, то есть, находится на уровне или выше recovery_tune_client_util_high. +- name: recovery_tune_util_high + type: float + default: 1 + online: true + info: | + Desired recovery/rebalance utilization when client load is low, i.e. when + it is at or below recovery_tune_client_util_low. + info_ru: | + Желаемая утилизация восстановления в моменты, когда клиентская нагрузка + низкая, то есть, находится на уровне или ниже recovery_tune_client_util_low. +- name: recovery_tune_client_util_low + type: float + default: 0 + online: true + info: Client utilization considered "low". + info_ru: Клиентская утилизация, которая считается "низкой". +- name: recovery_tune_client_util_high + type: float + default: 0.5 + online: true + info: Client utilization considered "high". + info_ru: Клиентская утилизация, которая считается "высокой". +- name: recovery_tune_agg_interval + type: int + default: 10 + online: true + info: | + The number of last auto-tuning iterations to use for calculating the + delay as average. Lower values result in quicker response to client + load change, higher values result in more stable delay. Default value of 10 + is usually fine. + info_ru: | + Число последних итераций автоподстройки для расчёта задержки как среднего + значения. Меньшие значения параметра ускоряют отклик на изменение нагрузки, + большие значения делают задержку стабильнее. Значение по умолчанию 10 + обычно нормальное и не требует изменений. +- name: recovery_tune_sleep_min_us + type: us + default: 10 + online: true + info: | + Minimum possible value for auto-tuned recovery_sleep_us. Values lower + than this value are changed to 0. + info_ru: | + Минимальное возможное значение авто-подстроенного recovery_sleep_us. + Значения ниже данного заменяются на 0. diff --git a/docs/intro/features.en.md b/docs/intro/features.en.md index c434edf9..f58afd19 100644 --- a/docs/intro/features.en.md +++ b/docs/intro/features.en.md @@ -32,6 +32,7 @@ - [Scrubbing](../config/osd.en.md#auto_scrub) (verification of copies) - [Checksums](../config/layout-osd.en.md#data_csum_type) - [Client write-back cache](../config/client.en.md#client_enable_writeback) +- [Intelligent recovery auto-tuning](../config/osd.en.md#recovery_tune_interval) ## Plugins and tools diff --git a/docs/intro/features.ru.md b/docs/intro/features.ru.md index 3825274b..467b621c 100644 --- a/docs/intro/features.ru.md +++ b/docs/intro/features.ru.md @@ -34,6 +34,7 @@ - [Фоновая проверка целостности](../config/osd.ru.md#auto_scrub) (сверка копий) - [Контрольные суммы](../config/layout-osd.ru.md#data_csum_type) - [Буферизация записи на стороне клиента](../config/client.ru.md#client_enable_writeback) +- [Интеллектуальная автоподстройка скорости восстановления](../config/osd.ru.md#recovery_tune_interval) ## Драйверы и инструменты