Тест производительности диска

Применимо к: ✔️ Виртуальные машины Linux ✔️ Виртуальные машины Windows ✔️ Универсальные масштабируемые наборы

Тестирование производительности — это процесс моделирования различных рабочих нагрузок приложения и измерения его производительности при каждой из них. Выполнив действия, описанные в статье о проектировании для высокого уровня производительности, вы узнали требования к производительности приложения. Применив инструменты тестирования производительности в виртуальных машинах с приложением, можно определить уровень производительности, которого оно может достичь при использовании дисков SSD (цен. категория "Премиум"). В этой статье приведены примеры тестирования производительности виртуальной машины Standard_D8ds_v4, для которой подготовлены диски SSD Azure (цен. категория "Премиум").

Мы использовали стандартные инструменты тестирования производительности DiskSpd для Windows и FIO для Linux. Эти инструменты порождают несколько потоков, моделирующих производительность при рабочей нагрузке, и измеряют производительность системы. С помощью этих инструментов можно задать такие параметры, как размер блока и длина очереди, которые обычно нельзя менять в приложениях. Это обеспечивает большую гибкость для достижения максимальной производительности в высокомасштабируемых виртуальных машинах с подготовленными дисками SSD (цен. категория "Премиум") для различных рабочих нагрузок приложения. Дополнительные сведения о каждом инструменте измерения производительности см. на веб-сайте DiskSpd и на странице FIO.

Создайте виртуальную машину Standard_D8ds_v4 и подключите к ней 4 диска SSD (цен. категория "Премиум") согласно примеру ниже. Для параметра кэширования узлов 3 из 4 дисков задайте значение None и чередуйте их в томе NoCacheWrites. Для параметра кэширования оставшегося диска задайте значение ReadOnly и создайте том CacheReads с этим диском. Благодаря такой настройке можно узнать максимальный уровень производительности виртуальной машины Standard_D8ds_v4 VM при чтении и записи. Подробные инструкции о создании виртуальной машины Standard_D8ds_v4 использованием дисков SSD (цен. категория "Премиум") см. в статье Проектирование для обеспечения высокой производительности.

Подготовка кэша

Диск с кэшированием узла ReadOnly выполняет больше операций ввода-вывода в секунду, чем значение ограничения диска. Чтобы добиться максимальной производительности при чтении для кэша узла, сначала необходимо подготовить кэш диска. Это гарантирует, что операции ввода-вывода при чтении, которые инструмент тестирования производительности выполнит в томе CacheReads, на самом деле попадут в кэш, а не прямо на диск. Попадания в кэш увеличат количество операций ввода-вывода на единственном диске, на котором включен кэш.

Важно!

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

DISKSPD

Скачайте инструмент DISKSPD на виртуальную машину. DISKSPD — это инструмент, который можно настроить для создания собственных искусственных рабочих нагрузок. Для тестирования производительности будет использоваться настройка, описанная выше. Вы можете изменять спецификации для тестирования различных рабочих нагрузок.

В этом примере мы используем следующий набор базовых параметров.

  • -c200G: создает (или повторно создает) образец файла, используемый в тесте. Его можно задать в байтах, КиБ, МиБ, ГиБ или блоках. В данном случае для минимизации кэширования памяти используется большой файл целевого файла 200 ГиБ.
  • -w100: указывает процент операций, которые являются запросами на запись (-w0 эквивалентен чтению 100 %).
  • -b4K: указывает размер блока в байтах, КиБ, МиБ или ГиБ. В данном случае для имитации случайного теста ввода-вывода используется размер блока 4K.
  • -F4: задает всего четыре потока.
  • -r: указывает на случайный тест ввода-вывода (переопределяет параметр -s).
  • -o128: указывает количество необработанных запросов ввода-вывода на один целевой объект для каждого потока. Его также называют длиной очереди. В данном случае для нагрузки ЦП используется 128.
  • -W7200: указывает длительность периода подготовки до начала измерений.
  • -d30: определяет длительность теста без подготовки.
  • -Sh: отключает кэширование записи программного обеспечения и оборудования (эквивалентно -Suw).

