Недавно в продаже появилась новая модель Российского одноплатного микрокомпьютера - Repka Pi 4 Optimal, в котором множество улучшений по сравнению с первой моделью Repka Pi 3, появившейся на российском рынке два года назад. Попробовали его в нескольких своих проектах и уверенно можем констатировать - новый одноплатник оказался хорош по производительности и стабильности в работе.
При этом интересно, что теперь можно устанавливать в Repka Pi4 Optimal модуль eMMC (Embedded MultiMediaCard), чтобы использовать его вместо карты памяти SD как для хранения данных, так и для загрузки операционной системы. Этот модуль намного надежнее в работе, чем карта SD и что особенно приятно, примерно в 2,5 раза быстрее, чем самые быстрые SD карты.
Удобным оказалось и то, что eMMC модули подходят от Orange Pi и от Rock Pi и их можно приобретать как на сайте производителя, так и на алиэкспресс. Repka Pi4 Optimal оказалась доступна не только с возможностью установки этих eMMC модулей, а так же оказались доступными модели с уже установленными на них микросхемами eMMC, это дешевле чем суммарно купить одноплатник и модуль eMMC к нему, но зато и не так гибко, в случае выхода из строя модуля eMMC придётся менять весь одноплатник или применять его только работая с SD картой, возможно для применения в условиях вибраций и тряски это кому то актуально, так как распаянная на плате микросхема eMMC конечно будет надёжнее в работе.
Но и это оказалось не самой главной “фишкой” новой модели Repka Pi - вскоре появилась версия платы этого одноплатника с интерфейсом PCIe 2.0 1x (Peripheral Component Interconnect Express) полностью совместимый с аналогичным PCIe у Raspberry Pi 5 и соответственно все платы расширения (“шляпы“ или “шилды“) для него будут работать и на Repka Pi 4 Optimal.
А вот это уже по настоящему интересно и захотелось попробовать его в деле и написать об этом статью. Версией такой платы с доступным PCIe стала версия платы Repka Pi 4 Optimal v.2.1, а так же ещё чуть ранее платы v.1.1 с наличием на плате серийного номера (S/N), т.е. версии Repka Pi 4 Optimal на платах v.1.1 без серийного номера на них такой возможностью работы с PCIe не обладают.
Ниже приведены фото того, как это выглядит. На момент написания данной статьи платы Repka Pi 4 с PCIe были доступны для покупки только в интернет-магазине производителя, возможно, когда Вы читаете данную статью, будет доступно уже и на других площадках.
Более того, с помощью дополнительного шилда, подключенного к интерфейсу PCIe 2.0 1x, нетрудно подключить к Repka Pi4 Optimal быстродействующий диск NVMe SSD M.2 (Non-Volatile Memory Express). Интерфейс PCIe 2.0 1x способен очень быстро передавать данные между периферийными устройствами и микрокомпьютером. Скорость передачи данных может достигать 500 MB/s. Вот это и разберём в данной статье.
Помимо дисков NVMe, к этому интерфейсу можно подключить сетевые карты, дополнительные контроллеры для дисков, карты захвата видео и другое оборудование. Можно так же подключать и платы расширения с NPU (аппаратные нейро-ускорители), на момент написания данной статьи нам удалось уже проверить работу платы расширения Hailo 8L (ссылка на Али, если интересно, что за модуль) для Raspberry Pi 5. Вот такой бенчмарк внутри клиентского софта этой платы на модели yolo8s в 4 потока показал скорость 44 fps (!!!!!!!), но об этом расскажем, если будут пожелания в комментариях, в отдельной статье.
В этой статье далее расскажем о том, как перенести Repka OS с карты SD на модуль eMMC, подключенный к Repka Pi4 Optimal, а также как подключить дополнительный диск NVMe SSD и сравним производительность дисковых операций со всеми этими системами памяти и диском, просто подключенным к разъему USB микрокомпьютера (ах да, тут, наверное, стоит добавить, что в Repka Pi 4 появился так же USB 3.0).
Итак, теперь можно переходить к сути :-)
Содержание этой статьи #
-
Установка модуля eMMC на плату Repka Pi4 Optimal #
На плате Repka Pi4 Optimal предусмотрены разъем для подключения модуля eMMC, а также разъем PCIe (рис.2).
Микрокомпьютер Repka Pi4 Optimal можно приобрести с установленным модулем eMMC или купить это модули отдельно для самостоятельной установки (рис.3).
Перенос Repka OS на модуль eMMC #
Итак, вы приобрели Repka Pi4 Optimal с уже установленным модулем eMMC или купили этот модуль отдельно и установили самостоятельно в предназначенный для этого разъем платы микрокомпьютера.
Теперь займемся установкой Repka OS сначала на карту SD, а затем перенесем ее на модуль eMMC.
Скачайте прошивку с сайта Repka. Вам нужен вариант прошивки «Прошивка для печатной платы ver. 1.1 Optimal с максимальной частотой работы процессора 2 ГГц».
Далее с помощью программы balenaEtcher или Rufus запишите образ прошивки на карту SD. Мы использовали карту объемом 32 Гбайт.
Загрузив Repka OS с карты SD, запустите в консольном приглашении команду repka-config, и выберите строку Системные настройки ОС (рис.4).
Далее в меню системных настроек выберите строку Копирование ОС с одного накопителя на другой (рис.5).
Появится панель, где вам нужно выбрать устройство, на которое будет копироваться образ системы (рис.6).
Здесь вам нужно выбрать устройство /dev/mmcblk1, и воспользоваться кнопкой Ок.
Начнется процесс переноса файлов, на который может уйти несколько минут (рис.7).
После завершения процесса появится сообщение об удачном клонировании (рис.8).
Теперь вы можете выйти из программы repka-config. Завершите работу Repka OS, выключите питание микрокомпьютера, а затем удалите карту SD.
Если теперь включить питание Репка-Pi, операционная система Repka OS будет загружена с диска eMMC.
После загрузки Repka OS посмотрите список блочных устройств при помощи команды lsblk:
# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
mmcblk1 179:0 0 28,9G 0 disk
└─mmcblk1p1 179:1 0 28,6G 0 part /
mmcblk1boot0 179:32 0 4M 1 disk
mmcblk1boot1 179:64 0 4M 1 disk
Здесь устройство mmcblk1 — это диск eMMC. На нем имеется раздел mmcblk1p1, смонтированный в корневой каталог файловой системы.
Команда df с параметром -h выведет список файловых систем, их размер, сколько на них использовано и сколько свободно места, а также в какие каталоги эти файловые системы смонтированы:
# df -h
Файл.система Размер Использовано Дост Использовано% Cмонтировано в
/dev/root 28G 7,3G 20G 28% /
tmpfs 962M 0 962M 0% /dev/shm
tmpfs 385M 1,5M 384M 1% /run
tmpfs 5,0M 4,0K 5,0M 1% /run/lock
tmpfs 962M 16K 962M 1% /tmp
tmpfs 962M 0 962M 0% /var/tmp
tmpfs 193M 92K 193M 1% /run/user/0
В корневой файловой системе диска eMMC доступно 20 Гбайт пространства.
Подключение диска NVMe SSD #
Диск NVMe SSD, подключенный к разъему PCIe, расположенному на плате Repka Pi4 Optimal, позволит достичь заметно лучших результатов в тестах производительности.
Прежде всего, вам потребуется один из доступных на Алиэкспресс шилдов. На рис.9 показан такой шилд производства компании Waweshare с установленным на нем диском NVMe SSD объемом 128 Гбайт.
Именно такой шилд был использован автором этой статьи для проведения тестов.
Вы также можете подключить к Repka Pi4 Optimal и другие шилды аналогичного назначения (рис.10).
Для сравнительных тестов производительности мы будем использовать такой NVMe SSD, как показан на рис. 8.
Для подключения диска завершите работу Repka OS и отключите питание Repka Pi4 Optimal.
Далее нужно открыть замок разъема PCIe, потянув вверх за выступающие по бокам края замка (рис.11).
На рис.12 показан замок разъема PCIe в открытом состоянии.
Теперь нужно вставить шлейф до упора в разъем (рис.13) и закрыть замок.
Аккуратно вставьте разъем шилда в гребенку контактов микроконтроллера и закрепите шилд винтами (рис.14).
Теперь подключите все необходимые провода и загрузите Repka OS. Если загрузка OS зависла, перезапишите из образа диск SD и загрузитесь уже с него.
Проверим, что вставленный диск NVME определился:
# lspci
00:00.0 PCI bridge: Synopsys, Inc. DWC_usb3 / PCIe bridge (rev 01)
01:00.0 Non-Volatile memory controller: Device 1f40:2263 (rev 03)
Команда lspci выводит на консоль список всех устройств PCI, подключенных к системе. Первая строка сообщает, что был обнаружен мост PCI bridge, а вторая — контроллер памяти, содержимое которой сохраняется при выключении питания.
Также проверьте вывод команды dmesg, отфильтрованный по строке «nvme»:
# dmesg | grep nvme
[ 1.019993] sun50i_cpufreq_nvmem: Using CPU speed bin speed0
[ 9.532129] nvme nvme0: pci function 0000:01:00.0
[ 9.532175] nvme 0000:01:00.0: enabling device (0000 -> 0002)
[ 9.535923] nvme nvme0: missing or invalid SUBNQN field.
[ 9.545105] nvme nvme0: allocated 64 MiB host memory buffer.
[ 9.554550] nvme nvme0: 4/0/0 default/read/poll queues
[ 9.561624] nvme0n1: p1
Строка nvme0n1: p1 означает первый раздел на первом логическом диске, который управляется NVMe-контроллером nvme0.
С помощью команды lsblk вы можете получить информацию о дисках, разделах, точках монтирования и других аспектах блочных устройств:
# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
mmcblk1 179:32 0 28,9G 0 disk
mmcblk1boot0 179:64 0 4M 1 disk
mmcblk1boot1 179:96 0 4M 1 disk
nvme0n1 259:0 0 119,2G 0 disk
Здесь обнаружены следующие устройства:
mmcblk1 — диск eMMC, установленный на плате Repka Pi4 Optimal;
nvme0n1 — диск NVMe
Методика сравнения производительности дисков #
Мы будем сравнивать скорость чтения и записи, а также определять IOPS для карты SD, дисков eMMC и NVMe, а также флеш-диска, подключенного к порту USB микрокомпьютера.
Подготовка к тестированию #
Завершите работу Repka OS, отключите питание и вставьте в разъемы микрокомпьютера карту SD и Flash диск USB (рис.15).
После подключения дисков выдайте команду lsblk:
# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
sda 8:0 1 14,8G 0 disk /media/root/C835-D968
mmcblk0 179:0 0 28,8G 0 disk
└─mmcblk0p1 179:1 0 28,8G 0 part /
mmcblk1 179:32 0 28,9G 0 disk
└─mmcblk1p1 179:33 0 28,6G 0 part
mmcblk1boot0 179:64 0 4M 1 disk
mmcblk1boot1 179:96 0 4M 1 disk
nvme0n1 259:0 0 119,2G 0 disk
Здесь обнаружены следующие устройства:
sda — Flash диск, подключенный к USB;
mmcblk0 — карта SD;
mmcblk1 — диск eMMC;
nvme0n1 — диск NVMe
Так как при включении Repka Pi4 Optimal была вставлена карта SD, с нее и произошла загрузка Repka OS.
Для сравнения производительности дисков мы будем использовать команду dd, а также программы hdparm и fio.
Установите необходимые программы:
# apt update
# apt install hdparm
Измерение скорости чтения #
Команда dd позволяет измерять скорость чтения и записи при помощи блочных операций. Сначала измерим скорость чтения. Размер блока будет равен 4 Мбайт, количество блоков — 256.
Выдаем по очереди такие команды для всех дисковых устройств, подключенных к микрокомпьютеру:
# dd if=/dev/sda of=/dev/null bs=4M count=256 status=progress
# dd if=/dev/mmcblk0 of=/dev/null bs=4M count=256 status=progress
# dd if=/dev/mmcblk1 of=/dev/null bs=4M count=256 status=progress
# dd if=/dev/nvme0n1 of=/dev/null bs=4M count=256 status=progress
Первая из этих команд читает данные с Flash диска USB, вторая с карты SD, третья — с диска eMMC, и, наконец третья — с диска NVMe.
В качестве примера приведем данные, полученные для карты SD и для диска NVMe:
# dd if=/dev/mmcblk0 of=/dev/null bs=4M count=256 status=progress
1056964608 байт (1,1 GB, 1008 MiB) скопирован, 44 s, 23,9 MB/s
256+0 записей получено
256+0 записей отправлено
1073741824 байт (1,1 GB, 1,0 GiB) скопирован, 44,8734 s, 23,9 MB/s
#
# dd if=/dev/nvme0n1 of=/dev/null bs=4M count=256 status=progress
801112064 байт (801 MB, 764 MiB) скопирован, 2 s, 399 MB/s
256+0 записей получено
256+0 записей отправлено
1073741824 байт (1,1 GB, 1,0 GiB) скопирован, 2,67976 s, 401 MB/s
Результат говорит сам за себя. Скорость чтения для карты SD составила 23,9 Мбайт/сек, а для диска NVMe — 401 Мбайт/сек.
В следующем разделе статьи мы приведем полные итоги тестирования.
Другой способ тестирования в режиме чтения основан на использовании программы hdparm:
# hdparm -tT /dev/sda
# hdparm -tT /dev/mmcblk0
# hdparm -tT /dev/mmcblk1
# hdparm -tT /dev/nvme0n1
Здесь параметр t измеряет скорость последовательного чтения, а параметр T — скорость доступа к кэшу.
Проведем измерения для карты SD и диска NVMe:
# hdparm -tT /dev/mmcblk0
/dev/mmcblk0: Timing cached reads: 1826 MB in 2.00 seconds = 913.20 MB/sec Timing buffered disk reads: 68 MB in 3.01 seconds = 22.62 MB/sec
root@Repka-Pi:~# hdparm -tT /dev/nvme0n1
/dev/nvme0n1: Timing cached reads: 1852 MB in 2.00 seconds = 925.34 MB/sec Timing buffered disk reads: 1036 MB in 3.01 seconds = 344.74 MB/sec
Как видите, скорость чтения данных из кэша для карты SD составляет 913,20 Мбайт/сек., а скорость чтения данных непосредственно с диска с использованием буферизации намного ниже — 22,62 Мбайт/сек.
Для диска NVMe скорость чтения из кэша увеличилась не намного — до 925,34 Мбайт/сек., а вот скорость чтения данных с диска намного выше — 344,74 Мбайт/сек.
Измерение скорости записи #
Мы будем измерять скорость записи в файлы, размещенные на разных дисках. Если в микрокомпьютер вставлена карта SD и Flash диск USB, то будет смонтирован каталог, такой как /media/root/C835-D968, а также корневой каталог карты SD:
# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
sda 8:0 1 14,8G 0 disk /media/root/C835-D968
mmcblk0 179:0 0 28,8G 0 disk
└─mmcblk0p1 179:1 0 28,8G 0 part /
mmcblk1 179:32 0 28,9G 0 disk
└─mmcblk1p1 179:33 0 28,6G 0 part
mmcblk1boot0 179:64 0 4M 1 disk
mmcblk1boot1 179:96 0 4M 1 disk
nvme0n1 259:0 0 119,2G 0 disk
Для выполнения тестов на запись нам нужно смонтировать еще диски eMMC и NVMe.
Сначала создайте каталоги /mnt/mmcblk1p1 и /mnt/nvme0n1p1:
# mkdir /mnt/mmcblk1p1
# mkdir /mnt/nvme0n1p1
Создайте раздел nvme0n1p1 на диске nvme0n1, если его нет, с помощью утилиты parted:
# parted /dev/nvme0n1
GNU Parted 3.4
Используется /dev/nvme0n1
Добро пожаловать в GNU Parted! Наберите 'help' для просмотра списка команд.
(parted) mklabel gpt
(parted) mkpart primary ext4 0% 100%
(parted) quit
Информация: Не забудьте обновить /etc/fstab.
Созданный раздел нужно проверить командой fdisk:
# fdisk -l /dev/nvme0n1
Диск /dev/nvme0n1: 119,24 GiB, 128035676160 байт, 250069680 секторов
Disk model: Netac NVMe SSD 128GB
Единицы: секторов по 1 * 512 = 512 байт
Размер сектора (логический/физический): 512 байт / 512 байт
Размер I/O (минимальный/оптимальный): 512 байт / 512 байт
Тип метки диска: gpt
Идентификатор диска: 7189737C-892B-4E78-A1EE-5EB5BE81C068
Устр-во начало Конец Секторы Размер Тип
/dev/nvme0n1p1 2048 250068991 250066944 119,2G Файловая система Linux
Создайте в этом разделе файловую систему:
# mkfs.ext4 /dev/nvme0n1p1
Смонтируйте разделы mmcblk1p1 и nvme0n1p1 в созданные каталоги:
# mount /dev/mmcblk1p1 /mnt/mmcblk1p1
# mount /dev/nvme0n1p1 /mnt/nvme0n1p1
Проверьте, что разделы смонтировались:
# df -h
Файл.система Размер Использовано Дост Использовано% Cмонтировано в
/dev/root 29G 6,2G 21G 23% /
tmpfs 962M 0 962M 0% /dev/shm
tmpfs 385M 1,5M 384M 1% /run
tmpfs 5,0M 4,0K 5,0M 1% /run/lock
tmpfs 962M 16K 962M 1% /tmp
tmpfs 962M 0 962M 0% /var/tmp
tmpfs 193M 96K 193M 1% /run/user/0
/dev/sda 15G 60M 15G 1% /media/root/C835-D968
/dev/mmcblk1p1 28G 7,3G 20G 28% /mnt/mmcblk1p1
/dev/nvme0n1p1 117G 24K 111G 1% /mnt/nvme0n1p1
Для того чтобы раздел диска NVMe монтировался автоматически при загрузке ОС, вы можете после завершения тестов и загрузки с диска eMMC добавить следующую запись в конец файла /etc/fstab, например, с помощью редактора vim:
/dev/nvme0n1p1 /mnt/nvme0n1p1 ext4 defaults 0 2
После выполнения всех описанных выше действий по монтированию проверьте точки монтирования командой lsblk:
# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
sda 8:0 1 14,8G 0 disk /media/root/C835-D968
mmcblk0 179:0 0 28,8G 0 disk
└─mmcblk0p1 179:1 0 28,8G 0 part /
mmcblk1 179:32 0 28,9G 0 disk
└─mmcblk1p1 179:33 0 28,6G 0 part /mnt/mmcblk1p1
mmcblk1boot0 179:64 0 4M 1 disk
mmcblk1boot1 179:96 0 4M 1 disk
nvme0n1 259:0 0 119,2G 0 disk
└─nvme0n1p1 259:2 0 119,2G 0 part /mnt/nvme0n1p1
Чтобы избежать разрушения файловой системы в процессе тестирования на запись, будем создавать временные файлы в этих разделах:
# dd if=/dev/zero of=/media/root/C835-D968/testfile bs=4M count=100 oflag=direct
# dd if=/dev/zero of=/mnt/mmcblk0p1/testfile bs=4M count=100
# dd if=/dev/zero of=/mnt/mmcblk1p1/testfile bs=4M count=100 oflag=direct
# dd if=/dev/zero of=/mnt/nvme0n1p1/testfile bs=4M count=100 oflag=direct
Если измерить скорость записи на карту SD и на диск NVMe, то получим значения 25,4 Мбайт/сек и 352 Мбайт/сек, соответственно:
# dd if=/dev/zero of=/mnt/mmcblk0p1/testfile bs=4M count=100
100+0 записей получено
100+0 записей отправлено
419430400 байт (419 MB, 400 MiB) скопирован, 16,5454 s, 25,4 MB/s
# dd if=/dev/zero of=/mnt/nvme0n1p1/testfile bs=4M count=100 oflag=direct
100+0 записей получено
100+0 записей отправлено
419430400 байт (419 MB, 400 MiB) скопирован, 1,19287 s, 352 MB/s
При тестировании на запись диска eMMC получились такие результаты:
# dd if=/dev/zero of=/mnt/mmcblk1p1/testfile bs=4M count=100
100+0 записей получено
100+0 записей отправлено
419430400 байт (419 MB, 400 MiB) скопирован, 9,58353 s, 43,8 MB/s
Хуже всего получились результаты тестирования Flash диска USB:
# dd if=/dev/zero of=/media/root/C835-D968/testfile bs=4M count=100
100+0 записей получено
100+0 записей отправлено
419430400 байт (419 MB, 400 MiB) скопирован, 30,85 s, 13,6 MB/s
Тестирование ввода-вывода помощью fio #
Утилита fio предназначена для нагрузочного тестирования дисковой подсистемы и может выполнять разнообразные тесты.
Установите эту утилиту:
# apt install fio
Запустите из консоли команду тестирования карты SD, с которой мы загрузили Repka OS. Она выведет довольно обширную информацию:
# fio --rw=write --ioengine=sync --fdatasync=1 --directory=/ --size=22m --bs=2300 --name=mytest_mmcblk0p1
mytest_mmcblk0p1: (g=0): rw=write, bs=(R) 2300B-2300B, (W) 2300B-2300B, (T) 2300B-2300B, ioengine=sync, iodepth=1
fio-3.28
Starting 1 process
mytest_mmcblk0p1: Laying out IO file (1 file / 22MiB)
Jobs: 1 (f=1): [W(1)][97.1%][w=664KiB/s][w=296 IOPS][eta 00m:01s]
mytest_mmcblk0p1: (groupid=0, jobs=1): err= 0: pid=3166: Thu Dec 5 14:09:25 2024 write: IOPS=287, BW=646KiB/s (661kB/s)(22.0MiB/34871msec); 0 zone resets clat (usec): min=10, max=678, avg=39.94, stdev=19.36 lat (usec): min=10, max=678, avg=40.87, stdev=19.41 clat percentiles (usec): | 1.00th=[ 23], 5.00th=[ 31], 10.00th=[ 32], 20.00th=[ 32], | 30.00th=[ 33], 40.00th=[ 34], 50.00th=[ 35], 60.00th=[ 37], | 70.00th=[ 42], 80.00th=[ 46], 90.00th=[ 51], 95.00th=[ 57], | 99.00th=[ 151], 99.50th=[ 174], 99.90th=[ 219], 99.95th=[ 231], | 99.99th=[ 326] bw ( KiB/s): min= 570, max= 673, per=100.00%, avg=646.17, stdev=18.91, samples=69 iops : min= 254, max= 300, avg=287.96, stdev= 8.45, samples=69 lat (usec) : 20=0.97%, 50=86.82%, 100=10.72%, 250=1.47%, 500=0.02% lat (usec) : 750=0.01% fsync/fdatasync/sync_file_range: sync (usec): min=728, max=46607, avg=3424.35, stdev=2369.13 sync percentiles (usec): | 1.00th=[ 824], 5.00th=[ 840], 10.00th=[ 840], 20.00th=[ 865], | 30.00th=[ 1385], 40.00th=[ 3556], 50.00th=[ 3621], 60.00th=[ 4113], | 70.00th=[ 4146], 80.00th=[ 4490], 90.00th=[ 7242], 95.00th=[ 7308], | 99.00th=[ 8094], 99.50th=[11338], 99.90th=[16057], 99.95th=[18220], | 99.99th=[36963] cpu : usr=0.58%, sys=4.09%, ctx=21280, majf=0, minf=27 IO depths : 1=200.0%, 2=0.0%, 4=0.0%, 8=0.0%, 16=0.0%, 32=0.0%, >=64=0.0% submit : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0% complete : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0% issued rwts: total=0,10029,0,0 short=10029,0,0,0 dropped=0,0,0,0 latency : target=0, window=0, percentile=100.00%, depth=1
Run status group 0 (all jobs): WRITE: bw=646KiB/s (661kB/s), 646KiB/s-646KiB/s (661kB/s-661kB/s), io=22.0MiB (23.1MB), run=34871-34871msec
Disk stats (read/write): mmcblk0: ios=0/21155, merge=0/11184, ticks=0/32558, in_queue=32558, util=93.69%
Эта команда вывела на консоль основные параметры, данные по перцентилям латентности, по времени синхронизации и много чего еще. Подробнее о формате параметров и выдаче команды вы можете почитать в ее описании.
Чтобы получить метрики всех дисков (SD, eMMC, NVMe и Flash USB) запустите по очереди команды:
# fio --rw=write --ioengine=sync --fdatasync=1 --directory=/mnt/mmcblk0p1/ --size=22m --bs=2300 --name=mytest
# fio --rw=write --ioengine=sync --fdatasync=1 --directory=/mnt/mmcblk1p1 --size=22m --bs=2300 --name=mytest_mmcblk1p1
# fio --rw=write --ioengine=sync --fdatasync=1 --directory=/mnt/nvme0n1p1 --size=22m --bs=2300 --name=mytest_nvme0n1p1
# fio --rw=write --ioengine=sync --fdatasync=1 --directory=/media/root/C835-D968 --size=22m --bs=2300 --name=mytest_usb
Итоговые результаты тестирования #
Ниже мы представили итоги тестирования дисков, установленных в микрокомпьютере и подключенных к нему.
На рис.16 показаны основные метрики, собранные для объема данных 22 Мбайт программой fio.
Как видите, диск eMMC, установленный на плате Repka Pi4 Optimal, показал самые высокие результаты по пропускной способности. Вслед за ним идет диск NVMe, подключенный через интерфейс PCIe.
Что касается IOPS (количество операций ввода/вывода в секунду), тут снова лидирует eMMC, а вслед за ним идет диск NVMe.
Диски SD и диск Flash, подключенный через USB, ожидаемо занимает последние две позиции.
На рис.17 показаны результаты измерений латентности. Это время, затраченное на отправку запроса и выполнение операции диском.
Видно, что по параметру максимальной латентности и среднему отклонению латентности первое место занимает диск NVMe. Что же касается диска eMMC, то у него лучше всего средняя латентность.
Карта SD и Flash диск USB сильно уступают по всем параметрам.
На рис.18 приведены перцентили латентности — статистические метрики, показывающие распределение времени выполнения операций ввода-вывода (I/O). На графике не показаны данные по латентности для очень медленного диска Flash USB.
По результатам анализа видно, что диски NVMe и eMMC демонстрируют значительно лучшую производительность по сравнению с картой SD и диском Flash USB.
Параметр IOPS на NVMe и eMMC также значительно с SD и тем более, с диском Flash USB.
Также было установлено, что латентность намного ниже для NVMe и eMMC. Перцентили задержки показывают, что большинство операций ввода-вывода выполняются за разумное время, с редкими всплесками задержки.
На рис.19 показаны результаты тестирования скорости чтения и записи с помощью команды dd.
В целом они коррелируют с результатами измерений программой fio. По скорости записи в файл победила карта SD, а по скорости чтения файла — диск NVMe.
Выводы #
Появление в продаже микрокомпьютера Repka Pi4 Optimal, способного работать как с диском eMMC, установленном на его плате, так и с дисками NVMe, подключенными через интерфейс PCIe — знаменательное событие.
Теперь можно увеличить скорость и надежность работы микрокомпьютера, переписав образ Repka OS с карты SD на диск eMMC. При этом Repka OS будет загружаться с более надежного в работе диска eMMC.
Подключив быстродействующий диск NVMe, можно не только увеличить объем доступной дисковой памяти, но и повысить скорость работы микрокомпьютера в целом.
Проведенные в ходе работы над этой статьей исследования показали заметное превосходство дисков eMMC и NVMe над картами SD и диском Flash, подключенным к порту USB. Теперь микрокомпьютер Repka Pi4 Optimal можно использовать во многих случаях в качестве десктопа, а также для создания быстродействующей системы хранения данных.
Учитывая, что Repka Pi4 Optimal внесен в реестр Минпромторга, с дисками eMMC и NVMe он вполне пригоден и для промышленного применения.
Полезные ссылки #
Комментарии (4)
nbkgroup
14.01.2025 09:56Скажите, а зачем покупать "Репку", если оригинальные китайские одноплатники на AllWinner H6 стоят в 2-3 раза дешевле и подерживаются в Armbian?
mpa4b
14.01.2025 09:56превосходство дисков eMMC и NVMe над картами SD и диском Flash, подключенным к порту USB
Помоему главное превосходство, с учётом того, что с nvme оно не грузится, а именно возможность в любой момент воткнуть что nvme, что sdкарту в ридер в писюк и записать/забекапить/заменить убитый диск/карту -- у еммц как раз-таки и отсутствует. А раз оно может грузиться с sd, а далее иметь rootfs на нвме, то "превосходство" emmc вообще почти теряется, остаётся только в виде чуть более быстрой подгрузки ядра после включения.
everis
Небольшое уточнение.
А что в этом "новом российском одноплатнике" - действительно российское из компонентов?
Kandimus
Название жеж. Прям скрепное!!!