Тест производительности диска
Применимо к: ✔️ Виртуальные машины 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).
Максимальное количество операций ввода-вывода при чтении
Мы используем большую длину очереди 128, небольшой размер блока 4 КБ и четыре рабочих потока для управления операциями чтения. Рабочие роли чтения управляют трафиком на томе CacheReads, который содержит 1 диск кэша в режиме ReadOnly.
Выполняйте следующую команду в течение 2 часов подготовки и 30 секунд измерения:
diskspd -c200G -b4K -F4 -r -o128 -W7200 -d30 -Sh testfile.dat
Результаты показывают, что виртуальная машина Standard_D8ds_v4 выполняет максимальное количество операций ввода-вывода в секунду при чтении (77 000).
Максимальная пропускная способность
Чтобы получить максимальную пропускную способность чтения и записи, можно увеличить размер блока до 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 операций ввода-вывода в секунду при объединенных операциях чтения и записи. Это количество представляет собой сочетание производительности диска и кэша.
Максимальное значение объединенной пропускной способности
Чтобы добиться максимальной пропускной способности объединенных операций чтения и записи, используйте больший размер блока и длинную очередь с несколькими потоками, выполняющими операции чтения и записи. Вы можете использовать блоки размером 64 КБ и длину очереди 128.
Следующие шаги
См. статью о проектировании для обеспечения высокой производительности.
В ней описано, как для прототипа создать такой же контрольный список, как для существующего приложения. С помощью инструментов тестирования производительности можно смоделировать рабочую нагрузку и измерить производительность прототипа приложения. В результате вы сможете определить, какой из классов диска будет соответствовать требованиям к производительности приложения, а какой превосходить их. Затем те же указания можно применить и для рабочего приложения.