Here’s the last part of Khadas VIM4 review with Ubuntu 22.04 “Jammy Jellyfish”. You may want to check out our previous parts with the unboxing and first boot, followed by Android 11 if you haven’t already done so.
Ubuntu 22.04 installation on Khadas VIM4
I used the same method of installation with OOWOW firmware that can download the image directly from Khadas server, and install it to the eMMC flash. Since I already had Android 11 running on the board, I had to keep pressing the function key (middle), then shortly press the reset button, before releasing the function key and entering OOWOW interface. From there, I selected Ubuntu 22.04 Gnome, and went ahead with the download.
The download was fast with the 758.2MB compressed image downloaded in a couple of minutes, then I simply selected “Install” to go further, and replace Android 11…
.. and after rebooting the board I was in Ubuntu 22.04. Note the username and password are “khadas”.
System Info
People who want to check the kernel boot log and do so on CNX pastebin.
I’ll mostly follow the steps from our earlier ODROID-N2+ review, starting with some system information:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
khadas@Khadas:~$ cat /etc/lsb-release DISTRIB_ID=Ubuntu DISTRIB_RELEASE=22.04 DISTRIB_CODENAME=jammy DISTRIB_DESCRIPTION="Ubuntu 22.04 LTS" khadas@Khadas:~$ uname -a Linux Khadas 5.4.125 #1.0.10 SMP PREEMPT Mon Apr 25 13:56:56 CST 2022 aarch64 aarch64 aarch64 GNU/Linux khadas@Khadas:~$ free -mh total used free shared buff/cache available Mem: 7.8Gi 851Mi 6.0Gi 33Mi 937Mi 6.8Gi Swap: 1.0Gi 0B 1.0Gi khadas@Khadas:~$ df -mh Filesystem Size Used Avail Use% Mounted on tmpfs 796M 11M 786M 2% /run /dev/rootfs 29G 3.4G 25G 12% / tmpfs 3.9G 0 3.9G 0% /dev/shm tmpfs 5.0M 4.0K 5.0M 1% /run/lock tmpfs 3.9G 16K 3.9G 1% /tmp tmpfs 796M 124K 796M 1% /run/user/1000 /dev/mmcblk1p1 30G 11M 30G 1% /media/khadas/9665-7646 khadas@Khadas:~$ |
It’s running Ubuntu 22.04 on Linux 5.4.125, and we’ve got about 8 GB RAM, and a 29GB root partition. Let’s install and run inxi for more details:
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 |
khadas@Khadas:~$ inxi -Fc0 System: Host: Khadas Kernel: 5.4.125 aarch64 bits: 64 Desktop: GNOME 42.0 Distro: Ubuntu 22.04 LTS (Jammy Jellyfish) Machine: Type: ARM System: Khadas VIM4 serial: 21a0000029 CPU: Info: 2x 4-core model: N/A variant-1: cortex-a53 variant-2: cortex-a73 bits: 64 type: MCP AMP Speed (MHz): avg: 2112 min/max: 500/2208:2016 cores: 1: 2208 2: 2208 3: 2208 4: 2208 5: 2016 6: 2016 7: 2016 8: 2016 Graphics: Device-1: vpu-t7 driver: vpu v: N/A Device-2: amhdmitx-t7 driver: amhdmitx21 v: N/A Display: wayland server: X.Org v: 1.22.1.1 with: Xwayland v: 22.1.1 compositor: gnome-shell driver: gpu: meson,meson-lcd,meson-vpu resolution: 1920x1080~60Hz OpenGL: renderer: llvmpipe (LLVM 13.0.1 128 bits) v: 4.5 Mesa 22.0.1 Audio: Device-1: audio- driver: aml_audio_controller Device-2: snd-iomap driver: auge_snd_iomap Device-3: audio_data driver: audio_data_debug Device-4: t7-audio-clocks driver: audio_clocks Device-5: t5-audio-ddr-manager driver: audio_ddr_manager Device-6: tm2-snd-pdm driver: snd_pdm Device-7: audio-pinctrl driver: pinctrl_audio Device-8: t5-resample-a driver: audioresample Device-9: t5-resample-b driver: audioresample Device-10: tm2-revb-snd-spdif-a driver: snd_spdif Device-11: tm2-revb-snd-spdif-b driver: snd_spdif Device-12: t7-snd-tdma driver: snd_tdm Device-13: t7-snd-tdmb driver: snd_tdm Device-14: t7-snd-tdmc driver: snd_tdm Device-15: hifi4dsp driver: hifi4dsp Device-16: amhdmitx-t7 driver: amhdmitx21 Device-17: hifi4dsp driver: N/A Device-18: hifi4dsp driver: N/A Sound Server-1: ALSA v: k5.4.125 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: meson-axg-dwmac driver: meson8b_dwmac IF: eth0 state: up speed: 1000 Mbps duplex: full mac: c8:63:14:72:5f:52 Device-2: aml-wifi driver: aml_wifi IF-ID-1: dummy0 state: down mac: 02:ec:aa:7a:7d:f7 IF-ID-2: ip6_vti0 state: down mac: 00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00 IF-ID-3: ip6tnl0 state: down mac: 00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00 IF-ID-4: ip_vti0 state: down mac: 00:00:00:00 IF-ID-5: wlan0 state: dormant mac: 10:2c:6b:10:d7:e6 IF-ID-6: wlan1 state: dormant mac: 12:2c:6b:10:d7:e6 Bluetooth: Device-1: meson-uart driver: meson_uart Report: hciconfig ID: hci0 state: up address: 10:2C:6B:10:D7:E7 bt-v: 3.0 Drives: Local Storage: total: 58.24 GiB used: 5.04 GiB (8.7%) ID-1: /dev/mmcblk0 vendor: Samsung model: BJTD4R size: 29.12 GiB ID-2: /dev/mmcblk1 vendor: SanDisk model: SD16G size: 29.12 GiB Partition: ID-1: / size: 28.48 GiB used: 5.03 GiB (17.7%) fs: ext4 dev: /dev/rootfs Swap: ID-1: swap-1 type: zram size: 256 MiB used: 0 KiB (0.0%) dev: /dev/zram1 ID-2: swap-2 type: zram size: 256 MiB used: 0 KiB (0.0%) dev: /dev/zram2 ID-3: swap-3 type: zram size: 256 MiB used: 0 KiB (0.0%) dev: /dev/zram3 ID-4: swap-4 type: zram size: 256 MiB used: 0 KiB (0.0%) dev: /dev/zram4 Sensors: System Temperatures: cpu: 51.8 C mobo: N/A Fan Speeds (RPM): N/A Info: Processes: 248 Uptime: 1h 59m Memory: 7.77 GiB used: 979.3 MiB (12.3%) Shell: Bash inxi: 3.3.13 |
I notice ZRAM is enabled, and we’ve got two WLAN interfaces. I’ll explain the latter when testing WiFi.
Khadas VIM4 benchmarks in Linux
I started with sbc-bench.sh, which would not start because the load average is too high.
There’s no activity at all, and I did not run anything heavy before, so that’s odd. After discussing with Thomas Kaiser, sbc-bench.sh developer, we found out the likely culprits with processes from Amlogic SDK:
1 2 3 4 5 6 |
khadas@Khadas:~$ ps 178 PID TTY STAT TIME COMMAND 178 ? D 0:02 [crg_reset_0_thr] khadas@Khadas:~$ ps 53 PID TTY STAT TIME COMMAND 53 ? D< 0:01 [vmap_thread] |
At the time, I just modified sbc-bench.sh to skip the load average check and carry on with the benchmark, but the latest version of the tools should run without modifications.
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 |
sudo /bin/bash ./sbc-bench.sh -c Average load is 0.1 or higher (way too much background activity). Waiting... sbc-bench v0.9.4 Installing needed tools. This may take some time..../sbc-bench.sh: line 1328: : No such file or directory Done. Checking cpufreq OPP. Done (results will be available in 14-19 minutes). Executing tinymembench. Done. Executing OpenSSL benchmark. Done. Executing 7-zip benchmark. Done. Checking cpufreq OPP. Done (20 minutes elapsed). Memory performance (different CPU cores measured individually): memcpy: 7816.6 MB/s (0.2%) memset: 11717.9 MB/s memcpy: 2127.4 MB/s memset: 10588.1 MB/s 7-zip total scores (3 consecutive runs): 12016,12028,12132 OpenSSL results (different CPU cores measured individually): type 16 bytes 64 bytes 256 bytes 1024 bytes 8192 bytes 16384 bytes aes-128-cbc 340689.15k 881206.06k 1410492.07k 1649971.88k 1748642.47k 1754764.63k aes-128-cbc 149831.11k 461121.77k 943687.08k 1308184.58k 1472618.50k 1461382.04k aes-192-cbc 319216.09k 796967.81k 1195461.89k 1387976.70k 1458872.32k 1463440.73k aes-192-cbc 143651.73k 414755.01k 777326.76k 1012672.51k 1110059.69k 1117558.10k aes-256-cbc 309348.38k 723233.54k 1063064.92k 1197730.82k 1251726.68k 1255576.92k aes-256-cbc 139829.49k 384315.90k 677202.69k 849066.33k 916553.73k 921638.23k Full results uploaded to http://ix.io/3Xna. |
Let’s compare some of the results against ODROID-N2+ and Raspberry Pi 4 @ 1.5 GHz and overclocked to 2.0 GHz.
Khadas VIM4 is in a league of its own when it comes to memory bandwidth as shown by memcpy and memset benchmark, and 7-zip is also much faster, and over twice as fast as a Raspberry Pi 4 clocked at 1.5 GHz. Having eight cores in a multi-thread benchmark does help though. AES-256 is somewhat faster on ODROID-N2+ as a single-threaded benchmark, and with a higher 2.4 GHz frequency on the Cortex-A73 core for the Amlogic S922X processor. The Raspberry Pi 4’s AES-256 score is poor as usual due to the lack of Armv8 crypto extension.
Let’s try a browser benchmark with Speedometer 2.0 which I used in Khadas VIM3 review with Chromium.
Khadas VIM4 achieved 35.65 points, against 25.6 points for the Amlogic A311D powered Khadas VIM3, and 21 points with a Raspberry Pi 4 overclocked at 2.0 GHz, which confirms the higher performance of the platform. Chromium may have been optimized since 2019 as well.
Firefox does not fare as well on the same benchmark on the VIM4 board.
3D graphics testing
Here’s part of the output from glxinfo:
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 13.0.1, 128 bits) (0xffffffff) Version: 22.0.1 Accelerated: no Video memory: 7951MB Unified memory: no Preferred profile: core (0x1) Max core profile version: 4.5 Max compat profile version: 4.5 Max GLES1 profile version: 1.1 Max GLES[23] profile version: 3.2 |
That looks like software rendering to me. But just to make sure let’s check out what is LLVMPipe exactly:
The Gallium llvmpipe driver is a software rasterizer that uses LLVM to do runtime code generation. Shaders, point/line/triangle rasterization and vertex processing are implemented with LLVM IR which is translated to x86, x86-64, or ppc64le machine code. Also, the driver is multithreaded to take advantage of multiple CPU cores (up to 8 at this time). It’s the fastest software rasterizer for Mesa.
Confirmed. So when I run glmark2-es2, it ends up with an error:
1 2 3 |
Error: eglGetDisplay() failed with error: 0x3000 Error: eglGetDisplay() failed with error: 0x3000 Error: main: Could not initialize canvas |
That means 3D hardware acceleration is not supported.
Video decoding and encoding on Khadas VIM4
Amlogic A311D2 SoC comes with an 8Kp24/4Kp60 VPU capable of decoding AV1, H.265, VP9, H.264, etc… but the documentation still shows “TO DO” in the video playback section. So I just tried to play YouTube videos in Firefox.
CPU usage is through the roof as hardware video decoding is not supported. The good news is that the arm processor is powerful enough to play 4Kp24 videos (rendered to a 1920×1080 viewport) relatively smoothly using software video decoding. Firefox fares a bit better with the only dropped frames when switching from embedded to full-screen view, but once in full-screen, I did not notice any dropped frames. Google will drop a frame every second, but the video is still watchable.
While the lack of hardware video decoding was disappointing, I was pleasantly surprised to have the ability to use H.264/H.265 hardware video encoding. You can read more details in the post entitled “Linux hardware video encoding on Amlogic A311D2 processor“. That’s not perfect however since only closed-source demos are available, but Khadas told me they were working on releasing the code on Github.
eMMC and USB storage
Let’s run iozone on the eMMC flash.
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 |
$ 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 Contributors:William Norcott, Don Capps, Isom Crawford, Kirby Collins Al Slater, Scott Rhine, Mike Wisner, Ken Goss Steve Landherr, Brad Smith, Mark Kelly, Dr. Alain CYR, Randy Dunlap, Mark Montague, Dan Million, Gavin Brebner, Jean-Marc Zucconi, Jeff Blomberg, Benny Halevy, Dave Boone, Erik Habbinga, Kris Strecker, Walter Wong, Joshua Root, Fabrice Bacchella, Zhenghua Xue, Qin Li, Darren Sawyer, Vangel Bojaxhi, Ben England, Vikentsi Lapa, Alexey Skidanov, Sudhir Kumar. Run began: Sat May 21 18:36:17 2022 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 42448 49401 33738 35273 30351 33959 1024000 16 95388 84746 83386 87949 78675 72818 1024000 512 109351 90438 166659 166804 144584 70463 1024000 1024 68088 98663 175108 174902 164769 58980 1024000 16384 71086 109715 178448 178144 182913 87181 iozone test complete. |
That’s about 178MB/s sequential read speed and 71MB sequential write speed. That’s not amazing but good enough for a relatively smooth operation.
I have a MINIX USB Hub with a 480GB SSD that I had tested at 400MB/s on other platforms.
Sadly, the drive was not mounted, and even no recognized at all even with tools like fdisk and GParted. When double-checking Khadas VIM4 specifications, I also realized the USB Type-C port was a USB 2.0 OTG interface, so at best it should support around 40MB/s.
I also connected a USB 3.0 hard drive to the USB port:
1 2 3 4 5 |
lsusb -t /: Bus 02.Port 1: Dev 1, Class=root_hub, Driver=xhci-hcd/1p, 10000M |__ Port 1: Dev 2, If 0, Class=Mass Storage, Driver=usb-storage, 5000M/x2 /: Bus 01.Port 1: Dev 1, Class=root_hub, Driver=xhci-hcd/1p, 480M |__ Port 1: Dev 2, If 0, Class=Hub, Driver=hub/4p, 480M |
The drive has multiple partitions, which were not mounted automatically. So I installed pmount to mount them manually:
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 |
$ pmount /dev/sda1 $ pmount /dev/sda2 $ pmount /dev/sda3 Error: invalid file system name 'exfat' NTFS signature is missing. Failed to mount '/dev/sda3': Invalid argument The device '/dev/sda3' doesn't seem to have a valid NTFS. Maybe the wrong device is used? Or the whole disk instead of a partition (e.g. /dev/sda, not /dev/sda1)? Or the other way around? NTFS signature is missing. Failed to mount '/dev/sda3': Invalid argument The device '/dev/sda3' doesn't seem to have a valid NTFS. Maybe the wrong device is used? Or the whole disk instead of a partition (e.g. /dev/sda, not /dev/sda1)? Or the other way around? $ pmount /dev/sda4 Error: invalid file system name 'btrfs' NTFS signature is missing. Failed to mount '/dev/sda4': Invalid argument The device '/dev/sda4' doesn't seem to have a valid NTFS. Maybe the wrong device is used? Or the whole disk instead of a partition (e.g. /dev/sda, not /dev/sda1)? Or the other way around? NTFS signature is missing. Failed to mount '/dev/sda4': Invalid argument The device '/dev/sda4' doesn't seem to have a valid NTFS. Maybe the wrong device is used? Or the whole disk instead of a partition (e.g. /dev/sda, not /dev/sda1)? Or the other way around? |
sda1 (NTFS) and sda2 (EXT-4) were mounted without issues, but the exFAT and BTRFS partitions were not. So I installed exfat-fuse for the former:
1 |
sudo apt install exfat-fuse |
The pmount command would not work, so I used mount instead:
1 2 |
sudo mkdir -p /media/sda3 sudo mount -t exfat /dev/sda3 /media/sda3 |
Same thing for btrfs which is not supported by pmount:
1 2 |
$ sudo mkdir -p /media/sda4 $ sudo mount -t btrfs /dev/sda4 /media/sda4/ |
Testing the ext-4 partition with iozone:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
$ iozone -e -I -a -s 1000M -r 16384k -i 0 -i 1 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 16384 kB Command line used: iozone -e -I -a -s 1000M -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 1024000 16384 75084 94413 94558 95304 iozone test complete. |
Sequential read speed was about 94MB/s and write 75MB/s. I usually got a bit over 100MB/s in reviews a few years ago, but the drive might be getting old. Still, the performance is roughly as expected over USB 3.0 (for a mechanical drive), at least for reads.
Networking benchmarks (Ethernet and WiFi 6)
Time for some networking benchmarks with iperf3.
Gigabit Ethernet download:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
$ iperf3 -t 60 -c 192.168.31.191 -i 10 Connecting to host 192.168.31.191, port 5201 [ 5] local 192.168.31.199 port 48366 connected to 192.168.31.191 port 5201 [ ID] Interval Transfer Bitrate Retr Cwnd [ 5] 0.00-10.00 sec 1.10 GBytes 942 Mbits/sec 0 1.03 MBytes [ 5] 10.00-20.00 sec 1.09 GBytes 941 Mbits/sec 0 1.03 MBytes [ 5] 20.00-30.00 sec 1.10 GBytes 942 Mbits/sec 0 1.03 MBytes [ 5] 30.00-40.00 sec 1.09 GBytes 941 Mbits/sec 0 1.03 MBytes [ 5] 40.00-50.00 sec 1.09 GBytes 941 Mbits/sec 0 1.03 MBytes [ 5] 50.00-60.00 sec 1.09 GBytes 941 Mbits/sec 0 1.53 MBytes - - - - - - - - - - - - - - - - - - - - - - - - - [ ID] Interval Transfer Bitrate Retr [ 5] 0.00-60.00 sec 6.57 GBytes 941 Mbits/sec 0 sender [ 5] 0.00-60.05 sec 6.57 GBytes 940 Mbits/sec receiver iperf Done. |
and 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.191 -i 10 -R Connecting to host 192.168.31.191, port 5201 Reverse mode, remote host 192.168.31.191 is sending [ 5] local 192.168.31.199 port 48376 connected to 192.168.31.191 port 5201 [ ID] Interval Transfer Bitrate [ 5] 0.00-10.00 sec 1.09 GBytes 937 Mbits/sec [ 5] 10.00-20.00 sec 1.09 GBytes 937 Mbits/sec [ 5] 20.00-30.00 sec 1.09 GBytes 937 Mbits/sec [ 5] 30.00-40.00 sec 1.09 GBytes 937 Mbits/sec [ 5] 40.00-50.00 sec 1.09 GBytes 937 Mbits/sec [ 5] 50.00-60.00 sec 1.09 GBytes 938 Mbits/sec - - - - - - - - - - - - - - - - - - - - - - - - - [ ID] Interval Transfer Bitrate Retr [ 5] 0.00-60.05 sec 6.55 GBytes 937 Mbits/sec 408 sender [ 5] 0.00-60.00 sec 6.55 GBytes 937 Mbits/sec receiver iperf Done. |
No problem here, but when switching to full-duplex transfer one direction gets 808 Mbps (OK), while the other only achieves 381 Mbps:
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.191 --bidir -i 10 Connecting to host 192.168.31.191, port 5201 [ 5] local 192.168.31.199 port 48356 connected to 192.168.31.191 port 5201 [ 7] local 192.168.31.199 port 48358 connected to 192.168.31.191 port 5201 [ ID][Role] Interval Transfer Bitrate Retr Cwnd [ 5][TX-C] 0.00-10.00 sec 767 MBytes 644 Mbits/sec 39 250 KBytes [ 7][RX-C] 0.00-10.00 sec 866 MBytes 726 Mbits/sec [ 5][TX-C] 10.00-20.00 sec 636 MBytes 533 Mbits/sec 43 233 KBytes [ 7][RX-C] 10.00-20.00 sec 907 MBytes 761 Mbits/sec [ 5][TX-C] 20.00-30.00 sec 274 MBytes 230 Mbits/sec 61 77.8 KBytes [ 7][RX-C] 20.00-30.00 sec 1020 MBytes 856 Mbits/sec [ 5][TX-C] 30.00-40.00 sec 373 MBytes 313 Mbits/sec 63 66.5 KBytes [ 7][RX-C] 30.00-40.00 sec 987 MBytes 828 Mbits/sec [ 5][TX-C] 40.00-50.00 sec 322 MBytes 270 Mbits/sec 69 127 KBytes [ 7][RX-C] 40.00-50.00 sec 1003 MBytes 841 Mbits/sec [ 5][TX-C] 50.00-60.00 sec 353 MBytes 297 Mbits/sec 79 80.6 KBytes [ 7][RX-C] 50.00-60.00 sec 991 MBytes 831 Mbits/sec - - - - - - - - - - - - - - - - - - - - - - - - - [ ID][Role] Interval Transfer Bitrate Retr [ 5][TX-C] 0.00-60.00 sec 2.66 GBytes 381 Mbits/sec 354 sender [ 5][TX-C] 0.00-60.05 sec 2.66 GBytes 380 Mbits/sec receiver [ 7][RX-C] 0.00-60.00 sec 5.64 GBytes 808 Mbits/sec 740 sender [ 7][RX-C] 0.00-60.05 sec 5.64 GBytes 807 Mbits/sec receiver iperf Done. |
I suppose this could only become an issue if you run something like a BitTorrent where high-speed transfer can happen in both direction.
Recent Khadas VIM boards, including the latest Khadas VIM4 support real simultaneous dual-band (RSDB) WiFi features, and that’s why we can connect two different access points to transfer data on both 2.4GHz and 5 GHz bands.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
wlan0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 192.168.31.83 netmask 255.255.255.0 broadcast 192.168.31.255 inet6 fe80::55a2:ff75:62b2:fa81 prefixlen 64 scopeid 0x20<link> ether 10:2c:6b:10:d7:e6 txqueuelen 1000 (Ethernet) RX packets 258 bytes 37835 (37.8 KB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 669 bytes 113020 (113.0 KB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 wlan1: flags=4099<UP,BROADCAST,MULTICAST> mtu 1500 inet 192.168.31.45 netmask 255.255.255.0 broadcast 192.168.31.255 inet6 fe80::f1ef:b1cf:12d7:56a6 prefixlen 64 scopeid 0x20<link> ether 12:2c:6b:10:d7:e6 txqueuelen 1000 (Ethernet) RX packets 136 bytes 20352 (20.3 KB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 458 bytes 66209 (66.2 KB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 |
I connected wlan0 to the 5 GHz network, and wlan1 to the 2.4 GHz network from my Xiaomi AX6000 WiFi 6 router.
So in theory that means the bandwidth for 2.4 GHz and 5 GHz networks can be fully utilized by the system, in this case, 270 Mbps + 1134 Mbps, or 1404 Mbps. Note that I broke the short 5 GHz antenna, so only the 2.4 GHz antenna is connected, and I noticed some instability, so I disabled one of the wlan interfaces.
I still try iperf3 starting with WiFi download:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
iperf3 -t 60 -c 192.168.31.83 -i 10 Connecting to host 192.168.31.83, port 5201 [ 5] local 192.168.31.199 port 58068 connected to 192.168.31.83 port 5201 [ ID] Interval Transfer Bitrate Retr Cwnd [ 5] 0.00-10.00 sec 431 MBytes 362 Mbits/sec 73 1024 KBytes [ 5] 10.00-20.00 sec 328 MBytes 275 Mbits/sec 99 481 KBytes [ 5] 20.00-30.00 sec 446 MBytes 374 Mbits/sec 64 546 KBytes [ 5] 30.00-40.00 sec 410 MBytes 344 Mbits/sec 65 764 KBytes [ 5] 40.00-50.00 sec 361 MBytes 303 Mbits/sec 1 3.05 MBytes [ 5] 50.00-60.00 sec 531 MBytes 446 Mbits/sec 64 2.18 MBytes - - - - - - - - - - - - - - - - - - - - - - - - - [ ID] Interval Transfer Bitrate Retr [ 5] 0.00-60.00 sec 2.45 GBytes 351 Mbits/sec 366 sender [ 5] 0.00-60.31 sec 2.45 GBytes 349 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.83 -i 10 -R Connecting to host 192.168.31.83, port 5201 Reverse mode, remote host 192.168.31.83 is sending [ 5] local 192.168.31.199 port 58072 connected to 192.168.31.83 port 5201 [ ID] Interval Transfer Bitrate [ 5] 0.00-10.00 sec 235 MBytes 197 Mbits/sec [ 5] 10.00-20.00 sec 233 MBytes 195 Mbits/sec [ 5] 20.00-30.00 sec 371 MBytes 311 Mbits/sec [ 5] 30.00-40.00 sec 232 MBytes 194 Mbits/sec [ 5] 40.00-50.00 sec 231 MBytes 194 Mbits/sec [ 5] 50.00-60.00 sec 367 MBytes 308 Mbits/sec - - - - - - - - - - - - - - - - - - - - - - - - - [ ID] Interval Transfer Bitrate Retr [ 5] 0.00-60.15 sec 1.63 GBytes 233 Mbits/sec 1 sender [ 5] 0.00-60.00 sec 1.63 GBytes 233 Mbits/sec receiver iperf Done. |
That seems to be on the low side, and since only the 2.4 GHz antenna was connected, I asked Khadas for their own results. It turns out it’s also in the same ballpark:
I’ll check it again if I receive an antenna replacement.
User experience in Ubuntu desktop & conclusion
I also used the board as it was a Ubuntu 22.04 computer. Tasks like checking emails with Thunderbird, browsing the web with Firefox or Chromium, photo editing with Gimp, using LibreOffice office suite, or even watching YouTube videos work pretty well, and it’s almost the same experience as on my AMD Ryzen laptop, although it was a tad more sluggish. But everything typically makes use of 3D acceleration with the GPU can still work with software rendering, but it’s really slow, and for instance, both the WebGL Aquarium demo and SuperTuxKart game had a frame rate of about 1 to 2 fps.
A Jasper Lake mini PC will cost roughly the same, and deliver a better experience, but Khadas VIM4 still has advantages for applications that require a small form factor, MIPI DSI, eDP and/or LVDS display interfaces, MIPI CSI, HDMI input (not working in Linux yet), an accelerometer, and/or other features typically not found on off-the-shelf low-cost Intel hardware.
I’d like to thank Khadas for sending the VIM4 for review. You can now buy Khadas VIM4 for $199.90 until June 4, after which it will be $219.90 but that’s without the highly recommended heatsink and fan, which brings the total to $219.90/$239.90 plus shipping, and eventual taxes depending on your country’s regulations.
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
> IF: eth0 state: up speed: 1000 Mbps duplex: full mac: c8:63:14:72:5f:52
By looking into the dmesg output (thanks for this!) I wonder whether all VIM4 share the same MAC address? Kernel cmdline contains:
Can you please check whether /boot/env.txt exists and the MAC address is defined there? Asides that the serialno seems to be inherited from VIM1.
Content of boot.env: $ cat /boot/env.txt #############################DO NOT TOUCH THIS OPTION############################# rootdev=UUID=6a06a111-c1b9-48d7-951c-0b77d2764a5b #############################DO NOT TOUCH THIS OPTION############################# # Cooling FAN mode # auto - auto schedule the FAN speed depend on the CPU temperature # low - FAN low speed # mid - FAN middle speed # high - FAN high speed fan_mode=auto # DMA coherent_pool size # Don't touch unless you know what you are doing dma_size=2M # HDMI resolution auto detection # yes - auto detection # no - set HDMI resolution via 'hdmi' node hdmi_autodetect=yes # HDMI mode # Resolution Configuration # Symbol | Resolution # ----------------------+-------------… Read more »
I have different MAC address (last number).
> Khadas VIM4 is in a league of its own when it comes to memory bandwidth
A311D2 is really something different than A311D/S922X. It would be interesting to check for internal bottlenecks on these 3 SoCs (with one of the most underrated kitchen-sink benchmarks available: 7-zip)
* A311D2: taskset -c 0-3 7zr b -mmt=4
* A311D: taskset -c 2-5 7zr b -mmt=4
* RK3588: taskset -c 4-7 7zr b -mmt=4
Maybe you can contribute result 1 if you’re firing up VIM4 next time?
Results\ on Khadas VIM4: khadas@Khadas:~$ taskset -c 0-3 7zr b -mmt=4 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: 64000000 - - - - - - - - RAM size: 7951 MB, # CPU hardware threads: 8 RAM usage: 882 MB, # Benchmark threads: 4 Compressing | Decompressing Dict Speed Usage R/U Rating | Speed Usage R/U Rating KiB/s % MIPS MIPS | KiB/s % MIPS MIPS 22: 5366 347 1505 5220 | 111020 397 2388 9472 23: 5149 355 1477 5247 | 108652 … Read more »
Thank you!
As for the Ethernet MAC Address I found a recent u-boot commit and this older thread. Since Peter confirmed slightly different MAC address most probably it’s programmed at factory inside OTP/eFuse (or derived from SoC serial number) and can be overwritten in various ways (/boot/env.txt included).
You should be able to get that GPU going with a Mesa install. I always refer back to this guide https://www.96boards.org/blog/panfrost-rock960/ but you just need the DRM/MESA parts and think with that kernel 21.3.8 tree is the one needed as 22 might need a later kernel. Its the price that confuses me as its sort of in the free delivery/return of amazon mini pcs such as https://www.amazon.co.uk/NiPoGi-Graphics-Business-Computer-DisplayPort/dp/B09C5P753M?th=1 as desktop I would prob go with the AMD and as a SBC there are a lot of more cost effective solutions out there. If Radxa do release an RK3588 8gb for $149.00… Read more »
The problem with that idea is that mesa/panfrost didn’t really exist in a stable form until Linux 5.11 (and the newer you go, the better) so you need perform a large and invasive backport of upstream DRM (and anything related it touched) code to get the panfrost kernel driver to run properly. That is a large ‘n’ hairy feat of software engineering to do well and then maintain. The alternative approach of using upstream code that already supports panfrost well is equally herculean due to the complete absence of upstream support for the A311D2 at this time (and foreseeable future)… Read more »
so kernel is Linux 5.4.125
I hope that Khadas will be able to port mainline linux
The info I got online (from BayLibre) is that A311D2 is quite different from A311D, and right now, nobody is working on mainlining A311D2 code.
> kernel is Linux 5.4.125
You seem to forget that we’re talking about a kernel from an Android SoC vendor that has been forward ported since ages. As such the kernel version doesn’t matter much or at all.
See the following insights:
And if you think a rather small board vendor would have the resources/bucks to mainline a new ARM SoC…