- Журнал производительности для дисков Performance history for drives
- Имена и единицы рядов Series names and units
- Как интерпретировать How to interpret
- Откуда они приходят Where they come from
- Использование в PowerShell Usage in PowerShell
- Измерение производительности и IOPS жестких дисков и СХД в Windows
- Счетчики производительности дисковой подсистемы Windows
- Тестирование IOPS в Windows с помощью DiskSpd
- Как получить IOPS и производительность дисковой подсистемы с помощью PowerShell?
Журнал производительности для дисков Performance history for drives
Область применения: Windows Server 2019 Applies to: Windows Server 2019
В этом подразделе журнала производительности для Локальные дисковые пространства подробно описывается журнал производительности, собранный для дисков. This sub-topic of Performance history for Storage Spaces Direct describes in detail the performance history collected for drives. Журнал производительности доступен для каждого диска в подсистеме хранения кластера, независимо от шины или типа носителя. Performance history is available for every drive in the cluster storage subsystem, regardless of bus or media type. Однако он недоступен для загрузочных дисков операционной системы. However, it is not available for OS boot drives.
Не удается собрать журнал производительности для дисков на недоступном сервере. Performance history cannot be collected for drives in a server that is down. Коллекция будет возобновлена автоматически при резервном копировании сервера. Collection will resume automatically when the server comes back up.
Имена и единицы рядов Series names and units
Эти серии собираются для каждого подходящего диска: These series are collected for every eligible drive:
Series Series | Единицы Unit |
---|---|
physicaldisk.iops.read | в секунду per second |
physicaldisk.iops.write | в секунду per second |
physicaldisk.iops.total | в секунду per second |
physicaldisk.throughput.read | байт в секунду bytes per second |
physicaldisk.throughput.write | байт в секунду bytes per second |
physicaldisk.throughput.total | байт в секунду bytes per second |
physicaldisk.latency.read | секунд seconds |
physicaldisk.latency.write | секунд seconds |
physicaldisk.latency.average | секунд seconds |
physicaldisk.size.total | Байты bytes |
physicaldisk.size.used | Байты bytes |
Как интерпретировать How to interpret
Series Series | Как интерпретировать How to interpret |
---|---|
physicaldisk.iops.read | Число операций чтения в секунду, выполненных диском. Number of read operations per second completed by the drive. |
physicaldisk.iops.write | Число операций записи в секунду, выполненных диском. Number of write operations per second completed by the drive. |
physicaldisk.iops.total | Общее число операций чтения или записи в секунду, выполненных диском. Total number of read or write operations per second completed by the drive. |
physicaldisk.throughput.read | Количество данных, считанных с диска в секунду. Quantity of data read from the drive per second. |
physicaldisk.throughput.write | Количество данных, записываемых на диск в секунду. Quantity of data written to the drive per second. |
physicaldisk.throughput.total | Общее количество данных, считанных или записанных на диск в секунду. Total quantity of data read from or written to the drive per second. |
physicaldisk.latency.read | Средняя задержка операций чтения с диска. Average latency of read operations from the drive. |
physicaldisk.latency.write | Средняя задержка операций записи на диск. Average latency of write operations to the drive. |
physicaldisk.latency.average | Средняя задержка всех операций на диск или с него. Average latency of all operations to or from the drive. |
physicaldisk.size.total | Общий объем хранилища диска. The total storage capacity of the drive. |
physicaldisk.size.used | Используемая емкость хранилища диска. The used storage capacity of the drive. |
Откуда они приходят Where they come from
iops.* Ряды, throughput.* и latency.* собираются из Physical Disk набора счетчиков производительности на сервере, подключенном к диску, по одному экземпляру на диск. The iops.* , throughput.* , and latency.* series are collected from the Physical Disk performance counter set on the server where the drive is connected, one instance per drive. Эти счетчики измеряются partmgr.sys и не включают большую часть стека программного обеспечения Windows и других прыжков сети. These counters are measured by partmgr.sys and do not include much of the Windows software stack nor any network hops. Они представляют собой представление о производительности оборудования устройства. They are representative of device hardware performance.
Series Series | Счетчик источника Source counter |
---|---|
physicaldisk.iops.read | Disk Reads/sec |
physicaldisk.iops.write | Disk Writes/sec |
physicaldisk.iops.total | Disk Transfers/sec |
physicaldisk.throughput.read | Disk Read Bytes/sec |
physicaldisk.throughput.write | Disk Write Bytes/sec |
physicaldisk.throughput.total | Disk Bytes/sec |
physicaldisk.latency.read | Avg. Disk sec/Read |
physicaldisk.latency.write | Avg. Disk sec/Writes |
physicaldisk.latency.average | Avg. Disk sec/Transfer |
Счетчики измеряются для всего интервала, а не для выборки. Counters are measured over the entire interval, not sampled. Например, если диск бездействует в течение 9 секунд, но завершает 30 IOs в десятой секунде, он physicaldisk.iops.total будет записан в среднем 3 iOS в секунду в течение этого 10-секундного интервала. For example, if the drive is idle for 9 seconds but completes 30 IOs in the 10th second, its physicaldisk.iops.total will be recorded as 3 IOs per second on average during this 10-second interval. Это гарантирует, что журнал производительности захватывает все действия и является надежным для шума. This ensures its performance history captures all activity and is robust to noise.
size.* Ряды собираются из MSFT_PhysicalDisk класса в WMI, по одному экземпляру на диск. The size.* series are collected from the MSFT_PhysicalDisk class in WMI, one instance per drive.
Series Series | Source, свойство Source property |
---|---|
physicaldisk.size.total | Size |
physicaldisk.size.used | VirtualDiskFootprint |
Использование в PowerShell Usage in PowerShell
Используйте командлет Get-физический : Use the Get-PhysicalDisk cmdlet:
Измерение производительности и IOPS жестких дисков и СХД в Windows
Одной из основных метрик, позволяющих оценить производительность существующей или проектируемой системы хранения данных является IOPS (Input/Output Operations Per Second — количество операций ввода/вывода). Говоря простым языком, IOPS – этой количество блоков, которое успевает считаться или записаться на носитель или файловую систему в единицу времени. Чем это число больше – тем больше производительность данной дисковой подсистемы (откровенно говоря, само по себе значение IOPS стоит рассматривать в комплексе с другими характеристиками СХД, таким как средняя задержка, пропускная способность и т.п.).
В этой статье мы рассмотрим несколько способов измерения производительности используемой системы хранения данных в IOPS под Windows (локальный жесткий, SSD диск, сетевая папка SMB, CSV том или LUN на СХД в сети SAN).
Счетчики производительности дисковой подсистемы Windows
Вы можете оценить текущий уровень нагрузки на дисковую подсистему с помощью встроенных счетчиков производительности Windows из Performance Monitor. Чтобы собрать данные по этим счетчикам:
- Запустите Perfmon ;
- Создайте новый набор сборщиков данных (Data Collector Set). Выберите Create manually;
- Выберите опцию Create data logs ->Performance counter;
Performance counter;» width=»530″ height=»262″ srcset=»https://winitpro.ru/wp-content/uploads/2016/02/performance-counter.jpg 530w, https://winitpro.ru/wp-content/uploads/2016/02/performance-counter-300×148.jpg 300w» sizes=»(max-width: 530px) 100vw, 530px»/>
- Теперь в свойствах нового набора для сбора данных добавьте следующие счетчики производительности для объекта 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? Для быстрого анализа производительности дисковой подсистемы необходимо посмотреть на значения как минимум следующих 5 счетчиков.
- Disksec/Transfer – время, необходимое для выполнения одной операции записи/чтения на устройство хранения/диск — disk latency. Если задержка более 25 мс (0.25) или выше, значит дисковый массив не успевает выполнять операции. Для высоконагруженных систем значение не должно превышать 10 мс (0.1);
- Disk Transfers/sec – количество операций чтения/записи в секунду (IOPS). Это основной показатель интенсивности обращений к дискам (примерные значения в IOPS для разных типов дисков представлены в конце статьи);
- DiskBytes/Sec– средняя скорость обмена с диском (чтения/записи) за 1 секунду. Максимальные значения зависит от типа диска (150-250 Мб/секунду — для обычного диска и 500-10000 для SSD);
- SplitIO/sec– показатель фрагментации диска, когда операционной системе приходится разделять одну операцию ввода/вывода на несколько операций. Может также говорить о том, приложение запрашивает слишком большие блоки данных, которые немогут быть переданы за одну операцию;
- Avg. DiskQueueLength– длина очереди к диску (количество транзакций ожидающий обработку). Для одиночного диска длина очереди не должна превышать 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 (набора тестов для расчета производительности файлового хранилища).
Итак, скачайте архив содержащий 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
Я использовал в скрипте следующие аргументы:
- -TestFileNametest.dat— имя файла, создаваемого утилитой FSUTIL;
- –TestFileSizeInGB1 —размер файла для тестов. Допустимые варианты 1,5,10,50,100,500,1000 Гб. Размер файла должен быть больше, чем размер кэша системы. Иначе будет измеряться IOPS для данных в кэше, а не на диске;
- -TestFilepathC:\Temp— указывается диск, для которого будет выполняться расчет производительности и каталог на диске, в котором будет создаваться тестовый файл. Допустимо указать UNC путь к сетевой папке;
- —TestModeGet-LargeIO— есть два варианта измерения нагрузки, Get-SmallIO – измеряются IOPS, Get-LargeIO – измеряется скорость передачи данных. Разница между аргументами SmallIO и LargeIO, в размерах блоков при замере скорости 8 Кбайт и 512 Кбайт, и типе доступа Random или Sequential соответственно;
- -FastModeTrue— в режиме Fastmode каждый тест выполняется 10 секунд, иначе 60 сек;
- -RemoveTestFileTrue— удалить тестовый файл по окончании теста;
- -OutputFormatOut-GridView — возможен вывод результатов измерения в консоль PowerShell (Format-Table) или в отдельное окно графической таблицы (Out-Gridview);
В нашем случае дисковый массив (тестировался виртуальный vmdk диск на VMFS хранилище, расположенном на дисковой полке HP MSA 2040 с доступом через 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 для распространенных сервисов:
- MicrosoftExchange2010 – с 5000 пользователей, каждый из которых получает 75 и отправляет 30 писем в день, потребует как минимум 3750 IOPS
- MicrosoftSQL2008 Server – с 3500 SQL транзакциями в секунду (TPS) — 28000 IOPS
- Обычный сервер приложений Windows на 10-100 пользователей — 10-40 IOPS