I’ve recently received an early sample of Radxa ROCK5 Model B (aka ROCK 5B) SBC part of the “Developer Edition” batch with 16GB RAM, and already showed the hardware and it booting successfully in Debian 11.
I’ve now spent more time with the board, and as part of the “debug party” tested performance and features in Debian 11. As one would expect, some things work OK, but others still need improvement.
Rock 5B benchmarks
Let’s run some benchmarks on the board to test performance and stability starting with SBC Bench script:
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 |
$ sudo ./sbc-bench.sh ./sbc-bench.sh: line 9: warning: setlocale: LC_MESSAGES: cannot change locale (en_US.UTF-8): No such file or directory sbc-bench v0.9.8 Installing needed tools: Done. Checking cpufreq OPP. Done (results will be available in 27-41 minutes). Executing tinymembench. Done. Executing RAM latency tester. Done. Executing OpenSSL benchmark. Done. Executing 7-zip benchmark. Done. Checking cpufreq OPP. Done (24 minutes elapsed). Memory performance (different CPU cores measured individually): memcpy: 5818.7 MB/s (0.2%) memset: 21920.2 MB/s memcpy: 10457.5 MB/s memset: 28493.1 MB/s (1.2%) memcpy: 10424.6 MB/s memset: 28501.9 MB/s (0.6%) 7-zip total scores (3 consecutive runs): 16243,16303,16200 OpenSSL results (different CPU cores measured individually): type 16 bytes 64 bytes 256 bytes 1024 bytes 8192 bytes 16384 bytes aes-128-cbc 166016.73k 481326.98k 935623.51k 1231227.90k 1355688.62k 1365895.85k (Cortex-A55) aes-128-cbc 635522.45k 1307613.63k 1670568.36k 1782235.82k 1826261.67k 1832135.34k (Cortex-A76) aes-128-cbc 638225.59k 1304051.80k 1665359.53k 1776506.20k 1820434.43k 1826379.09k (Cortex-A76) aes-192-cbc 157064.37k 431452.22k 764915.71k 948517.55k 1020783.27k 1026446.68k (Cortex-A55) aes-192-cbc 599479.94k 1143266.13k 1411767.89k 1470007.98k 1523758.42k 1527644.16k (Cortex-A76) aes-192-cbc 599362.62k 1139635.80k 1407392.09k 1465393.83k 1518720.34k 1522652.50k (Cortex-A76) aes-256-cbc 152304.29k 393035.69k 657636.10k 792066.39k 842295.98k 846255.45k (Cortex-A55) aes-256-cbc 600001.83k 1016406.98k 1223527.85k 1283264.85k 1307822.76k 1310501.55k (Cortex-A76) aes-256-cbc 597574.84k 1012813.76k 1219761.83k 1278820.69k 1303508.31k 1306198.02k (Cortex-A76) Full results uploaded to http://ix.io/44ua. |
If you look at the full results, you’ll notice the Cortex-A76 cores on my board are only clocked at up to 2,304 MHz, instead of the 2.4GHz advertiser, and we’ve already looked as to why in your post about PTVM. So that just means they are some RK3588 processors may be very slightly faster or slower due to normal differences that occured during manufacturing. It’s quite possible that mass-manufactured boards will all be sold with the OS set to run the processor at up to 2.2 or 2.3 GHz by default. For reference, the CPU temperature reached up to 62.8°C during the benchmark, so the heatsink/fan combo on the developer edition board is doing its job.
Rock 5B is clearly ahead of other SBCs when compared to Raspberry Pi 4, Khadas VIM4, and ODROID-N2+, especially when it comes to memory bandwidth, but the four Cortex-A76 and four Cortex-A55 cores from Rockchip RK3588 also help a great deal with 7-zip. AES-256 results shows it does not matter whether a Cortex-A72 or Cortex-A76 CPU is used for this type of workload as it scales with frequency. That’s at least true for processor with Armv8 Crypto extension which are missing on the Broadcom BCM2711 CPU found in the Raspberry Pi board.
An important side note is that I had to run sbc-bench.sh four times before completing the run. That’s because my board is not quite as stable as other beta testers, and it will reboot without warning from time to time. It can happen under load or at idle, and after extensive testing, it does not appear related to the power supply/USB cable, CPU frequency, or overheating. It just happens and there’s no output in the serial console.
I still tried to install Phoronix:
1 2 3 |
sudo apt install php-cli php-gd php-xml php-zip wget https://phoronix-test-suite.com/releases/repo/pts.debian/files/phoronix-test-suite_10.8.4_all.deb dpkg -i phoronix-test-suite_10.8.4_all.deb |
and compare it against UP 4000 (Intel N3350) and Raspberry Pi 4 boards.
1 |
sudo phoronix-test-suite benchmark 2207012-UPBO-201005966 |
Such test would take close to two hours, and my board will not last that long without a reboot, so I only have a few results:
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 |
SQLite 3.30.1: pts/sqlite-2.1.0 [Threads / Copies: 1] Test 1 of 18 Estimated Trial Run Count: 3 Estimated Test Run-Time: 2 Minutes Estimated Time To Completion: 1 Hour, 12 Minutes [10:32 UTC] Running Pre-Test Script @ 09:20:37 Started Run 1 @ 09:20:37 Running Interim Test Script @ 09:21:05 Started Run 2 @ 09:21:07 Running Interim Test Script @ 09:21:36 Started Run 3 @ 09:21:38 Running Post-Test Script @ 09:22:05 Threads / Copies: 1: 26.097 26.367 25.57 Average: 26.011 Seconds Deviation: 1.56% Seconds < Lower Is Better Jetson Nano 4GB ..... 103.21 |============================================== RPi4 4GB ............ 79.39 |=================================== UPboard 2GB ......... 64.54 |============================= Rock 5 Model B 16GB . 26.01 |============ UP 4000 2GB ......... 22.78 |========== |
SQLite probably is highly dependent on storage performance, but the Rock 5B board is right there close to the UP 4000.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
RAMspeed SMP 3.5.0: pts/ramspeed-1.4.3 [Type: Copy - Benchmark: Integer] Test 2 of 18 Estimated Trial Run Count: 3 Estimated Test Run-Time: 11 Minutes Estimated Time To Completion: 1 Hour, 11 Minutes [10:32 UTC] Started Run 1 @ 09:22:14 Started Run 2 @ 09:23:53 Started Run 3 @ 09:25:31 Type: Copy - Benchmark: Integer: 21521.29 21537.26 21418.27 Average: 21492.27 MB/s Deviation: 0.30% MB/s > Higher Is Better RPi4 4GB ............ 4394.59 |========= UPboard 2GB ......... 4493.08 |========= UP 4000 2GB ......... 7595.21 |================ Jetson Nano 4GB ..... 9078.36 |=================== Rock 5 Model B 16GB . 21492.27 |============================================ |
The RAMSpeed test confirms the really high memory bandwidth we’ve seen with sbc-bench.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
perf-bench: pts/perf-bench-1.0.2 [Benchmark: Sched Pipe] Test 3 of 18 Estimated Trial Run Count: 3 Estimated Test Run-Time: 3 Minutes Estimated Time To Completion: 1 Hour [10:27 UTC] Started Run 1 @ 09:27:17 Started Run 2 @ 09:28:33 Started Run 3 @ 09:29:49 Benchmark: Sched Pipe: 69891 68878 69117 Average: 69295 ops/sec Deviation: 0.76% ops/sec > Higher Is Better RPi4 4GB ............ 26108 |================= UPboard 2GB ......... 30201 |=================== Jetson Nano 4GB ..... 56811 |==================================== Rock 5 Model B 16GB . 69295 |============================================ UP 4000 2GB ......... 74060 |=============================================== |
The Rockchip RK3588 board is also close to the Intel Celeron N3350 dual-core “Apollo Lake” board in perf-bench…
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 |
Go Benchmarks: pts/go-benchmark-1.1.4 [Test: build] Test 4 of 18 Estimated Trial Run Count: 3 Estimated Test Run-Time: 2 Minutes Estimated Time To Completion: 58 Minutes [10:28 UTC] Started Run 1 @ 09:31:12 Started Run 2 @ 09:32:03 Started Run 3 @ 09:32:51 Started Run 4 @ 09:33:39 * Started Run 5 @ 09:34:27 * Started Run 6 @ 09:35:14 * Started Run 7 @ 09:36:02 * Started Run 8 @ 09:36:50 * Started Run 9 @ 09:37:38 * Started Run 10 @ 09:38:26 * Test: build: 47112672907 43886576990 43751470061 43499157738 43674887716 43755782879 44108562449 43758243155 43733228264 43658320647 Average: 44093890281 Nanoseconds/Operation Deviation: 2.43% Samples: 10 Nanoseconds/Operation < Lower Is Better UPboard 2GB ......... 115898826367 |======================================== Jetson Nano 4GB ..... 75032734873 |========================== RPi4 4GB ............ 71596906538 |========================= UP 4000 2GB ......... 61460487908 |===================== Rock 5 Model B 16GB . 44093890281 |=============== |
… but is quite faster in the Go benchmark. That’s the last test I could manage.
For reference, I also tried to limited to maximum frequency of the Cortex-A76 cores using two methods, first to 2.21 GHz:
1 2 3 4 |
sudo cpufreq-set -c 4 -u 2.21GHz sudo cpufreq-set -c 5 -u 2.21GHz sudo cpufreq-set -c 6 -u 2.21GHz sudo cpufreq-set -c 7 -u 2.21GHz |
then 2.02 GHz with the user space governor:
1 2 3 4 |
sudo cpufreq-set -c 4 -f 2.02GHz sudo cpufreq-set -c 5 -f 2.02GHz sudo cpufreq-set -c 6 -f 2.02GHz sudo cpufreq-set -c 7 -f 2.02GHz |
It did not fix my stability issue, but something funny happened:
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 |
SQLite 3.30.1: pts/sqlite-2.1.0 [Threads / Copies: 1] Test 1 of 18 Estimated Trial Run Count: 3 Estimated Test Run-Time: 2 Minutes Estimated Time To Completion: 1 Hour, 9 Minutes [13:59 UTC] Running Pre-Test Script @ 12:50:15 Started Run 1 @ 12:50:15 Running Interim Test Script @ 12:50:37 Started Run 2 @ 12:50:39 Running Interim Test Script @ 12:51:02 Started Run 3 @ 12:51:04 Running Post-Test Script @ 12:51:27 Threads / Copies: 1: 20.276 20.942 21.303 Average: 20.840 Seconds Deviation: 2.50% Seconds < Lower Is Better Jetson Nano 4GB ....... 103.21 |============================================ RPi4 4GB .............. 79.39 |================================== UPboard 2GB ........... 64.54 |============================ Rock 5B 16GB 2.21 GHz . 29.77 |============= UP 4000 2GB ........... 22.78 |========== Rock 5B 16GB 2.02GHz .. 20.84 |========= |
The Rock 5B is faster at 2.02 GHz with the userspace governor than at 2.21 or 2.3 GHz with the ondemand governor.
Storage testing and benchmarks
I’ve installed iozone3 to first test the 16GB eMMC flash module performance:
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 |
iozone -e -I -a -s 1000M -r 4k -r 16k -r 512k -r 1024k -r 16384k -i 0 -i 1 -i 2 Iozone: Performance Test of File I/O Version $Revision: 3.489 $ Compiled for 64 bit mode. Build: linux Include fsync in write timing O_DIRECT feature enabled Auto Mode File size set to 1024000 kB Record Size 4 kB Record Size 16 kB Record Size 512 kB Record Size 1024 kB Record Size 16384 kB Command line used: iozone -e -I -a -s 1000M -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 1024000 4 14921 17534 24739 24995 16692 11074 1024000 16 24050 34114 39251 36476 30879 29032 1024000 512 38959 38633 158941 152590 152197 37266 1024000 1024 39338 39944 170271 168652 169894 37979 1024000 16384 39434 40186 205950 203861 206698 40031 iozone test complete. |
That’s 205MB/s sequential read speed and 40 MB/s sequential write speed, and the random read/write values looks to be fairly OK to me.
Now let’s test one of the USB 3.0 Type-A (5Gbps) ports with ORICO USB 3.2 Gen 1 enclosure fitted with an Apacer NVMe SSD capable of up to 1,800 MB/s reads, and 1,100 MB/s writes:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
$ sudo iozone -e -I -a -s 10000M -r 16384k -i 0 -i 1 Include fsync in write timing O_DIRECT feature enabled Auto Mode File size set to 10240000 kB Record Size 16384 kB Command line used: iozone -e -I -a -s 10000M -r 16384k -i 0 -i 1 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 10240000 16384 375484 382439 325848 329745 iozone test complete. |
375 MB/s writes, and 320 MB/s reads. For reference, 375MB/s corresponds to 3 Gbps, so even taking USB overhead into account, there should still be some optimizations to boost that further.
Let’s now move the M.2 SSD from the USB enclosure directly to the Rock 5B board. I’ve kept the thermal pad and “heatsink” from the ORICO enclosure.
Oops, the board will not boot anymore with no display output and no networking. So I attached a USB-to-serial debug board and noticed the eMMC flash appeared to be damaged:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
$ cat radxa-eemc-flash.txt [ 14.313676] mmc1: switch to bus width for hs400 failed, err:-84 [ 14.313696] mmc1: tried to HW reset card, got error -84 [ 14.313809] blk_update_request: I/O error, dev mmcblk1, sector 0 op 0x0:(READ) flags 0x0 phys_seg 1 prio class 0 [ 14.314014] vendor storage:20190527 ret = -1 [ 14.314292] sdhci-dwcmshc fe2e0000.mmc: error -84 requesting status [ 14.314303] mmcblk1: recovery failed! [ 14.314322] blk_update_request: I/O error, dev mmcblk1, sector 1 op 0x0:(READ) flags 0x0 phys_seg 1 prio class 0 [ 14.314333] Buffer I/O error on dev mmcblk1, logical block 0, async page read [ 14.314742] sdhci-dwcmshc fe2e0000.mmc: error -84 requesting status [ 14.314749] mmcblk1: recovery failed! [ 14.314768] blk_update_request: I/O error, dev mmcblk1, sector 0 op 0x0:(READ) flags 0x0 phys_seg 1 prio class 0 [ 14.314775] Buffer I/O error on dev mmcblk1, logical block 0, async page read [ 14.314844] mmcblk1: unable to read partition table [ 14.317217] Waiting for root device PARTUUID=614E0000-0000-4B53-8000-1D28000054A9... [ 34.201408] vcc3v3_pcie30: disabling |
Since I don’t have a USB eMMC flash adapter with me, I prepared myself to install Debian 11 (May 1, 2022) on a microSD card, until I found out the eMMC flash module was not firmly in place in its socket. It had become slightly loose when I installed the SSD and pressing on the module fixed the error. We can now run iozone3:
1 2 3 4 |
rock@rock-5b:/media/rock/443c7b9a-38a0-46a2-a1d6-29a1066b50a9$ sudo iozone -e -I -a -s 10000M -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 10240000 16384 2299628 2249754 1976579 1977936 |
Fantastic! 2.2GB/s that’s ever faster than the theoretical speed of the SSD!!! Those are obviously crazy numbers with caching involved, so let’s try one more time:
1 2 3 4 5 |
rock@rock-5b:/media/rock/443c7b9a-38a0-46a2-a1d6-29a1066b50a9$ sudo iozone -e -I -a -s 10000M -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 10240000 16384 1063572 1050722 1622210 1635731 |
It’s gone down a bit, but let’s carry on:
1 2 3 4 |
rock@rock-5b:/media/rock/443c7b9a-38a0-46a2-a1d6-29a1066b50a9$ sudo iozone -e -I -a -s 10000M -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 10240000 16384 672053 664168 1424390 1429735 |
And one last time with a 100GB file that won’t fit into memory:
1 2 3 4 |
rock@rock-5b:/media/rock/443c7b9a-38a0-46a2-a1d6-29a1066b50a9$ sudo iozone -e -I -a -s 100000M -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 102400000 16384 666173 666870 1435104 1434803 |
It’s the same as the last test, so the numbers we’ve got over NVMe/PCIe x4 Gen 3.0 are … about 1401 MB/s sequential read speed, and 650 MB/s sequential write speed.
I wanted to try microSD card support as well, but sadly, it appears the only microSD card I have with me is physically damaged… So I get a bunch of I/O errors unrelated to Rock 5B, as the card, taken from a Raspberry Pi, will not work on the Pi board either…
Video Output
As we’ve seen in the first part of the review, the HDMI port next to the USB ports works fine, but the HDMI port next to it does not.
I’ve also tried to connect a MINIX USB Type-C dock to check if DisplayPort alt mode would work, but it did not either. More than that latter though. Debian 11 will only show the display attached to the first HDMI port in all cases.
Networking (WiFi & 2.5GbE)
One key selling point of the Rock 5B SBC is its networking capabilities. It comes a with 2.5GbE port, and supports WiFI 6 M.2 cards.
Let’s try by testing the 2.5GbE port with iperf3 first.
- Download to Rock 5B:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
$ iperf3 -t 60 -c 192.168.31.93 -i 10 Connecting to host 192.168.31.93, port 5201 [ 5] local 192.168.31.85 port 39384 connected to 192.168.31.93 port 5201 [ ID] Interval Transfer Bitrate Retr Cwnd [ 5] 0.00-10.00 sec 2.73 GBytes 2.35 Gbits/sec 0 1.06 MBytes [ 5] 10.00-20.00 sec 2.74 GBytes 2.35 Gbits/sec 0 1.59 MBytes [ 5] 20.00-30.00 sec 2.74 GBytes 2.35 Gbits/sec 0 1.59 MBytes [ 5] 30.00-40.00 sec 2.73 GBytes 2.35 Gbits/sec 0 2.39 MBytes [ 5] 40.00-50.00 sec 2.74 GBytes 2.35 Gbits/sec 0 2.39 MBytes [ 5] 50.00-60.00 sec 2.74 GBytes 2.35 Gbits/sec 0 2.39 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.05 sec 16.4 GBytes 2.35 Gbits/sec receiver iperf Done. |
- Upload:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
iperf3 -t 60 -c 192.168.31.93 -i 10 -R Connecting to host 192.168.31.93, port 5201 Reverse mode, remote host 192.168.31.93 is sending [ 5] local 192.168.31.85 port 39388 connected to 192.168.31.93 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.73 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.05 sec 16.4 GBytes 2.35 Gbits/sec 81 sender [ 5] 0.00-60.00 sec 16.4 GBytes 2.35 Gbits/sec receiver |
2.35 Gbps in both directions, that’s the best we can usually achieve. So let’s be naughty with a full-duplex test:
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.93 -i 10 --bidir Connecting to host 192.168.31.93, port 5201 [ 5] local 192.168.31.85 port 39392 connected to 192.168.31.93 port 5201 [ 7] local 192.168.31.85 port 39394 connected to 192.168.31.93 port 5201 [ ID][Role] Interval Transfer Bitrate Retr Cwnd [ 5][TX-C] 0.00-10.00 sec 2.73 GBytes 2.34 Gbits/sec 0 2.15 MBytes [ 7][RX-C] 0.00-10.00 sec 2.63 GBytes 2.26 Gbits/sec [ 5][TX-C] 10.00-20.00 sec 2.72 GBytes 2.34 Gbits/sec 0 2.26 MBytes [ 7][RX-C] 10.00-20.00 sec 2.41 GBytes 2.07 Gbits/sec [ 5][TX-C] 20.00-30.00 sec 2.73 GBytes 2.34 Gbits/sec 0 2.26 MBytes [ 7][RX-C] 20.00-30.00 sec 2.45 GBytes 2.11 Gbits/sec [ 5][TX-C] 30.00-40.00 sec 2.73 GBytes 2.34 Gbits/sec 0 2.26 MBytes [ 7][RX-C] 30.00-40.00 sec 2.50 GBytes 2.15 Gbits/sec [ 5][TX-C] 40.00-50.00 sec 2.73 GBytes 2.34 Gbits/sec 0 2.26 MBytes [ 7][RX-C] 40.00-50.00 sec 2.48 GBytes 2.13 Gbits/sec [ 5][TX-C] 50.00-60.00 sec 2.73 GBytes 2.34 Gbits/sec 0 2.26 MBytes [ 7][RX-C] 50.00-60.00 sec 2.60 GBytes 2.23 Gbits/sec - - - - - - - - - - - - - - - - - - - - - - - - - [ ID][Role] Interval Transfer Bitrate Retr [ 5][TX-C] 0.00-60.00 sec 16.4 GBytes 2.34 Gbits/sec 0 sender [ 5][TX-C] 0.00-60.05 sec 16.4 GBytes 2.34 Gbits/sec receiver [ 7][RX-C] 0.00-60.00 sec 15.1 GBytes 2.16 Gbits/sec 145 sender [ 7][RX-C] 0.00-60.05 sec 15.1 GBytes 2.16 Gbits/sec receiver iperf Done. |
2.34 Gbps and 2.16 Gbps, so Rock 5B handled 2.5GbE networking is really outstanding.
My board is fitted with a Realtek RTL8852BE-based Fn-Link 6252M-PUB WiFi 6 and Bluetooth 5.2 module, so let’s repeat the test with WiFi 6
- Download to Rock 5B:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
$ iperf3 -t 60 -c 192.168.31.148 -i 10 Connecting to host 192.168.31.148, port 5201 [ 5] local 192.168.31.85 port 45848 connected to 192.168.31.148 port 5201 [ ID] Interval Transfer Bitrate Retr Cwnd [ 5] 0.00-10.00 sec 769 MBytes 645 Mbits/sec 114 608 KBytes [ 5] 10.00-20.00 sec 280 MBytes 235 Mbits/sec 340 2.22 MBytes [ 5] 20.00-30.00 sec 295 MBytes 247 Mbits/sec 203 1.41 KBytes [ 5] 30.00-40.00 sec 674 MBytes 565 Mbits/sec 121 991 KBytes [ 5] 40.00-50.00 sec 489 MBytes 410 Mbits/sec 248 2.34 MBytes [ 5] 50.00-60.00 sec 496 MBytes 416 Mbits/sec 205 2.49 MBytes - - - - - - - - - - - - - - - - - - - - - - - - - [ ID] Interval Transfer Bitrate Retr [ 5] 0.00-60.00 sec 2.93 GBytes 420 Mbits/sec 1231 sender [ 5] 0.00-60.12 sec 2.93 GBytes 419 Mbits/sec receiver iperf Done. |
- Upload:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
$ iperf3 -t 60 -c 192.168.31.148 -i 10 -R Connecting to host 192.168.31.148, port 5201 Reverse mode, remote host 192.168.31.148 is sending [ 5] local 192.168.31.85 port 45852 connected to 192.168.31.148 port 5201 [ ID] Interval Transfer Bitrate [ 5] 0.00-10.00 sec 709 MBytes 594 Mbits/sec [ 5] 10.00-20.00 sec 1.01 GBytes 870 Mbits/sec [ 5] 20.00-30.00 sec 1.01 GBytes 871 Mbits/sec [ 5] 30.00-40.00 sec 1.02 GBytes 873 Mbits/sec [ 5] 40.00-50.00 sec 1.00 GBytes 863 Mbits/sec [ 5] 50.00-60.00 sec 1.00 GBytes 859 Mbits/sec - - - - - - - - - - - - - - - - - - - - - - - - - [ ID] Interval Transfer Bitrate Retr [ 5] 0.00-60.06 sec 5.74 GBytes 821 Mbits/sec 21 sender [ 5] 0.00-60.00 sec 5.74 GBytes 822 Mbits/sec receiver iperf Done. |
We’re getting close to Gigabit Ethernet speeds at close to 870 Mbps, but for the download test at least we can see a lot of variability and retries… For reference, the Xiaomi Mi AX6000 router used for testing is placed at around one meter from the board, and a Ubuntu 20.04 laptop connected to a Realtek RTL8156BG 2.5GbE to USB 3.0 dongle can be found on the other side of the connection.
Bluetooth
Since the module is supposed to support Bluetooth too, I planned to test Bluetooth with my phone, but Bluetooth is not enabled by default.
USB on ROCK 5B
We’ve already done some USB testing with in the storage and display sections, but here’s what it looks when USB keyboard and mouse, as well as the MINIX USB-C dock are connected:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
$ lsusb -t /: Bus 10.Port 1: Dev 1, Class=root_hub, Driver=xhci-hcd/1p, 5000M /: Bus 09.Port 1: Dev 1, Class=root_hub, Driver=xhci-hcd/1p, 480M |__ Port 1: Dev 2, If 0, Class=Hub, Driver=hub/5p, 480M |__ Port 5: Dev 4, If 0, Class=, Driver=, 480M /: Bus 08.Port 1: Dev 1, Class=root_hub, Driver=xhci-hcd/1p, 5000M /: Bus 07.Port 1: Dev 1, Class=root_hub, Driver=xhci-hcd/1p, 480M /: Bus 06.Port 1: Dev 1, Class=root_hub, Driver=xhci-hcd/1p, 5000M /: Bus 05.Port 1: Dev 1, Class=root_hub, Driver=xhci-hcd/1p, 480M /: Bus 04.Port 1: Dev 1, Class=root_hub, Driver=ohci-platform/1p, 12M |__ Port 1: Dev 3, If 0, Class=Human Interface Device, Driver=usbhid, 1.5M |__ Port 1: Dev 3, If 1, Class=Human Interface Device, Driver=usbhid, 1.5M /: Bus 03.Port 1: Dev 1, Class=root_hub, Driver=ohci-platform/1p, 12M /: Bus 02.Port 1: Dev 1, Class=root_hub, Driver=ehci-platform/1p, 480M /: Bus 01.Port 1: Dev 1, Class=root_hub, Driver=ehci-platform/1p, 480M |__ Port 1: Dev 2, If 0, Class=Hub, Driver=hub/4p, 480M |__ Port 2: Dev 6, If 0, Class=Human Interface Device, Driver=usbhid, 1.5M |
We have a bunch of USB 2.0 (480M) and USB 3.0 (5000M) devices as expected, plus slower HID devices that are our mouse and keyboard.
But when I connect the MINIX USB-C dock I get plenty of errors:
1 2 3 4 5 6 7 8 9 10 |
[ 179.375225] usb usb10-port1: Cannot enable. Maybe the USB cable is bad? [ 180.488474] usb usb10-port1: Cannot enable. Maybe the USB cable is bad? [ 182.258877] usb usb10-port1: Cannot enable. Maybe the USB cable is bad? [ 183.198591] usb usb10-port1: Cannot enable. Maybe the USB cable is bad? [ 184.308701] usb usb10-port1: Cannot enable. Maybe the USB cable is bad? [ 185.418519] usb usb10-port1: Cannot enable. Maybe the USB cable is bad? [ 186.698916] usb usb10-port1: Cannot enable. Maybe the USB cable is bad? [ 187.638708] usb usb10-port1: Cannot enable. Maybe the USB cable is bad? [ 188.785447] usb usb10-port1: Cannot enable. Maybe the USB cable is bad? [ 204.445990] usb usb10-port1: Cannot enable. Maybe the USB cable is bad? |
and the login screen will never show up on the display, just a blinking underscore on the top left of the screen. If I remove the MINIX USB-C dock, I can boot the board fully again, and Bus 09 and 10 are gone:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
$ lsusb -t /: Bus 08.Port 1: Dev 1, Class=root_hub, Driver=xhci-hcd/1p, 5000M /: Bus 07.Port 1: Dev 1, Class=root_hub, Driver=xhci-hcd/1p, 480M /: Bus 06.Port 1: Dev 1, Class=root_hub, Driver=xhci-hcd/1p, 5000M /: Bus 05.Port 1: Dev 1, Class=root_hub, Driver=xhci-hcd/1p, 480M /: Bus 04.Port 1: Dev 1, Class=root_hub, Driver=ohci-platform/1p, 12M |__ Port 1: Dev 2, If 0, Class=Human Interface Device, Driver=usbhid, 1.5M /: Bus 03.Port 1: Dev 1, Class=root_hub, Driver=ohci-platform/1p, 12M /: Bus 02.Port 1: Dev 1, Class=root_hub, Driver=ehci-platform/1p, 480M /: Bus 01.Port 1: Dev 1, Class=root_hub, Driver=ehci-platform/1p, 480M |__ Port 1: Dev 2, If 0, Class=Hub, Driver=hub/4p, 480M |__ Port 2: Dev 3, If 0, Class=Human Interface Device, Driver=usbhid, 1.5M |__ Port 2: Dev 3, If 1, Class=Human Interface Device, Driver=usbhid, 1.5M |
I had used Khadas VIM4 board’s 5V/3A power supply, so I decided to switch to a 100W GAN USB-C power adapter just in case the 480GB SSD drew a bit too much power. It boots just fine now, although I have a few errors at boot time:
1 2 3 4 |
[ 27.216985] usb 10-1: device not accepting address 6, error -71 [ 28.187045] usb usb10-port1: Cannot enable. Maybe the USB cable is bad? [ 29.827028] usb usb10-port1: Cannot enable. Maybe the USB cable is bad? [ 30.770419] usb usb10-port1: Cannot enable. Maybe the USB cable is bad? |
Those errors do not show continuously like previously. The idle power consumption is 10.1W with the internal 256GB NVMe SSD and USB-C dock with a 480GB SSD. But there are still some issues since the 480GB SSD does not show up at all:
1 2 3 4 5 6 7 8 9 |
rock@rock-5b:~$ lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT mmcblk1 179:0 0 14.5G 0 disk |-mmcblk1p1 179:1 0 512M 0 part `-mmcblk1p2 179:2 0 13.9G 0 part / mmcblk1boot0 179:32 0 4M 1 disk mmcblk1boot1 179:64 0 4M 1 disk nvme0n1 259:0 0 238.5G 0 disk `-nvme0n1p1 259:1 0 238.5G 0 part |
So the USB 2.0/3.0 Type-A ports work fine, but the USB-C port may have some issues.
GPIO testing
Rockchip RK3588 is supposed to have five GPIO banks numbered from GPIO0 to GPIO4, but I can see six in the Debian image:
1 2 3 4 5 6 7 |
$ ls -l /dev/gpiochip? crw------- 1 root root 254, 0 Jul 20 07:50 /dev/gpiochip0 crw------- 1 root root 254, 1 Jul 20 07:50 /dev/gpiochip1 crw------- 1 root root 254, 2 Jul 20 07:50 /dev/gpiochip2 crw------- 1 root root 254, 3 Jul 20 07:50 /dev/gpiochip3 crw------- 1 root root 254, 4 Jul 20 07:50 /dev/gpiochip4 crw------- 1 root root 254, 5 Jul 20 07:50 /dev/gpiochip5 |
Radxa provides the pinout and explains how to calculate the GPIO pin numbers in the Wiki.
We can try to pull up and down GPIO4_C6 (pin 27 on the 40-pin header) as follows:
1 2 3 4 5 6 |
cd /sys/class/gpio sudo sh -c 'echo 150 > export' cd gpio150 sudo sh -c 'echo out > direction' sudo sh -c 'echo 1 > value' sudo sh -c 'echo 0 > value' |
We’re also told the Rock 5B board supports the libmraa GPIO library, but there’s no documentation for that just yet.
GPU 3D acceleration is not enabled in Debian 11
Here’s the full output of glxinfo, and the important part is:
1 2 3 4 5 6 7 8 9 10 11 12 |
Extended renderer info (GLX_MESA_query_renderer): Vendor: Mesa/X.org (0xffffffff) Device: llvmpipe (LLVM 11.0.1, 128 bits) (0xffffffff) Version: 20.3.5 Accelerated: no Video memory: 15723MB Unified memory: no Preferred profile: core (0x1) Max core profile version: 4.5 Max compat profile version: 3.1 Max GLES1 profile version: 1.1 Max GLES[23] profile version: 3.2 |
llvmpipe means software rendering. There are some “mali” string in the kernel output though:
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 |
$ dmesg | grep -i mali [ 3.712680] mali fb000000.gpu: Kernel DDK version g11p0-01eac0 [ 3.712725] mali fb000000.gpu: Looking up mali-supply from device tree [ 3.712939] mali fb000000.gpu: Looking up mem-supply from device tree [ 3.713097] mali fb000000.gpu: Looking up mali-supply from device tree [ 3.713138] mali fb000000.gpu: Looking up mem-supply from device tree [ 3.713584] mali fb000000.gpu: leakage=22 [ 3.713635] mali fb000000.gpu: Looking up mali-supply from device tree [ 3.715452] mali fb000000.gpu: pvtm=874 [ 3.715991] mali fb000000.gpu: pvtm-volt-sel=3 [ 3.717178] mali fb000000.gpu: avs=0 [ 3.719315] W : [File] : drivers/gpu/arm/bifrost/platform/rk/mali_kbase_config_rk.c; [Line] : 136; [Func] : kbase_platform_rk_init(); power-off-delay-ms not available. [ 3.720480] mali fb000000.gpu: r0p0 status 5 is unknown; treating as r0p0 status 0 [ 3.720508] mali fb000000.gpu: GPU identified as 0x7 arch 10.8.6 r0p0 status 0 [ 3.720625] mali fb000000.gpu: No priority control manager is configured [ 3.720641] mali fb000000.gpu: No memory group manager is configured [ 3.720679] mali fb000000.gpu: Protected memory allocator not available [ 3.721767] mali fb000000.gpu: l=10000 h=85000 hyst=5000 l_limit=0 h_limit=800000000 h_table=0 [ 3.723453] mali fb000000.gpu: Probed as mali0 [ 3.902449] I : [File] : drivers/gpu/arm/mali400/mali/linux/mali_kernel_linux.c; [Line] : 405; [Func] : mali_module_init(); svn_rev_string_from_arm of this mali_ko is '', rk_ko_ver is '5', built at '11:53:13', on 'Jun 24 2022'. [ 3.902916] Mali: [ 3.902920] Mali device driver loaded [ 29.166873] mali fb000000.gpu: Loading Mali firmware 0x1010000 [ 29.167347] mali fb000000.gpu: Protected memory allocator not found, Firmware protected mode entry will not be supported [ 29.167364] mali fb000000.gpu: Protected memory allocator not found, Firmware protected mode entry will not be supported [ 29.167371] mali fb000000.gpu: Protected memory allocator not found, Firmware protected mode entry will not be supported |
So no luck here at this point in time.
VPU (Video Processing Unit)
I could not find any documentation of a tool to play videos using hardware video decoding in Linux, so I haven’t tested it. As a side note, 4K video playback works great in Android 12, except for AV1 where I had issues. As a side note,tThe processor should be powerful enough to play 1080p video using software decoding.
NPU / AI accelerator
The 6.0 TOPS NPU also shows up, but with plenty of errors:
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 |
[ 3.595733] vdd_npu_s0: supplied by vcc5v0_sys [ 3.599908] vdd_npu_s0: 550 <--> 950 mV at 812 mV, enabled [ 3.860468] rockchip-pm-domain fd8d8000.power-management:power-controller: Looking up npu-supply from device tree [ 3.860490] rockchip-pm-domain fd8d8000.power-management:power-controller: Looking up npu-supply property in node /power-management@fd8d8000/power-controller failed [ 3.862271] input: rk-headset as /devices/platform/rk-headset/input/input3 [ 3.863613] RKNPU fdab0000.npu: Adding to iommu group 0 [ 3.863879] RKNPU fdab0000.npu: RKNPU: rknpu iommu is enabled, using iommu mode [ 3.864012] RKNPU fdab0000.npu: Looking up rknpu-supply from device tree [ 3.864696] RKNPU fdab0000.npu: Looking up mem-supply from device tree [ 3.865292] RKNPU fdab0000.npu: can't request region for resource [mem 0xfdab0000-0xfdabffff] [ 3.865332] RKNPU fdab0000.npu: can't request region for resource [mem 0xfdac0000-0xfdacffff] [ 3.865354] RKNPU fdab0000.npu: can't request region for resource [mem 0xfdad0000-0xfdadffff] [ 3.866093] [drm] Initialized rknpu 0.7.2 20220428 for fdab0000.npu on minor 1 [ 3.866604] rockchip-pm-domain fd8d8000.power-management:power-controller: Looking up nputop-supply from device tree [ 3.866643] rockchip-pm-domain fd8d8000.power-management:power-controller: Looking up nputop-supply property in node /power-management@fd8d8000/power-controller failed [ 3.866731] rockchip-pm-domain fd8d8000.power-management:power-controller: Looking up npu1-supply from device tree [ 3.866766] rockchip-pm-domain fd8d8000.power-management:power-controller: Looking up npu1-supply property in node /power-management@fd8d8000/power-controller failed [ 3.866837] rockchip-pm-domain fd8d8000.power-management:power-controller: Looking up npu2-supply from device tree [ 3.866872] rockchip-pm-domain fd8d8000.power-management:power-controller: Looking up npu2-supply property in node /power-management@fd8d8000/power-controller failed [ 3.867039] RKNPU fdab0000.npu: Looking up rknpu-supply from device tree [ 3.867098] vdd_npu_s0: could not add device link fdab0000.npu: -EEXIST [ 3.867104] vdd_npu_s0: Failed to create debugfs directory [ 3.867637] RKNPU fdab0000.npu: Looking up mem-supply from device tree [ 3.867671] vdd_npu_s0: could not add device link fdab0000.npu: -EEXIST [ 3.867675] vdd_npu_s0: Failed to create debugfs directory [ 3.868619] RKNPU fdab0000.npu: leakage=12 [ 3.868659] RKNPU fdab0000.npu: Looking up rknpu-supply from device tree [ 3.868688] vdd_npu_s0: could not add device link fdab0000.npu: -EEXIST [ 3.868693] vdd_npu_s0: Failed to create debugfs directory [ 3.875746] RKNPU fdab0000.npu: pvtm=875 [ 3.880646] RKNPU fdab0000.npu: pvtm-volt-sel=3 [ 3.881693] RKNPU fdab0000.npu: avs=0 [ 3.881897] RKNPU fdab0000.npu: l=10000 h=85000 hyst=5000 l_limit=0 h_limit=800000000 h_table=0 [ 3.891146] RKNPU fdab0000.npu: failed to find power_model node [ 3.891181] RKNPU fdab0000.npu: RKNPU: failed to initialize power model [ 3.891193] RKNPU fdab0000.npu: RKNPU: failed to get dynamic-coefficient |
The NPU is not well documented, and the error messages do not look promising, so I have not tested it yet, and once it works it will probably warrant a separate post. Note that the NPU SDK for RK3588, and other newer Rockchip processors such as RK3566/68, is not the same as for RK1808 or RK3399Pro, and can now be found in RKNPU2 repository.
HDMI input on Rock 5B
Sadly, I don’t have a micro HDMI cable with me so I can’t test it in detail, but based on information from Firefly wiki, HDMI input will work in Linux too, and is properly detected in Rock 5B:
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 |
rock@rock-5b:/usr/local$ v4l2-ctl -d /dev/video0 -V -D Driver Info: Driver name : rk_hdmirx Card type : rk_hdmirx Bus info : fdee0000.hdmirx-controller Driver version : 5.10.66 Capabilities : 0x84201000 Video Capture Multiplanar Streaming Extended Pix Format Device Capabilities Device Caps : 0x04201000 Video Capture Multiplanar Streaming Extended Pix Format Format Video Capture Multiplanar: Width/Height : 640/480 Pixel Format : 'RGB3' (24-bit RGB 8-8-8) Field : None Number of planes : 1 Flags : premultiplied-alpha, 0x000000fe Colorspace : Unknown (0x08393800) Transfer Function : Default YCbCr/HSV Encoding: Unknown (0x000000ff) Quantization : Default Plane 0 : Bytes per Line : 1920 Size Image : 921600 |
and HDMI input audio also shows up:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
$ sudo cat /proc/asound/card* cat: /proc/asound/card0: Is a directory cat: /proc/asound/card1: Is a directory cat: /proc/asound/card2: Is a directory cat: /proc/asound/card3: Is a directory 0 [rockchiphdmi0 ]: rockchip-hdmi0 - rockchip-hdmi0 rockchip-hdmi0 1 [rockchiphdmi1 ]: rockchip-hdmi1 - rockchip-hdmi1 rockchip-hdmi1 2 [rockchipes8316 ]: rockchip-es8316 - rockchip-es8316 rockchip-es8316 3 [rockchiphdmiin ]: rockchip_hdmiin - rockchip,hdmiin rockchip,hdmiin |
So it looks promising. Having a full-size HDMI port would have been nice, but I understand space is limited on that type of board.
Power consumption
Some power consumption numbers for reference:
- Power off with fan – 1.5 Watts
- Power off without fan – 0.6 Watts
- Ilde with fan – 5 Watts
- Idle without fan – 4.2 Watts
- Stress test on all 8 cores with fan, NVMe SSD connected – 11.3 Watts
The developer edition board is using a dumb fan that uses about almost one watt, but it should be possible to create fanless solutions as demonstrated with Mekotronics R58 mini PC.
Summary
Here’s a summary of what works and what doesn’t in the Debian 11 image that shipped with the board, plus the parts I was unable to test for various reasons.
Feature | Remark |
---|---|
Storage | NVME OK with good performance eMMC flash OK microSD card (no working microSD, not tested) |
Video Output | HDMI (Next to USB ports) - OK Other HDMI ports and USB-C Displayport Alt mode - Failed |
HDMI input | Detected (video and audio) but not tested due to lack of cable |
Networking | 2.5GbE OK with great performance WiFi 6 OK with up to 870 Mbps, but highly varying throughput |
Bluetooth | Not working/not enabled |
USB | USB 2.0 and USB 3.0 Type-A ports - OK USB Type-C port had issues with a MINIX USB-C dock |
GPIO | OK, tested with sysfs |
GPU | Software rendering only |
VPU (Video Processing Unit) | Not tested, as unsure which tools to use for hardware video playback |
NPU | Shows up in kernel, but with plenty of errors |
MIPI CSI | Not tested, no hardware |
If you need fast networking and storage, the board is already great, but there are still many parts to work on or provide documentation for. We’ll see how it evolves, and I might also try to investigate why my board randomly (and silently) reboots.

Jean-Luc started CNX Software in 2010 as a part-time endeavor, before quitting his job as a software engineering manager, and starting to write daily news, and reviews full time later in 2011.
Support CNX Software! Donate via cryptocurrencies, become a Patron on Patreon, or purchase goods on Amazon or Aliexpress