Skip to content

Commit

Permalink
Intermediate
Browse files Browse the repository at this point in the history
  • Loading branch information
serbel324 committed Mar 7, 2024
1 parent 7f95899 commit 38e5eae
Showing 1 changed file with 15 additions and 11 deletions.
26 changes: 15 additions & 11 deletions ydb/docs/ru/core/maintenance/manual/performance_metrics.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,15 +4,15 @@ BlobStorage имеет определенную пропускную спосо

### Модель cost

Cost запроса - это оценка времени в наносекундах, которое затратит физическое устройство на выполенение этой операции. Cost вычисляется по простой модели физического устройства. Мы предполагаем, что физическое устройство может одновременно выполнять только один запрос чтения или записи. На выполнение операции уходит определенное время работы устройства, соотвественно суммарное время выполнения запросов за определенный промежуток времени не может быть больше величины этого промежутка.
Cost запроса - это оценка времени в условных единицах, которое затратит физическое устройство на выполенение этой операции. Cost вычисляется по простой модели физического устройства. Мы предполагаем, что физическое устройство может одновременно выполнять только один запрос чтения или записи. На выполнение операции уходит определенное время работы устройства, соотвественно суммарное время выполнения запросов за определенный промежуток времени не может быть больше величины этого промежутка.

Cost вычисляется по линейной формуле:

$$
cost(operation) = A + operation.size() \times B
$$

Физический смысл такой зависимости таков: коэффициент $A$ - это время (нс), необходимое физическому устройству для получения доступа к данным, коэффициент $B$ - это время (нс), необходимое для чтения или записи одного бита данных.
Физический смысл такой зависимости таков: коэффициент $A$ - это время, необходимое физическому устройству для получения доступа к данным, коэффициент $B$ - это время, необходимое для чтения или записи одного бита данных.

Коэффициенты $A$ и $В$ зависят от типа запроса и типа устройства и были измерены экспериментально для каждого типа устройства и каждого типа запроса.

Expand All @@ -22,35 +22,39 @@ $$

Помимо пользовательских запросов, нагрузку на BlobStorage создают фоновые процессы компакшена, скраббинга и дефрагментации, а также внутренняя коммуникация между VDisk'ами. Процесс компакшена может создавать особенно высокую нагрузку при достаточно большом потоке записей маленьких блобов.

### Доступное время диска.
### Доступное время диска

Планировщик PDisk управляет порядком выполнения PDisk'ом запросов от его клиентов-VDisk'ов. PDisk честно делит время устройства между своими VDisk'ами, то есть каждому из $n$ VDisk'ов гарантируется $1/n$ секунд работы физического устройства каждую секунду. Этот показатель мы будем называть доступным временем диска или `DiskTimeAvailable`.
Планировщик PDisk управляет порядком выполнения PDisk'ом запросов от его клиентов-VDisk'ов. PDisk честно делит время устройства между своими VDisk'ами, то есть каждому из $n$ VDisk'ов гарантируется $1/n$ секунд работы физического устройства каждую секунду. На основе информации о количестве VDisk'ов-соседей для каждого VDisk'а рассчитывается доступное время диска или `DiskTimeAvailable`.

### Детектор берстов.
### Масштабирование метрик

Поскольку коэффициенты производительности

### Детектор берстов

Берст - это резкое краткосрочное повышение нагрузки на VDisk, которое может приводить к деградации latency операций. Значения сенсоров с нод кластера собираются через определенные промежутки времени, например, раз в 15 секунд, что делает невозможным надежное обнаружение краткосрочных событий с помощью одних только метрик Cost и TimeAvailable. Для решения этой задачи используется модифицированный [алгоритм Token Bucket](https://en.wikipedia.org/wiki/Token_bucket), в нашей модификации в ведре может быть отрицательное количество токенов, и такое состояние мы будем называть underflow. К каждому VDisk'у привязан отдельный объект Token Bucket.

### Метрики производительности.
### Метрики производительности

Метрики производительности вычисляются через следующие сенсоры VDisk'а:
- `DiskTimeAvailableNs` - доступное время диска в наносекундах.
- `DiskTimeAvailable` - доступное время диска.
- `UserDiskCost` - суммарный cost запросов, полученных VDisk'ом из BlobStorage Proxy.
- `InternalDiskCost` - суммарный cost запросов, полученных VDisk'ом от другого VDisk'а группы. Такие запросы включают в себя, например, запросы процесса репликации.
- `CompactionDiskCost` - суммарный cost запросов, отправленных VDisk'ом в рамках системного процесса компакшена.
- `DefragDiskCost` - суммарный cost запросов, отправленных VDisk'ом в рамках системного процесса дефрагментации.
- `ScrubDiskCost` - суммарный cost запросов, отправленных VDisk'ом в рамках системного процесса скраббинга.
- `BurstDetector_redMs` - время в миллисекундах, на протяжении которого Token Bucket находился в состоянии underflow.

### Условия гарантий распределенного хранилища. {#requirements}
### Условия гарантий распределенного хранилища {#requirements}

Распределенное хранилище YDB может обеспечивать низкое время отклика только при соблюдении следующих условий:
1. `DiskTimeAvailableNs >= UserDiskCost + InternalDiskCost + CompactionDiskCost + DefragDiskCost + ScrubDiskCost` - средний поток нагрузки не превышает предельно допустимый.
1. `DiskTimeAvailable >= UserDiskCost + InternalDiskCost + CompactionDiskCost + DefragDiskCost + ScrubDiskCost` - средний поток нагрузки не превышает предельно допустимый.
2. `BurstDetector_redMs = 0` - отсутствуют краткосрочные пики нагрузки, приводящие к образованию очередей запросов.

### Дашборд
### Дашборд в Monitoring
Для удобного просмотра метрик и диагностики существует [дашборд](https://m.yandex-team.ru/projects/kikimr/dashboards/mongi8n4phijn4n3o4il) во внутреннем инструменте Monitoring.

Основной интерес представляют следующие графики:
- `Storage group latency` - время отклика запросов в BlobStorage.
- `Cost (estimated consumed device time, ns)` - отображает соотношение оценки cost и доступного времени диска. По этому графику можно следить, выполнено ли условие (1) [гарантий распределенного хранилища](#requirements).
- `Cost (estimated consumed device time)` - отображает соотношение оценки cost и доступного времени диска. По этому графику можно следить, выполнено ли условие (1) [гарантий распределенного хранилища](#requirements).
- `Burst duration, ms` - время в миллисекундах, на протяжении которого наблюдались берсты. По этому графику можно следить, выполнено ли условие (2) [гарантий распределенного хранилища](#requirements).

0 comments on commit 38e5eae

Please sign in to comment.