NanoPi R6S представляет собой одновременно мини-ПК и роутер на базе процессора Rockchip RK3588S . Образцы были получены в ноябре, и начат обзор NanoPi R6S с OpenWrt/FriendlyWrt , включая быструю проверку интерфейсов 2.5GbE и маршрутизации через iperf3, где система показала себя хорошо. Однако использование платформы с восьмиядерным процессором Cortex-A76/A55 и 8 ГБ ОЗУ исключительно как роутера OpenWrt выглядит расточительным, поэтому для дальнейшего тестирования была выбрана более универсальная ОС – Ubuntu 22.04.
Трудности при установке Ubuntu 22.04 на NanoPi R6S
FriendlyELEC предоставляет различные образы на Wiki , включая загрузку с SD-карты, установку с MicroSD во флеш-память eMMC (образы eFlasher) или прошивку через USB с помощью инструментов Windows. Образы eFlasher предпочтительны, так как ОС запускается с внутренней памяти eMMC и не требуются специальные инструменты. После успешного использования образа FriendlyWrt eFlasher ожидалось, что переход на образ Ubuntu 22.04 eFlasher пройдет легко.
Но возникла проблема: утилита eFlasher запускалась, но процесс обновления проходил слишком быстро. Попытки использовать другие образы eFlasher завершались ошибкой, тогда как возврат к FriendlyWrt всегда работал. Тестирование загрузки с образа MicroSD и Windows USB utility также не позволило успешно установить Ubuntu 22.04 на NanoPi R6S.
После подключения отладочной платы UART к NanoPi R6S в логах загрузки проблемных образов наблюдались ошибки разделов и файловой системы. Сообщение в FriendlyElec о корректной работе FriendlyWrt на двух образцах не помогло; анализ логов и проблемы с USB utility навели их на подозрения о неисправности eMMC, и была прислана новая плата с предустановленной Ubuntu 22.04, которая, однако, также поставлялась с образом FriendlyWrt.
Повторные попытки обновить плату привели к той же ошибке… Различные образы Debian и Ubuntu не работали, тогда как FriendlyWrt запускался без проблем… Ключевой упущенный ранее момент: для записи использовался USBImager – легковесная утилита, применяемая с 2020 года без нареканий, которая и оказалась причиной. FriendlyElec распространяет образы, сжатые GZIP. Распаковка образа через gzip перед записью через USBImager позволила eFlasher успешно установить Ubuntu 22.04 или Debian 11, и ОС загрузилась с eMMC.
Хотя USBImager должен поддерживать запись сжатых образов, создание issue на GitLab и пояснение разработчика указали на ограничение формата GZIP ( RFC 1952 ): размер файла ограничен 4 ГБ из-за 32-битного поля хранения. Действительно, при открытии gz-файла в Ubuntu отображался некорректный размер 3.5 ГБ вместо 7.8 ГБ… gzip (в основном) игнорирует заявленный размер и распаковывает весь файл для определения реального размера. Этим объясняется работоспособность меньшего по размеру образа FriendlyWrt и сбой с десктопными ОС… Проблема в USBImager пока не решена, поэтому важно распаковывать gz-файлы перед записью, а производителям плат стоит избегать сжатия gzip в пользу современных форматов.
На выяснение ушло более 10 часов, но теперь можно продолжить обзор…
Информация о системе Ubuntu 22.04
Основные характеристики системы:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
pi@NanoPi-R6S:~$ cat /etc/lsb-release DISTRIB_ID=Ubuntu DISTRIB_RELEASE=22.04 DISTRIB_CODENAME=jammy DISTRIB_DESCRIPTION="Ubuntu 22.04.2 LTS" pi@NanoPi-R6S:~$ uname -a Linux NanoPi-R6S 5.10.110 #165 SMP Fri Jan 13 17:23:13 CST 2023 aarch64 aarch64 aarch64 GNU/Linux pi@NanoPi-R6S:~$ free -mh total used free shared buff/cache available Mem: 7.5Gi 953Mi 5.6Gi 90Mi 972Mi 6.2Gi Swap: 0B 0B 0B pi@NanoPi-R6S:~$ df -mh Filesystem Size Used Avail Use% Mounted on tmpfs 767M 2.1M 765M 1% /run overlay 25G 1.1G 23G 5% / tmpfs 3.8G 0 3.8G 0% /dev/shm tmpfs 5.0M 4.0K 5.0M 1% /run/lock tmpfs 768M 92K 768M 1% /run/user/1000 |
Ubuntu 22.04.2 с ядром Linux 5.10.110, ~8 ГБ ОЗУ и корневым разделом на 25 ГБ
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 |
pi@NanoPi-R6S:~$ inxi -Fc0 System: Host: NanoPi-R6S Kernel: 5.10.110 aarch64 bits: 64 Console: pty pts/1 Distro: Ubuntu 22.04.2 LTS (Jammy Jellyfish) Machine: Type: ARM System: FriendlyElec NanoPi R6S details: N/A serial: c5940d3cc423aec1 Battery: ID-1: test_battery charge: 100% condition: N/A CPU: Info: 3x 4-core model: N/A variant-1: cortex-a55 variant-2: cortex-a76 bits: 64 type: MCP AMP cache: L2: 3x 512 KiB (1.5 MiB) Speed (MHz): avg: 408 min/max: 408/1800:2352:2256 cores: 1: 408 2: 408 3: 408 4: 408 5: 408 6: 408 7: 408 8: 408 Graphics: Device-1: display-subsystem driver: rockchip_drm v: N/A Device-2: mali-bifrost driver: mali v: N/A Device-3: rk3588-dw-hdmi driver: dwhdmi_rockchip v: N/A Display: server: X.org v: 1.21.1.3 with: Xwayland v: 22.1.1 driver: gpu: rockchip_drm,mali,dwhdmi_rockchip note: X driver n/a tty: 80x24 resolution: 1280x800 Message: GL data unavailable in console. Try -G --display Audio: Device-1: rk3588-dw-hdmi driver: dwhdmi_rockchip Device-2: simple-audio-card driver: asoc_simple_card Sound Server-1: ALSA v: k5.10.110 running: yes Sound Server-2: PulseAudio v: 15.99.1 running: yes Sound Server-3: PipeWire v: 0.3.48 running: yes Network: Device-1: Realtek RTL8125 2.5GbE driver: r8125 IF: eth1 state: down mac: 5e:e3:b2:df:c6:31 Device-2: Realtek RTL8125 2.5GbE driver: r8125 IF: eth1 state: down mac: 5e:e3:b2:df:c6:31 Device-3: rk3588-gmac driver: rk_gmac_dwmac IF: eth0 state: down mac: 72:23:60:53:d0:4f IF-ID-1: eth2 state: up speed: 2500 Mbps duplex: full mac: 6e:23:60:53:d0:4f Drives: Local Storage: total: 28.91 GiB used: 0 KiB (0.0%) ID-1: /dev/mmcblk2 model: A3A551 size: 28.91 GiB Partition: Message: No partition data found. Swap: Alert: No swap data was found. Sensors: System Temperatures: cpu: 44.4 C mobo: N/A Fan Speeds (RPM): N/A Info: Processes: 278 Uptime: 3h 4m Memory: 7.49 GiB used: 1.33 GiB (17.8%) Init: systemd runlevel: 5 Shell: Bash inxi: 3.3.13 |
Желающие могут ознакомиться с логом загрузки Linux на pastebin .
Тесты производительности NanoPi R6S в Ubuntu 22.04
Запуск бенчмарков, начиная с sbc-bench.sh:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 |
pi@NanoPi-R6S:~$ sudo ./sbc-bench.sh -c Status of performance related governors found below /sys (w/o cpufreq): dmc: dmc_ondemand / 528 MHz (rknpu_ondemand dmc_ondemand userspace powersave performance simple_ondemand) fb000000.gpu: simple_ondemand / 300 MHz (rknpu_ondemand dmc_ondemand userspace powersave performance simple_ondemand) fdab0000.npu: rknpu_ondemand / 1000 MHz (rknpu_ondemand dmc_ondemand userspace powersave performance simple_ondemand) sbc-bench v0.9.27 Installing needed tools: apt -f -qq -y install sysstat curl lshw mbw p7zip, tinymembench, ramlat, mhz, cpuminer. Done. Checking cpufreq OPP. Done (results will be available in 21-32 minutes). Executing tinymembench. Done. Executing RAM latency tester. Done. Executing OpenSSL benchmark. Done. Executing 7-zip benchmark. Done. Executing cpuminer. 5 more minutes to wait. Done. Checking cpufreq OPP again. Done (23 minutes elapsed). Memory performance (all 3 CPU clusters measured individually): memcpy: 6259.3 MB/s (Cortex-A55) memset: 21819.0 MB/s (Cortex-A55) memcpy: 11139.7 MB/s (Cortex-A76) memset: 28893.1 MB/s (Cortex-A76) memcpy: 10816.2 MB/s (Cortex-A76) memset: 28268.4 MB/s (Cortex-A76) Cpuminer total scores (5 minutes execution): 24.38,24.37,24.36,24.35,24.34,24.33,24.32,24.31,24.29 kH/s 7-zip total scores (3 consecutive runs): 14727,14444,14563, single-threaded: 2564 OpenSSL results (all 3 CPU clusters measured individually): type 16 bytes 64 bytes 256 bytes 1024 bytes 8192 bytes 16384 bytes aes-128-cbc 160302.91k 475125.03k 930599.68k 1228690.43k 1354962.26k 1365458.94k (Cortex-A55) aes-128-cbc 658148.26k 1291201.73k 1674105.60k 1792312.66k 1839043.93k 1843828.05k (Cortex-A76) aes-128-cbc 636342.98k 1256862.25k 1622009.51k 1737261.06k 1781757.27k 1786565.97k (Cortex-A76) aes-192-cbc 152879.55k 422953.75k 756360.28k 945381.72k 1019838.46k 1025824.09k (Cortex-A55) aes-192-cbc 611966.19k 1143024.19k 1419125.42k 1491956.74k 1533744.47k 1536950.27k (Cortex-A76) aes-192-cbc 589766.45k 1106727.42k 1373112.23k 1445577.39k 1486036.99k 1489141.76k (Cortex-A76) aes-256-cbc 148098.01k 388656.21k 652590.25k 790665.56k 841708.89k 845785.77k (Cortex-A55) aes-256-cbc 594097.92k 1016885.38k 1227813.03k 1290934.95k 1315438.59k 1317776.04k (Cortex-A76) aes-256-cbc 571059.33k 983378.01k 1187549.44k 1250823.85k 1274421.25k 1276679.51k (Cortex-A76) Full results uploaded to http://ix.io/4oNq |
Троттлинг не наблюдалось, максимальная температура составила 64.7°C при нагрузке CPU miner в помещении с температурой ~27°C, что подтверждает эффективность пассивного охлаждения. Менее впечатляющи результаты 7-zip: ~14,500 против 16,200–16,400 MIPS на Khadas Edge2 и Rock 5B . Тактовые частоты ядер Cortex-A76 – 2316 и 2244 МГц (измерено), что не является проблемой; объяснение будет приведено далее.
Остальные результаты схожи с другими платформами на RK3588(S) и значительно выше, чем на Raspberry Pi 4.
Speedometer 2.0 в браузере Chromium показал разочаровывающий результат:
Показатели стабильны между прогонами; повторный тест позже дал 17.1 запуска в минуту…
Firefox обычно медленнее в этом тесте, но на NanoPi R6S с Ubuntu 22.04 он показал 41.3 запуска в минуту в Firefox 110.
Причина, вероятно, в проблемах конфигурации Chromium. На плате Khadas Edge2 с тем же Rockchip RK3588S результаты составили 80.7 в Chromium и 53.12 в Firefox.
Тестирование и бенчмарки накопителей
Производительность eMMC проверена через iozone3:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
pi@NanoPi-R6S:~$ sudo iozone -e -I -a -s 100M -r 4k -r 16k -r 512k -r 1024k -r 16384k -i 0 -i 1 -i 2 [sudo] password for pi: Iozone: Performance Test of File I/O Version $Revision: 3.489 $ Compiled for 64 bit mode. Build: linux Run began: Tue Feb 21 14:07:03 2023 Command line used: iozone -e -I -a -s 100M -r 4k -r 16k -r 512k -r 1024k -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 102400 4 29323 38498 38517 38532 29567 37038 102400 16 85754 101432 70361 69697 66415 99527 102400 512 200650 200457 195765 197967 197881 197665 102400 1024 201925 199839 227483 227738 227427 197811 102400 16384 206131 201740 296392 296093 291875 201333 iozone test complete. |
Довольно высокая: 296 МБ/с последовательное чтение, 200 МБ/с последовательная запись; случайные операции также на уровне.
Для тестирования порта USB 3.0 (5 Гбит/с) подключен контейнер ORICO M234C3-U4 с NVMe SSD :
1 2 3 4 5 6 7 8 9 10 |
pi@NanoPi-R6S:/media/pi/2dab295e-50c9-497e-9390-9020a8f2ea9b$ sudo iozone -e -I -a -s 100M -r 4k -r 16k -r 512k -r 1024k -r 16384k -i 0 -i 1 random random bkwd record stride kB reclen write rewrite read reread read write read rewrite read fwrite frewrite fread freread 102400 4 20857 27350 20952 20896 102400 16 62959 73206 57880 58128 102400 512 241846 236516 167135 164614 102400 1024 297352 293949 220935 222741 102400 16384 402884 407851 347897 345063 iozone test complete. |
Скорости ~340 МБ/с чтения и 400+ МБ/с записи соответствуют ожиданиям для порта 5 Гбит/с, хотя чтение можно немного улучшить.
Сетевая производительность (2.5GbE)
Поскольку 2.5GbE уже тестировалась в OpenWrt, в Ubuntu 22.04 проверен только порт WAN через iperf3:
- Скачивание:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
$ iperf3 -t 60 -c 192.168.31.64 -i 10 Connecting to host 192.168.31.64, port 5201 [ 5] local 192.168.31.85 port 59196 connected to 192.168.31.64 port 5201 [ ID] Interval Transfer Bitrate Retr Cwnd [ 5] 0.00-10.00 sec 2.74 GBytes 2.35 Gbits/sec 0 1.02 MBytes [ 5] 10.00-20.00 sec 2.74 GBytes 2.35 Gbits/sec 0 1.02 MBytes [ 5] 20.00-30.00 sec 2.74 GBytes 2.35 Gbits/sec 0 2.30 MBytes [ 5] 30.00-40.00 sec 2.74 GBytes 2.35 Gbits/sec 0 2.30 MBytes [ 5] 40.00-50.00 sec 2.74 GBytes 2.35 Gbits/sec 0 2.30 MBytes [ 5] 50.00-60.00 sec 2.74 GBytes 2.35 Gbits/sec 0 2.30 MBytes - - - - - - - - - - - - - - - - - - - - - - - - - [ ID] Interval Transfer Bitrate Retr [ 5] 0.00-60.00 sec 16.4 GBytes 2.35 Gbits/sec 0 sender [ 5] 0.00-60.04 sec 16.4 GBytes 2.35 Gbits/sec receiver iperf Done. |
- Загрузка:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
$ iperf3 -t 60 -c 192.168.31.64 -i 10 -R Connecting to host 192.168.31.64, port 5201 Reverse mode, remote host 192.168.31.64 is sending [ 5] local 192.168.31.85 port 48614 connected to 192.168.31.64 port 5201 [ ID] Interval Transfer Bitrate [ 5] 0.00-10.00 sec 2.74 GBytes 2.35 Gbits/sec [ 5] 10.00-20.00 sec 2.74 GBytes 2.35 Gbits/sec [ 5] 20.00-30.00 sec 2.74 GBytes 2.35 Gbits/sec [ 5] 30.00-40.00 sec 2.74 GBytes 2.35 Gbits/sec [ 5] 40.00-50.00 sec 2.74 GBytes 2.35 Gbits/sec [ 5] 50.00-60.00 sec 2.74 GBytes 2.35 Gbits/sec - - - - - - - - - - - - - - - - - - - - - - - - - [ ID] Interval Transfer Bitrate Retr [ 5] 0.00-60.04 sec 16.4 GBytes 2.35 Gbits/sec 0 sender [ 5] 0.00-60.00 sec 16.4 GBytes 2.35 Gbits/sec receiver iperf Done. |
- Полный дуплекс:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
$ iperf3 -t 60 -c 192.168.31.64 -i 10 --bidir Connecting to host 192.168.31.64, port 5201 [ 5] local 192.168.31.85 port 46570 connected to 192.168.31.64 port 5201 [ 7] local 192.168.31.85 port 46586 connected to 192.168.31.64 port 5201 [ ID][Role] Interval Transfer Bitrate Retr Cwnd [ 5][TX-C] 0.00-10.00 sec 2.72 GBytes 2.34 Gbits/sec 0 1.95 MBytes [ 7][RX-C] 0.00-10.00 sec 2.64 GBytes 2.26 Gbits/sec [ 5][TX-C] 10.00-20.00 sec 2.71 GBytes 2.33 Gbits/sec 0 2.15 MBytes [ 7][RX-C] 10.00-20.00 sec 2.49 GBytes 2.14 Gbits/sec [ 5][TX-C] 20.00-30.00 sec 2.72 GBytes 2.34 Gbits/sec 0 2.15 MBytes [ 7][RX-C] 20.00-30.00 sec 2.61 GBytes 2.24 Gbits/sec [ 5][TX-C] 30.00-40.00 sec 2.69 GBytes 2.31 Gbits/sec 0 3.24 MBytes [ 7][RX-C] 30.00-40.00 sec 2.44 GBytes 2.09 Gbits/sec [ 5][TX-C] 40.00-50.00 sec 2.70 GBytes 2.32 Gbits/sec 0 3.24 MBytes [ 7][RX-C] 40.00-50.00 sec 2.28 GBytes 1.96 Gbits/sec [ 5][TX-C] 50.00-60.00 sec 2.69 GBytes 2.31 Gbits/sec 0 3.24 MBytes [ 7][RX-C] 50.00-60.00 sec 1.99 GBytes 1.71 Gbits/sec - - - - - - - - - - - - - - - - - - - - - - - - - [ ID][Role] Interval Transfer Bitrate Retr [ 5][TX-C] 0.00-60.00 sec 16.2 GBytes 2.32 Gbits/sec 0 sender [ 5][TX-C] 0.00-60.04 sec 16.2 GBytes 2.32 Gbits/sec receiver [ 7][RX-C] 0.00-60.00 sec 14.4 GBytes 2.07 Gbits/sec 299 sender [ 7][RX-C] 0.00-60.04 sec 14.4 GBytes 2.07 Gbits/sec receiver iperf Done. |
Отличные результаты, за исключением нескольких повторных передач в режиме полного дуплекса.
Режим “review” в SBC Bench
Thomas Kaiser добавил в SBC Bench режим “review” для выявления/исправления типовых проблем и отображения ключевых характеристик железа и ПО:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 |
pi@NanoPi-R6S:~$ sudo ./sbc-bench.sh -r Starting to examine hardware/software for review purposes... Average load and/or CPU utilization too high (too much background activity). Waiting... Too busy for benchmarking: 12:54:20 up 2:12, 3 users, load average: 0.11, 0.15, 0.12, cpu: 2% Too busy for benchmarking: 12:54:25 up 2:12, 3 users, load average: 0.10, 0.14, 0.12, cpu: 0% Too busy for benchmarking: 12:54:30 up 2:12, 3 users, load average: 0.09, 0.14, 0.12, cpu: 0% sbc-bench v0.9.30 Installing needed tools: Done. Checking cpufreq OPP. Done. Executing tinymembench. Done. Executing RAM latency tester. Done. Executing OpenSSL benchmark. Done. Throttling test: heating up the device, 5 more minutes to wait. Done. Checking cpufreq OPP again. Done (13 minutes elapsed). It seems neither throttling occured nor too much background activity. Full results uploaded to http://ix.io/4pgf # FriendlyElec NanoPi R6S Tested with sbc-bench v0.9.30 on Sun, 26 Feb 2023 13:08:00 +0000. Full info: [http://ix.io/4pgf](http://ix.io/4pgf) ### General information: The CPU features 3 clusters consisting of 2 different core types: Rockchip RK3588/RK3588s (35880000), Kernel: aarch64, Userland: arm64 CPU sysfs topology (clusters, cpufreq members, clockspeeds) cpufreq min max CPU cluster policy speed speed core type 0 0 0 408 1800 Cortex-A55 / r2p0 1 0 0 408 1800 Cortex-A55 / r2p0 2 0 0 408 1800 Cortex-A55 / r2p0 3 0 0 408 1800 Cortex-A55 / r2p0 4 1 4 408 2352 Cortex-A76 / r4p0 5 1 4 408 2352 Cortex-A76 / r4p0 6 2 6 408 2256 Cortex-A76 / r4p0 7 2 6 408 2256 Cortex-A76 / r4p0 7672KB available RAM ### Governors/policies (performance vs. idle consumption): Original governor settings: cpufreq-policy0: ondemand / 1008 MHz (conservative ondemand userspace powersave performance schedutil / 408 600 816 1008 1200 1416 1608 1800) cpufreq-policy4: ondemand / 408 MHz (conservative ondemand userspace powersave performance schedutil / 408 600 816 1008 1200 1416 1608 1800 2016 2208 2352) cpufreq-policy6: ondemand / 408 MHz (conservative ondemand userspace powersave performance schedutil / 408 600 816 1008 1200 1416 1608 1800 2016 2208 2256) dmc: dmc_ondemand / 528 MHz (rknpu_ondemand dmc_ondemand userspace powersave performance simple_ondemand / 528 1068 1560 2112) fb000000.gpu: simple_ondemand / 300 MHz (rknpu_ondemand dmc_ondemand userspace powersave performance simple_ondemand / 300 400 500 600 700 800 900 1000) fdab0000.npu: rknpu_ondemand / 1000 MHz (rknpu_ondemand dmc_ondemand userspace powersave performance simple_ondemand / 300 400 500 600 700 800 900 1000) Tuned governor settings: cpufreq-policy0: performance / 1800 MHz cpufreq-policy4: performance / 2352 MHz cpufreq-policy6: performance / 2256 MHz dmc: performance / 2112 MHz fb000000.gpu: performance / 1000 MHz fdab0000.npu: performance / 1000 MHz Status of performance related policies found below /sys: /sys/devices/platform/fb000000.gpu/power_policy: [coarse_demand] always_on /sys/module/pcie_aspm/parameters/policy: default [performance] powersave powersupersave ### Clockspeeds (idle vs. heated up): Before at 47.2°C: cpu0-cpu3 (Cortex-A55): OPP: 1800, Measured: 1805 cpu4-cpu5 (Cortex-A76): OPP: 2352, Measured: 2312 (-1.7%) cpu6-cpu7 (Cortex-A76): OPP: 2256, Measured: 2240 After at 65.6°C: cpu0-cpu3 (Cortex-A55): OPP: 1800, Measured: 1796 cpu4-cpu5 (Cortex-A76): OPP: 2352, Measured: 2296 (-2.4%) cpu6-cpu7 (Cortex-A76): OPP: 2256, Measured: 2226 (-1.3%) ### Memory performance * cpu0 (Cortex-A55): memcpy: 6237.8 MB/s, memchr: 2779.4 MB/s, memset: 21792.2 MB/s * cpu4 (Cortex-A76): memcpy: 11022.5 MB/s, memchr: 14914.5 MB/s, memset: 28622.4 MB/s * cpu6 (Cortex-A76): memcpy: 11030.9 MB/s, memchr: 14857.0 MB/s, memset: 28452.4 MB/s * cpu0 (Cortex-A55) 16M latency: 116.3 117.8 117.7 118.8 113.9 120.3 190.6 339.2 * cpu4 (Cortex-A76) 16M latency: 126.5 128.9 119.5 108.4 118.5 111.5 115.7 115.6 * cpu6 (Cortex-A76) 16M latency: 118.2 109.8 117.7 107.7 118.9 106.5 105.2 106.4 ### PCIe and storage devices: * Realtek RTL8125 2.5GbE: Speed 5GT/s (ok), Width x1 (ok), driver in use: r8125 * Realtek RTL8125 2.5GbE: Speed 5GT/s (ok), Width x1 (ok), driver in use: r8125 * 238.5GB "JMicron JMS583" as /dev/sda: USB, Driver=uas, 5000Mbps (capable of 12Mbps, 480Mbps, 5Gbps, 10Gb/s Symmetric RX SuperSpeedPlus, 10Gb/s Symmetric TX SuperSpeedPlus) * 28.9GB "Foresee A3A551" HS400 Enhanced strobe eMMC 5.1 card as /dev/mmcblk2: date 07/2022, manfid/oemid: 0x0000d6/0x0103, hw/fw rev: 0x0/0x1200000000000000 ### Software versions: * Ubuntu 22.04.2 LTS * Compiler: /usr/bin/gcc (Ubuntu 11.3.0-1ubuntu1~22.04) 11.3.0 / aarch64-linux-gnu * OpenSSL 3.0.2, built on 15 Mar 2022 (Library: OpenSSL 3.0.2 15 Mar 2022) ### Kernel info: * `/proc/cmdline: storagemedia=emmc androidboot.storagemedia=emmc androidboot.mode=normal androidboot.dtbo_idx=0 androidboot.verifiedbootstate=orange earlycon=uart8250,mmio32,0xfeb50000 console=ttyFIQ0 coherent_pool=1m irqchip.gicv3_pseudo_nmi=0 rw root=/dev/mmcblk2p8 rootfstype=ext4 data=/dev/mmcblk2p9 consoleblank=0 cgroup_enable=cpuset cgroup_memory=1 cgroup_enable=memory swapaccount=1` * Vulnerability Spec store bypass: Mitigation; Speculative Store Bypass disabled via prctl * Vulnerability Spectre v1: Mitigation; __user pointer sanitization * Vulnerability Spectre v2: Vulnerable: Unprivileged eBPF enabled * Kernel 5.10.110 / CONFIG_HZ=300 Kernel 5.10.110 is not latest 5.10.169 LTS that was released on 2023-02-22. See https://endoflife.date/linux for details. It is somewhat likely that a lot of exploitable vulnerabilities exist for this kernel as well as many unfixed bugs. But this version string doesn't matter since this is not an official LTS Linux from kernel.org. This device runs a Rockchip vendor/BSP kernel. This kernel is based on a mixture of Android GKI and other sources. Also some community attempts to do version string cosmetics might have happened, see https://tinyurl.com/2p8fuubd for example. To examine how far away this 5.10.110 is from an official LTS of same version someone would have to reapply Rockchip's thousands of patches to a clean 5.10.110 LTS. All known settings adjusted for performance. Device now ready for benchmarking. Once finished stop with [ctrl]-[c] to get info about throttling, frequency cap and too high background activity all potentially invalidating benchmark scores. All changes with storage and PCIe devices as well as suspicious dmesg contents will be reported too. Time big.LITTLE load %cpu %sys %usr %nice %io %irq Temp DC(V) 13:08:01: 2256/1800MHz 4.28 6% 0% 5% 0% 0% 0% 56.4°C 19.83 13:09:01: 2256/1800MHz 1.62 0% 0% 0% 0% 0% 0% 53.6°C 19.85 13:10:01: 2256/1800MHz 0.59 0% 0% 0% 0% 0% 0% 52.7°C 19.86 13:11:01: 2256/1800MHz 0.22 0% 0% 0% 0% 0% 0% 51.8°C 19.86 |
В логе выше не видно, но предупреждения выделены красным:
В данном случае скрипт переключил режимы управления (governors) CPU, GPU, NPU и ОЗУ с “ondemand” на “performance”. Это обеспечивает максимальную производительность в тестах, но может быть неоптимально для сценариев с ограничением энергопотребления или работы от батареи.
После вывода строк со временем и частотами CPU можно перезапустить тесты. Начнем с 7-zip:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
$ 7zr b 7-Zip (a) [64] 16.02 : Copyright (c) 1999-2016 Igor Pavlov : 2016-05-21 p7zip Version 16.02 (locale=C.UTF-8,Utf16=on,HugeFiles=on,64 bits,8 CPUs LE) LE CPU Freq: - - - - - - - - 2048000000 RAM size: 7672 MB, # CPU hardware threads: 8 RAM usage: 1765 MB, # Benchmark threads: 8 Compressing | Decompressing Dict Speed Usage R/U Rating | Speed Usage R/U Rating KiB/s % MIPS MIPS | KiB/s % MIPS MIPS 22: 15595 717 2116 15171 | 203408 674 2574 17350 23: 14901 731 2077 15183 | 199621 675 2560 17275 24: 14900 769 2084 16021 | 195999 676 2545 17202 25: 13894 762 2082 15864 | 191192 676 2519 17015 ---------------------------------- | ------------------------------ Avr: 745 2090 15560 | 675 2549 17211 Tot: 710 2320 16385 |
Общий рейтинг MIPS “Total” составил 16385, что соответствует показателям Rock 5B и Edge2. По словам Thomas, причина – в конфигурации ОЗУ, а режим “ondemand” на частоте 528 МГц по умолчанию действительно влияет на производительность 7-zip.
Дополнительная проверка eMMC:
1 2 3 4 5 6 7 8 9 10 |
pi@NanoPi-R6S:~$ sudo iozone -e -I -a -s 100M -r 4k -r 16k -r 512k -r 1024k -r 16384k -i 0 -i 1 -i 2 random random bkwd record stride kB reclen write rewrite read reread read write read rewrite read fwrite frewrite fread freread 102400 4 30980 39084 40046 40117 30901 37423 102400 16 87428 103596 76672 76367 64447 100728 102400 512 205175 208315 232338 225985 229206 208905 102400 1024 200300 211047 261210 261644 263963 208754 102400 16384 199688 211344 309895 309045 296465 210065 iozone test complete. |
Незначительный прирост скорости.
Тестирование USB-накопителя:
1 2 3 4 5 6 7 8 9 10 11 |
sudo iozone -e -I -a -s 100M -r 4k -r 16k -r 512k -r 1024k -r 16384k -i 0 -i 1 random random bkwd record stride kB reclen write rewrite read reread read write read rewrite read fwrite frewrite fread freread 102400 4 29826 38019 23582 23478 102400 16 84968 96394 67641 64295 102400 512 289311 294249 216836 219205 102400 1024 331101 326569 259965 261566 102400 16384 385161 385516 322805 325460 iozone test complete. |
Скорости записи и чтения необъяснимо снизились (результат воспроизводим).
Повторная проверка iperf3 в полном дуплексе на порту WAN:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
$ iperf3 -t 60 -c 192.168.31.64 -i 10 -bidir Connecting to host 192.168.31.64, port 5201 [ 5] local 192.168.31.85 port 50386 connected to 192.168.31.64 port 5201 [ ID] Interval Transfer Bitrate Retr Cwnd [ 5] 0.00-10.00 sec 2.74 GBytes 2.35 Gbits/sec 0 1.04 MBytes [ 5] 10.00-20.00 sec 2.74 GBytes 2.35 Gbits/sec 0 1.04 MBytes [ 5] 20.00-30.00 sec 2.74 GBytes 2.35 Gbits/sec 0 1.56 MBytes [ 5] 30.00-40.00 sec 2.74 GBytes 2.35 Gbits/sec 0 1.56 MBytes [ 5] 40.00-50.00 sec 2.74 GBytes 2.35 Gbits/sec 0 1.56 MBytes [ 5] 50.00-60.00 sec 2.74 GBytes 2.35 Gbits/sec 0 1.56 MBytes - - - - - - - - - - - - - - - - - - - - - - - - - [ ID] Interval Transfer Bitrate Retr [ 5] 0.00-60.00 sec 16.4 GBytes 2.35 Gbits/sec 0 sender [ 5] 0.00-60.04 sec 16.4 GBytes 2.35 Gbits/sec receiver iperf Done. |
В первом прогоне не было повторных передач, но во втором появились, как при настройках по умолчанию:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
$ iperf3 -t 60 -c 192.168.31.64 -i 10 -bidir Connecting to host 192.168.31.64, port 5201 [ 5] local 192.168.31.85 port 35314 connected to 192.168.31.64 port 5201 [ ID] Interval Transfer Bitrate Retr Cwnd [ 5] 0.00-10.00 sec 2.74 GBytes 2.35 Gbits/sec 0 1.74 MBytes [ 5] 10.00-20.00 sec 2.74 GBytes 2.35 Gbits/sec 0 1.99 MBytes [ 5] 20.00-30.00 sec 2.74 GBytes 2.35 Gbits/sec 220 1.46 MBytes [ 5] 30.00-40.00 sec 2.74 GBytes 2.35 Gbits/sec 0 1.46 MBytes [ 5] 40.00-50.00 sec 2.74 GBytes 2.35 Gbits/sec 0 1.46 MBytes [ 5] 50.00-60.00 sec 2.74 GBytes 2.35 Gbits/sec 0 2.23 MBytes - - - - - - - - - - - - - - - - - - - - - - - - - [ ID] Interval Transfer Bitrate Retr [ 5] 0.00-60.00 sec 16.4 GBytes 2.35 Gbits/sec 220 sender [ 5] 0.00-60.04 sec 16.4 GBytes 2.35 Gbits/sec receiver iperf Done. |
Скорость составила 2.35 Гбит/с в обоих направлениях. Возможно, повезло, или сказалась настройка PCIe ASPM ( Active State Power Management) в “performance”.
Несмотря на фокус Thomas на headless-сценариях, дополнительно запущен Speedometer 2.0 в Firefox для оценки эффекта новых настроек.
57 баллов – примерно на 38% выше 41.3 балла при настройках по умолчанию. Теперь результат лучше, чем у Khadas Edge2 (со стандартными настройками). Улучшение наблюдается и в Chromium: 21.8 баллов. Это все еще на 75% медленнее, чем на Edge2, так что чуда не произошло…
Режим review также способен выявлять проблемы с накопителями: поддельные SD-карты, изношенные диски и т.д. При тестировании с заведомо поддельной microSD картой она была определена как “Definite counterfeit APPSD”, а скрипт указал на ошибки в dmesg:
1 2 3 4 5 6 7 8 9 |
### PCIe and storage devices: * Realtek RTL8125 2.5GbE: Speed 5GT/s (ok), Width x1 (ok), driver in use: r8125 * Realtek RTL8125 2.5GbE: Speed 5GT/s (ok), Width x1 (ok), driver in use: r8125 * 30.5GB "Definite counterfeit APPSD" HS SD card HS SD card HS SD card HS SD card (various errors occured, check dmesg) as /dev/mmcblk0: date 03/2022, manfid/oemid: 0x000000/0x0000, hw/fw rev: 0x0/0x0 * 28.9GB "Foresee A3A551" HS400 Enhanced strobe eMMC 5.1 card as /dev/mmcblk2: date 07/2022, manfid/oemid: 0x0000d6/0x0103, hw/fw rev: 0x0/0x1200000000000000 |
Изменения, внесенные режимом review, не сохраняются после перезагрузки, что является правильным поведением.
Аппаратное ускорение 3D-графики на NanoPi R6S
Подтверждена загрузка и работоспособность драйвера Arm Mali:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 |
pi@NanoPi-R6S:~$ eglinfo EGL client extensions string: EGL_EXT_client_extensions EGL_EXT_platform_base EGL_KHR_client_get_all_proc_addresses EGL_KHR_platform_gbm EGL_KHR_platform_wayland EGL_EXT_platform_wayland GBM platform: arm_release_ver of this libmali is 'g6p0-01eac0', rk_so_ver is '6'. eglinfo: eglInitialize failed Wayland platform: EGL API version: 1.4 EGL vendor string: ARM EGL version string: 1.4 Valhall-"g6p0-01eac0" EGL client APIs: OpenGL_ES EGL extensions string: EGL_WL_bind_wayland_display EGL_NV_context_priority_realtime EGL_KHR_partial_update EGL_EXT_swap_buffers_with_damage EGL_KHR_swap_buffers_with_damage EGL_KHR_config_attribs EGL_KHR_image EGL_KHR_image_base EGL_KHR_fence_sync EGL_KHR_wait_sync EGL_KHR_gl_colorspace EGL_KHR_get_all_proc_addresses EGL_IMG_context_priority EGL_KHR_no_config_context EGL_EXT_image_dma_buf_import EGL_EXT_image_dma_buf_import_modifiers EGL_EXT_yuv_surface EGL_EXT_pixel_format_float EGL_ARM_pixmap_multisample_discard EGL_KHR_gl_texture_2D_image EGL_KHR_gl_renderbuffer_image EGL_KHR_create_context EGL_KHR_surfaceless_context EGL_KHR_gl_texture_cubemap_image EGL_EXT_image_gl_colorspace EGL_EXT_create_context_robustness Configurations: bf lv colorbuffer dp st ms vis cav bi renderable supported id sz l r g b a th cl ns b id eat nd gl es es2 vg surfaces --------------------------------------------------------------------- 0x01 32 0 8 8 8 8 0 0 0 0 0x00-- a y y win,pb 0x02 32 0 8 8 8 8 24 0 0 0 0x00-- a y y win,pb 0x03 32 0 8 8 8 8 24 8 0 0 0x00-- a y y win,pb 0x04 32 0 8 8 8 8 24 8 4 1 0x00-- a y y win,pb 0x05 16 0 5 6 5 0 0 0 0 0 0x00-- y y y win,pb 0x06 16 0 5 6 5 0 24 0 0 0 0x00-- y y y win,pb 0x07 16 0 5 6 5 0 24 8 0 0 0x00-- y y y win,pb 0x08 16 0 5 6 5 0 24 8 4 1 0x00-- y y y win,pb 0x09 24 0 8 8 8 0 0 0 0 0 0x00-- y y y win,pb 0x0a 24 0 8 8 8 0 24 8 0 0 0x00-- y y y win,pb 0x0b 24 0 8 8 8 0 0 0 4 1 0x00-- y y y win,pb 0x0c 24 0 8 8 8 0 24 8 4 1 0x00-- y y y win,pb 0x0d 16 0 5 5 5 1 24 8 0 0 0x00-- a y y win,pb 0x0e 16 0 5 5 5 1 24 8 4 1 0x00-- a y y win,pb 0x0f 16 0 4 4 4 4 24 8 0 0 0x00-- a y y win,pb 0x10 16 0 4 4 4 4 24 8 4 1 0x00-- a y y win,pb 0x11 32 0 8 8 8 8 24 8 8 1 0x00-- a y y win,pb 0x12 16 0 5 6 5 0 24 8 8 1 0x00-- y y y win,pb 0x13 24 0 8 8 8 0 24 8 8 1 0x00-- y y y win,pb 0x14 32 0 8 8 8 8 24 8 16 1 0x00-- a y y win,pb 0x15 16 0 5 6 5 0 24 8 16 1 0x00-- y y y win,pb 0x16 24 0 8 8 8 0 24 8 16 1 0x00-- y y y win,pb 0x17 24 0 8 8 8 0 0 0 0 0 0x00-- y y pb 0x18 64 0 16 16 16 16 24 8 0 0 0x00-- y y pb 0x19 32 0 10 10 10 2 24 8 0 0 0x00-- a y y pb 0x1a 24 0 8 8 8 0 0 0 0 0 0x00-- y y y win,pb |
Сообщение “eglInitialize failed” также наблюдалось на Khadas Edge2, но не помешало запустить glmark2-es2-wayland. Проверка на NanoPi R6S:
Работает достаточно хорошо. Вывод в терминале:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 |
pi@NanoPi-R6S:~$ glmark2-es2-wayland arm_release_ver of this libmali is 'g6p0-01eac0', rk_so_ver is '6'. arm_release_ver of this libmali is 'g6p0-01eac0', rk_so_ver is '6'. ======================================================= glmark2 2021.02 ======================================================= OpenGL Information GL_VENDOR: ARM GL_RENDERER: Mali-LODX GL_VERSION: OpenGL ES 3.2 v1.g6p0-01eac0.ba52c908d926792b8f5fe28f383a2b03 ======================================================= [build] use-vbo=false: FPS: 4893 FrameTime: 0.204 ms [build] use-vbo=true: FPS: 5422 FrameTime: 0.184 ms [texture] texture-filter=nearest: FPS: 6823 FrameTime: 0.147 ms [texture] texture-filter=linear: FPS: 6630 FrameTime: 0.151 ms [texture] texture-filter=mipmap: FPS: 6637 FrameTime: 0.151 ms [shading] shading=gouraud: FPS: 4793 FrameTime: 0.209 ms [shading] shading=blinn-phong-inf: FPS: 4768 FrameTime: 0.210 ms [shading] shading=phong: FPS: 4688 FrameTime: 0.213 ms [shading] shading=cel: FPS: 4835 FrameTime: 0.207 ms [bump] bump-render=high-poly: FPS: 2709 FrameTime: 0.369 ms [bump] bump-render=normals: FPS: 7240 FrameTime: 0.138 ms [bump] bump-render=height: FPS: 7108 FrameTime: 0.141 ms [effect2d] kernel=0,1,0;1,-4,1;0,1,0;: FPS: 5524 FrameTime: 0.181 ms [effect2d] kernel=1,1,1,1,1;1,1,1,1,1;1,1,1,1,1;: FPS: 3786 FrameTime: 0.264 ms [pulsar] light=false:quads=5:texture=false: FPS: 6535 FrameTime: 0.153 ms [desktop] blur-radius=5:effect=blur:passes=1:separable=true:windows=4: FPS: 1800 FrameTime: 0.556 ms [desktop] effect=shadow:windows=4: FPS: 4870 FrameTime: 0.205 ms [buffer] columns=200:interleave=false:update-dispersion=0.9:update-fraction=0.5:update-method=map: FPS: 622 FrameTime: 1.608 ms [buffer] columns=200:interleave=false:update-dispersion=0.9:update-fraction=0.5:update-method=subdata: FPS: 590 FrameTime: 1.695 ms [buffer] columns=200:interleave=true:update-dispersion=0.9:update-fraction=0.5:update-method=map: FPS: 923 FrameTime: 1.083 ms [ideas] speed=duration: FPS: 2679 FrameTime: 0.373 ms [jellyfish] <default>: FPS: 4080 FrameTime: 0.245 ms [terrain] <default>: FPS: 306 FrameTime: 3.268 ms [shadow] <default>: FPS: 4215 FrameTime: 0.237 ms [refract] <default>: FPS: 652 FrameTime: 1.534 ms [conditionals] fragment-steps=0:vertex-steps=0: FPS: 5900 FrameTime: 0.169 ms [conditionals] fragment-steps=5:vertex-steps=0: FPS: 5517 FrameTime: 0.181 ms [conditionals] fragment-steps=0:vertex-steps=5: FPS: 5986 FrameTime: 0.167 ms [function] fragment-complexity=low:fragment-steps=5: FPS: 5925 FrameTime: 0.169 ms [function] fragment-complexity=medium:fragment-steps=5: FPS: 5190 FrameTime: 0.193 ms [loop] fragment-loop=false:fragment-steps=5:vertex-steps=5: FPS: 5879 FrameTime: 0.170 ms [loop] fragment-steps=5:fragment-uniform=false:vertex-steps=5: FPS: 5912 FrameTime: 0.169 ms [loop] fragment-steps=5:fragment-uniform=true:vertex-steps=5: FPS: 5904 FrameTime: 0.169 ms ======================================================= glmark2 Score: 4525 ======================================================= |
4525 баллов на NanoPi R6S против 4005 баллов на Khadas Edge2 . Учтите, что оптимизации SBC bench были активны, а на Edge2 перед запуском графического теста режим управления GPU также был переключен на “performance”.
Установка SuperTuxKart: игра была запущена в оконном режиме, но, вероятно, не использовала GPU:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
..:: Antarctica Rendering Engine 2.0 ::.. [info ] [IrrDriver Logger]: ..:: Antarctica Rendering Engine 2.0 ::.. [info ] [IrrDriver Logger]: SDL Version 2.0.20 [info ] [IrrDriver Logger]: Using renderer: OpenGL ES 3.2 Mesa 22.2.5 [info ] [IrrDriver Logger]: Mesa/X.org [info ] [IrrDriver Logger]: GL_EXT_blend_minmax GL_EXT_multi_draw_arrays GL_EXT_texture_filter_anisotropic GL_EXT_texture_compression_s3tc GL_EXT_texture_compression_dxt1 GL_EXT_texture_compression_rgtc GL_EXT_texture_format_BGRA8888 GL_OES_compressed_ETC1_RGB8_texture GL_OES_depth24 GL_OES_element_index_uint GL_OES_fbo_render_mipmap GL_OES_mapbuffer GL_OES_rgb8_rgba8 GL_OES_standard_derivatives GL_OES_stencil8 GL_OES_texture_3D GL_OES_texture_float GL_OES_texture_float_linear GL_OES_texture_half_float GL_OES_texture_half_float_linear GL_OES_texture_npot GL_OES_vertex_half_float GL_EXT_draw_instanced GL_EXT_texture_sRGB_decode GL_OES_EGL_image GL_OES_depth_texture GL_OES_packed_depth_stencil GL_EXT_texture_type_2_10_10_10_REV GL_NV_conditional_render GL_OES_get_program_binary GL_APPLE_texture_max_level GL_EXT_discard_framebuffer GL_EXT_read_format_bgra GL_NV_pack_subimage GL_EXT_frag_depth GL_NV_fbo_color_attachments GL_OES_EGL_image_external GL_OES_EGL_sync GL_OES_vertex_array_object GL_OES_viewport_array GL_ANGLE_pack_reverse_row_order GL_ANGLE_texture_compression_dxt3 GL_ANGLE_texture_compression_dxt5 GL_EXT_occlusion_query_boolean GL_EXT_robustness GL_EXT_texture_rg GL_EXT_unpack_subimage GL_NV_draw_buffers GL_NV_read_buffer GL_NV_read_depth GL_NV_read_depth_stencil GL_NV_read_stencil GL_EXT_draw_buffers GL_EXT_map_buffer_range GL_KHR_debug GL_KHR_robustness GL_KHR_texture_compression_astc_ldr GL_NV_pixel_buffer_object GL_OES_depth_texture_cube_map GL_OES_required_internalformat GL_OES_surfaceless_context GL_EXT_color_buffer_float GL_EXT_sRGB_write_control GL_EXT_separate_shader_objects GL_EXT_shader_framebuffer_fetch GL_EXT_shader_group_vote GL_EXT_shader_implicit_conversions GL_EXT_shader_integer_mix GL_EXT_tessellation_point_size GL_EXT_tessellation_shader GL_ANDROID_extension_pack_es31a GL_ARM_shader_framebuffer_fetch_depth_stencil GL_EXT_base_instance GL_EXT_compressed_ETC1_RGB8_sub_texture GL_EXT_copy_image GL_EXT_draw_buffers_indexed GL_EXT_draw_elements_base_vertex GL_EXT_gpu_shader5 GL_EXT_polygon_offset_clamp GL_EXT_primitive_bounding_box GL_EXT_render_snorm GL_EXT_shader_io_blocks GL_EXT_texture_border_clamp GL_EXT_texture_buffer GL_EXT_texture_cube_map_array GL_EXT_texture_norm16 GL_EXT_texture_view GL_KHR_blend_equation_advanced GL_KHR_blend_equation_advanced_coherent GL_KHR_context_flush_control GL_KHR_robust_buffer_access_behavior GL_NV_image_formats GL_OES_copy_image GL_OES_draw_buffers_indexed GL_OES_draw_elements_base_vertex GL_OES_gpu_shader5 GL_OES_primitive_bounding_box GL_OES_sample_shading GL_OES_sample_variables GL_OES_shader_io_blocks GL_OES_shader_multisample_interpolation GL_OES_tessellation_point_size GL_OES_tessellation_shader GL_OES_texture_border_clamp GL_OES_texture_buffer GL_OES_texture_cube_map_array GL_OES_texture_stencil8 GL_OES_texture_storage_multisample_2d_array GL_OES_texture_view GL_EXT_blend_func_extended GL_EXT_buffer_storage GL_EXT_float_blend GL_EXT_geometry_point_size GL_EXT_geometry_shader GL_EXT_texture_filter_minmax GL_EXT_texture_sRGB_R8 GL_EXT_texture_sRGB_RG8 GL_KHR_no_error GL_KHR_texture_compression_astc_sliced_3d GL_OES_EGL_image_external_essl3 GL_OES_geometry_point_size GL_OES_geometry_shader GL_OES_shader_image_atomic GL_EXT_clear_texture GL_EXT_clip_cull_distance GL_EXT_disjoint_timer_query GL_EXT_texture_compression_s3tc_srgb GL_MESA_shader_integer_functions GL_EXT_clip_control GL_EXT_color_buffer_half_float GL_EXT_memory_object GL_EXT_memory_object_fd GL_EXT_texture_compression_bptc GL_EXT_texture_mirror_clamp_to_edge GL_KHR_parallel_shader_compile GL_EXT_EGL_image_storage GL_EXT_shader_framebuffer_fetch_non_coherent GL_EXT_texture_shadow_lod GL_MESA_framebuffer_flip_y GL_EXT_depth_clamp GL_EXT_texture_query_lod GL_MESA_bgra [info ] IrrDriver: OpenGL version: 3.2 [info ] IrrDriver: OpenGL vendor: Mesa/X.org [info ] IrrDriver: OpenGL renderer: llvmpipe (LLVM 15.0.6, 128 bits) [info ] IrrDriver: OpenGL version string: OpenGL ES 3.2 Mesa 22.2.5 [info ] GLDriver: Explicit Attrib Location Present [info ] GLDriver: ARB Uniform Buffer Object Present [info ] GLDriver: EXT texture format BGRA8888 Present [info ] GLDriver: EXT Color Buffer Float Present [info ] GLDriver: EXT Texture Compression S3TC Present [info ] GLDriver: EXT Texture Compression S3TC sRGB Present |
llvmpipe указывает на программный рендеринг. При переключении на полноэкранный режим 1920×1080 кадровая частота упала до 1-2 кадров/с, что подтвердило отсутствие задействования GPU. SuperTuxKart должен работать с аппаратным ускорением OpenGL ES, но решение проблемы не найдено.
Согласно wiki, ускорение графики включено в Chromium… Проверка через ввод chrome://gpu в адресной строке.
WebGL и WebGL2 действительно активированы.
Используется драйвер Arm “Mali-LODX”. Проверка демо WebGL Aquarium.