Полный список параметров доступен в репозитории GitHub.

Максимальное количество операций ввода-вывода в секунду при записи

Мы используем большую длину очереди 128, небольшой размер блока 8 КБ и четыре рабочих потока для управления операциями записи. Рабочие роли записи управляют трафиком на томе NoCacheWrites, который содержит 3 диска кэша в режиме None.

Выполняйте следующую команду в течение 30 секунд подготовки и 30 секунд измерения:

diskspd -c200G -w100 -b8K -F4 -r -o128 -W30 -d30 -Sh testfile.dat

Результаты показывают, что виртуальная машина Standard_D8ds_v4 выполняет максимальное количество операций ввода-вывода в секунду при записи (12 800).

Для 3 208 642 560 байт максимальное число операций ввода-вывода составляет 391 680 со скоростью 101,97 МиБ/с и всего 13 052,65 операции ввода-вывода в секунду.

Максимальное количество операций ввода-вывода при чтении

Мы используем большую длину очереди 128, небольшой размер блока 4 КБ и четыре рабочих потока для управления операциями чтения. Рабочие роли чтения управляют трафиком на томе CacheReads, который содержит 1 диск кэша в режиме ReadOnly.

Выполняйте следующую команду в течение 2 часов подготовки и 30 секунд измерения:

diskspd -c200G -b4K -F4 -r -o128 -W7200 -d30 -Sh testfile.dat

Результаты показывают, что виртуальная машина Standard_D8ds_v4 выполняет максимальное количество операций ввода-вывода в секунду при чтении (77 000).

Для 9 652 785 152 байт получено 2 356 637 операций ввода-вывода со скоростью 306,72 МиБ/с и 78 521,23 операции ввода-вывода в секунду.

Максимальная пропускная способность

Чтобы получить максимальную пропускную способность чтения и записи, можно увеличить размер блока до 64 КБ.

FIO

FIO — это популярный инструмент для тестирования производительности хранилища виртуальных машин под управлением Linux. Благодаря своей гибкости он позволяет выбрать различные объемы ввода-вывода, а также порядок выполнения операций чтения и записи — последовательный или случайный. Он порождает рабочие потоки или процессы для выполнения указанных операций ввода-вывода. Можно указать тип операций ввода-вывода, которые должен выполнять каждый рабочий поток, используя файлы заданий. В примерах ниже продемонстрирован один файл задания для каждого сценария. Можно менять спецификации в этих файлах заданий, чтобы тестировать производительность при различных рабочих нагрузках хранилища класса "Премиум". В примерах используется виртуальная машина Standard_D8ds_v4 под управлением Ubuntu. Прежде чем выполнить тестирование производительности, настройте параметры в соответствии с указаниями в начале раздела "Измерение производительности" и подготовьте кэш.

Прежде чем начать, скачайте FIO и установите его на виртуальной машине.

В ОС Ubuntu выполните следующую команду:

apt-get install fio

Используется четыре рабочих потока для выполнения операций записи и еще четыре для операций чтения на дисках. Рабочие роли записи управляют трафиком на томе nocache, который содержит 3 диска кэша в режиме None. Рабочие роли чтения управляют трафиком на томе readcache, который содержит 1 диск кэша в режиме ReadOnly.

Максимальное количество операций ввода-вывода в секунду при записи

Чтобы добиться максимального количества операций ввода-вывода в секунду при записи, создайте файл задания со следующими спецификациями. Назовите файл fiowrite.ini.

[global]
size=30g
direct=1
iodepth=256
ioengine=libaio
bs=4k
numjobs=4

[writer1]
rw=randwrite
directory=/mnt/nocache

Обратите внимание на следующие ключевые аспекты, которые согласованы с рекомендациями по разработке, описанными в предыдущих разделах. Эти спецификации необходимы для выполнения максимального количества операций ввода-вывода в секунду:

  • высокое значение длины очереди: 256;
  • Небольшой блок, размером 4 КБ.
  • несколько потоков, выполняющих случайные операции записи.

