Однією з основних метрик, що дозволяють оцінити продуктивність існуючої або проектованої системи зберігання даних є 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. Щоб зібрати дані за цими лічильниками:
- запустіть
Perfmon
; - Створіть новий набір збирачів даних (Data Collector Set). Виберіть Create manually;
- Виберіть опцію Create data logs -> Performance counter;
- Тепер у властивостях нового набору для збору даних додайте наступні лічильники продуктивності для об'єкта Physical Disk (Можете вибрати лічильники для конкретного диска або для всіх доступних локальних дисків):
- Avg. Disk Sec./Transfer
- Avg. Disk Queue Length
- Avg Disk Bytes / Transfer
- Disk Bytes / sec
- Disk Transfers / sec
- Split IO / sec
- Можете змінити інші параметри збору даних. За умовчанням значення лічильників збираються кожні 15 секунд.Чтоби відображати дані про продуктивність дисків в реальному часі потрібно додати зазначені лічильник в Perfmon в розділі Monitoring Tools -> Performance Monitor.
- Залишилося запустити збір даних лічильників продуктивності (Start) І дочекатися збору достатньої кількості інформації для аналізу. Після цієї клацніть ПКМ по набору у виберіть Stop;
- Щоб переглянути зібрані дані по диску, перейдіть в розділ Perfmon -> Reports -> User Defined -> Data_Disk_IO -> ваш набір. За замовчуванням дані по диску відображаються у вигляді графіків;
- За допомогою
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
-c50G
- розмір файлу 50 Гб (краще використовувати великий розмір файлу, щоб він не помістився в кеш контролера СГД);-d30
0 - тривалість тестування в секундах;-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 RPM | 175-200 |
10K RPM | 125-150 |
7.2K RPM | 50-75 |
RAID5 з 6 дисків з 10000 RPM | 900 |
Нижче наведені ряд рекомендацій по продуктивності дисків в IOPS для поширених сервісів:
- Microsoft Exchange 2010 - з 5000 користувачів, кожен з яких отримує 75 і відправляє 30 листів в день, потребують як мінімум 3750 IOPS
- Microsoft SQL 2008 Server - з 3500 SQL транзакціями в секунду (TPS) - 28000 IOPS
- Звичайний сервер додатків Windows на 10-100 користувачів - 10-40 IOPS