Вимірювання продуктивності і IOPS жорстких дисків і СГД в Windows

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

У цій статті ми розглянемо кілька способів вимірювання продуктивності використовуваної системи зберігання даних в IOPS під Windows (локальний жорсткий, SSD диск, мережева папка SMB, CSV тому або LUN на СГД в мережі SAN).

зміст:

  • Лічильники продуктивності дискової підсистеми Windows
  • Тестування IOPS в Windows за допомогою DiskSpd
  • Як отримати IOPS і продуктивність дискової підсистеми із допомогою PowerShell?

Лічильники продуктивності дискової підсистеми Windows

Ви можете оцінити поточний рівень навантаження на дискову підсистему за допомогою вбудованих лічильників продуктивності Windows з Performance Monitor. Щоб зібрати дані за цими лічильниками:

  1. запустіть Perfmon;
  2. Створіть новий набір збирачів даних (Data Collector Set). Виберіть Create manually;
  3. Виберіть опцію Create data logs -> Performance counter;
  4. Тепер у властивостях нового набору для збору даних додайте наступні лічильники продуктивності для об'єкта Physical Disk (Можете вибрати лічильники для конкретного диска або для всіх доступних локальних дисків):
    • Avg. Disk Sec./Transfer
    • Avg. Disk Queue Length
    • Avg Disk Bytes / Transfer
    • Disk Bytes / sec
    • Disk Transfers / sec
    • Split IO / sec
  5. Можете змінити інші параметри збору даних. За умовчанням значення лічильників збираються кожні 15 секунд.Чтоби відображати дані про продуктивність дисків в реальному часі потрібно додати зазначені лічильник в Perfmon в розділі Monitoring Tools -> Performance Monitor.
  6. Залишилося запустити збір даних лічильників продуктивності (Start) І дочекатися збору достатньої кількості інформації для аналізу. Після цієї клацніть ПКМ по набору у виберіть Stop;
  7. Щоб переглянути зібрані дані по диску, перейдіть в розділ Perfmon -> Reports -> User Defined -> Data_Disk_IO -> ваш набір. За замовчуванням дані по диску відображаються у вигляді графіків;
  8. За допомогою Ctrl + G перейдіть в режим Report.

Як інтерпретувати результати продуктивності дисків в Perfmon? Для швидкого аналізу продуктивності дискової підсистеми потрібно подивитися на значення як мінімум наступних 5 лічильників.

При аналізі дані лічильників бажано мати уявлення про конфігурацію фізичних дисків (використовується чи RAID / Stripe / кількість і типи дисків, наявність кеша тощо).
  • Disk sec/ Transfer - час, необхідний для виконання однієї операції запису / читання на пристрій зберігання / диск - disk latency. Якщо затримка більше 25 мс (0.25) або вище, значить дисковий масив не встигає виконувати операції. Для високонавантажених систем значення не повинно перевищувати 10 мс (0.1);
  • Disk Transfers / sec - кількість операцій читання / запису в секунду (IOPS). Це основний показник інтенсивності звернень до дисків (приблизні значення в IOPS для різних типів дисків представлені в кінці статті);
  • Disk Bytes/ Sec - середня швидкість обміну з диском (читання / запису) за 1 секунду. Максимальні значення залежить від типу диска (150-250 Мб / секунду - для звичайного диска і 500-10000 для SSD);
  • Split IO/ sec - показник фрагментації диска, коли операційній системі доводиться розділяти одну операцію введення / виводу на кілька операцій. Може також говорити про те, додаток запитує надто великі блоки даних, які неможуть бути передані за одну операцію;
  • Avg. Disk Queue Length- довжина черги до диска (кількість транзакцій очікує обробку). Для одиночного диска довжина черги не повинна перевищувати 2. Для RAID масиву з 4 дисків довжина черги до 8 буде вважатися допустимим значенням.

Тестування IOPS в Windows за допомогою DiskSpd

