From 74f74f091ef5fbf828f1db29f03f04793f4cb6bf Mon Sep 17 00:00:00 2001 From: erjemin Date: Fri, 29 Nov 2024 14:33:48 +0300 Subject: [PATCH] =?UTF-8?q?add:=20=D0=98=D0=B7=D0=BC=D0=B5=D1=80=D0=B5?= =?UTF-8?q?=D0=BD=D0=B8=D0=B5=20=D1=81=D0=BA=D0=BE=D1=80=D0=BE=D1=81=D1=82?= =?UTF-8?q?=D0=B8=20=D0=BD=D0=B0=D0=BA=D0=BE=D0=BF=D0=B8=D1=82=D0=B5=D0=BB?= =?UTF-8?q?=D1=8F=20=D0=B4=D0=B0=D0=BD=D0=BD=D1=8B=D1=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 5 +- .../measuring-performance-storage-devices.md | 78 +++++++++++++++++++ 2 files changed, 81 insertions(+), 2 deletions(-) create mode 100644 raspberry-and-orange-pi/measuring-performance-storage-devices.md diff --git a/README.md b/README.md index 1b22220..c4649d6 100644 --- a/README.md +++ b/README.md @@ -12,8 +12,9 @@ * [Устранение проблем при установке Python-коннектора mysqlclient (MySQL/MariaDB)](python/python-mysql.md) * [Python-скрипт как служба Linux](python/python_as_service.md) -## Raspberry Pi / Orange Pi -* [Перенос системы на eMMC (для Orange Pi 5 Plus)](raspberry-and-orange-pi/opi5plus-move-sistem-to-emmc.md) +## Orange Pi / Raspberry Pi +* [Перенос системы на NVMe или eMMC (для Orange Pi 5 Plus)](raspberry-and-orange-pi/opi5plus-move-system-to-nvme-or-emmc) +* [Измерение производительности накопителей](raspberry-and-orange-pi/measuring-performance-storage-devices.md) * [Установка Docker и Docker Compose](raspberry-and-orange-pi/install-docker-compose.md) * [Резервное копирование и восстановление](raspberry-and-orange-pi/backup-restore.md) * [Kubernetes на Orange Pi (начало)](raspberry-and-orange-pi/k8s.md) diff --git a/raspberry-and-orange-pi/measuring-performance-storage-devices.md b/raspberry-and-orange-pi/measuring-performance-storage-devices.md new file mode 100644 index 0000000..6ebf48e --- /dev/null +++ b/raspberry-and-orange-pi/measuring-performance-storage-devices.md @@ -0,0 +1,78 @@ +# Измерение скорости накопителей (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` — **минимальное**, **среднее**, **максимальное** время выполнения запроса и **стандартное отклонение**.