Как видим, скорость чтения NVMe SSD более чем в 5 раз выше, чем у eMMC.
### Советы по тестированию с помощью `dd`
* Используйте достаточно большой файл чтобы результаты были более репрезентативными. В идеале размер файла должен превышать объем оперативной памяти (правда это не всегда возможно).
* Очистите кэш перед тестом чтения: `sync; echo 3 > /proc/sys/vm/drop_caches`. Это предотвратит влияние системного кэша на тест.
* Помните: `dd` не моделирует реальное рабочее окружение. Результаты могут отличаться от повседневной нагрузки на диск.
*Не забудьте удалить тестовый файл после теста: `rm /path/to/testfile`
-----
## Измерение скорости операций ввода/вывода c помощью `ioping`
Исходя тз названия, казалось бы, утилита `ioping` проверяет задержки накопителей данных. И это справедливо для NAS. Она похож на ping, но для дисков. Но в реальности `ioping` — это более универсальный инструмент, который может использоваться для измерения скорости операций ввода/вывода (IOPS) и пропускной способности дисков.
Установим ioping:
```shell
sudo apt install ioping
```
Замер:
```shell
ioping -c 10 -s 1m -W .
```
Где:
*`-c 10` — количество замеров;
*`-s 10m` — размер блока данных для тестирования. `10m` — 10 мегабайт. В целом `ioping` — это тест производительности дисковой подсистемы, через измерения задержек при доступе к небольшим блокам данных (обычно 4 KiB). Но отлично работает и на больших блоках, оказывая производительность диска в целом.
*`-W` — С записью вместо чтения. Это более безопасно для временного файла в целевом каталоге, и, кроме того, запись ввода-вывода даёт более надежные результаты для систем, где некэшированные чтения не поддерживаются
или происходит искажающее замеры кэширование на каком-то уровне.
*`.` — каталог, в котором будут производиться замеры. `.` — текущий каталог.
Другие ключи и опции можно посмотреть в справке `man ioping` или `ioping --help`.
*`10 MiB` — размер блока данных, к которому идет доступ;
*`<<< .` — текущая директория, на которой проводится тест;
*`(ext4 /dev/nvme0n1p2 1.79 TiB)` — файловая система (ext4) и устройство (/dev/nvme0n1p2) с емкостью 1.79 ТБ, где выполняется тест;
*`request=1` — номер запроса;
*`time=21.1 ms` — время выполнения запроса (в миллисекундах — `ms`, в микросекунды — `us`);
*`(warmup)` — первый запрос может использоваться для "прогрева", его результаты могут быть исключены из финальной статистики, `(fast)` — запрос выполнен быстрее, чем среднее время выполнения, `(slow)` — запрос выполнен медленнее, чем среднее время выполнения.
Снизу выводятся статистические данные по всем запросам:
min/avg/max/mdev = 21.7 ms / 24.3 ms / 31.1 ms / 3.32 ms
```
Где:
*`9 requests completed in 218.8 ms` — количество запросов, завершенных за время теста и общее время выполнения;
*`90 MiB written` — общий объем данных, записанных на диск;
*`41 iops` — количество операций ввода/вывода в секунду (IOPS);
*`411.3 MiB/s` — скорость записи данных на диск;
*`generated 10 requests in 9.04 s` — количество запросов, сгенерированных за время теста и общее время выполнения;
*`100 MiB` — общий объем данных, сгенерированных тестом;
*`1 iops` — количество операций ввода/вывода в секунду (IOPS) при генерации данных;
*`11.1 MiB/s` — скорость генерации данных;
*`min/avg/max/mdev = 21.7 ms / 24.3 ms / 31.1 ms / 3.32 ms` — **минимальное**, **среднее**, **максимальное** задержка выполнения запросов и **стандартное отклонение**, показатель того, насколько задержки разнятся между запросами.
*`--rw=randrw` — тип операции (случайное чтение и запись). Также можно установить и другие параметры: `write` — тип операции (последовательная запись). `read` -- последовательное чтение, `randwrite` -- случайная запись, `randread` -- случайное чтение, `rw` -- смешанный режим (чтение и запись).
*`--rwmixread=70` — процент операций чтения/запись (70% чтения, 30% записи).
*`--numjobs=4` — количество потоков (заданий), которые одновременно выполняются.
*`--iodepth=32` — количество операций ввода-вывода, которые отправляются одновременно.
*`--runtime=60` — продолжительность теста (60 секунд), для длинных тестов используйте `--time_based` чтобы тест завершался по времени.
И так далее. Еще есть ключ `--output=test.log` для сохранения результатов в log-файл. Подробнее о параметрах можно посмотреть в справке `man fio` или `fio --help`.
Результаты выполнения вышеуказанной команды для моего NVMe SSD (Kingston SNV2S/2000G) были следующие:
Разберем результаты выполнения вашего fio-теста о основным метрикам и объясним их значение.
#### Общий результат (Run status group 0):
* Чтение (READ):
* Скорость: 38.8 MiB/s (40.7 MB/s) — средняя скорость чтения всех заданий.
* Диапазон: 9562 KiB/s - 10.1 MiB/s — скорости отдельных потоков.
* Объем данных: 2328 MiB (около 2.44 GB).
* Запись (WRITE):
* Скорость: 16.7 MiB/s (17.5 MB/s).
* Диапазон: 4110 KiB/s - 4465 KiB/s.
* Объем данных: 1001 MiB (около 1.049 GB).
#### Метрики на потоки
Для каждого потока представлены следующие данные:
* Чтение (READ)
* IOPS -- Средние значения IOPS (операции в секунду) для потоков составляют, например, 2415 IOPS для первого задания. Это число показывает, сколько операций чтения в секунду выполнялось.
* Latency (задержка) -- Время отклика операций ввода-вывода (чтение). Например, среднее время отклика (clat) составляет 298.88 микросекунд, а 99-й процентиль (99.00th) — 1663 микросекунды. Это означает, что 99% операций чтения завершаются за это время.
* Bandwidth (пропускная способность) -- Средние скорости чтения: 9.66 MiB/s, 9.57 MiB/s и т.д.
* Запись (WRITE)
* IOPS -- Средние значения: около 1033-1117 IOPS. Меньше, чем для чтения из-за меньшего процента операций записи.
* Latency (задержка) -- Средняя задержка: около 200-230 микросекунд. Процентиль 99%: до 1483-4490 микросекунд.
* Bandwidth (пропускная способность) -- Средняя скорость записи: 4.1-4.4 MiB/s.
#### Сводка задержек (Latency Summary)
* Чтение: 50% операций завершались за ~281 микросекунду (медиана). 99.5% операций — за менее чем 1991 микросекунду.
* Запись:- 50% операций завершались за ~174-186 микросекунд. 99% — менее чем за 1467 микросекунд.
#### Нагрузка на диск (Disk Utilization)
* Число операций: 594831 операций чтения и 255707 операций записи. Диск был загружен на 100% времени, что ожидаемо для высокой глубины очереди (iodepth=32).
Для случайных операций на маленьких блоках (4 КБ) Kingston SNV2S/2000G демонстрирует хорошую производительность (средние 40.7 MB/s чтения и 17.5 MB/s записи). IOPS соответствуют значениям для высокопроизводительных NVMe SSD. Средние задержки в районе 200-300 микросекунд — это нормально для NVMe. Процентиль 99% показывает стабильность: отклонения есть, но они незначительны. Полная загрузка диска (util=100%) свидетельствует о том, что диск эффективно обрабатывает запросы в рамках установленной глубины очереди.