Skip to content
На этой странице:

Методика тестирования производительности виртуальных дисков

Данная статья рассказывает о методах проверки соответствия производительности виртуального диска выбранной политике хранения.

  1. Каждая дисковая политика имеет ограничения по IOPS (количество операции ввода–вывода в секунду) на 1 гигабайт объема. Например, при размещении VM на сайте дата–центра Авантаж возможно использовать политику SSD Ultra, в рамках которой доступно 10 IOPS на 1 Гб. В соответствии с указанной политикой для диска объемом 400 Гб на VM, где планируется выполнение тестов, будет задан лимит 4000 IOPS. Подробнее...

  2. Кроме ограничений по IOPS, выбранная дисковая политика подразумевает определённый SLA – обеспечение приемлемых показателей производительности при строго обозначенном профиле нагрузки на диск. К таким показателям относятся:

    • отдаваемое в гостевую ОС диском VM гарантированное количество IOPS определённого размера;
    • профиль нагрузки, при котором данное количество IOPS будет обеспечено;
    • время отклика дисковых операций.
    Пример

    Политика SSD Ultra гарантирует, что для диска объёмом 400ГБ:

    • гостевая ОС получит 4000 IOPS при размере одной операции в 32КБ;
    • случайный доступ к данным с соотношением по операции чтения и записи 70% / 30%;
    • время отклика не более 3мс.
  3. Для проверки соответствия производительности диска выбранной политике применяются синтетические генераторы нагрузки, позволяющие строго указать все необходимые параметры теста:

    • FIO (Flexible I/O tester) для гостевых ОС Windows и Linux;
    • DiskSpd для гостевых ОС Windows.
  4. Такие генераторы как, например, CrystalDiskMark, не подходят для проведения тестов. Данный инструмент является графической надстройкой для DiskSpd. CrystalDiskMark не позволяет строго описать профиль нагрузки, гарантируемый политикой. Таким образом, любые полученные результаты не будут релевантны. Используемый генератор должен позволять задать потолочное значение IOPS в рамках теста. Это позволит избежать эффекта возрастания времени отклика дисковой подсистемы при попытке "пробить" потолочное значение IOPS, предусмотренное политикой.

  5. Синтетические тесты не предназначены для работы на продуктивной системе. Это может вызвать деградацию производительности работающего приложения, а также привести к некорректным результатам. Поэтому перед проведением теста требуется выполнить остановку всех сервисов и приложений, создающих нагрузку на диск.

Работа с FIO

В качестве примера будет рассмотрен запуск теста с использованием созданного файла конфигурации для диска объёмом 400ГБ, управляемого политикой SSD Ultra. Необходимо убедиться, что гостевая ОС может гарантировано получить 4000 IOPS размером блока 32КБ при соотношении случайных операций чтения/записи в пропорции 70/30 с задержкой не более 3мс.

  1. Загрузите и установите текущую версию FIO для гостевой ОС:

    • Windows: дистрибутивы доступны по ссылке;
    • Linux: самостоятельно соберите FIO из исходных кодов или установите готовый пакет, используя пакетный менеджер. Пример для RHEL: yum –y install fio.
  2. Сформируйте конфигурационный файл fio3.ini с описанием всех параметров теста.

Текст конфигурационного файла fio3.ini
[global]
# Название теста
description=test
# Рабочая директория. В ней FIO создаст job-файлы заданного размера. Например, если тест запускается для тома F, то:
directory=F\:\
# Размер job-файла. Может варьироваться в зависимости от уровня заполнения диска. Не рекомендуется заполнять диск более, чем на 80%.
size=25g
# Время работы теста в секундах. Рекомендуемая длительность тестирования не менее 5ти минут
runtime=300
time_based
# Выбор библиотеки движка для проведения тестирования. Для Windows указывается windowsaio, для Linux libaio
ioengine=windowsaio
# Процент рандомизации операций ввода-вывода.
percentage_random=100
# Запрет использования кэша
direct=1
# Предполагаемая глубина очереди
iodepth=1
# Количество job-файлов. Может варьироваться, если тесту не хватает мощности для достижения требуемого потолочного значения IOPS
numjobs=4
group_reporting
# Количество и соотношение операций чтения/записи на 1 job-файл. При требуемом потолочном значении в 4000 IOPS при 4х job-файлах, получаем 1000 IOPS на 1 job-файл. Для соотношения чтения/записи 70/30 получаем итоговое значение параметра:
rate_iops=700,300
 
