diskspd - нагрузить и измерить.

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

Вперед