Компания StarFive предоставила для тестирования и обзора одноплатный компьютер VisionFive 2 на RISC-V . В распоряжении оказалась модель с двумя портами Gigabit Ethernet и 8 ГБ оперативной памяти. В этом материале представлен опыт работы с образом Debian 12 «bookworm». Стоит отметить, что это не полноценный обзор, поскольку плата на текущем этапе не готова для всесторонней оценки. Она ориентирована на ранних последователей, и существует множество нерешенных проблем. В статье описано, что работает, а что нет, а также сложности, возникшие при установке ОС…
Распаковка VisionFive 2
Плата поставляется в упаковке с надписью «Embrace change, embrace the future».
На нижней стороне коробки размещены полезные ссылки и QR-коды. Наиболее важными являются репозиторий на GitHub с исходным кодом и инструкциями по сборке образа (рекомендуется Ubuntu 16.04, 18.04 или 20.04 x86_64), а также раздел форума RVspace, посвященный этой плате , где можно найти руководства по началу работы и отзывы других пользователей.
Компоновка платы и компоненты выглядят точно так же, как и при запуске на Kickstarter, за исключением того, что данная плата имеет версию VisionFive 2 V1.3B.
В центре расположен четырехъядерный процессор StarFive JH7110 на архитектуре RISC-V, микросхема оперативной памяти BIWIN BWMZCX32H2A-64G объемом 8 ГБ, мост VL805 PCIe to USB 3.0 (аналогичный используемому в Raspberry Pi 4), два трансивера Gigabit Ethernet MotorComm YT8531C и PMIC AXP15060. Все основные порты выведены на одну сторону: 3.5-мм аудиоразъем, четыре порта USB 3.0, выход HDMI 2.0 и два порта Gigabit Ethernet.
На нижней стороне расположен слот для карт MicroSD, который используется для загрузки ОС, разъемы для модуля eMMC и слот M.2 для NVMe SSD.
Установка Debian 12 на VisionFive 2
Образы Debian доступны на сайте StarFive с ссылками на Baidu Drive или Google Drive. Последний на данный момент образ — Image-69, выпущенный в конце декабря.
Несжатый образ не помещался на карту MicroSD объемом 8 ГБ, поэтому использовалась карта на 32 ГБ, процесс записи занял около 45 минут. Вероятно, карта скоро выйдет из строя, и придется приобретать новую партию. Постоянная трата времени на карты памяти, которые служат всего несколько месяцев, — одна из причин, по которой не нравятся платы, загружающиеся только с MicroSD …
Затем были подключены USB-клавиатура, USB-мышь, кабель Ethernet и блок питания с разъемом USB Type-C. Сначала использовался адаптер 5В/2А, но этого оказалось недостаточно — плата постоянно перезагружалась. Блок питания Raspberry Pi 5В/3А также не справился, поэтому был взят GaN-адаптер на 100 Вт, чтобы исключить проблемы с питанием. Также были добавлены проставки для приподнимания платы, как рекомендуется.
Однако плата не загружалась, и в анонсе Image 69 на форуме было обнаружено объяснение:
Перед использованием этого образа Debian необходимо обновить SPL 46 и U-Boot 44 в соответствии с руководством: глава 4.3 77 . Это очень важно.
Поиск нужной документации занял некоторое время, поскольку она разбросана по разным источникам на китайском и/или английском языках. Лучшим вариантом оказалась страница статуса публикации документов с англоязычной документацией. Вход через SSH возможен, но учитывая вероятность проблем с загрузкой, рекомендуется подключить отладочную плату с последовательным интерфейсом — именно так была обнаружена проблема с циклической перезагрузкой, упомянутая выше.
Перед установкой Debian 12 необходимо обновить загрузчики SPL и U-boot на VisionFive 2, а также использовать минимальный образ Linux sdcard.img. Эти файлы можно найти на GitHub , использовались файлы из состава VisionFive2 Software v2.8.0. Первым шагом была запись образа sdcard.img на карту MicroSD. Этот образ помещается на карту объемом 8 ГБ.
Starting NFS mountd: rpc.mountd: svc_tli_create: could not open connection for udp6
rpc.mountd: svc_tli_create: could not open connection for tcp6
rpc.mountd: svc_tli_create: could not open connection for udp6
rpc.mountd: svc_tli_create: could not open connection for tcp6
rpc.mountd: svc_tli_create: could not open connection for udp6
rpc.mountd: svc_tli_create: could not open connection for tcp6
OK
Starting isp_ctrl_daemon.sh: OK
Starting DHCP server: FAIL
Welcome to Buildroot
buildroot login:
Войти в систему можно под именем пользователя «root» и паролем «starfive». Для любознательных приведен журнал загрузки .
Проверим подключение к сети:
# ifconfig
eth0 Link encap:Ethernet HWaddr 6C:CF:39:00:2A:F1
inet addr:192.168.31.114 Bcast:192.168.31.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:41 errors:0 dropped:0 overruns:0 frame:0
TX packets:3 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:4630 (4.5 KiB) TX bytes:730 (730.0 B)
Interrupt:39
Все в порядке. Теперь можно загрузить последние версии бинарных файлов SPL и U-boot с GitHub и передать их на плату через SCP с хостовой машины:
$ scp u-boot-spl.bin.normal.out root@192.168.31.114:~
$ scp visionfive2_fw_payload.img root@192.168.31.114:~
В терминале VisionFive 2 проверим разделы:
# cat /proc/mtd
dev: size erasesize name
mtd0: 00020000 00001000 "spl"
mtd1: 00300000 00001000 "uboot"
mtd2: 00100000 00001000 "data"
Все выглядит правильно, обновим бинарный файл SPL с помощью утилиты flashcp:
# flashcp -v u-boot-spl.bin.normal.out /dev/mtd0
Erasing blocks: 32/32 (100%)
Writing data: 127k/127k (100%)
Verifying data: 127k/127k (100%)
а затем U-boot:
# flashcp -v visionfive2_fw_payload.img /dev/mtd1
Erasing blocks: 683/683 (100%)
Writing data: 2731k/2731k (100%)
Verifying data: 2731k/2731k (100%)
Выключите плату VisionFive 2 и замените карту MicroSD на ту, где записан образ Debian 12. Образ удалось «успешно» загрузить.
Первая загрузка заняла более 3 минут, поэтому потребуется терпение:
[ OK ] Finished Permit User Sessions.
Starting Light Display Manager...
Starting Hold until boot process finishes up...
Starting Hostname Service...
[ 184.478849] starfive-eth-plat 16030000.ethernet eth0: PHY [stmmac-0:00] driver [YT8531 Gigabit Ethernet] (irq=POLL)
[ 184.496693] starfive-eth-plat 16030000.ethernet eth0: Register MEM_TYPE_PAGE_POOL RxQ-0
[ 184.504916] dwmac4: Master AXI performs fixed burst length
[ 184.510487] starfive-eth-plat 16030000.ethernet eth0: No Safety Features support found
[ 184.518472] starfive-eth-plat 16030000.ethernet eth0: IEEE 1588-2008 Advanced Timestamp supported
[ 184.528233] starfive-eth-plat 16030000.ethernet eth0: configuring for phy/rgmii-id link mode
[ 184.555947] vs_gem_dumb_create size = 1000
[ 184.560082] Allocated coherent memory, vaddr: 0xFFFFFFE1FB40A100, paddr: 0x1017B8000
[ 184.560475] starfive-eth-plat 16040000.ethernet eth1: PHY [stmmac-1:00] driver [YT8531 Gigabit Ethernet] (irq=POLL)
[ 184.567929] ====> vs_gem_alloc_buf, 162.vs_obj->get_pages = 0
[ 184.584371] starfive-eth-plat 16040000.ethernet eth1: Register MEM_TYPE_PAGE_POOL RxQ-0
[ 185.040836] PVR_K: 410: RGX Firmware image 'rgx.fw.36.50.54.182' loaded
Debian GNU/Linux
Debian GNU/Linux bookworm/sid starfive hvc0
starfive login: bookworm/sid starfive ttyS0
starfive login: [ 185.596073] starfive-eth-plat 16040000.ethernet: Failed to reset the dma
Последующие загрузки происходят быстрее — около 90 секунд.
Еще одна проблема: экран телевизора остается черным, хотя телевизор определяет подключение кабеля HDMI, а в последовательной консоли фиксируется активность, связанная с HDMI:
[ 112.068695] innohdmi-starfive 29590000.hdmi: inno_hdmi_phy_clk_set_rate rate 148500000 tmdsclk 148500000
[ 112.178204] innohdmi-starfive 29590000.hdmi: inno_hdmi_phy_clk_set_rate hdmi->pre_cfg->pixclock = 148500000
[ 112.187959] innohdmi-starfive 29590000.hdmi: inno_hdmi_phy_clk_set_rate hdmi->pre_cfg->tmdsclock = 148500000
[ 112.197795] innohdmi-starfive 29590000.hdmi: inno_hdmi_phy_clk_set_rate hdmi->pre_cfg->prediv = 1
[ 112.206677] innohdmi-starfive 29590000.hdmi: inno_hdmi_phy_clk_set_rate hdmi->pre_cfg->fbdiv = 99
[ 112.215556] innohdmi-starfive 29590000.hdmi: inno_hdmi_phy_clk_set_rate hdmi->pre_cfg->tmds_div_a = 1
[ 112.224768] innohdmi-starfive 29590000.hdmi: inno_hdmi_phy_clk_set_rate hdmi->pre_cfg->tmds_div_b = 1
[ 112.233996] innohdmi-starfive 29590000.hdmi: inno_hdmi_phy_clk_set_rate hdmi->pre_cfg->tmds_div_c = 1
[ 112.243223] innohdmi-starfive 29590000.hdmi: inno_hdmi_phy_clk_set_rate hdmi->pre_cfg->pclk_div_a = 1
[ 112.252452] innohdmi-starfive 29590000.hdmi: inno_hdmi_phy_clk_set_rate hdmi->pre_cfg->pclk_div_b = 2
[ 112.261680] innohdmi-starfive 29590000.hdmi: inno_hdmi_phy_clk_set_rate hdmi->pre_cfg->pclk_div_c = 2
[ 112.270908] innohdmi-starfive 29590000.hdmi: inno_hdmi_phy_clk_set_rate hdmi->pre_cfg->pclk_div_d = 2
[ 112.280136] innohdmi-starfive 29590000.hdmi: inno_hdmi_phy_clk_set_rate hdmi->pre_cfg->vco_div_5_en = 0
[ 112.289545] innohdmi-starfive 29590000.hdmi: inno_hdmi_phy_clk_set_rate hdmi->pre_cfg->fracdiv = 0
[ 112.298520] innohdmi-starfive 29590000.hdmi: *******************************************************
[ 112.307660] innohdmi-starfive 29590000.hdmi: inno_hdmi_phy_clk_set_rate hdmi->post_cfg->tmdsclock = 148500000
[ 112.317583] innohdmi-starfive 29590000.hdmi: inno_hdmi_phy_clk_set_rate hdmi->post_cfg->prediv = 1
[ 112.326559] innohdmi-starfive 29590000.hdmi: inno_hdmi_phy_clk_set_rate hdmi->post_cfg->fbdiv = 20
[ 112.335520] innohdmi-starfive 29590000.hdmi: inno_hdmi_phy_clk_set_rate hdmi->post_cfg->postdiv = 1
[ 112.344581] innohdmi-starfive 29590000.hdmi: inno_hdmi_phy_clk_set_rate hdmi->post_cfg->post_div_en = 3
[ 112.353989] innohdmi-starfive 29590000.hdmi: inno_hdmi_phy_clk_set_rate hdmi->post_cfg->version = 3
При проверке на другом дисплее изображение также не появилось. Оказалось, что карта MicroSD вышла из строя:
Begin: Running /scripts/local-premount ... done.
Warning: fsck not present, so skipping root file system
[ 8.476889] JBD2: Invalid checksum found in transaction 3875
[ 8.482634] JBD2: recovery failed
[ 8.486024] EXT4-fs (mmcblk1p3): error loading journal
mount: mounting /dev/mmcblk1p3 on /root failed: Input/output error
Failed to mount /dev/mmcblk1p3 as root file system.
BusyBox v1.35.0 (Debian 1:1.35.0-1) built-in shell (ash)
Enter 'help' for a list of built-in commands.
(initramfs)
Пришлось взять карту из камеры наблюдения и заказать пять карт MicroSD класса A1 для будущих обзоров…
После этого загрузка прошла нормально, но проблема с черным экраном HDMI сохранилась. Вероятная причина:
[ 695.829577] lightdm-gtk-gre[1535]: unhandled signal 11 code 0x1 at 0x000000406a220cc0 in libgtk-3.so.0.2404.30[3fbbb17000+6a3000]
Произошла ошибка сегментации… У других пользователей возникала аналогичная проблема: либо черный экран с указателем мыши, либо без него. Сообщается, что это связано с отсутствием поддержки дисплеев 4K, и проблему можно обойти, принудительно установив разрешение 1920×1080 в конфигурации lightdm (/etc/lightdm/lightdm.conf), добавив следующую строку в раздел [Seat:*]:
display-setup-script=xrandr -s 1920x1080
Мои дисплеи уже работают с разрешениями 1920×1080 или 1280×800, но это не помогло. Был создан пост на форуме , где можно следить за развитием ситуации.
В этой части обзора VisionFive 2 тестирование ограничено работой в headless-режиме. Вторая часть, вероятно, будет написана после выхода нового образа Debian, когда станет доступен графический интерфейс.
Информация о системе VisionFive 2
Системную информацию можно проверить с помощью нескольких команд:
root@starfive:~# cat /etc/issue
Debian GNU/Linux bookworm/sid \n \l
root@starfive:~# uname -a
Linux starfive 5.15.0-starfive #1 SMP Mon Dec 19 07:56:37 EST 2022 riscv64 GNU/Linux
root@starfive:~# inxi -Fc0
perl: warning: Setting locale failed.
perl: warning: Please check that your locale settings:
LANGUAGE = (unset),
LC_ALL = (unset),
LC_ADDRESS = "en_GB.UTF-8",
LC_NAME = "en_GB.UTF-8",
LC_MONETARY = "en_GB.UTF-8",
LC_PAPER = "en_GB.UTF-8",
LC_IDENTIFICATION = "en_GB.UTF-8",
LC_TELEPHONE = "en_GB.UTF-8",
LC_MEASUREMENT = "en_GB.UTF-8",
LC_TIME = "en_GB.UTF-8",
LC_NUMERIC = "en_GB.UTF-8",
LANG = "en_US.UTF-8"
are supported and installed on your system.
perl: warning: Falling back to the standard locale ("C").
System:
Host: starfive Kernel: 5.15.0-starfive arch: riscv64 bits: 64 Console: pty pts/0
Distro: Debian GNU/Linux bookworm/sid
Machine:
Type: RISCV System: StarFive VisionFive V2 details: N/A serial: VF7110B1-2253-D008E000-00001654
CPU:
Info: single core model: N/A variant: u74-mc bits: 64 type: MT cache: L2: 2 MiB
Speed (MHz): avg: 375 min/max: 375/1500 cores: 1: 375 2: 375 3: 375 4: 375
Graphics:
Device-1: img-gpu driver: pvrsrvkm v: kernel
Device-2: jh7110-hdmi driver: innohdmi_starfive v: N/A
Device-3: jh7110-display driver: starfive v: N/A
Display: server: X.org v: 1.21.1.3 driver: N/A note: X driver n/a tty: 203x53
Message: GL data unavailable in console for root.
Audio:
Device-1: jh7110-pwmdac driver: starfive_pwmdac
Device-2: jh7110-hdmi driver: innohdmi_starfive
Device-3: simple-audio-card driver: N/A
Device-4: simple-audio-card driver: asoc_simple_card
Device-5: simple-audio-card driver: N/A
Device-6: simple-audio-card driver: asoc_simple_card
Device-7: simple-audio-card driver: N/A
Device-8: simple-audio-card driver: N/A
Device-9: simple-audio-card driver: N/A
Sound Server-1: ALSA v: k5.15.0-starfive running: yes
Network:
Device-1: dwmac driver: starfive_eth_plat
IF: eth0 state: up speed: 1000 Mbps duplex: full mac: 6c:cf:39:00:2a:f1
Device-2: dwmac driver: starfive_eth_plat
IF: eth1 state: down mac: 6c:cf:39:00:2a:f2
Drives:
Local Storage: total: 30.47 GiB used: 11.9 GiB (39.0%)
ID-1: /dev/mmcblk1 vendor: Apacer model: APPSD size: 30.47 GiB
Partition:
ID-1: / size: 15.16 GiB used: 11.88 GiB (78.3%) fs: ext4 dev: /dev/mmcblk1p3
ID-2: /boot size: 99.8 MiB used: 22 MiB (22.0%) fs: vfat dev: /dev/mmcblk1p2
Swap:
Alert: No swap data was found.
Sensors:
System Temperatures: cpu: 45.1 C mobo: N/A
Fan Speeds (RPM): N/A
Info:
Processes: 113 Uptime: 19m Memory: 7.74 GiB used: 237.6 MiB (3.0%) Init: systemd
target: graphical (5) Shell: Bash inxi: 3.3.18
root@starfive:~# df -h
free -mh
Filesystem Size Used Avail Use% Mounted on
udev 3.7G 0 3.7G 0% /dev
tmpfs 793M 3.0M 790M 1% /run
/dev/mmcblk1p3 16G 13G 3.1G 80% /
tmpfs 3.9G 0 3.9G 0% /dev/shm
tmpfs 5.0M 4.0K 5.0M 1% /run/lock
/dev/mmcblk1p2 100M 22M 78M 23% /boot
tmpfs 793M 24K 793M 1% /run/user/0
root@starfive:~# free -mh
total used free shared buff/cache available
Mem: 7.7Gi 206Mi 7.4Gi 2.0Mi 116Mi 7.5Gi
Swap: 0B 0B 0B
root@starfive:~#
Все компоненты определяются корректно: четырехъядерный процессор JH7110, 8 ГБ оперативной памяти, карта SD на 32 ГБ, а также драйверы для дисплея, аудио и Ethernet.
Тестирование возможностей VisionFive 2
Из-за проблем с выводом изображения тестирование HDMI и других графических функций с этим образом невозможно, но можно проверить работу в headless-режиме.
GPIO
GPIO отображаются в sysfs:
root@starfive:~# ls -l /dev/gpiochip*
crw------- 1 root root 254, 0 Jun 10 2022 /dev/gpiochip0
crw------- 1 root root 254, 1 Jun 10 2022 /dev/gpiochip1
Попробуем переключить GPIO 44 (контакт 40 на разъеме GPIO):
cd /sys/class/gpio
echo 44 > export
gpio44/
echo out > direction
echo 1 > value
Мультиметр показал 3.27 В при измерении между контактами 40 и 39. Установим значение в ноль:
echo 0 > value
Мультиметр показывает 0.00 В. GPIO работает корректно. В документации описано использование интерфейсов I2C, SPI, PWM и UART.
Ethernet
Протестируем два порта Gigabit Ethernet с помощью iperf3, установленного через apt.
LAN1 (на краю платы):
- Отправка:
iperf3 -t 60 -c 192.168.31.114 -i 10
Connecting to host 192.168.31.114, port 5201
[ 5] local 192.168.31.199 port 53702 connected to 192.168.31.114 port 5201
[ ID] Interval Transfer Bitrate Retr Cwnd
[ 5] 0.00-10.00 sec 1.10 GBytes 943 Mbits/sec 0 421 KBytes
[ 5] 10.00-20.00 sec 1.10 GBytes 942 Mbits/sec 0 612 KBytes
[ 5] 20.00-30.00 sec 1.10 GBytes 941 Mbits/sec 0 612 KBytes
[ 5] 30.00-40.00 sec 1.10 GBytes 942 Mbits/sec 0 612 KBytes
[ 5] 40.00-50.00 sec 1.10 GBytes 941 Mbits/sec 0 993 KBytes
[ 5] 50.00-60.00 sec 1.10 GBytes 942 Mbits/sec 0 993 KBytes
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval Transfer Bitrate Retr
[ 5] 0.00-60.00 sec 6.58 GBytes 942 Mbits/sec 0 sender
[ 5] 0.00-60.00 sec 6.57 GBytes 941 Mbits/sec receiver
iperf Done.
- Загрузка:
iperf3 -t 60 -c 192.168.31.114 -i 10 -R
Connecting to host 192.168.31.114, port 5201
Reverse mode, remote host 192.168.31.114 is sending
[ 5] local 192.168.31.199 port 38484 connected to 192.168.31.114 port 5201
[ ID] Interval Transfer Bitrate
[ 5] 0.00-10.00 sec 1.09 GBytes 940 Mbits/sec
[ 5] 10.00-20.00 sec 1.10 GBytes 942 Mbits/sec
[ 5] 20.00-30.00 sec 1.10 GBytes 942 Mbits/sec
[ 5] 30.00-40.00 sec 1.10 GBytes 942 Mbits/sec
[ 5] 40.00-50.00 sec 1.10 GBytes 942 Mbits/sec
[ 5] 50.00-60.00 sec 1.10 GBytes 942 Mbits/sec
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval Transfer Bitrate Retr
[ 5] 0.00-60.00 sec 6.58 GBytes 942 Mbits/sec 0 sender
[ 5] 0.00-60.00 sec 6.57 GBytes 941 Mbits/sec receiver
iperf Done.
- Полнодуплексный режим (двунаправленный):
iperf3 -t 60 -c 192.168.31.114 -i 10 --bidir
Connecting to host 192.168.31.114, port 5201
[ 5] local 192.168.31.199 port 60996 connected to 192.168.31.114 port 5201
[ 7] local 192.168.31.199 port 32776 connected to 192.168.31.114 port 5201
[ ID][Role] Interval Transfer Bitrate Retr Cwnd
[ 5][TX-C] 0.00-10.00 sec 1.06 GBytes 908 Mbits/sec 0 1.33 MBytes
[ 7][RX-C] 0.00-10.00 sec 459 MBytes 385 Mbits/sec
[ 5][TX-C] 10.00-20.00 sec 1.05 GBytes 900 Mbits/sec 57 403 KBytes
[ 7][RX-C] 10.00-20.00 sec 460 MBytes 386 Mbits/sec
[ 5][TX-C] 20.00-30.00 sec 298 MBytes 250 Mbits/sec 3 410 KBytes
[ 7][RX-C] 20.00-30.00 sec 978 MBytes 821 Mbits/sec
[ 5][TX-C] 30.00-40.00 sec 841 MBytes 706 Mbits/sec 5 570 KBytes
[ 7][RX-C] 30.00-40.00 sec 634 MBytes 532 Mbits/sec
[ 5][TX-C] 40.00-50.00 sec 895 MBytes 751 Mbits/sec 11 710 KBytes
[ 7][RX-C] 40.00-50.00 sec 586 MBytes 491 Mbits/sec
[ 5][TX-C] 50.00-60.00 sec 414 MBytes 347 Mbits/sec 5 677 KBytes
[ 7][RX-C] 50.00-60.00 sec 895 MBytes 751 Mbits/sec
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID][Role] Interval Transfer Bitrate Retr
[ 5][TX-C] 0.00-60.00 sec 4.49 GBytes 644 Mbits/sec 81 sender
[ 5][TX-C] 0.00-60.00 sec 4.49 GBytes 642 Mbits/sec receiver
[ 7][RX-C] 0.00-60.00 sec 3.92 GBytes 561 Mbits/sec 267 sender
[ 7][RX-C] 0.00-60.00 sec 3.92 GBytes 561 Mbits/sec receiver
iperf Done.
Результаты идеальны в обоих направлениях, хотя и ниже максимальных в полнодуплексном режиме. Они схожи с результатами на некоторых Arm-платформах, таких как Khadas VIM4 SBC .
LAN2 (рядом с портом HDMI):
- Загрузка:
iperf3 -t 60 -c 192.168.31.115 -i 10
Connecting to host 192.168.31.115, port 5201
[ 5] local 192.168.31.199 port 57690 connected to 192.168.31.115 port 5201
[ ID] Interval Transfer Bitrate Retr Cwnd
[ 5] 0.00-10.00 sec 1.10 GBytes 942 Mbits/sec 0 424 KBytes
[ 5] 10.00-20.00 sec 1.10 GBytes 941 Mbits/sec 0 424 KBytes
[ 5] 20.00-30.00 sec 1.10 GBytes 942 Mbits/sec 0 936 KBytes
[ 5] 30.00-40.00 sec 1.10 GBytes 942 Mbits/sec 0 936 KBytes
[ 5] 40.00-50.00 sec 1.10 GBytes 942 Mbits/sec 16 749 KBytes
[ 5] 50.00-60.00 sec 1.09 GBytes 940 Mbits/sec 130 296 KBytes
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval Transfer Bitrate Retr
[ 5] 0.00-60.00 sec 6.58 GBytes 941 Mbits/sec 146 sender
[ 5] 0.00-60.00 sec 6.57 GBytes 941 Mbits/sec receiver
iperf Done.
- Отправка:
iperf3 -t 60 -c 192.168.31.115 -i 10 -R
Connecting to host 192.168.31.115, port 5201
Reverse mode, remote host 192.168.31.115 is sending
[ 5] local 192.168.31.199 port 48018 connected to 192.168.31.115 port 5201
[ ID] Interval Transfer Bitrate
[ 5] 0.00-10.00 sec 1.09 GBytes 940 Mbits/sec
[ 5] 10.00-20.00 sec 1.09 GBytes 941 Mbits/sec
[ 5] 20.00-30.00 sec 1.10 GBytes 941 Mbits/sec
[ 5] 30.00-40.00 sec 1.09 GBytes 940 Mbits/sec
[ 5] 40.00-50.00 sec 1.10 GBytes 941 Mbits/sec
[ 5] 50.00-60.00 sec 1.09 GBytes 940 Mbits/sec
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval Transfer Bitrate Retr
[ 5] 0.00-60.00 sec 6.57 GBytes 941 Mbits/sec 0 sender
[ 5] 0.00-60.00 sec 6.57 GBytes 940 Mbits/sec receiver
iperf Done.
Полнодуплексный режим:
iperf3 -t 60 -c 192.168.31.115 -i 10 --bidir
Connecting to host 192.168.31.115, port 5201
[ 5] local 192.168.31.199 port 48972 connected to 192.168.31.115 port 5201
[ 7] local 192.168.31.199 port 48984 connected to 192.168.31.115 port 5201
[ ID][Role] Interval Transfer Bitrate Retr Cwnd
[ 5][TX-C] 0.00-10.00 sec 1011 MBytes 848 Mbits/sec 32 694 KBytes
[ 7][RX-C] 0.00-10.00 sec 507 MBytes 425 Mbits/sec
[ 5][TX-C] 10.00-20.00 sec 490 MBytes 411 Mbits/sec 1 672 KBytes
[ 7][RX-C] 10.00-20.00 sec 843 MBytes 707 Mbits/sec
[ 5][TX-C] 20.00-30.00 sec 1.05 GBytes 905 Mbits/sec 0 735 KBytes
[ 7][RX-C] 20.00-30.00 sec 459 MBytes 385 Mbits/sec
[ 5][TX-C] 30.00-40.00 sec 659 MBytes 553 Mbits/sec 70 475 KBytes
[ 7][RX-C] 30.00-40.00 sec 731 MBytes 613 Mbits/sec
[ 5][TX-C] 40.00-50.00 sec 951 MBytes 798 Mbits/sec 15 699 KBytes
[ 7][RX-C] 40.00-50.00 sec 562 MBytes 471 Mbits/sec
[ 5][TX-C] 50.00-60.00 sec 538 MBytes 451 Mbits/sec 27 587 KBytes
[ 7][RX-C] 50.00-60.00 sec 817 MBytes 685 Mbits/sec
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID][Role] Interval Transfer Bitrate Retr
[ 5][TX-C] 0.00-60.00 sec 4.62 GBytes 661 Mbits/sec 145 sender
[ 5][TX-C] 0.00-60.01 sec 4.61 GBytes 660 Mbits/sec receiver
[ 7][RX-C] 0.00-60.00 sec 3.83 GBytes 548 Mbits/sec 224 sender
[ 7][RX-C] 0.00-60.01 sec 3.83 GBytes 548 Mbits/sec receiver
iperf Done.
Результаты практически идентичны другому порту Ethernet, что также можно считать успешным…
Хранилище M.2 NVMe
В слот M.2 на нижней стороне платы была установлена SSD Apacer M.2 2280 PCIe Gen3 x4 объемом 256 ГБ (AS2280P4), которая определилась корректно:
root@starfive:~# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
mtdblock0 31:0 0 128K 0 disk
mtdblock1 31:1 0 3M 0 disk
mtdblock2 31:2 0 1M 0 disk
mmcblk1 179:0 0 30.5G 0 disk
|-mmcblk1p1 179:1 0 16M 0 part
|-mmcblk1p2 179:2 0 100M 0 part /boot
`-mmcblk1p3 179:3 0 15.5G 0 part /
nvme0n1 259:0 0 238.5G 0 disk
`-nvme0n1p1 259:1 0 238.5G 0 part
iozone3 недоступен через apt, поэтому пришлось загрузить его и собрать из исходного кода:
apt install build-essential
wget https://www.iozone.org/src/current/iozone3_494.tgz
tar xvf iozone3_494.tgz
cd iozone3_494/src/current/
make linux-arm
cp iozone /usr/local/bin
В Makefile нет опции для RISC-V, поэтому сначала была попытка использовать «make linux», но сборка завершилась ошибкой при линковке. Команда «make linux-arm» завершилась успешно, поэтому использовалась она…
root@starfive:~# cd /media/nvme0n1p1/
root@starfive:/media/nvme0n1p1# sudo iozone -e -I -a -s 1000M -r 16384k -i 0 -i 1 -i 2
Iozone: Performance Test of File I/O
Version $Revision: 3.494 $
Compiled for 64 bit mode.
Build: linux-arm
Contributors:William Norcott, Don Capps, Isom Crawford, Kirby Collins
Al Slater, Scott Rhine, Mike Wisner, Ken Goss
Steve Landherr, Brad Smith, Mark Kelly, Dr. Alain CYR,
Randy Dunlap, Mark Montague, Dan Million, Gavin Brebner,
Jean-Marc Zucconi, Jeff Blomberg, Benny Halevy, Dave Boone,
Erik Habbinga, Kris Strecker, Walter Wong, Joshua Root,
Fabrice Bacchella, Zhenghua Xue, Qin Li, Darren Sawyer,
Vangel Bojaxhi, Ben England, Vikentsi Lapa,
Alexey Skidanov, Sudhir Kumar.
Run began: Sun Feb 12 07:29:34 2023
Include fsync in write timing
O_DIRECT feature enabled
Auto Mode
File size set to 1024000 kB
Record Size 16384 kB
Command line used: iozone -e -I -a -s 1000M -r 16384k -i 0 -i 1 -i 2
Output is in kBytes/sec
Time Resolution = 0.000001 seconds.
Processor cache size set to 1024 kBytes.
Processor cache line size set to 32 bytes.
File stride size set to 17 * record size.
random random bkwd record stride
kB reclen write rewrite read reread read write read rewrite read fwrite frewrite fread freread
1024000 16384 169763 161593 166202 158275 170468 202205
iozone test complete.
SSD должна обеспечивать скорость чтения до 1800 МБ/с и записи до 1100 МБ/с. При 169 МБ/с и 158 МБ/с это совершенно неприемлемо. Ранее этот накопитель тестировался с скоростью 1100 МБ/с при подключении через ORICO Thunderbolt/USB к мини-ПК на Intel . Повторный тест на VisionFive 2 показал такие же низкие скорости.
Для справки приведен вывод lscpi:
root@starfive:/media/nvme0n1p1# lspci -v
0000:00:00.0 PCI bridge: PLDA XpressRich-AXI Ref Design (rev 02) (prog-if 00 [Normal decode])
Flags: bus master, fast devsel, latency 0
Memory at <unassigned> (64-bit, prefetchable)
Bus: primary=00, secondary=01, subordinate=01, sec-latency=0
I/O behind bridge: 00000000-00000fff [size=4K]
Memory behind bridge: 30000000-300fffff [size=1M]
Prefetchable memory behind bridge: 0000000000000000-00000000000fffff [size=1M]
Capabilities: [80] Express Root Port (Slot+), MSI 00
Capabilities: [e0] MSI: Enable- Count=1/32 Maskable+ 64bit+
Capabilities: [f8] Power Management version 3
Capabilities: [100] Vendor Specific Information: ID=1556 Rev=1 Len=008 <?>
Capabilities: [200] Advanced Error Reporting
0000:01:00.0 USB controller: VIA Technologies, Inc. VL805/806 xHCI USB 3.0 Controller (rev 01) (prog-if 30 [XHCI])
Subsystem: VIA Technologies, Inc. VL805/806 xHCI USB 3.0 Controller
Flags: bus master, fast devsel, latency 0, IRQ 58
Memory at 30000000 (64-bit, non-prefetchable) [size=4K]
Capabilities: [80] Power Management version 3
Capabilities: [90] MSI: Enable+ Count=1/4 Maskable- 64bit+
Capabilities: [c4] Express Endpoint, MSI 00
Capabilities: [100] Advanced Error Reporting
Kernel driver in use: xhci_hcd
0001:00:00.0 PCI bridge: PLDA XpressRich-AXI Ref Design (rev 02) (prog-if 00 [Normal decode])
Flags: bus master, fast devsel, latency 0
Memory at <unassigned> (64-bit, prefetchable)
Bus: primary=00, secondary=01, subordinate=01, sec-latency=0
I/O behind bridge: 00000000-00000fff [size=4K]
Memory behind bridge: 38000000-380fffff [size=1M]
Prefetchable memory behind bridge: 0000000000000000-00000000000fffff [size=1M]
Capabilities: [80] Express Root Port (Slot+), MSI 00
Capabilities: [e0] MSI: Enable- Count=1/32 Maskable+ 64bit+
Capabilities: [f8] Power Management version 3
Capabilities: [100] Vendor Specific Information: ID=1556 Rev=1 Len=008 <?>
Capabilities: [200] Advanced Error Reporting
0001:01:00.0 Non-Volatile memory controller: Phison Electronics Corporation PS5013 E13 NVMe Controller (rev 01) (prog-if 02 [NVM Express])
Subsystem: Phison Electronics Corporation PS5013 E13 NVMe Controller
Flags: bus master, fast devsel, latency 0, IRQ 59
Memory at 38000000 (64-bit, non-prefetchable) [size=16K]
Capabilities: [80] Express Endpoint, MSI 00
Capabilities: [d0] MSI-X: Enable+ Count=9 Masked-
Capabilities: [e0] MSI: Enable- Count=1/8 Maskable+ 64bit+
Capabilities: [f8] Power Management version 3
Capabilities: [100] Latency Tolerance Reporting
Capabilities: [110] L1 PM Substates
Capabilities: [200] Advanced Error Reporting
Capabilities: [300] Secondary PCI Express
Kernel driver in use: nvme
Скорость соединения не отображается, но при проверке более подробного вывода видно:
LnkSta: Speed 5GT/s (downgraded), Width x1 (downgraded)
LnkCap2: Supported Link Speeds: 2.5-8GT/s, Crosslink- Retimer- 2Retimers- DRS-
LnkCtl2: Target Link Speed: 8GT/s, EnterCompliance- SpeedDis-
Transmit Margin: Normal Operating Range, EnterModifiedCompliance- ComplianceSOS-
Compliance De-emphasis: -6dB
На данный момент это можно считать неудачей, поскольку производительность слишком низкая.
USB
Плата была выключена, NVMe SSD извлечен из слота M.2 и помещен в упомянутый выше корпус ORICO. После подключения SSD через USB и загрузки платы
вывод lsusb выглядит следующим образом (с корпусом, клавиатурой и мышью):
root@starfive:~# lsusb -t
/: Bus 02.Port 1: Dev 1, Class=root_hub, Driver=xhci_hcd/4p, 5000M
|__ Port 3: Dev 2, If 0, Class=Mass Storage, Driver=uas, 5000M
/: Bus 01.Port 1: Dev 1, Class=root_hub, Driver=xhci_hcd/1p, 480M
|__ Port 1: Dev 2, If 0, Class=Hub, Driver=hub/4p, 480M
|__ Port 1: Dev 4, If 0, Class=Human Interface Device, Driver=usbhid, 1.5M
|__ Port 1: Dev 4, If 1, Class=Human Interface Device, Driver=usbhid, 1.5M
|__ Port 2: Dev 3, If 0, Class=Human Interface Device, Driver=usbhid, 1.5M
Запустим iozone:
root@starfive:~# cd /media/sda1/
root@starfive:/media/sda1# sudo iozone -e -I -a -s 1000M -r 16384k -i 0 -i 1 -i 2
Iozone: Performance Test of File I/O
Version $Revision: 3.494 $
Compiled for 64 bit mode.
Build: linux-arm
Contributors:William Norcott, Don Capps, Isom Crawford, Kirby Collins
Al Slater, Scott Rhine, Mike Wisner, Ken Goss
Steve Landherr, Brad Smith, Mark Kelly, Dr. Alain CYR,
Randy Dunlap, Mark Montague, Dan Million, Gavin Brebner,
Jean-Marc Zucconi, Jeff Blomberg, Benny Halevy, Dave Boone,
Erik Habbinga, Kris Strecker, Walter Wong, Joshua Root,
Fabrice Bacchella, Zhenghua Xue, Qin Li, Darren Sawyer,
Vangel Bojaxhi, Ben England, Vikentsi Lapa,
Alexey Skidanov, Sudhir Kumar.
Run began: Sun Feb 12 09:40:05 2023
Include fsync in write timing
O_DIRECT feature enabled
Auto Mode
File size set to 1024000 kB
Record Size 16384 kB
Command line used: iozone -e -I -a -s 1000M -r 16384k -i 0 -i 1 -i 2
Output is in kBytes/sec
Time Resolution = 0.000001 seconds.
Processor cache size set to 1024 kBytes.
Processor cache line size set to 32 bytes.
File stride size set to 17 * record size.
random random bkwd record stride
kB reclen write rewrite read reread read write read rewrite read fwrite frewrite fread freread
1024000 16384 173936 176209 152915 151294 210743 173002
iozone test complete.
Результаты странно близки к тем, что были получены при подключении через M.2: 173 МБ/с записи и 152 МБ/с чтения… Для порта USB 3.0 на 5 Гбит/с ожидались значения около 300–400 МБ/с. Возможно, iozone3 требует оптимизации для RISC-V, хотя это маловероятно.
Аудиоразъем
Хотя тестирование аудио через HDMI сейчас невозможно, можно проверить работу 3.5-мм аудиоразъема, подключив колонки, питающиеся от одного из USB-портов платы. USB используется только для питания, звук поступает через аудиоразъем.
Для воспроизведения лицензионно-свободного MP3 использовался предустановленный ffplay:
root@starfive:~# ffplay bensound-epic.mp3 -nodisp
ffplay version 4.4.1 Copyright (c) 2003-2021 the FFmpeg developers
built with gcc 11 (Debian 11.3.0-3)
configuration: --prefix=/code_mm_20221111/target/usr --arch=riscv64 --target-os=linux --enable-gpl --disable-stripping --disable-static --enable-shared --enable-avfilter --disable-version3 --enable-log
ging --disable-extra-warnings --enable-avdevice --enable-avcodec --enable-avformat --enable-network --disable-gray --enable-swscale-alpha --disable-small --enable-dct --enable-fft --enable-mdct --enable-
rdft --enable-libv4l2 --enable-alsa --enable-outdevs --enable-pthreads --enable-zlib --enable-indevs --enable-runtime-cpudetect --enable-pic --cpu=rv64imafd --enable-libaom --enable-libass --enable-libbl
uray --enable-libbs2b --enable-libcaca --enable-libcdio --enable-libcodec2 --enable-libdav1d --enable-libflite --enable-libfontconfig --enable-libfreetype --enable-libfribidi --enable-libgme --enable-lib
gsm --enable-libjack --enable-libmp3lame --enable-libmysofa --enable-libopenjpeg --enable-libopenmpt --enable-libopus --enable-libpulse --enable-librabbitmq --enable-librubberband --enable-libshine --ena
ble-libsnappy --enable-libsoxr --enable-libspeex --enable-libsrt --enable-libssh --enable-libtheora --enable-libtwolame --enable-libvidstab --enable-libvorbis --enable-libvpx --enable-libwebp --enable-li
bx265 --enable-libxml2 --enable-libxvid --enable-libzimg --enable-libzmq --enable-libzvbi --enable-lv2 --enable-openal --enable-opencl --enable-opengl --enable-sdl2 --enable-pocketsphinx --enable-librsvg
--enable-libdc1394 --enable-libdrm --enable-chromaprint --enable-libx264 --disable-frei0r --disable-gnutls --disable-ladspa --disable-libiec61883 --enable-omx --extra-ldflags=-L/code_mm_20221111/target/
usr/lib --extra-cflags=-I/code_mm_20221111/target/usr/include/omx-il --extra-libs=-lOMX_Core
libavutil 56. 70.100 / 56. 70.100
libavcodec 58.134.100 / 58.134.100
libavformat 58. 76.100 / 58. 76.100
libavdevice 58. 13.100 / 58. 13.100
libavfilter 7.110.100 / 7.110.100
libswscale 5. 9.100 / 5. 9.100
libswresample 3. 9.100 / 3. 9.100
libpostproc 55. 9.100 / 55. 9.100
Input #0, mp3, from 'bensound-epic.mp3':q= 0KB sq= 0B f=0/0
Duration: 00:02:58.55, start: 0.025057, bitrate: 112 kb/s
Stream #0:0: Audio: mp3, 44100 Hz, stereo, fltp, 112 kb/s
Metadata:
encoder : LAME3.99r
^Croot@starfive:~# fd= 0 aq= 14KB vq= 0KB sq= 0B f=0/0
Звук работает нормально, но на максимальной громкости наблюдались искажения. После уменьшения громкости колонок проблема исчезла.
Добавим комментарий о карте MicroSD. Используемые карты обладают низкой производительностью при случайных операциях ввода-вывода, но с ними можно работать на Raspberry Pi и других одноплатниках без особых трудностей. Однако с образом Debian 12 на VisionFive 2 даже простые команды в терминале выполняются очень медленно — например, «ls» в корневом каталоге может занять 10 секунд.
root@starfive:~# time ls
'audio_534a89f910.mp3?filename=easy-lifestyle-137766.mp3' iozone3_494 linux-headers-5.15.0-starfive_5.15.0-starfive-1_riscv64.deb linux-libc-dev_5.15.0-starfive-1_riscv64.deb wget-log
bensound-epic.mp3 iozone3_494.tgz linux-image-5.15.0-starfive_5.15.0-starfive-1_riscv64.deb sbc-bench.sh
real 0m9.588s
user 0m0.009s
sys 0m0.001s
Также приходится ждать около 5–10 минут после появления приглашения «starfive login: root», прежде чем можно начать вводить команды. Использование более производительной карты MicroSD или модуля eMMC, безусловно, помогло бы, но очевидно, что образ Debian также требует оптимизации в этом отношении.
Бенчмарки SBC Bench
Обычно для оценки производительности одноплатных компьютеров и мини-ПК используется скрипт sbc-bench.sh. RISC-V — довольно новая платформа, поэтому больших надежд на его бесперебойную работу не было, но попытка все же была предпринята.
root@starfive:~# ./sbc-bench.sh -m
StarFive JH7110, Kernel: riscv64, Userland: riscv64
CPU sysfs topology (clusters, cpufreq members, clockspeeds)
cpufreq min max
CPU cluster policy speed speed core type
0 -1 0 375 1500 sifive,u74-mc
1 -1 0 375 1500 sifive,u74-mc
2 -1 0 375 1500 sifive,u74-mc
3 -1 0 375 1500 sifive,u74-mc
Thermal source: /sys/class/hwmon/hwmon0/ (120e0000.tmon)
Time CPU load %cpu %sys %usr %nice %io %irq Temp
04:51:10: 750MHz 8.35 71% 1% 1% 0% 69% 0% 50.8°C
04:51:15: 750MHz 8.26 85% 1% 1% 0% 82% 0% 50.9°C
04:51:21: 750MHz 8.24 98% 0% 0% 0% 98% 0% 50.9°C
04:51:26: 750MHz 8.22 100% 0% 0% 0% 99% 0% 50.8°C
04:51:31: 750MHz 8.28 100% 0% 0% 0% 99% 0% 50.8°C
04:51:36: 750MHz 8.02 57% 2% 2% 0% 52% 0% 51.0°C
04:51:41: 750MHz 7.86 73% 0% 0% 0% 73% 0% 50.9°C
04:51:46: 750MHz 7.79 75% 0% 0% 0% 74% 0% 50.9°C
04:51:51: 750MHz 7.81 98% 0% 0% 0% 98% 0% 50.8°C
Информационная часть работает хорошо. Наблюдается высокая активность и операции ввода-вывода, поскольку в другом окне терминала устанавливается пакет.
Но даже в режиме простоя SBC bench не запускается из-за высокой загрузки процессора:
root@starfive:~# ./sbc-bench.sh -c
WARNING: This tool is meant to run only on Debian Stretch, Buster, Bullseye or Ubuntu Bionic, Focal, Jammy, Kinetic.
When executed on Debian GNU/Linux bookworm/sid results are partially meaningless.
Press [ctrl]-[c] to stop or [enter] to continue.
WARNING: dmesg output does not contain early boot messages which
help in identifying hardware details.
It is recommended to reboot now and then execute the benchmarks.
Press [ctrl]-[c] to stop or [enter] to continue.
Average load and/or CPU utilization too high (too much background activity). Waiting...
Too busy for benchmarking: 07:51:08 up 52 min, 3 users, load average: 7.35, 6.77, 6.40, cpu: %
Too busy for benchmarking: 07:51:13 up 52 min, 3 users, load average: 7.24, 6.76, 6.40, cpu: %
Too busy for benchmarking: 07:51:18 up 53 min, 3 users, load average: 7.14, 6.75, 6.40, cpu: %
Также есть два других предупреждения. Первое связано с тем, что скрипт не тестировался на еще не выпущенной Debian 12 «Bookworm». Второе вызвано тем, что вывод dmesg обрезан и не начинается с 00:00. Перезагрузка не производилась, так как полный цикл загрузки до момента появления приглашения командной строки занимает около 8 минут. Отключим проверку средней загрузки процессора и перезапустим скрипт, чтобы посмотреть, как далеко он пройдет:
root@starfive:~# ./sbc-bench.sh -c
WARNING: This tool is meant to run only on Debian Stretch, Buster, Bullseye or Ubuntu Bionic, Focal, Jammy, Kinetic.
When executed on Debian GNU/Linux bookworm/sid results are partially meaningless.
Press [ctrl]-[c] to stop or [enter] to continue.
WARNING: dmesg output does not contain early boot messages which
help in identifying hardware details.
It is recommended to reboot now and then execute the benchmarks.
Press [ctrl]-[c] to stop or [enter] to continue.
sbc-bench v0.9.17
Installing needed tools: apt -f -qq -y install sysstat git curl lshw mbw p7zip...No 7-zip binary found and could not be installed. Aborting
root@starfive:~#
Пакет 7-zip отсутствует в репозитории Debian RISCV64, и для работы на плате VisionFive 2 его пришлось бы собирать из исходного кода. На данный момент запуск SBC Bench без пропуска некоторых тестов невозможен. Вернемся к этому вопросу через несколько месяцев.
Заключение
На текущем этапе StarFive VisionFive 2 следует рассматривать как плату для разработки на RISC-V, и она не подходит для интеграции в проекты/продукты до дальнейшего прогресса в разработке программного обеспечения. Поскольку Linux для RISC-V все еще довольно нов, особенно с точки зрения видео/графики, это ожидаемо. Уже работают такие функции, как Gigabit Ethernet, GPIO, аудиоразъем и USB, но другие, такие как HDMI и производительность хранилища, требуют значительной доработки. Также необходимо улучшить стабильность системы — SSH-соединение несколько раз разрывалось, и не удавалось переподключиться, а последовательная консоль не работала, что требовало жесткой перезагрузки. Однако на форуме наблюдается активность, и компания работает над включением поддержки в основную ветку ядра Linux.
Благодарим StarFive за предоставленную плату. Разработчики, желающие помочь с программным обеспечением и/или тестированием, могут приобрести рассмотренную здесь плату VisionFive 2 за $70.40 плюс доставка (и, возможно, налоги). Также плата предлагается на Amazon за $112 с Wi-Fi.
Выражаем свою благодарность источнику, с которого взята и переведена статья, сайту cnx-software.com.
Оригинал статьи вы можете прочитать здесь.