StorageLoad
Тестирует производительность записи и чтения с Distributed Storage. Нагрузка подается непосредственно на Distributed Storage без задействования слоев таблеток и Query Processor. При тестировании производительности записи актор записывает данные в указанную группу VDisk. Для тестирования чтения актор предварительно записывает данные в указанную группу VDisk, а потом читает их. После снятия нагрузки все данные, записанные актором, удаляются.
Вы можете подать нагрузку двух видов:
- Постоянная — актор следит, чтобы одновременно было запущено указанное число запросов. Чтобы подать постоянную нагрузку, задайте нулевую паузу между запросами (например,
WriteIntervals: { Weight: 1.0 Uniform: { MinUs: 0 MaxUs: 0 } }
) и отличный от нуляMaxInFlightWriteRequests
. - Интервальная — актор запускает запросы через заданные промежутки времени. Чтобы подать интервальную нагрузку, задайте ненулевую паузу между запросами (например,
WriteIntervals: { Weight: 1.0 Uniform: { MinUs: 50000 MaxUs: 50000 } }
). Максимальное число одновременно выполняемых запросов задается параметромInFlightReads
. Если его значение равно0
, то ограничения нет.
Параметры актора
Ниже описаны основные параметры актора. Полный список параметров смотрите в файле load_test.proto Git-репозитория YDB.
Параметр | Описание |
---|---|
DurationSeconds |
Продолжительность нагрузки. |
Tablets |
Нагрузка подается от имени таблетки со следующими реквизитами:
|
WriteSizes |
Размер записываемых данных. Для каждого запроса выбирается случайным образом из интервала Min -Max . Вы можете задать несколько диапазонов WriteSizes , и тогда выбор значения из конкретного диапазона будет определяться его Weight . |
WriteIntervals |
Описание параметров вероятностного распределения временных интервалов между записями для интервальной нагрузки в микросекундах. Вы можете задать несколько диапазонов WriteIntervals , и тогда выбор значения из конкретного диапазона будет определяться его Weight . |
MaxInFlightWriteRequests |
Максимальное количество одновременно обрабатываемых запросов на запись. |
ReadSizes |
Размер читаемых данных. Для каждого запроса выбирается случайным образом из интервала Min -Max . Вы можете задать несколько диапазонов ReadSizes , и тогда выбор значения из конкретного диапазона будет определяться его Weight . |
ReadIntervals |
Описание параметров вероятностного распределения временных интервалов между запросами для интервальной нагрузки в микросекундах. Вы можете задать несколько диапазонов ReadIntervals , и тогда выбор значения из конкретного диапазона будет определяться его Weight . |
MaxInFlightReadRequests |
Максимальное количество одновременно обрабатываемых запросов на чтение. |
FlushIntervals |
Описание параметров вероятностного распределения временных интервалов между запросами на удаление записанных StorageLoad данных в микросекундах. Вы можете задать несколько диапазонов FlushIntervals , и тогда выбор значения из конкретного диапазона будет определяться его Weight . |
PutHandleClass |
Класс записи данных в дисковую подсистему. В случае TabletLog запись выполняется с максимальным приоритетом. |
GetHandleClass |
Класс чтения данных с дисковой подсистемы. В случае FastRead чтение выполняется с максимальной скоростью. |
Параметры вероятностного распределения
Интервал, записанный в виде repeated-поля TIntervalInfo
, вычисляется по следующему алгоритму:
- случайным образом выбирается элемент из массива
TIntervalInfo
с вероятностью, пропорциональной весу; - для элемента типа
TIntervalUniform
равновероятно выбирается значение в интервалеMin-Max
(если указаноMinMs/MaxMs
, то значение в миллисекундах; еслиMinUs/MaxUs
— в микросекундах); - для элемента типа
TIntervalPoisson
выбирается интервал по формулеMin(log(-x / Frequency), MaxIntervalMs)
, гдеx
— случайное значение в интервале[0, 1]
, что обеспечивает соответствие интервалов распределению Пуассона с частотойFrequency
, но с интервалом не большеMaxIntervalMs
.
Аналогичный механизм применяется и для вероятностного распределения размеров записываемых данных, за исключением того, что в том механизме есть только равновероятное распределение размера [Min, Max]
.
Примеры
Нагрузка на запись
Следующий актор будет писать в группу с идентификатором 2181038080
в течение 60
секунд. Размер одной записи 4096
байт, число одновременно выполняемых запросов не более 256
(постоянная нагрузка):
StorageLoad: {
DurationSeconds: 60
Tablets: {
Tablets: { TabletId: 1000 Channel: 0 GroupId: 2181038080 Generation: 1 }
WriteSizes: { Weight: 1.0 Min: 4096 Max: 4096 }
WriteIntervals: { Weight: 1.0 Uniform: { MinUs: 0 MaxUs: 0 } }
MaxInFlightWriteRequests: 256
FlushIntervals: { Weight: 1.0 Uniform: { MinUs: 10000000 MaxUs: 10000000 } }
PutHandleClass: TabletLog
}
}
При просмотре результата тестирования наибольший интерес представляют следующие значения:
Writes per seconds
— количество записей в секунду, например28690.29
.Speed@ 100%
— 100 перцентиль скорости записи в МБ/с, например108.84
.
Нагрузка на чтение
Чтобы подать нагрузку на чтение, необходимо сначала записать данные. Данные записываются запросами по 4096
байт каждые 50
мс, при этом число одновременно выполняемых запросов не более 1
(интервальная нагрузка). Если запрос не успеет завершиться за 50
мс, актор дождется его завершения и через 50
мс запустит следующий запрос. Данные старше 10
с удаляются. Чтение данных выполнятся запросами по 4096
байт, число одновременно выполняемых запросов 16
(постоянная нагрузка):
StorageLoad: {
DurationSeconds: 60
Tablets: {
Tablets: { TabletId: 5000 Channel: 0 GroupId: 2181038080 Generation: 1 }
WriteSizes: { Weight: 1.0 Min: 4096 Max: 4096}
WriteIntervals: { Weight: 1.0 Uniform: { MinUs: 50000 MaxUs: 50000 } }
MaxInFlightWriteRequests: 1
ReadSizes: { Weight: 1.0 Min: 4096 Max: 4096 }
ReadIntervals: { Weight: 1.0 Uniform: { MinUs: 0 MaxUs: 0 } }
MaxInFlightReadRequests: 16
FlushIntervals: { Weight: 1.0 Uniform: { MinUs: 10000000 MaxUs: 10000000 } }
PutHandleClass: TabletLog
GetHandleClass: FastRead
}
}
При просмотре результата тестирования наибольший интерес представляют следующие значение:
ReadSpeed@ 100%
— 100 перцентиль скорости чтения МБ/с, например60.86
.