Для генерації навантаження на дискову підсистему і вимірювання її продуктивності Microsoft рекомендує використовувати утиліту DiskSpd (Https://aka.ms/diskspd). Ця консольна утиліта, яка в кілька потоків може здійснювати операції I / O із зазначеним Таргет. Я досить часто використовую цю утиліту щоб заміряти продуктивність СГД в IOPS і отримати максимальну швидкість читання / запису c даного сервера (можна звичайно виміряти продуктивність і з боку СГД, в цьому випадку diskspd буде використовуватися для генерації навантаження).

Утиліта не вимагає установки, просто скачайте і розпакуйте архів на локальний диск. Для x64 бітних систем використовуйте версію diskspd.exe із каталогу amd64fre.

Я використовую такий команду для тестування диску:

diskspd.exe -c50G -d300 -r -w40 -t8 -o32 -b64K -Sh -L E: \ diskpsdtmp.dat> DiskSpeedResults.txt

важливо. При використанні diskspd.exe генерується досить велике навантаження на диски і CPU тестованої системи. Тому, щоб не викликати падіння продуктивності для користувачів, не рекомендуємо запускати її на продуктивних системах в години пікового навантаження.

  • -c50G - розмір файлу 50 Гб (краще використовувати великий розмір файлу, щоб він не помістився в кеш контролера СГД);
  • -d300 - тривалість тестування в секундах;
  • -r - довільне читання / запис (якщо потрібно тестувати послідовний доступ, використовуйте -s);
  • -t8 - кількість потоків;
  • -w40 - співвідношення операцій записи до операцій читання 40% / 60%;
  • -o32- довжина черги;
  • -b64K - розмір блоку;
  • -Sh - не використовувати кешування;
  • -L - вимірювати затримки (latency);
  • E: \ diskpsdtmp.dat - шлях до тестового файл.

Після закінчення стрес-тесту з отримані таблиць можна отримати середні значення продуктивності.

Наприклад, в моєму тесті отримано такі загальні дані про продуктивності (Total IO):

  • MiB / s - 241 (близько 252 Мб / сек, непогано)
  • IOPS - 3866.49 (відмінно!)
  • Середня затримка - 66.206 мс (зависоко!)

Можна отримати окремі значення тільки за операціями читання (секція Read IO ) Або записи (секція Write IO ).

Протестувавши за допомогою diskspd кілька дисків або LUN на СГД, ви зможете порівняти їх або вибрати масив з потрібною продуктивністю під свої завдання.

Як отримати IOPS і продуктивність дискової підсистеми за допомогою PowerShell?

Нещодавно мені на очі потрапив PowerShell скрипт (автор Microsoft MVP, Mikael Nystrom), який є по суті надбудовою над утилітою SQLIO.exe (Набору тестів для розрахунку продуктивності файлового сховища).
Примітка. У грудні 2015 року Microsoft оголосила про припинення підтримки утиліти і заміні SQLIO на більш універсальний інструмент - Diskspd, вилучивши файли з дистрибутивом SQLIO зі свого сайту. Тому, вам доведеться шукати sqlio.exe самостійно, або завантажити з нашої сайту (знаходиться в архіві зі скриптом).

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

Приклад запуску PowerShell скрипта для визначення IOPS:

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

Я використовував в скрипті наступні аргументи:

  • -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);

У нашому випадку дисковий масив (тестувався віртуальний vmdk диск на VMFS сховище, розташованому на дискової полиці HP MSA 2 040 з доступом через SAN) показав середнє значення IOPS близько 15000 і швидкості передачі даних (пропускна здатність) біля 5 Гбіт / сек.

У наступній таблиці вказані зразкові значення IOPS для різних типів дисків:

ТипIOPS
SSD (SLC)6000
SSD (MLC)1000
15K RPM175-200
10K RPM125-150
7.2K RPM50-75
RAID5 з 6 дисків з 10000 RPM900

Нижче наведені ряд рекомендацій по продуктивності дисків в IOPS для поширених сервісів:

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