Выполните следующую команду, чтобы запустить тест FIO на 30 секунд:

sudo fio --runtime 30 fiowrite.ini

Во время тестирования вы можете узнать количество операций ввода-вывода в секунду при записи, предоставляемое виртуальной машине и дискам категории "Премиум". Как показано в примере ниже, максимальное количество операций ввода-вывода в секунду при записи, выполняемых виртуальной машиной Standard_D8ds_v4, — 12 800.
Количество операций ввода-вывода в секунду при записи, выполняемых виртуальной машиной и твердотельными накопителями (цен. категория

Максимальное количество операций ввода-вывода при чтении

Чтобы добиться максимального значения операций ввода-вывода при чтении, создайте файл задания со следующими спецификациями. Назовите файл fioread.ini.

[global]
size=30g
direct=1
iodepth=256
ioengine=libaio
bs=4k
numjobs=4

[reader1]
rw=randread
directory=/mnt/readcache

Обратите внимание на следующие ключевые аспекты, которые согласованы с рекомендациями по разработке, описанными в предыдущих разделах. Эти спецификации необходимы для выполнения максимального количества операций ввода-вывода в секунду:

  • высокое значение длины очереди: 256;
  • Небольшой блок, размером 4 КБ.
  • несколько потоков, выполняющих случайные операции записи.

Выполните следующую команду, чтобы запустить тест FIO на 30 секунд:

sudo fio --runtime 30 fioread.ini

Во время тестирования вы можете узнать количество операций ввода-вывода в секунду при чтении, предоставляемое виртуальной машине и дискам категории "Премиум". Как показано в примере ниже, виртуальная машина Standard_D8ds_v4 выполняет более 77 000 операций ввода-вывода в секунду при чтении. Это количество представляет собой сочетание производительности диска и кэша.
Снимок экрана: количество операций ввода-вывода в секунду при записи, выполняемых виртуальной машиной и твердотельными накопителями (цен. категория

Максимальное количество операций ввода-вывода в секунду при чтении и записи

Чтобы добиться максимального количества операций ввода-вывода в секунду при объединенных операциях чтения и записи, создайте файл задания со следующими спецификациями. Назовите файл fioreadwrite.ini.

[global]
size=30g
direct=1
iodepth=128
ioengine=libaio
bs=4k
numjobs=4

[reader1]
rw=randread
directory=/mnt/readcache

[writer1]
rw=randwrite
directory=/mnt/nocache
rate_iops=3200

Обратите внимание на следующие ключевые аспекты, которые согласованы с рекомендациями по разработке, описанными в предыдущих разделах. Эти спецификации необходимы для выполнения максимального количества операций ввода-вывода в секунду:

  • высокое значение длины очереди: 128;
  • Небольшой блок, размером 4 КБ.
  • несколько потоков, выполняющих случайные операции чтения и записи.

Выполните следующую команду, чтобы запустить тест FIO на 30 секунд:

sudo fio --runtime 30 fioreadwrite.ini

Во время тестирования вы можете узнать количество операций ввода-вывода в секунду при объединенных операциях чтения и записи, предоставляемое виртуальной машине и дискам категории "Премиум". Как показано в примере ниже, виртуальная машина Standard_D8ds_v4 выполняет более 90 000 операций ввода-вывода в секунду при объединенных операциях чтения и записи. Это количество представляет собой сочетание производительности диска и кэша.
Количество операций ввода-вывода в секунду при объединенных операциях чтения и записи: 78,3 тыс. операций чтения и 12,6 тыс. операций записи.

Максимальное значение объединенной пропускной способности

Чтобы добиться максимальной пропускной способности объединенных операций чтения и записи, используйте больший размер блока и длинную очередь с несколькими потоками, выполняющими операции чтения и записи. Вы можете использовать блоки размером 64 КБ и длину очереди 128.

Дальнейшие действия

См. статью о проектировании для обеспечения высокой производительности.

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