doc_memo/raspberry-and-orange-pi/measuring-performance-storage-devices.md

79 lines
5.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Измерение скорости накопителей (HDD, SSD, USB Flash, NAS и т.д.) под Linux
Способов измерения скорости накопителей под Linux много, и можно подобрать такие, что более точно покажут
производительность именно на ваших задачах.
## Измерение задержек (latency) операций ввода/вывода
Утилита ioping проверяет задержки накопителей данных (похож на ping, но для дисков):
Установим ioping:
```shell
sudo apt install ioping
```
Замер:
```shell
ioping -c 10 -s 1m -W .
```
Где:
* `-c 10` -- количество замеров;
* `-s 10m` -- размер блока данных для тестирования. `10m' -- 10 мегабайт;
* `-W` -- С записью вместо чтения. Это более безопасно для временного файла в целевом каталоге, и, кроме того, запись ввода-вывода даёт более надежные результаты для систем, где некэшированные чтения не поддерживаются
или происходит искажающее замеры кэширование на каком-то уровне.
* `.` -- каталог, в котором будут производиться замеры. `.` -- текущий каталог.
Другие ключи и опции можно посмотреть в справке `man ioping` или `ioping --help`.
Результаты теста будут примерно такими:
```text
10 MiB >>> . (ext4 /dev/nvme0n1p2 1.79 TiB): request=1 time=21.1 ms (warmup)
10 MiB >>> . (ext4 /dev/nvme0n1p2 1.79 TiB): request=2 time=29.7 ms
10 MiB >>> . (ext4 /dev/nvme0n1p2 1.79 TiB): request=3 time=23.5 ms
10 MiB >>> . (ext4 /dev/nvme0n1p2 1.79 TiB): request=4 time=22.3 ms
10 MiB >>> . (ext4 /dev/nvme0n1p2 1.79 TiB): request=5 time=21.7 ms
10 MiB >>> . (ext4 /dev/nvme0n1p2 1.79 TiB): request=6 time=23.1 ms
10 MiB >>> . (ext4 /dev/nvme0n1p2 1.79 TiB): request=7 time=21.7 ms (fast)
10 MiB >>> . (ext4 /dev/nvme0n1p2 1.79 TiB): request=8 time=31.1 ms (slow)
10 MiB >>> . (ext4 /dev/nvme0n1p2 1.79 TiB): request=9 time=23.0 ms
10 MiB >>> . (ext4 /dev/nvme0n1p2 1.79 TiB): request=10 time=22.7 ms
--- . (ext4 /dev/nvme0n1p2 1.79 TiB) ioping statistics ---
9 requests completed in 218.8 ms, 90 MiB written, 41 iops, 411.3 MiB/s
generated 10 requests in 9.04 s, 100 MiB, 1 iops, 11.1 MiB/s
min/avg/max/mdev = 21.7 ms / 24.3 ms / 31.1 ms / 3.32 ms
```
Сверху выводятся данные по индивидуальным запросам:
```text
10 MiB >>> . (ext4 /dev/nvme0n1p2 1.79 TiB): request=1 time=21.1 ms (warmup)
```
Где:
* `10 MiB` — размер блока данных, к которому идет доступ;
* `<<< .` — текущая директория, на которой проводится тест;
* `(ext4 /dev/nvme0n1p2 1.79 TiB)` — файловая система (ext4) и устройство (/dev/nvme0n1p2) с емкостью 1.79 ТБ, где выполняется тест;
* `request=1` — номер запроса;
* `time=21.1 ms` — время выполнения запроса (в миллисекундах -- `ms`, в микросекунды -- `us`);
* `(warmup)` — первый запрос может использоваться для "прогрева", его результаты могут быть исключены из финальной статистики, `(fast)` — запрос выполнен быстрее, чем среднее время выполнения, `(slow)` — запрос выполнен медленнее, чем среднее время выполнения.
Снизу выводятся статистические данные по всем запросам:
```text
--- . (ext4 /dev/nvme0n1p2 1.79 TiB) ioping statistics ---
9 requests completed in 218.8 ms, 90 MiB written, 41 iops, 411.3 MiB/s
generated 10 requests in 9.04 s, 100 MiB, 1 iops, 11.1 MiB/s
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`**минимальное**, **среднее**, **максимальное** время выполнения запроса и **стандартное отклонение**.