Демо плавно отрисовывает 1000 рыб на 60 кадрах/с и сохраняет приемлемую производительность при 5000 рыб (~30 кадров/с).

5000 рыб @ 31 кадров/сПри увеличении до 10 000 рыб и более появляются артефакты отрисовки (рыбы показываются периодически) и падает кадровая частота. Подтверждено: аппаратное ускорение 3D-графики работает в образе Ubuntu 22.04, включая Chromium.
Воспроизведение видео
В предыдущих обзорах оборудования на Rockchip RK3588(S) под Linux были проблемы с воспроизведением видео, но достигнут прогресс. Во-первых, как видно из скриншота “GPU” Chromium, “Video Decode” активирован, а поддержка аппаратного ускорения заявлена для HEVC, H.264, VP9 до 3840×2160.
Проверка 4K-видео на 1080p60…
Воспроизведение без сброса кадров. Как убедиться в использовании аппаратного декодирования? Первый признак – энергопотребление: ~5.4 Вт, тогда как при программном декодировании на других платформах RK3588 оно колебалось между 8 и 10+ Вт.
Wiki также рекомендует использовать fuser
во время воспроизведения:
1 2 |
pi@NanoPi-R6S:~$ fuser /dev/mpp_service /dev/mpp_service: 16779 |
Наличие вывода указывает на аппаратное декодирование VP9. После закрытия вкладки YouTube вывод отсутствует:
1 2 |
pi@NanoPi-R6S:~$ fuser /dev/mpp_service pi@NanoPi-R6S:~$ |
Переключение на 4K (в YouTube) при выводе на дисплей 1080p60 также не вызвало проблем.
Уверенность позволила попробовать локальное 8K-видео AV1 через командную строку:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
pi@NanoPi-R6S:~/Videos$ export DISPLAY=:0.0 pi@NanoPi-R6S:~/Videos$ mpv "8K Sample Video _ Alpha 1 _ Sony _ α--ucUFBTUYLI.mkv" (+) Video --vid=1 (*) (av1 7680x4320 29.970fps) (+) Audio --aid=1 --alang=eng (*) (opus 2ch 48000Hz) arm_release_ver of this libmali is 'g6p0-01eac0', rk_so_ver is '6'. [vaapi] libva: vaGetDriverNameByIndex() failed with invalid VADisplay, driver_name = (null) Cannot load libcuda.so.1 xcb_connection_has_error() returned true AO: [pulse] 48000Hz stereo 2ch float VO: [gpu] 7680x4320 yuv420p AV: 00:00:08 / 00:01:55 (7%) A-V: 0.012 Dropped: 12 Audio device underrun detected. AV: 00:00:08 / 00:01:55 (7%) A-V: 0.413 Dropped: 17 Audio/Video desynchronisation detected! Possible reasons include too slow hardware, temporary CPU spikes, broken drivers, and broken files. Audio position will not match to the video (see A-V status field). AV: 00:00:08 / 00:01:55 (8%) A-V: 0.388 Dropped: 23 Audio device underrun detected. AV: 00:00:09 / 00:01:55 (8%) A-V: 0.610 Dropped: 35 Audio device underrun detected. AV: 00:00:09 / 00:01:55 (9%) A-V: 0.693 Dropped: 47 Audio device underrun detected. AV: 00:00:10 / 00:01:55 (9%) A-V: 1.300 Dropped: 65 Audio device underrun detected. AV: 00:01:09 / 00:01:55 (61%) A-V: 31.817 Dropped: 1159 Audio device underrun detected. AV: 00:01:09 / 00:01:55 (61%) A-V: 31.817 Dropped: 1159 Audio device underrun detected. AV: 00:01:55 / 00:01:55 (100%) A-V: 0.000 Dropped: 1544 Exiting... (End of file) |
Результат неудовлетворительный: обрывки звука, множество сброшенных кадров, подтормаживающее видео. Проверка традиционного 4K H.264 @ 30 кадров/с:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
pi@NanoPi-R6S:/media/pi/USB3_NTFS/Video_Samples/4K$ mpv --fs big_buck_bunny_4k_H264_30fps.mp4 (+) Video --vid=1 (*) (h264 3840x2160 30.000fps) (+) Audio --aid=1 (*) (mp3 2ch 48000Hz) Audio --aid=2 (*) (ac3 6ch 48000Hz) File tags: Artist: Blender Foundation 2008, Janus Bager Kristensen 2013 Comment: Creative Commons Attribution 3.0 - http://bbb3d.renderfarming.net Composer: Sacha Goedegebure Genre: Animation Title: Big Buck Bunny, Sunflower version arm_release_ver of this libmali is 'g6p0-01eac0', rk_so_ver is '6'. [vaapi] libva: vaGetDriverNameByIndex() failed with invalid VADisplay, driver_name = (null) Cannot load libcuda.so.1 AO: [pulse] 48000Hz stereo 2ch float VO: [gpu] 3840x2160 yuv420p AV: 00:02:03 / 00:10:34 (19%) A-V: 0.000 Cache: 163s/150MB Exiting... (Quit) |
Проблем нет. Но система не справляется и с 4K H.265 @ 60 кадров/с:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
pi@NanoPi-R6S:/media/pi/USB3_NTFS/Video_Samples/4K$ mpv --fs Fifa_WorldCup2014_Uruguay-Colombia_4K-x265.mp4 (+) Video --vid=1 (*) (hevc 3840x2160 59.940fps) (+) Audio --aid=1 (*) (ac3 6ch 48000Hz) arm_release_ver of this libmali is 'g6p0-01eac0', rk_so_ver is '6'. [vaapi] libva: vaGetDriverNameByIndex() failed with invalid VADisplay, driver_name = (null) Cannot load libcuda.so.1 AO: [pulse] 48000Hz 5.1(side) 6ch float VO: [gpu] 3840x2160 yuv420p AV: 00:00:02 / 00:15:00 (0%) A-V: 0.450 Dropped: 29 Cache: 171s/150MB Audio/Video desynchronisation detected! Possible reasons include too slow hardware, temporary CPU spikes, broken drivers, and broken files. Audio position will not match to the video (see A-V status field). AV: 00:00:24 / 00:15:00 (3%) A-V: 26.147 Dropped: 837 Cache: 174s/150MB Exiting... (Quit) |
FriendlyElec утверждает, что предустановленный Kodi 19.4 поддерживает аппаратное декодирование. Проверка видео в Kodi.
Интерфейс информации изменился, но результаты идентичны: H.264 @ 30 кадров/с воспроизводится нормально, H.265 @ 60 кадров/с – непригодно для просмотра из-за сброса кадров.
Прогресс есть, но воспроизведение видео в Linux требует доработки. Побочная проблема: беспроводная клавиатура иногда теряла отзывчивость при подключенном USB HDD для локального видео. Отключение HDD решало проблему.
Энергопотребление
Измерения проведены при подключении NanoPi R6S к HDMI-дисплею, сети 2.5GbE и двум RF-приемникам клавиатуры/мыши.
Результаты при настройках по умолчанию:
- Выключено – 0.9 Вт (Довольно высокий показатель, сохраняется даже при отключении всех устройств от NanoPi R6S, кроме кабеля питания. Отключение кабеля снижает показания ваттметра до 0.4 Вт, значит плата потребляет ~0.5 Вт в выключенном состоянии)
- Простой – 4.6 Вт
- 4K YouTube в Firefox (полный экран – ПО-декодирование) – 9.7–11.3 Вт
- 4K YouTube в Chromium (полный экран – Апп.-декодирование) – 5.3–7.3 Вт
- Нагрузка на все 8 ядер (stress -c 8) – 10.9 Вт
Дополнительно оценено влияние режима “performance” на энергопотребление с помощью скрипта sbc-bench.sh в режиме review.
- Простой – 5.4 Вт
- 4K YouTube в Firefox (полный экран – ПО-декодирование) – 9.9–11.6 Вт
- 4K YouTube в Chromium (полный экран – Апп.-декодирование) – 6.6–8.6 Вт
- Нагрузка на все 8 ядер (stress -c 8) – 11.4 Вт
- CPU Miner (часть sbc-bench.sh review) – 11.2 Вт
Включение режимов “performance” увеличивает энергопотребление на 0.3–1.2 Вт в зависимости от нагрузки. Значимость зависит от конкретного сценария использования.
Итоги
После трудного старта (не связанного с поддержкой FriendlyElec) Ubuntu 22.04 наконец установлена на NanoPi R6S. Система работает стабильно (аптайм >5 дней). Производительность отличная, как на других платформах Rockchip RK3588(S), а поддержка ПО улучшилась, но до “работает из коробки, как на x86” еще далеко.
Аппаратное ускорение 3D-графики и декодирования видео реализовано, но работает не во всех программах. Радует аппаратное декодирование VP9 в YouTube и плавная работа WebGL-демо в Chromium. Не выявлено проблем с сетевыми интерфейсами 2.5GbE, а быстрая внутренняя память eMMC обеспечивает быструю загрузку и отзывчивость. Металлический корпус эффективно охлаждает безвентиляторную систему под нагрузкой. К проблемам относятся аномально низкий результат Chromium в Speedometer 2.0 и повышенное энергопотребление.
Благодарность FriendlyElec за предоставленные образцы NanoPi R6S. Модель доступна за $139 плюс доставка в фирменном магазине, а также у реселлеров на Amazon и Aliexpress .
Выражаем свою благодарность источнику, с которого взята и переведена статья, сайту cnx-software.com.
Оригинал статьи вы можете прочитать здесь.