diff --git a/docs/config/monitor.en.md b/docs/config/monitor.en.md index 9bf3f7cc..a2583ca7 100644 --- a/docs/config/monitor.en.md +++ b/docs/config/monitor.en.md @@ -19,8 +19,8 @@ These parameters only apply to Monitors. ## etcd_mon_ttl - Type: seconds -- Default: 30 -- Minimum: 10 +- Default: 1 +- Minimum: 5 Monitor etcd lease refresh interval in seconds diff --git a/docs/config/monitor.ru.md b/docs/config/monitor.ru.md index 12cca10a..9adab5da 100644 --- a/docs/config/monitor.ru.md +++ b/docs/config/monitor.ru.md @@ -19,8 +19,8 @@ ## etcd_mon_ttl - Тип: секунды -- Значение по умолчанию: 30 -- Минимальное значение: 10 +- Значение по умолчанию: 1 +- Минимальное значение: 5 Интервал обновления etcd резервации (lease) монитором diff --git a/docs/config/network.en.md b/docs/config/network.en.md index 547b675d..a28464ee 100644 --- a/docs/config/network.en.md +++ b/docs/config/network.en.md @@ -215,8 +215,8 @@ is scheduled. ## up_wait_retry_interval - Type: milliseconds -- Default: 500 -- Minimum: 50 +- Default: 50 +- Minimum: 10 - Can be changed online: yes OSDs respond to clients with a special error code when they receive I/O diff --git a/docs/config/network.ru.md b/docs/config/network.ru.md index de1a65fb..1d3ceaa0 100644 --- a/docs/config/network.ru.md +++ b/docs/config/network.ru.md @@ -224,8 +224,8 @@ OSD в любом случае согласовывают реальное зн ## up_wait_retry_interval - Тип: миллисекунды -- Значение по умолчанию: 500 -- Минимальное значение: 50 +- Значение по умолчанию: 50 +- Минимальное значение: 10 - Можно менять на лету: да Когда OSD получают от клиентов запросы ввода-вывода, относящиеся к не diff --git a/docs/config/osd.en.md b/docs/config/osd.en.md index 27945633..165a79df 100644 --- a/docs/config/osd.en.md +++ b/docs/config/osd.en.md @@ -59,6 +59,7 @@ them, even without restarting by updating configuration in etcd. - [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) +- [recovery_tune_sleep_cutoff_us](#recovery_tune_sleep_cutoff_us) ## etcd_report_interval @@ -604,5 +605,14 @@ is usually fine. - 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. +Minimum possible value for auto-tuned recovery_sleep_us. Lower values +are changed to 0. + +## recovery_tune_sleep_cutoff_us + +- Type: microseconds +- Default: 10000000 +- Can be changed online: yes + +Maximum possible value for auto-tuned recovery_sleep_us. Higher values +are treated as outliers and ignored in aggregation. diff --git a/docs/config/osd.ru.md b/docs/config/osd.ru.md index b337f8f3..66456088 100644 --- a/docs/config/osd.ru.md +++ b/docs/config/osd.ru.md @@ -60,6 +60,7 @@ - [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) +- [recovery_tune_sleep_cutoff_us](#recovery_tune_sleep_cutoff_us) ## etcd_report_interval @@ -634,4 +635,14 @@ EC (кодов коррекции ошибок) с более, чем 1 диск - Можно менять на лету: да Минимальное возможное значение авто-подстроенного recovery_sleep_us. -Значения ниже данного заменяются на 0. +Меньшие значения заменяются на 0. + +## recovery_tune_sleep_cutoff_us + +- Тип: микросекунды +- Значение по умолчанию: 10000000 +- Можно менять на лету: да + +Максимальное возможное значение авто-подстроенного recovery_sleep_us. +Большие значения считаются случайными выбросами и игнорируются в +усреднении. diff --git a/docs/config/src/osd.yml b/docs/config/src/osd.yml index c541c34e..474ed8bf 100644 --- a/docs/config/src/osd.yml +++ b/docs/config/src/osd.yml @@ -731,8 +731,19 @@ default: 10 online: true info: | - Minimum possible value for auto-tuned recovery_sleep_us. Values lower - than this value are changed to 0. + Minimum possible value for auto-tuned recovery_sleep_us. Lower values + are changed to 0. info_ru: | Минимальное возможное значение авто-подстроенного recovery_sleep_us. - Значения ниже данного заменяются на 0. + Меньшие значения заменяются на 0. +- name: recovery_tune_sleep_cutoff_us + type: us + default: 10000000 + online: true + info: | + Maximum possible value for auto-tuned recovery_sleep_us. Higher values + are treated as outliers and ignored in aggregation. + info_ru: | + Максимальное возможное значение авто-подстроенного recovery_sleep_us. + Большие значения считаются случайными выбросами и игнорируются в + усреднении. diff --git a/src/osd.cpp b/src/osd.cpp index 23a006e5..134b31d6 100644 --- a/src/osd.cpp +++ b/src/osd.cpp @@ -233,6 +233,8 @@ void osd_t::parse_config(bool init) ? 10 : config["recovery_tune_agg_interval"].uint64_value(); recovery_tune_sleep_min_us = config["recovery_tune_sleep_min_us"].is_null() ? 10 : config["recovery_tune_sleep_min_us"].uint64_value(); + recovery_tune_sleep_cutoff_us = config["recovery_tune_sleep_cutoff_us"].is_null() + ? 10000000 : config["recovery_tune_sleep_cutoff_us"].uint64_value(); recovery_pg_switch = config["recovery_pg_switch"].uint64_value(); if (recovery_pg_switch < 1) recovery_pg_switch = DEFAULT_RECOVERY_PG_SWITCH; diff --git a/src/osd.h b/src/osd.h index 49f27c15..c5079435 100644 --- a/src/osd.h +++ b/src/osd.h @@ -125,6 +125,7 @@ class osd_t int recovery_tune_interval = 1; int recovery_tune_agg_interval = 10; int recovery_tune_sleep_min_us = 10; + int recovery_tune_sleep_cutoff_us = 10000000; int recovery_pg_switch = DEFAULT_RECOVERY_PG_SWITCH; int recovery_sync_batch = DEFAULT_RECOVERY_BATCH; int inode_vanish_time = 60; diff --git a/src/osd_flush.cpp b/src/osd_flush.cpp index 2401948d..c8a9f5ad 100644 --- a/src/osd_flush.cpp +++ b/src/osd_flush.cpp @@ -422,6 +422,10 @@ void osd_t::tune_recovery() rtune_avg_lat = total_recovery_usec/recovery_count; uint64_t target_lat = rtune_avg_lat * rtune_avg_lat/1000000.0 * recovery_count/recovery_tune_interval / rtune_target_util; auto sleep_us = target_lat > rtune_avg_lat+recovery_tune_sleep_min_us ? target_lat-rtune_avg_lat : 0; + if (sleep_us > recovery_tune_sleep_cutoff_us) + { + return; + } if (recovery_target_sleep_items.size() != recovery_tune_agg_interval) { recovery_target_sleep_items.resize(recovery_tune_agg_interval);