Обзор мини-ПК и роутера NanoPi R6S на RK3588S – Часть 2: Ubuntu 22.04

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.

NanoPi R6S Ubuntu 22.04

Хотя USBImager должен поддерживать запись сжатых образов, создание issue на GitLab и пояснение разработчика указали на ограничение формата GZIP ( RFC 1952 ): размер файла ограничен 4 ГБ из-за 32-битного поля хранения. Действительно, при открытии gz-файла в Ubuntu отображался некорректный размер 3.5 ГБ вместо 7.8 ГБ… gzip (в основном) игнорирует заявленный размер и распаковывает весь файл для определения реального размера. Этим объясняется работоспособность меньшего по размеру образа FriendlyWrt и сбой с десктопными ОС… Проблема в USBImager пока не решена, поэтому важно распаковывать gz-файлы перед записью, а производителям плат стоит избегать сжатия gzip в пользу современных форматов.

На выяснение ушло более 10 часов, но теперь можно продолжить обзор…

Информация о системе Ubuntu 22.04

Основные характеристики системы:

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 ГБ

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:

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 МГц (измерено), что не является проблемой; объяснение будет приведено далее.

SBC Bench NanoPi R6S

Остальные результаты схожи с другими платформами на RK3588(S) и значительно выше, чем на Raspberry Pi 4.

Speedometer 2.0 в браузере Chromium показал разочаровывающий результат:

Speedometer 2.0 NanoPi R6S Ubuntu 22.04 Chromium

Показатели стабильны между прогонами; повторный тест позже дал 17.1 запуска в минуту… Speedometer 2.0 NanoPi R6S Ubuntu 22.04 Chromium details

Firefox обычно медленнее в этом тесте, но на NanoPi R6S с Ubuntu 22.04 он показал 41.3 запуска в минуту в Firefox 110.

Speedometer 2.0 NanoPi R6S Ubuntu 22.04 Firefox

Причина, вероятно, в проблемах конфигурации Chromium. На плате Khadas Edge2 с тем же Rockchip RK3588S результаты составили 80.7 в Chromium и 53.12 в Firefox.

Тестирование и бенчмарки накопителей

Производительность eMMC проверена через iozone3:

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 :

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:

  • Скачивание:
$ 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.

  • Загрузка:
$ 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.

  • Полный дуплекс:
$ 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» для выявления/исправления типовых проблем и отображения ключевых характеристик железа и ПО:

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

В логе выше не видно, но предупреждения выделены красным:

SBC Bench Review Mode

В данном случае скрипт переключил режимы управления (governors) CPU, GPU, NPU и ОЗУ с «ondemand» на «performance». Это обеспечивает максимальную производительность в тестах, но может быть неоптимально для сценариев с ограничением энергопотребления или работы от батареи.

После вывода строк со временем и частотами CPU можно перезапустить тесты. Начнем с 7-zip:

$ 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:

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-накопителя:

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:

$ 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.

В первом прогоне не было повторных передач, но во втором появились, как при настройках по умолчанию:

$ 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 для оценки эффекта новых настроек.

Firefox Speedometer 2.0 Performance governor

57 баллов – примерно на 38% выше 41.3 балла при настройках по умолчанию. Теперь результат лучше, чем у Khadas Edge2 (со стандартными настройками). Улучшение наблюдается и в Chromium: 21.8 баллов. Это все еще на 75% медленнее, чем на Edge2, так что чуда не произошло…

Chromium Speedometer 2.0 Performance governor

Режим review также способен выявлять проблемы с накопителями: поддельные SD-карты, изношенные диски и т.д. При тестировании с заведомо поддельной microSD картой она была определена как «Definite counterfeit APPSD», а скрипт указал на ошибки в dmesg:

### 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:

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:

NanoPi R6S glmark2-es2-wayland

Работает достаточно хорошо. Вывод в терминале:

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:

..:: 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 в адресной строке.

NanoPi R6S Ubuntu 22.04 GPU acceleration Chromium

WebGL и WebGL2 действительно активированы.

Chromium Arm Mali LODX driver

Используется драйвер Arm «Mali-LODX». Проверка демо WebGL Aquarium.

NanoPi R6S WebGL Aquarium 1000 fish
1000 рыб @ 60 кадров/с

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

NanoPi R6S WebGL Aquarium 5000 fish

5000 рыб @ 31 кадров/сПри увеличении до 10 000 рыб и более появляются артефакты отрисовки (рыбы показываются периодически) и падает кадровая частота. Подтверждено: аппаратное ускорение 3D-графики работает в образе Ubuntu 22.04, включая Chromium.

Воспроизведение видео

В предыдущих обзорах оборудования на Rockchip RK3588(S) под Linux были проблемы с воспроизведением видео, но достигнут прогресс. Во-первых, как видно из скриншота «GPU» Chromium, «Video Decode» активирован, а поддержка аппаратного ускорения заявлена для HEVC, H.264, VP9 до 3840×2160.

Chromium RK3588S Video Acceleration Information

Проверка 4K-видео на 1080p60…

YouTube NanoPi R6S Full HD VP9 hardware video decoding

Воспроизведение без сброса кадров. Как убедиться в использовании аппаратного декодирования? Первый признак – энергопотребление: ~5.4 Вт, тогда как при программном декодировании на других платформах RK3588 оно колебалось между 8 и 10+ Вт.

Wiki также рекомендует использовать `fuser` во время воспроизведения:

pi@NanoPi-R6S:~$ fuser /dev/mpp_service
/dev/mpp_service:    16779

Наличие вывода указывает на аппаратное декодирование VP9. После закрытия вкладки YouTube вывод отсутствует:

pi@NanoPi-R6S:~$ fuser /dev/mpp_service
pi@NanoPi-R6S:~$

Переключение на 4K (в YouTube) при выводе на дисплей 1080p60 также не вызвало проблем.

YouTube NanoPi R6S 4K VP9 hardware video decoding

Уверенность позволила попробовать локальное 8K-видео AV1 через командную строку:

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 кадров/с:

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 кадров/с:

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.

Kodi 4K H.264 infoKodi 4K H.265 info

Интерфейс информации изменился, но результаты идентичны: 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.

Оригинал статьи вы можете прочитать здесь.

0 0 votes
Article Rating
Подписаться
Уведомление о
guest

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.

0 Комментарий
Oldest
Newest Most Voted
Inline Feedbacks
View all comments