Diskspd.exe - консольная утилита семейства ОС Microsoft Windows для нагрузки дисковой подсистемы и измерения её производительности. Мне она очень пригодилась в процессе траблшутинга работы СХД IBM Storwize.
Принцип работы простой - утилита запускает несколько потоков, каждый из которых осуществляет IO операции с таргетом. Таргетом может быть файл (например, C:\path\file.dat), номер физического диска (например #1) или буква тома (например C:). Причём, если хотим тестировать операции записи, необходимо в качестве таргета указывать какой-нибудь временный файл, иначе данные на диске/томе будут повреждены, если не сказать уничтожены.
Пример:
diskspd -b128K -d120 -o16 -t4 -r -c8G -w100 Z:\temp\io.dat
Данная команда выполняет операции блоками по 128КБ (-b128K) на протяжении 120 секунд (-d120). Ключ -r предписывает выполнять случайные операции ввода-вывода, иначе (по умолчанию) выполняются последовательные операции.
Ключ -w задаёт в процентах соотношение числа операций записи к общему числу операций. -w100 означает выполнять только запись (100% операций на запись), -w30 означает 30% операций выполнять запись и 70% операций выполнять чтение. Ключ -w0 или его отсутствие предписывает выполнять только чтение. Для работы ключа -w используется RNG, поэтому идеальную повторяемость он не обеспечивает.
Ключ -o задаёт количество параллельных операций в рамках потока (в данном случае 16), а ключ -t - количество потоков на каждый таргет (в данном случае 4). Итого, теоритически, диск получает 64 запроса одновременно. Наконец ключ -c предписывает создать/пересоздать файл указанного размера.
Вывод этой команды примерно следующий:
<Часть вывода инфо по конфигурации и загрузке процессорных ядер опущена>
Total IO
thread | bytes | I/Os | MB/s | I/O per s | file
------------------------------------------------------------------------------
0 | 2113929216 | 16128 | 33.60 | 268.80 | L:\TEMP\io.dat <8192MiB>
1 | 2128347136 | 16238 | 33.83 | 270.63 | L:\TEMP\io.dat <8192MiB>
2 | 2121924608 | 16189 | 33.73 | 269.81 | L:\TEMP\io.dat <8192MiB>
3 | 2123497472 | 16201 | 33.75 | 270.01 | L:\TEMP\io.dat <8192MiB>
------------------------------------------------------------------------------
total: 8487698432 | 64756 | 134.91 | 1079.26
Read IO
thread | bytes | I/Os | MB/s | I/O per s | file
------------------------------------------------------------------------------
0 | 0 | 0 | 0.00 | 0.00 | L:\TEMP\io.dat <8192MiB>
1 | 0 | 0 | 0.00 | 0.00 | L:\TEMP\io.dat <8192MiB>
2 | 0 | 0 | 0.00 | 0.00 | L:\TEMP\io.dat <8192MiB>
3 | 0 | 0 | 0.00 | 0.00 | L:\TEMP\io.dat <8192MiB>
------------------------------------------------------------------------------
total: 0 | 0 | 0.00 | 0.00
Write IO
thread | bytes | I/Os | MB/s | I/O per s | file
------------------------------------------------------------------------------
0 | 2113929216 | 16128 | 33.60 | 268.80 | L:\TEMP\io.dat <8192MiB>
1 | 2128347136 | 16238 | 33.83 | 270.63 | L:\TEMP\io.dat <8192MiB>
2 | 2121924608 | 16189 | 33.73 | 269.81 | L:\TEMP\io.dat <8192MiB>
3 | 2123497472 | 16201 | 33.75 | 270.01 | L:\TEMP\io.dat <8192MiB>
------------------------------------------------------------------------------
total: 8487698432 | 64756 | 134.91 | 1079.26
Чтобы исключить влияние переходных процессов на измерения пригодятся ключи -W<seconds> и -C<seconds>, задающие начальный и конечный интервалы, соответственно, в которые измерения не производятся. Также утилита позволяет измерять Latency (-L) и выдаёт результаты в виде таблички персентелей, например так:
diskspd -d60 -b4K -W2 -C2 -t2 -o32 -r -L #3
<часть вывода опущена>
total:
%-ile | Read (ms) | Write (ms) | Total (ms)
----------------------------------------------
min | 0.623 | N/A | 0.623
25th | 2.087 | N/A | 2.087
50th | 2.170 | N/A | 2.170
75th | 2.264 | N/A | 2.264
90th | 2.407 | N/A | 2.407
95th | 2.804 | N/A | 2.804
99th | 65.499 | N/A | 65.499
3-nines | 68.824 | N/A | 68.824
4-nines | 128.370 | N/A | 128.370
5-nines | 464.637 | N/A | 464.637
6-nines | 494.511 | N/A | 494.511
7-nines | 494.542 | N/A | 494.542
8-nines | 494.542 | N/A | 494.542
9-nines | 494.542 | N/A | 494.542
max | 494.542 | N/A | 494.542
Собственно замерять производительность можно и со стороны СХД, а diskspd использовать просто для генерации повторяемой нагрузки.
Ссылки:
Скачать утилиту - https://aka.ms/diskspd
Англоязычная wiki - https://github.com/Microsoft/diskspd/wiki/Table-of-contents