Измерение IOPS дисковой подсистемы с помощью PowerShell

Одной из основных метрик, позволяющих оценить производительность существующей или проектируемой системы хранения данных некого сервиса является IOPS (Input/Output Operations Per Second) количество операций ввода/вывода. Говоря простым языком, IOPS – этой количество блоков, которое успевает считаться или записаться на носитель или файловую систему в единицу времени. Чем это число больше – тем больше производительность данной дисковой подсистемы (откровенно говоря, само по себе значение IOPS стоит рассматривать в комплексе с другими характеристиками СХД, таким как средняя задержка, пропускная способность и т.п.).

Довольно грубо оценить уровень производительности дисковой подсистемы можно с помощью счетчиков производительности из Performance Monitor (счетчики Disk Reads/sec, Disk Writes/sec, Current Disk Queue Length).

Мне понадобилось иметь под рукой более наглядный и удобный инструмент на PowerShell, позволяющий быстро измерить текущую производительность в IOPS используемой системы хранения данных, будь то локальный жесткий,  твердотельный (SSD) диск, сетевая папка (SMB), CSV том или LUN-а на сетевом хранилище данных (SAN).

На глаза попался PowerShell скрипт (автор Microsoft MVP, Mikael Nystrom), являющийся по сути надстройкой над утилитой SQLIO.exe (набора тестов для расчета производительности файлового хранилища). И хотя в названии утилиты (прямо говоря, не самом удачном) присутствует SQL, наличие MSSQL совсем не обязательно, и ее можно использовать на любой Windows системе.

Примечание. В декабре 2015 года Microsoft объявила о прекращении поддержки утилиты и замене SQLIO на более универсальный инструмент — Diskspd, удалив файлы с дистрибутивом SQLIO со своего сайта. Поэтому, вам придется искать sqlio.exe самостоятельно, либо скачать с нашего сайта (находится в архиве со скриптом).

Итак, скачайте архив содержащий 2 файла: SQLIO.exe и DiskPerformance.ps1 (disk-perf-iops.ZIP — 73Кб) и распакуйте архив в произвольный каталог.

Скрипт DiskPerformance и утилита sqlio.exe

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

Пример запуска скрипта определения IOPS:

.\DiskPerformance.ps1 -TestFileName test.dat –TestFileSizeInGB 1 -TestFilepath C:\temp -TestMode Get-LargeIO -FastMode True -RemoveTestFile True -OutputFormat Out-GridView

Оценка диска в IOPS с помощью Powershell

Посмотрим на аргументы скрипта:

-TestFileName test.dat

Имя файла, создаваемого утилитой FSUTIL

–TestFileSizeInGB 1

Размер файла для тестов. Допустимые варианты 1,5,10,50,100,500,1000 Гб. Размер файла должен быть больше, чем размер кэша системы. Иначе будет измеряться IOPS для данных в кэше, а не на диске.

-TestFilepath C:\Temp

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

TestMode Get-LargeIO

Есть два варианта измерения нагрузки, Get-SmallIO – измеряются IOPS, Get-LargeIO – измеряется скорость передачи данных. Разница между аргументами SmallIO и LargeIO, в размерах блоков при замере скорости 8 Кбайт и 512 Кбайт, и типе доступа Random или Sequential соответственно.

-FastMode True

В режиме Fastmode каждый тест выполняется 10 секунд, иначе 60 сек.

-RemoveTestFile True

Удалить тестовый файл по окончании

-OutputFormat Out-GridView

Возможен вывод результатов измерения в консоль PowerShell (Format-Table) или в отдельное окно графической таблицы (Out-Gridview)

Производительность диска в IOPS

В нашем случае дисковый массив (тестировалось виртуальный vmdk диск на VMFS хранилище, расположенном на дисковой полке HP MSA 2040 с доступом через SAN) показал среднее значение IOPS около 15000 и скорости передачи данных (пропускная способность) около 5 Гбит/сек.

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

ТипIOPS
SSD(SLC)6000
SSD(MLC)1000
15K RPM175-200
10K RPM125-150
7.2K RPM50-75

Удалось найти ряд рекомендаций по производительности в IOPS для распространенных сервисов:

  • Microsoft Exchange 2010 – с 5000 пользователей, каждый из которых получает 75 и отправляет 30 писем в день, потребует как минимум 3750 IOPS
  • Microsoft SQL 2008 Server – с 3500 SQL транзакциями в секунду (TPS)- 28000 IOPS
  • Обычный сервер приложений Windows на 10-100 пользователей — 10-40 IOPS

Предыдущая статья Следующая статья


Комментариев: 6 Оставить комментарий

Оставить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Я не робот( Обязательно отметьте)