summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorbazeltsev <[email protected]>2023-03-21 11:24:46 +0300
committerbazeltsev <[email protected]>2023-03-21 11:24:46 +0300
commitc5cff1c385e478e5f9285388b1b56b852fdbc0d5 (patch)
treeb8bd546ccb2cc7bde4714efc0e357abf31d5b3f1
parentfdb6efd6d67e871c970a7b684d37fd3f1872be35 (diff)
Added VDisk load actor docs
Improve VDiskLoad docs
-rw-r--r--ydb/docs/ru/core/_includes/load-actors-interval.md7
-rw-r--r--ydb/docs/ru/core/development/load-actors-storage.md10
-rw-r--r--ydb/docs/ru/core/development/load-actors-vdisk.md57
3 files changed, 33 insertions, 41 deletions
diff --git a/ydb/docs/ru/core/_includes/load-actors-interval.md b/ydb/docs/ru/core/_includes/load-actors-interval.md
new file mode 100644
index 00000000000..48cdd6f7d09
--- /dev/null
+++ b/ydb/docs/ru/core/_includes/load-actors-interval.md
@@ -0,0 +1,7 @@
+Интервал, записанный в виде repeated-поля `TIntervalInfo`, вычисляется по следующему алгоритму:
+
+* случайным образом выбирается элемент из массива `TIntervalInfo` с вероятностью, пропорциональной весу;
+* для элемента типа `TIntervalUniform` равновероятно выбирается значение в интервале `Min-Max` (если указано `MinMs/MaxMs`, то значение в миллисекундах; если `MinUs/MaxUs` — в микросекундах);
+* для элемента типа `TIntervalPoisson` выбирается интервал по формуле `Min(log(-x / Frequency), MaxIntervalMs)`, где `x` — случайное значение в интервале `[0, 1]`, что обеспечивает соответствие интервалов распределению Пуассона с частотой `Frequency`, но с интервалом не больше `MaxIntervalMs`.
+
+Аналогичный механизм применяется и для вероятностного распределения размеров записываемых данных, за исключением того, что в том механизме есть только равновероятное распределение размера `[Min, Max]`.
diff --git a/ydb/docs/ru/core/development/load-actors-storage.md b/ydb/docs/ru/core/development/load-actors-storage.md
index f7f51982235..2d4cda78497 100644
--- a/ydb/docs/ru/core/development/load-actors-storage.md
+++ b/ydb/docs/ru/core/development/load-actors-storage.md
@@ -16,15 +16,19 @@
` DurationSeconds` | Продолжительность нагрузки.
` Tablets` | Нагрузка подается от имени таблетки со следующими реквизитами:<ul><li>` TabletId` — идентификатор таблетки. Должен быть уникальным для каждого нагружающего актора.</li><li>` Channel` — канал таблетки.</li><li>` GroupId` — идентификатор группы VDisk'ов, на которую будет подана нагрузка.</li><li>` Generation` — поколение таблетки.</li></ul>
` WriteSizes` | Размер записываемых данных. Для каждого запроса выбирается случайным образом из интервала `Min`-`Max`. Вы можете задать несколько диапазонов `WriteSizes`, и тогда выбор значения из конкретного диапазона будет определяться его `Weight`.
-` WriteIntervals` | Пауза между запросами для интервальной нагрузки в микросекундах. Для каждого запроса выбирается случайным образом из интервала `MinUs`-`MaxUs`. Вы можете задать несколько диапазонов `WriteIntervals`, и тогда выбор значения из конкретного диапазона будет определяться его `Weight`.
+` WriteIntervals` | Описание [параметров вероятностного распределения](#params) временных интервалов между записями для интервальной нагрузки в микросекундах. Вы можете задать несколько диапазонов `WriteIntervals`, и тогда выбор значения из конкретного диапазона будет определяться его `Weight`.
` MaxInFlightWriteRequests` | Максимальное количество одновременно обрабатываемых запросов на запись.
` ReadSizes` | Размер читаемых данных. Для каждого запроса выбирается случайным образом из интервала `Min`-`Max`. Вы можете задать несколько диапазонов `ReadSizes`, и тогда выбор значения из конкретного диапазона будет определяться его `Weight`.
-` ReadIntervals` | Пауза между запросами для интервальной нагрузки в микросекундах. Для каждого запроса выбирается случайным образом из интервала `MinUs`-`MaxUs`. Вы можете задать несколько диапазонов `ReadIntervals`, и тогда выбор значения из конкретного диапазона будет определяться его `Weight`.
+` ReadIntervals` | Описание [параметров вероятностного распределения](#params) временных интервалов между запросами для интервальной нагрузки в микросекундах. Вы можете задать несколько диапазонов `ReadIntervals`, и тогда выбор значения из конкретного диапазона будет определяться его `Weight`.
` MaxInFlightReadRequests` | Максимальное количество одновременно обрабатываемых запросов на чтение.
-` FlushIntervals` | Интервал времени между запросами на удаление записанных StorageLoad данных в микросекундах. Выбирается случайным образом из интервала `MinUs`-`MaxUs`. Вы можете задать несколько диапазонов `FlushIntervals`, и тогда выбор значения из конкретного диапазона будет определяться его `Weight`.
+` FlushIntervals` | Описание [параметров вероятностного распределения](#params) временных интервалов между запросами на удаление записанных StorageLoad данных в микросекундах. Вы можете задать несколько диапазонов `FlushIntervals`, и тогда выбор значения из конкретного диапазона будет определяться его `Weight`.
` PutHandleClass` | Класс записи данных в дисковую подсистему. В случае `TabletLog` запись выполняется с максимальным приоритетом.
` GetHandleClass` | Класс чтения данных с дисковой подсистемы. В случае `FastRead` чтение выполняется с максимальной скоростью.
+### Параметры вероятностного распределения {#params}
+
+{% include [load-actors-params](../_includes/load-actors-interval.md) %}
+
## Примеры {#examples}
### Нагрузка на запись {#write}
diff --git a/ydb/docs/ru/core/development/load-actors-vdisk.md b/ydb/docs/ru/core/development/load-actors-vdisk.md
index abcd06d0035..f8c44118ed2 100644
--- a/ydb/docs/ru/core/development/load-actors-vdisk.md
+++ b/ydb/docs/ru/core/development/load-actors-vdisk.md
@@ -1,49 +1,30 @@
# VDiskLoad
-Подает нагрузку write-only на VDisk. Имитирует Distributed Storage Proxy. Результатом теста является производительность записи в операциях в секунду.
+Подает нагрузку write-only на VDisk. Имитирует Distributed Storage Proxy. Результатом теста является производительность записи на VDisk в операциях в секунду.
{% include notitle [addition](../_includes/addition.md) %}
## Параметры актора {#options}
-```proto
-message TVDiskLoad {
- optional uint64 Tag = 1;
+{% include [load-actors-params](../_includes/load-actors-params.md) %}
- // full VDisk identifier
- optional NKikimrBlobStorage.TVDiskID VDiskId = 2;
+Параметр | Описание
+--- | ---
+`VDiskId` | Параметры VDisk, от имени которого подается нагрузка.<ul><li>`GroupID` — идентификатор группы.</li><li>`GroupGeneration` — поколение группы.</li><li>`Ring` — идентификатор кольца в группе.</li><li>`Domain` — идентификатор фэйл-домена в кольце.</li><li>`VDisk` — индекс VDisk в фэйл-домене.</li></ul>
+`GroupInfo` | Описание группы, в которую входит нагружаемый VDisk (в корректном поколении).
+`TabletId` | Идентификатор таблетки, от имени которой подается нагрузка. Должен быть уникальным для каждого нагружающего актора.
+`Channel` | Номер канала внутри таблетки, который будет указан в командах записи блобов и сборки мусора.
+`DurationSeconds` | Полная длительность теста в секундах, по достижению которой нагрузка автоматически прекращается.
+`WriteIntervals` | Описание [параметров вероятностного распределения](#params) временных интервалов между записями.
+`WriteSizes` | Размер записываемых данных. Для каждого запроса выбирается случайным образом из интервала `Min`-`Max`. Вы можете задать несколько диапазонов `WriteSizes`, и тогда выбор значения из конкретного диапазона будет определяться его `Weight`.
+`InFlightPutsMax` | Максимальное количество одновременно выполняемых запросов на запись блоба в VDisk (TEvVPut-запросы); если не указан, то число запросов не ограничивается.
+`InFlightPutBytesMax` | Максимальное количество байт в одновременно выполняемых запросах на запись блоба в VDisk (TEvVPut-запросы).
+`PutHandleClass` | Класс записи данных в дисковую подсистему. В случае `TabletLog` запись выполняется с максимальным приоритетом.
+`BarrierAdvanceIntervals` | Описание [параметров вероятностного распределения](#params) интервалов между передвижением барьера сборки мусора и шага записи.
+`StepDistance` | Расстояние между текущим записываемым шагом `Gen:Step` блоба и собираемым. Чем больше эта величина, тем больше данных хранится. Запись происходит с `Step = X`, удаление — всех блобов со `Step = X - StepDistance`. При этом периодически (с периодом `BarrierAdvanceIntervals`) `Step` увеличивается на единицу.
- reserved 3; // obsolete field
- reserved 4; // obsolete field
- optional NKikimrBlobStorage.TGroupInfo GroupInfo = 16;
+### Параметры вероятностного распределения {#params}
- // tablet id, channel and generation used in blob ids and barriers
- optional uint64 TabletId = 5;
- optional uint32 Channel = 6;
- optional uint32 Generation = 7;
+{% include [load-actors-params](../_includes/load-actors-interval.md) %}
- // duration of the test in seconds
- optional uint32 DurationSeconds = 8;
-
- // a distribution of intervals between adjacent writes
- repeated TIntervalInfo WriteIntervals = 9;
-
- // a distribution of write block sizes (expressed in bytes of BlobSize; i.e. PartSize bytes are actually written)
- repeated TSizeInfo WriteSizes = 10;
-
- // maximum number of unconfirmed parallel writes
- optional uint32 InFlightPutsMax = 11;
-
- // soft maximum of total in flight put bytes
- optional uint64 InFlightPutBytesMax = 12;
-
- // put handle class
- optional NKikimrBlobStorage.EPutHandleClass PutHandleClass = 13;
-
- // a distribution of intervals between barrier advances
- repeated TIntervalInfo BarrierAdvanceIntervals = 14;
-
- // minimum distance kept between current Step of written blobs and CollectStep of barriers
- optional uint32 StepDistance = 15;
-}
-```
+<!-- ## Примеры {#examples} -->