Сценарий используется как эталонный для измерения пропускной способности, задержек (latency) и стабильности операций ввода-вывода для подтверждения соответствия результатов тестирования с декларируемыми параметрами типов виртуальных дисков.
Для каждого типа виртуальных дисков выполнялся набор сценариев нагрузки в соответствии с техническими условиями.
Цель тестирования – подтверждение соответствия фактических показателей производительности виртуальных дисков (IOPS, пропускная способность, задержки) значениям, заявленными на странице «Технические характеристики IaaS»
|
Параметр |
Значение |
|---|---|
|
Цель тестирования |
Оценка IOPS, пропускной способности, задержек (средних и перцентилей), проверка стабильности под нагрузкой |
|
Локации |
Москва (МСК), Санкт-Петербург (СПб) |
|
Платформа |
VMWare |
|
Контроллер дисков |
Paravirtual (PVSCSI) |
|
Параметр |
VM-Win |
VM-Ubuntu |
|---|---|---|
|
ОС |
Windows Server 2025 Standard (сборка 26100.32230), 64-bit (GUI) |
Ubuntu 22.04.5 LTS, 64-bit |
|
Контроллер дисков |
PVSCSI |
PVSCSI |
|
vCPU |
4 (1 ядро на сокет) |
4 (1 ядро на сокет) |
|
RAM |
4 ГБ |
4 ГБ |
|
Размер диска |
4096 ГБ |
4096 ГБ |
|
Файловая система |
NTFS |
ext4 |
|
Размер кластера / блока |
По умолчанию (4 КБ) |
По умолчанию (4 КБ) |
|
Таблица / схема разделов |
GPT |
GPT |
|
Инструменты тестирования |
DISKSPD (2.2) |
FIO (3.28) |
Установка DISKSPD
# Определяем ZIP URL и путь для сохранения файла
$zipName = "DiskSpd.zip"
$zipPath = "C:\DISKSPD"
$zipFullName = Join-Path $zipPath $zipName
$zipUrl = "https://github.com/microsoft/diskspd/releases/latest/download/" + $zipName
# Проверяем, что каталог существует
if (-Not (Test-Path $zipPath)) {
New-Item -Path $zipPath -ItemType Directory | Out-Null
}
# Скачиваем и распаковываем
Invoke-RestMethod -Uri $zipUrl -OutFile $zipFullName
Expand-Archive -Path $zipFullName -DestinationPath $zipPath
Добавление в PATH (опционально)
# формируем путь в зависимости от типа процессора
$diskspdPath = Join-Path $zipPath $env:PROCESSOR_ARCHITECTURE
if ($env:path -split ';' -notcontains $diskspdPath) {
$env:path += ";" + $diskspdPath
}
# добавляем $env:Path
[Environment]::SetEnvironmentVariable("Path", $env:Path + $diskspdPath, [EnvironmentVariableTarget]::User)
Подготовка дика (на примере диска F)
# Инициализация диска в GPT
Get-Disk | Where-Object PartitionStyle -eq 'RAW' | Initialize-Disk -PartitionStyle GPT
# Создание раздела на весь диск
Get-Disk | Where-Object PartitionStyle -eq 'GPT' | New-Partition -UseMaximumSize -DriveLetter F
# Форматирование в NTFS
Get-Volume | Where-Object { $_.FileSystem -ne 'NTFS' -and $_.DriveType -eq 'Fixed' -and $_.DriveLetter -eq 'F' } | Format-Volume -FileSystem NTFS -NewFileSystemLabel "Fast" -Confirm:$false
Установка FIO
# Установка fio
sudo apt install -y fio jq
fio --version
# Установка jq если планируется сохранять в JSON для парсинга результатов (--output-format=json)
sudo apt install -y jq
jq --version
sudo apt update
Подготовка дика (на примере устройства /dev/sdb)
# Просмотр доступных дисков
lsblk
# Форматирование (пример для /dev/sdb)
sudo mkfs.ext4 /dev/sdb
# Создание точки монтирования
sudo mkdir /mnt/disk1
# Монтирование диска
sudo mount /dev/sdb /mnt/disk1
# Проверка монтирования
sudo mount | grep /mnt/disk1
# Назначение прав
sudo chown -R $USER:$USER /mnt/disk1
Windows (DISKSPD)
Запускайте из командной строки от имени администратора в каталоге, где находится DiskSpd.exe (например, C:\DISKSPD\amd64).
Универсальный 1 (случайный, 50% записи, блок - 32КБ, Глубина очереди - 10):
DiskSpd.exe -r -c50G -d300 -w50 -t1 -o10 -b32K -Sh -L F:\testfile.dat
Универсальный 2 (случайный, 50% записи, блок - 32КБ, Глубина очереди - 20):
DiskSpd.exe -r -c50G -d300 -w50 -t1 -o20 -b32K -Sh -L F:\testfile.dat
Архивный 1 (последовательный, 80% записи, блок - 512КБ, Глубина очереди - 8):
DiskSpd.exe -s -c50G -d300 -w80 -t1 -o8 -b512K -Sh -L F:\testfile.dat
Пояснение параметров:
-c – размер тестового файла; -d – длительность (сек); -w – процент записи; -t – потоки; -o – глубина очереди на поток; -b – размер блока; -L – измерять задержки; -Sh – отключить буферизацию ОС; -r – случайный доступ; -s – последовательный доступ.
Linux (FIO)
Запускайте из терминала с правами root или через sudo.
Универсальный 1 (случайный, 50% записи, блок - 32КБ, Глубина очереди - 10):
fio --name=u1test --ioengine=libaio --direct=1 --size=50G --runtime=300 --ramp_time=10 --bs=32k --iodepth=10 --numjobs=1 --rw=randrw --rwmixwrite=50 --filename=/mnt/disk1/testfile.dat --output-format=json --output=result_u1.json
Универсальный 2 (случайный, 50% записи, блок - 32КБ, Глубина очереди - 20):
fio --name=u2test --ioengine=libaio --direct=1 --size=50G --runtime=300 --ramp_time=10 --bs=32k --iodepth=20 --numjobs=1 --rw=randrw --rwmixwrite=50 --filename=/mnt/disk1/testfile.dat --output-format=json --output=result_u2.json
Архивный 1 (последовательный, 80% записи, блок - 512КБ, Глубина очереди - 8):
fio --name=a1test --ioengine=libaio --direct=1 --size=50G --runtime=300 --ramp_time=10 --bs=512k --iodepth=8 --numjobs=1 --rw=rw --rwmixwrite=80 --filename=/mnt/disk1/testfile.dat --output-format=json --output=result_a1.json
Пояснение параметров:
ioengine=libaio – асинхронный ввод-вывод; direct=1 – отключение кэша ОС; ramp_time=10 – время прогрева; остальные параметры аналогичны DISKSPD. Флаг --output-format=json сохраняет результаты в структурированном виде для удобного анализа.
Для Windows (текстовый вывод DISKSPD):
В консольном выводе ищите секцию Total IO – там приведены:
IOPS – среднее число операций в секунду.
MB/s – пропускная способность.
Latency – средняя задержка (в миллисекундах).
Перцентили (90‑й, 95‑й, 99‑й) находятся в секции Latency Percentiles.
Для Linux (JSON-вывод FIO):
В JSON-файле найдите объект "jobs" → [0] → "read" и "write". Основные поля:
"iops" – средние IOPS.
"bw" – пропускная способность в байтах/с (разделите на 1048576 для перевода в МБ/с).
"clat_ns" – задержки (в наносекундах). Перцентили находятся внутри "percentile".
"lat_ns" – общая задержка (для сравнения можно использовать 90‑й перцентиль).
Примечание:
Допускаются небольшие отклонения, связанные с текущей загрузкой инфраструктуры, сетевыми задержками и особенностями гостевой ОС. Для объективной оценки рекомендуется повторить тест несколько раз в разное время суток.
При возникновении вопросов или существенных расхождений с ТУ обратитесь в службу поддержки.
При возникновении спорных ситуаций Linx оставляет за собой право проведения нагрузочного тестирования в окружении заказчика согласно параметрам, описанным выше. В случае не подтверждения результатами тестирования заявленных параметров типа диска в описании тарифа - спорный момент решается в пользу Клиента в соответствии с SLA.
Опишите вашу задачу, и мы поможем вам ее решить