[random]
# Размер блока. Он же размер 1й операции ввода-вывода
bs=32k
# Провести тест в режиме случайного чтения и записи
rw=randrw
  1. Запустите тест FIO, указав конфигурационный файл: fio.exe fio3.ini. При первом запуске FIO сначала сформирует на указанном диске требуемое количество job–файлов заданного объёма, затем произведёт нагрузочное тестирование в течение указанного времени. Повторный запуск теста будет использовать имеющиеся файлы, если их параметры не были изменены в конфигурационном файле.

  2. Получите и интерпретируйте результаты теста:

    Требуемые результаты представлены на скриншоте:

    • Достигнуто требуемое потолочное значение в ~4000 IOPS с соотношением чтения/записи в 70/30: r=2800, w=1201.

    • Получена приемлемая (менее 3мс) средняя задержка для операций:

      • read lat (usec) avg=1011,46, что эквивалентно 1мс;
      • write lat (usec) avg=468,78, что эквивалентно 0,5мс.

    Примечание

    FIO не использует фиксированную размерность для отображения результатов времени отклика, поэтому рекомендуется правильно пересчитывать размерность результатов в миллисекунды.

Работа с DiskSPD

В качестве примера будет рассмотрен запуск теста для диска объёмом 400ГБ, управляемого политикой SSD Ultra. Необходимо убедиться, что гостевая ОС может гарантированно получить 4000 IOPS размером блока 32КБ при соотношении случайных операций чтения/записи в пропорции 70/30 с задержкой не более 3мс.

  1. Загрузите и установите текущую версию DiskSPD для гостевой ОС. Актуальный дистрибутив доступен в разделе Releases.

  2. Запустите тестовый Disk SPD:

    diskspd.exe –Sh –o1 –t1 –L –d300 –w30 –c50G –b32k –rs100 –g2000i F:\diskspd0.tmp F:\diskspd1.tmp
    Описание параметров
    • –Sh – Отключение кэширования запросов I/O.
    • –o1 – Глубина очереди.
    • –t1 – Количество потоков на один таргет.
    • –L – Произвести замер показателей задержки.
    • –d300 – Время работы теста в секундах. Рекомендуемая длительность тестирования не менее пяти минут.
    • –w30 – Процентное соотношение операций записи, из соотношения 70/30.
    • –c50G – Размер таргет–файла. Может варьироваться в зависимости от уровня заполнения диска. Не рекомендуется заполнять диск более, чем на 80%.
    • –b32k – Размер блока, он же размер операции IO, равный 32КБ.
    • –rs100 – Процент рандомизации операций ввода–вывода.
    • –g2000i – Количество операций чтения/записи на 1 таргет–файл. При требуемом потолочном значении в 4000 IOPS при 2х таргет–файлах, получаем 2000 IOPS на 1 таргет–файл.
    • F:\diskspd0.tmp, F:\diskspd1.tmp – Таргет–файлы в рабочей директории. В примере используется том F. Количество таргет–файлов может варьироваться, если тесту не хватает мощности для достижения требуемого потолочного значения IOPS.
  3. При первом запуске DiskSPD сначала сформирует на указанном диске требуемое количество таргет–файлов заданного объёма, затем произведёт нагрузочное тестирование в течение указанного времени. Повторный запуск теста при изменении параметров потребует ручное удаление существующих таргет–файлов.

  4. Получите и интерпретируйте результаты теста:

    Требуемые результаты представлены на скриншоте:

    • Достигнуто требуемое потолочное значение в ~4000 IOPS с соотношением чтения/записи в 70/30:
      • Total IO ~4044
      • Read IO ~2833
      • Write IO ~1211
    • Получена приемлемая суммарная (менее 3мс) средняя задержка для операций: AvgLat ~0,356.

    Примечание

    DiskSPD использует фиксированную размерность для отображения результатов времени отклика – миллисекунды.