W’vee already looked at the Radxa X4 kit featuring an Intel N100 SBC with a design similar to the Raspberry Pi 5 and accessories including a Radxa Power PD 30W power adapter, an NVMe SSD, and a USB-C to USB-C cable in the first part of the review, before installing Ubuntu 24.04 on the board.
In the second part of the Radxa X4 review, we will test Ubuntu 24.04 in more detail with some benchmarks and power consumption measurements to show how well it works (or not) compared to a Raspberry Pi 5. We will also test the 40-pin GPIO header on the Radxa X4 controlled through a Raspberry Pi RP2040 microcontroller.
Basic system information
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
unoiot@radxa-x4:~/sbc-bench$ cat /etc/lsb-release DISTRIB_ID=Ubuntu DISTRIB_RELEASE=24.04 DISTRIB_CODENAME=noble DISTRIB_DESCRIPTION="Ubuntu 24.04 LTS" unoiot@radxa-x4:~/sbc-bench$ uname -a Linux radxa-x4 6.8.0-40-generic #40-Ubuntu SMP PREEMPT_DYNAMIC Fri Jul 5 10:34:03 UTC 2024 x86_64 x86_64 x86_64 GNU/Linux unoiot@radxa-x4:~/sbc-bench$ df -mh Filesystem Size Used Avail Use% Mounted on tmpfs 772M 2.3M 770M 1% /run /dev/nvme0n1p2 116G 12G 99G 11% / tmpfs 3.8G 4.0K 3.8G 1% /dev/shm tmpfs 5.0M 8.0K 5.0M 1% /run/lock efivarfs 192K 84K 104K 45% /sys/firmware/efi/efivars /dev/nvme0n1p1 1.1G 6.2M 1.1G 1% /boot/efi tmpfs 772M 2.6M 770M 1% /run/user/1000 |
Ubuntu 24.04 with Linux 6.8 was installed on a 128GB SSD. We then run the inxi command to check other devices in the system.
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 |
unoiot@radxa-x4:~/sbc-bench$ inxi -Fc0 System: Host: radxa-x4 Kernel: 6.8.0-40-generic arch: x86_64 bits: 64 Console: pty pts/1 Distro: Ubuntu 24.04 LTS (Noble Numbat) Machine: Type: Desktop Mobo: N/A model: N/A serial: <superuser required> UEFI: American Megatrends LLC. v: 5.27 date: 04/29/2024 CPU: Info: quad core model: Intel N100 bits: 64 type: MCP cache: L2: 2 MiB Speed (MHz): avg: 1237 min/max: 700/3400 cores: 1: 700 2: 700 3: 700 4: 2850 Graphics: Device-1: Intel Alder Lake-N [UHD Graphics] driver: N/A Display: server: X.org v: 1.21.1.11 with: Xwayland v: 23.2.6 driver: N/A tty: 120x30 API: EGL v: 1.5 drivers: kms_swrast,swrast platforms: gbm,wayland,surfaceless,device API: OpenGL v: 4.5 vendor: mesa v: 24.0.9-0ubuntu0.1 note: console (EGL sourced) renderer: llvmpipe (LLVM 17.0.6 256 bits) Audio: Device-1: Intel Alder Lake-N PCH High Definition Audio driver: snd_hda_intel API: ALSA v: k6.8.0-40-generic status: kernel-api Server-1: PipeWire v: 1.0.5 status: active Network: Device-1: Realtek RTL8852BE PCIe 802.11ax Wireless Network driver: rtw89_8852be IF: wlp1s0 state: up mac: a8:41:f4:bc:3f:40 Device-2: Intel Ethernet I226-V driver: igc IF: enp2s0 state: down mac: 10:02:b5:86:00:0b Bluetooth: Device-1: IMC Networks Bluetooth Radio driver: btusb type: USB Report: hciconfig ID: hci0 state: up address: A8:41:F4:BC:3F:41 bt-v: 5.3 Drives: Local Storage: total: 119.24 GiB used: 11.67 GiB (9.8%) ID-1: /dev/nvme0n1 vendor: Samsung model: MZ9LQ128HBHQ-000H1 size: 119.24 GiB Partition: ID-1: / size: 115.78 GiB used: 11.67 GiB (10.1%) fs: ext4 dev: /dev/nvme0n1p2 ID-2: /boot/efi size: 1.05 GiB used: 6.1 MiB (0.6%) fs: vfat dev: /dev/nvme0n1p1 Swap: ID-1: swap-1 type: file size: 4 GiB used: 0 KiB (0.0%) file: /swap.img Sensors: System Temperatures: cpu: 42.0 C mobo: N/A Fan Speeds (rpm): N/A Info: Memory: total: 8 GiB note: est. available: 7.54 GiB used: 2.48 GiB (32.9%) Processes: 249 Uptime: 38m Init: systemd target: graphical (5) Shell: Bash inxi: 3.3.34 |
Everything seems to be detected, and we can see that the temperature at idle is only 42°C. The system used 2.48 GB out of 8GB, and the installation of Ubuntu 24.04 required only 11.67 GB of storage.
Radxa X4 benchmarks on Ubuntu 24.04
sbc-bench.sh benchmark
Let’s start the benchmarks with Thomas Kaiser’s sbc-bench.sh script:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
unoiot@radxa-x4:~/sbc-bench$ sudo ./sbc-bench.sh -r Starting to examine hardware/software for review purposes... sbc-bench v0.9.67 Installing needed tools: distro packages already installed. Done. Checking cpufreq OPP. Done. Executing tinymembench. Done. Executing RAM latency tester. Done. Executing OpenSSL benchmark. Done. Executing 7-zip benchmark. Done. Throttling test: heating up the device, 5 more minutes to wait. Done. Checking cpufreq OPP again. Done (11 minutes elapsed). Results validation: * Measured clockspeed not lower than advertised max CPU clockspeed * No swapping * Background activity (%system) OK * Powercap detected. Details: "sudo powercap-info -p intel-rapl" -> https://tinyurl.com/4jh9nevj Full results uploaded to https://0x0.st/XYiQ.bin |
The full results can be found on the link just above, but a summary is available below:
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 |
### General information: Information courtesy of cpufetch: Name: Intel(R) N100 Microarchitecture: Alder Lake Technology: 10nm Max Frequency: 3.400 GHz Cores: 4 cores AVX: AVX,AVX2 FMA: FMA3 L1i Size: 64KB (256KB Total) L1d Size: 32KB (128KB Total) L2 Size: 2MB L3 Size: 6MB N100, Kernel: x86_64, Userland: amd64 CPU sysfs topology (clusters, cpufreq members, clockspeeds) cpufreq min max CPU cluster policy speed speed core type 0 0 0 700 3400 Alder Lake 1 0 1 700 3400 Alder Lake 2 0 2 700 3400 Alder Lake 3 0 3 700 3400 Alder Lake 7716 KB available RAM ### Policies (performance vs. idle consumption): Status of performance related policies found below /sys: /sys/module/pcie_aspm/parameters/policy: default [performance] powersave powersupersave ### Clockspeeds (idle vs. heated up): Before at 64.0°C: cpu0: OPP: 3400, Measured: 3387 After at 71.0°C: cpu0: OPP: 3400, Measured: 3387 ### Performance baseline * memcpy: 8128.3 MB/s, memchr: 13245.3 MB/s, memset: 7960.9 MB/s * 16M latency: 148.1 126.4 147.4 126.1 146.4 125.2 118.6 126.0 * 128M latency: 161.9 144.5 162.4 144.5 160.7 171.1 138.4 141.8 * 7-zip MIPS (3 consecutive runs): 8091, 8139, 8126 (8120 avg), single-threaded: 3424 * `aes-256-cbc 868184.59k 1178146.54k 1217933.31k 1228269.23k 1229335.21k 1230831.62k` * `aes-256-cbc 877441.60k 1138375.57k 1211967.74k 1227919.02k 1227696.81k 1229892.27k` ### PCIe and storage devices: * Intel Alder Lake-N [UHD Graphics] (Onboard - Video): driver in use: i915 * Intel Alder Lake-N Thunderbolt 4 USB (Onboard - Other): driver in use: xhci_hcd * Intel Device 54fc (Onboard - Other): driver in use: * Intel Alder Lake-N PCH USB 3.2 xHCI Host (Onboard - Other): driver in use: xhci_hcd * Intel Device 54c4 (Onboard - Other): driver in use: sdhci-pci * Realtek RTL8852BE PCIe 802.11ax Wireless Network: Speed 2.5GT/s, Width x1, driver in use: rtw89_8852be, * Intel Ethernet I226-V: Speed 5GT/s, Width x1, driver in use: igc, * 119.2GB "SAMSUNG MZ9LQ128HBHQ-000H1" SSD as /dev/nvme0: Speed 8GT/s, Width x4, 0% worn out, 306 error log entries, unhealthy drive temp: 61°C, ASPM Disabled * Winbond W25Q128 16MB SPI NOR flash, drivers in use: spi-nor/intel-spi "nvme error-log /dev/nvme0 ; smartctl -x /dev/nvme0" could be used to get further information about the reported issues. |
As we can see below, the temperature peaked at 89°C in the single-core OpenSSL benchmark and was unusually lower in multi-core benchmarks such as 7-zip and cpuminer at around 77-78°C.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 |
System health while running tinymembench: Time CPU load %cpu %sys %usr %nice %io %irq Temp 09:44:41: 3079MHz 0.22 11% 0% 10% 0% 0% 0% 68.0°C 09:44:51: 2925MHz 0.34 25% 0% 25% 0% 0% 0% 77.0°C 09:45:01: 2910MHz 0.44 25% 0% 25% 0% 0% 0% 84.0°C 09:45:12: 2900MHz 0.53 25% 0% 25% 0% 0% 0% 75.0°C 09:45:22: 2900MHz 0.60 25% 0% 25% 0% 0% 0% 75.0°C 09:45:32: 3133MHz 0.66 25% 0% 25% 0% 0% 0% 72.0°C 09:45:42: 2907MHz 0.72 25% 0% 25% 0% 0% 0% 65.0°C 09:45:52: 3089MHz 0.76 25% 0% 25% 0% 0% 0% 63.0°C System health while running ramlat: Time CPU load %cpu %sys %usr %nice %io %irq Temp 09:46:01: 2900MHz 0.80 11% 0% 11% 0% 0% 0% 70.0°C 09:46:04: 2914MHz 0.81 25% 0% 25% 0% 0% 0% 69.0°C 09:46:07: 3093MHz 0.81 25% 0% 25% 0% 0% 0% 70.0°C 09:46:10: 2901MHz 0.83 25% 0% 25% 0% 0% 0% 65.0°C 09:46:13: 2900MHz 0.83 25% 0% 25% 0% 0% 0% 62.0°C 09:46:16: 3091MHz 0.84 25% 0% 25% 0% 0% 0% 64.0°C 09:46:19: 2915MHz 0.86 25% 0% 25% 0% 0% 0% 64.0°C 09:46:22: 3079MHz 0.86 25% 0% 25% 0% 0% 0% 64.0°C 09:46:25: 2901MHz 0.87 25% 0% 25% 0% 0% 0% 65.0°C 09:46:28: 2949MHz 0.87 25% 0% 24% 0% 0% 0% 66.0°C System health while running OpenSSL benchmark: Time CPU load %cpu %sys %usr %nice %io %irq Temp 09:46:31: 2905MHz 0.88 11% 0% 11% 0% 0% 0% 89.0°C 09:46:47: 2900MHz 0.91 25% 0% 25% 0% 0% 0% 81.0°C 09:47:04: 2908MHz 0.93 25% 0% 25% 0% 0% 0% 78.0°C System health while running 7-zip single core benchmark: Time CPU load %cpu %sys %usr %nice %io %irq Temp 09:47:07: 2900MHz 0.93 11% 0% 11% 0% 0% 0% 79.0°C 09:47:12: 2902MHz 0.94 25% 0% 25% 0% 0% 0% 80.0°C 09:47:18: 2917MHz 0.94 25% 0% 24% 0% 0% 0% 75.0°C 09:47:23: 2971MHz 0.95 25% 0% 24% 0% 0% 0% 77.0°C 09:47:28: 2900MHz 0.95 25% 0% 24% 0% 0% 0% 75.0°C 09:47:33: 2900MHz 0.96 25% 0% 24% 0% 0% 0% 79.0°C 09:47:38: 2943MHz 0.96 25% 0% 24% 0% 0% 0% 77.0°C 09:47:43: 2959MHz 0.96 25% 0% 24% 0% 0% 0% 75.0°C 09:47:48: 2902MHz 0.97 25% 0% 24% 0% 0% 0% 78.0°C System health while running 7-zip multi core benchmark: Time CPU load %cpu %sys %usr %nice %io %irq Temp 09:47:50: 2500MHz 1.37 11% 0% 11% 0% 0% 0% 77.0°C 09:48:00: 2400MHz 1.78 97% 0% 97% 0% 0% 0% 64.0°C 09:48:10: 2800MHz 2.12 97% 1% 95% 0% 0% 0% 64.0°C 09:48:21: 2200MHz 2.48 97% 1% 95% 0% 0% 0% 71.0°C 09:48:31: 2600MHz 2.80 94% 3% 91% 0% 0% 0% 75.0°C 09:48:42: 2400MHz 2.98 97% 1% 95% 0% 0% 0% 74.0°C 09:48:52: 2400MHz 3.14 97% 0% 96% 0% 0% 0% 77.0°C 09:49:02: 2500MHz 3.27 96% 1% 95% 0% 0% 0% 75.0°C 09:49:13: 2200MHz 3.53 98% 1% 97% 0% 0% 0% 74.0°C 09:49:23: 2600MHz 3.91 93% 3% 90% 0% 0% 0% 75.0°C 09:49:34: 2500MHz 3.92 97% 1% 95% 0% 0% 0% 75.0°C 09:49:44: 2500MHz 3.94 97% 0% 96% 0% 0% 0% 77.0°C 09:49:55: 2400MHz 3.95 96% 1% 95% 0% 0% 0% 75.0°C 09:50:05: 2900MHz 4.09 95% 1% 93% 0% 0% 0% 68.0°C 09:50:15: 2700MHz 4.15 96% 3% 93% 0% 0% 0% 78.0°C System health while running cpuminer: Time CPU load %cpu %sys %usr %nice %io %irq Temp 09:50:26: 2400MHz 4.13 12% 0% 12% 0% 0% 0% 75.0°C 09:51:08: 2400MHz 4.10 100% 0% 99% 0% 0% 0% 77.0°C 09:51:50: 2400MHz 4.05 100% 0% 99% 0% 0% 0% 77.0°C 09:52:31: 2400MHz 4.10 100% 0% 99% 0% 0% 0% 77.0°C 09:53:13: 2400MHz 4.05 100% 0% 99% 0% 0% 0% 77.0°C 09:53:55: 2400MHz 4.02 100% 0% 99% 0% 0% 0% 75.0°C 09:54:37: 2400MHz 4.13 100% 0% 99% 0% 0% 0% 78.0°C 09:55:19: 2300MHz 4.13 100% 1% 98% 0% 0% 0% 78.0°C |
When running the same test on the UP 7000 credit card-sized fanless SBC with the same Intel N100, we found out the temperature was up to 99°C with cpuminer, so Radxa must have adjusted the system’s parameters to avoid overheating during multi-core workloads. It does show in benchmark results too, since the Radxa X4 delivered 8,120 MIPS in 7-zip, while the UP 7000 managed 12,890 MIPS on average. Quite a difference! We had similar results to the UP 7000 with the Youyeetoo X1 SBC and LattePanda Mu (best of the four in 7-zip), but those two systems run cooler as actively cooled boards. The Radxa X4 also has an external fan on top of the case, but it does not seem enough.
This is also evident from the CPU frequency set to 2400 MHz under multi-core benchmarks, but the UP 7000 was running at up to 2,900 MHz with some short drops to 1,800 MHz. One reason for the discrepancies can be power limits configuration:
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 |
unoiot@radxa-x4:~/sbc-bench$ sudo powercap-info -p intel-rapl [sudo] password for unoiot: enabled: 1 Zone 0 name: package-0 enabled: 1 max_energy_range_uj: 262143328850 energy_uj: 20244765495 Constraint 0 name: long_term power_limit_uw: 6000000 time_window_us: 27983872 max_power_uw: 6000000 Constraint 1 name: short_term power_limit_uw: 25000000 time_window_us: 2440 max_power_uw: 0 Constraint 2 name: peak_power power_limit_uw: 78000000 max_power_uw: 0 Zone 0:0 name: core enabled: 0 max_energy_range_uj: 262143328850 energy_uj: 9474396765 Constraint 0 name: long_term power_limit_uw: 0 time_window_us: 976 Zone 0:1 name: uncore enabled: 0 max_energy_range_uj: 262143328850 energy_uj: 102212567 Constraint 0 name: long_term power_limit_uw: 0 time_window_us: 976 Zone 1 name: psys enabled: 0 max_energy_range_uj: 262143328850 energy_uj: 2752025303 Constraint 0 name: long_term power_limit_uw: 0 time_window_us: 27983872 Constraint 1 name: short_term power_limit_uw: 0 time_window_us: 976 |
The PL1 power limit (long duration) is set to 6W and the value of PL2 (short duration) is at 25W. PL2 was also set to 25W on the UP 7000, but PL1 was set to 9.125W (by default).
We can change the PL1 limit to 15W with the following command:
1 |
unoiot@radxa-x4:~$ sudo powercap-set intel-rapl -z 0 -c 0 -l 15000000 |
We test again the CPU temperature is very high, although the CPU frequency is somewhat higher at least at the beginning. That’s why PL1 is set to 6W by default.
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 |
System health while running 7-zip multi core benchmark: Time CPU load %cpu %sys %usr %nice %io %irq Temp 17:59:42: 2900MHz 1.41 5% 0% 4% 0% 0% 0% 88.0°C 17:59:52: 2900MHz 1.81 98% 0% 97% 0% 0% 0% 92.0°C 18:00:03: 2900MHz 2.14 97% 0% 97% 0% 0% 0% 93.0°C 18:00:13: 2900MHz 2.43 95% 1% 93% 0% 0% 0% 93.0°C 18:00:24: 2900MHz 2.59 97% 0% 97% 0% 0% 0% 95.0°C 18:00:35: 2900MHz 2.81 97% 0% 97% 0% 0% 0% 95.0°C 18:00:45: 2900MHz 2.92 95% 1% 94% 0% 0% 0% 96.0°C 18:00:56: 2900MHz 3.09 97% 1% 95% 0% 0% 0% 95.0°C 18:01:06: 2900MHz 2.99 97% 0% 96% 0% 0% 0% 95.0°C 18:01:17: 2900MHz 3.15 95% 1% 93% 0% 0% 0% 95.0°C System health while running cpuminer: Time CPU load %cpu %sys %usr %nice %io %irq Temp 18:01:21: 2700MHz 3.29 5% 0% 5% 0% 0% 0% 95.0°C 18:02:02: 2900MHz 3.71 100% 0% 99% 0% 0% 0% 94.0°C 18:02:43: 2657MHz 3.85 100% 0% 99% 0% 0% 0% 95.0°C 18:03:24: 2757MHz 3.93 100% 0% 99% 0% 0% 0% 97.0°C 18:04:05: 2700MHz 3.96 100% 0% 99% 0% 0% 0% 94.0°C 18:04:45: 2700MHz 3.98 100% 0% 99% 0% 0% 0% 94.0°C 18:05:26: 2800MHz 3.99 100% 0% 99% 0% 0% 0% 93.0°C 18:06:07: 2562MHz 4.00 100% 0% 99% 0% 0% 0% 95.0°C |
The fan on the top of the case ran at full speed, so it looks like the cooling solution needs to be improved unlessour system had some issues.
Now that we understand the reason, let’s compare the results of memory bandwidth and 7-zip against the Raspberry Pi 5 and a Rockchip RK3588 module (Mixtile Core 3588E). The values from the Radxa X4 are memcpy: 8128.3 MB/s, memchr: 13245.3 MB/s, memset: 7960.9 MB/s, which is compared to the Raspberry Pi 5 which has memcpy: 5158.3 MB/s, memchr: 13463.2 MB/s, memset: 11671.4 MB/s. It can be seen that only the memset values are lower than the Raspberry Pi 5, but in all cases, the values are lower than the Rockchip RK3588 platform.
NVMe SSD performance
Let’s check the NVMe SSD provided by Radxa works to expectations using the iozone3 utility:
1 2 3 4 5 6 7 8 9 |
unoiot@radxa-x4:~$ sudo iozone -e -I -a -s 512M -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 524288 1024 932760 956635 1739815 1752363 1162460 952762 524288 16384 946899 936658 1716719 1724943 1666791 925752 iozone test complete. |
The Samsung PM991 NVMe SSD (PCIe 3.0 x4) delivered up to around 1,700 MB/s read speeds and 946 MB/s write speeds. The latter is close to the 1200MB/s theoretical write speed of the SSD, but still a way off to the 3100 MB/s read speed in this test.
We can get more information about the SSD using smartctl:
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 |
unoiot@radxa-x4:~/sbc-bench/results$ sudo smartctl -x /dev/nvme0 smartctl 7.4 2023-08-01 r5530 [x86_64-linux-6.8.0-40-generic] (local build) Copyright (C) 2002-23, Bruce Allen, Christian Franke, www.smartmontools.org === START OF INFORMATION SECTION === Model Number: SAMSUNG MZ9LQ128HBHQ-000H1 Serial Number: S5MJNF0R416841 Firmware Version: HPS6NFXV PCI Vendor/Subsystem ID: 0x144d IEEE OUI Identifier: 0x002538 Total NVM Capacity: 128,035,676,160 [128 GB] Unallocated NVM Capacity: 0 Controller ID: 5 NVMe Version: 1.3 Number of Namespaces: 1 Namespace 1 Size/Capacity: 128,035,676,160 [128 GB] Namespace 1 Utilization: 11,309,760,512 [11.3 GB] Namespace 1 Formatted LBA Size: 512 Namespace 1 IEEE EUI-64: 002538 a411c47efb Local Time is: Sat Sep 7 12:28:08 2024 +07 Firmware Updates (0x16): 3 Slots, no Reset required Optional Admin Commands (0x0017): Security Format Frmw_DL Self_Test Optional NVM Commands (0x005f): Comp Wr_Unc DS_Mngmt Wr_Zero Sav/Sel_Feat Timestmp Log Page Attributes (0x0f): S/H_per_NS Cmd_Eff_Lg Ext_Get_Lg Telmtry_Lg Maximum Data Transfer Size: 512 Pages Warning Comp. Temp. Threshold: 79 Celsius Critical Comp. Temp. Threshold: 82 Celsius Supported Power States St Op Max Active Idle RL RT WL WT Ent_Lat Ex_Lat 0 + 4.86W - - 0 0 0 0 0 0 1 + 4.49W - - 1 1 1 1 0 0 2 + 2.37W - - 2 2 2 2 0 500 3 - 0.0500W - - 3 3 3 3 210 1200 4 - 0.0050W - - 4 4 4 4 1000 9000 Supported LBA Sizes (NSID 0x1) Id Fmt Data Metadt Rel_Perf 0 + 512 0 0 1 - 4096 0 0 === START OF SMART DATA SECTION === SMART overall-health self-assessment test result: PASSED SMART/Health Information (NVMe Log 0x02) Critical Warning: 0x00 Temperature: 45 Celsius Available Spare: 100% Available Spare Threshold: 5% Percentage Used: 0% Data Units Read: 782,065 [400 GB] Data Units Written: 657,285 [336 GB] Host Read Commands: 5,624,333 Host Write Commands: 12,274,628 Controller Busy Time: 74 Power Cycles: 465 Power On Hours: 6 Unsafe Shutdowns: 387 Media and Data Integrity Errors: 0 Error Information Log Entries: 294 Warning Comp. Temperature Time: 70 Critical Comp. Temperature Time: 0 Temperature Sensor 1: 45 Celsius Error Information (NVMe Log 0x01, 16 of 64 entries) Num ErrCount SQId CmdId Status PELoc LBA NSID VS Message 0 294 0 0x1004 0x4004 - 0 0 - Invalid Field in Command Self-test Log (NVMe Log 0x06) Self-test status: No self-test in progress No Self-tests Logged |
3D graphics with Unigine Heaven
We tested the internal Intel graphics with Unigine Heaven benchmark 4.0. Radxa X4 managed to render the scene at 12.4 FPS on average with a score of 311 points at a resolution of 1920×1080.
Networking testing (2.5GbE and WiFi 5)
We’ll test networking with iperf3 starting with 2.5GbE (eth0) using the LattePanda Mu board on the other side.
Radxa X4 as client:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
unoiot@radxa-x4:~$ iperf3 -c 192.168.16.1 Connecting to host 192.168.16.1, port 5201 [ 5] local 192.168.16.2 port 47724 connected to 192.168.16.1 port 5201 [ ID] Interval Transfer Bitrate Retr Cwnd [ 5] 0.00-1.00 sec 284 MBytes 2.38 Gbits/sec 0 658 KBytes [ 5] 1.00-2.00 sec 280 MBytes 2.35 Gbits/sec 0 658 KBytes [ 5] 2.00-3.00 sec 280 MBytes 2.35 Gbits/sec 0 658 KBytes [ 5] 3.00-4.00 sec 281 MBytes 2.36 Gbits/sec 0 697 KBytes [ 5] 4.00-5.00 sec 280 MBytes 2.35 Gbits/sec 0 697 KBytes [ 5] 5.00-6.00 sec 279 MBytes 2.34 Gbits/sec 0 697 KBytes [ 5] 6.00-7.00 sec 281 MBytes 2.36 Gbits/sec 0 697 KBytes [ 5] 7.00-8.00 sec 280 MBytes 2.35 Gbits/sec 0 697 KBytes [ 5] 8.00-9.00 sec 281 MBytes 2.36 Gbits/sec 0 697 KBytes [ 5] 9.00-10.00 sec 280 MBytes 2.35 Gbits/sec 230 501 KBytes - - - - - - - - - - - - - - - - - - - - - - - - - [ ID] Interval Transfer Bitrate Retr [ 5] 0.00-10.00 sec 2.74 GBytes 2.35 Gbits/sec 230 sender [ 5] 0.00-10.00 sec 2.74 GBytes 2.35 Gbits/sec receiver iperf Done. |
Radxa X4 as server:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
unoiot@radxa-x4:~$ iperf3 -s ----------------------------------------------------------- Server listening on 5201 (test #1) ----------------------------------------------------------- Accepted connection from 192.168.16.1, port 44762 [ 5] local 192.168.16.2 port 5201 connected to 192.168.16.1 port 44764 [ ID] Interval Transfer Bitrate [ 5] 0.00-1.00 sec 280 MBytes 2.35 Gbits/sec [ 5] 1.00-2.00 sec 281 MBytes 2.35 Gbits/sec [ 5] 2.00-3.00 sec 280 MBytes 2.35 Gbits/sec [ 5] 3.00-4.00 sec 280 MBytes 2.35 Gbits/sec [ 5] 4.00-5.00 sec 280 MBytes 2.35 Gbits/sec [ 5] 5.00-6.00 sec 281 MBytes 2.35 Gbits/sec [ 5] 6.00-7.00 sec 281 MBytes 2.35 Gbits/sec [ 5] 7.00-8.00 sec 280 MBytes 2.35 Gbits/sec [ 5] 8.00-9.00 sec 281 MBytes 2.35 Gbits/sec [ 5] 9.00-10.00 sec 281 MBytes 2.35 Gbits/sec [ 5] 10.00-10.00 sec 640 KBytes 2.17 Gbits/sec - - - - - - - - - - - - - - - - - - - - - - - - - [ ID] Interval Transfer Bitrate [ 5] 0.00-10.00 sec 2.74 GBytes 2.35 Gbits/sec receiver ----------------------------------------------------------- Server listening on 5201 (test #2) ----------------------------------------------------------- |
No problem in either direction with 2.35 Gbps tansfer speeds.
We’ll now switch to WiFi 5 (5GHz) testing using the pre-installed M.2 AzureWave module based on RealTek RTL8852BE using Xiaomi Router AX3200.
Client mode:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
unoiot@radxa-x4:~$ iperf3 -c 192.168.31.124 Connecting to host 192.168.31.124, port 5201 [ 5] local 192.168.31.149 port 53874 connected to 192.168.31.124 port 5201 [ ID] Interval Transfer Bitrate Retr Cwnd [ 5] 0.00-1.00 sec 64.6 MBytes 542 Mbits/sec 0 2.62 MBytes [ 5] 1.00-2.00 sec 66.1 MBytes 555 Mbits/sec 0 2.62 MBytes [ 5] 2.00-3.00 sec 71.5 MBytes 600 Mbits/sec 0 2.62 MBytes [ 5] 3.00-4.00 sec 74.0 MBytes 621 Mbits/sec 0 2.62 MBytes [ 5] 4.00-5.00 sec 76.9 MBytes 645 Mbits/sec 0 2.62 MBytes [ 5] 5.00-6.00 sec 73.9 MBytes 620 Mbits/sec 0 2.62 MBytes [ 5] 6.00-7.00 sec 64.1 MBytes 538 Mbits/sec 0 2.62 MBytes [ 5] 7.00-8.00 sec 62.1 MBytes 521 Mbits/sec 0 2.62 MBytes [ 5] 8.00-9.00 sec 69.8 MBytes 585 Mbits/sec 0 2.62 MBytes [ 5] 9.00-10.00 sec 69.5 MBytes 583 Mbits/sec 0 2.62 MBytes - - - - - - - - - - - - - - - - - - - - - - - - - [ ID] Interval Transfer Bitrate Retr [ 5] 0.00-10.00 sec 693 MBytes 581 Mbits/sec 0 sender [ 5] 0.00-10.01 sec 692 MBytes 579 Mbits/sec receiver iperf Done. |
Server mode:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
unoiot@radxa-x4:~$ iperf3 -s ----------------------------------------------------------- Server listening on 5201 (test #1) ----------------------------------------------------------- Accepted connection from 192.168.31.124, port 56240 [ 5] local 192.168.31.149 port 5201 connected to 192.168.31.124 port 56242 [ ID] Interval Transfer Bitrate [ 5] 0.00-1.00 sec 57.9 MBytes 485 Mbits/sec [ 5] 1.00-2.00 sec 60.4 MBytes 507 Mbits/sec [ 5] 2.00-3.00 sec 55.6 MBytes 467 Mbits/sec [ 5] 3.00-4.00 sec 58.5 MBytes 491 Mbits/sec [ 5] 4.00-5.00 sec 60.8 MBytes 510 Mbits/sec [ 5] 5.00-6.00 sec 59.0 MBytes 495 Mbits/sec [ 5] 6.00-7.00 sec 61.1 MBytes 513 Mbits/sec [ 5] 7.00-8.00 sec 60.9 MBytes 511 Mbits/sec [ 5] 8.00-9.00 sec 61.4 MBytes 515 Mbits/sec [ 5] 9.00-10.00 sec 61.0 MBytes 512 Mbits/sec [ 5] 10.00-10.03 sec 2.12 MBytes 525 Mbits/sec - - - - - - - - - - - - - - - - - - - - - - - - - [ ID] Interval Transfer Bitrate [ 5] 0.00-10.03 sec 599 MBytes 500 Mbits/sec receiver ----------------------------------------------------------- Server listening on 5201 (test #2) ----------------------------------------------------------- |
578 Mbps and 500 Mbps are acceptable transfer rates for WiFi 5.
Web browsing – Speedometer 2.0 and WebGL Aquarium demo
We’ll evaluate web browsing performance using Speedometer 2.0, although it’s now recommended to test with Speedometer 3.0, so that we can compare it to the Raspberry Pi 5’s results. Tests were performed on both Firefox (pre-installed) and Chromium which was manually installed.
Speedometer 2.0 shows that Firefox is slower than Chromium, with a score of 175 on Chromium, which is around 12% higher than Firefox. Firefox is 153, and when compared to the Raspberry Pi 5 board that scored 56, the Radxa X4 is around 3 times faster.
The WebGL Aquarium demo was tested on Chromium and the system managed to render 15,000 fish at 32 FPS. It’s quite better than equivalent Arm solutions, for example, an RK3588S platform could only render about 5,000 fish at a similar frame rate (31 FPS).
Video playback testing with YouTube and VLC
Let’s now test YouTube video playback in Chromium.
A 4Kp30 video could be played smoothly without any frame dropped at all.
The system struggles more with a 4K video at 60 FPS losing about 17% of the frames and encountering frequent freezes while loading.
Big Bug Bunny (H.264, Full HD 1920 x 1080) played just fine in VLC.
Another 4K video at 30FPSfps played without any stuttering, but looking at the statistics, we found that there was a frame drop of around 10%, which is quite different from the test results of other N100 CPU boards like the LattePanda Mu that had a frame drop of about 1% with the video.
Radxa X4 power consumption on Ubuntu 24.04
We measured the power consumption of Radxa X4 using a USB power meter as shown in the photo below.
Here are the results:
- Power off – 0.2 Watt
- Booting – About 12 Watts
- Idle – 6 Watts (fan active)
- 4Kp60 YouTube video playback – 12 Watts
- 7-Zip Benchmark – 12 Watts
We’ll provide a summary comparison table with benchmarks and power consumption, but we can already say the Radxa X4 consumes less than other N100 boards such as the Lattepanda Mu.
Testing the GPIO pins on the Radxa X4
The GPIO pins on the Radxa X4 are not directly connected to the N100 CPU instead we have a Raspberry Pi RP2040 MCU that controls the GPIOs and is itself connected to the Processor N100 through USB and UART. So it’s very much like having a Raspberry Pi Pico connected to a computer.
Radxa provides a pinout diagram for the 40-pin GPIO header reproduced below with each pin having multiple functions, except for the power signals.
We tested the GPIO with a Beitian BN-180 GPS receiver module connected over UART, and we opted for GPIO pins 20,21, which in “Function3” of the table above correspond to UART1 Tx and Rx pins.
Radxa recommends users program the RP2040 with the PICO C/C++ SDK, but it’s up to the user to select his preferred programming language, and in this review, we will use PlatformIO IDE and Arduino programming. We’ll start by installing VSCODE on Ubuntu and then finish installing the PlatformIO extension. We can now create a project by selecting the Raspberry Pi Pico board and then try to write a simple test code to work as a serial bridge.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
#include <Arduino.h> UART Serialx(0, 1, 0, 0); UART Serial2(20, 21, 0, 0); void setup() { Serial.begin(115200); Serialx.begin(115200); Serial2.begin(9600); } void loop() { if (Serial.available()) { Serial2.write(Serial.read()); } if (Serial2.available()) { Serial.write(Serial2.read()); Serialx.write(Serial2.read()); } } |
We rely on three serial ports in the program:
- “Serial” for debug messages from the RP0240
- “Serial2” to connect to the GPS receiver.
- “Serialx” for the Intel CPU’s ttyS4
After that, we can build and upload files without having to press the BOOTSEL button to drag the .uf2 file. We will set the platformio.ini file as follows to use picotool as the “upload protocol” for the firmware:
1 2 3 4 5 |
[env:pico] platform = raspberrypi board = pico framework = arduino upload_protocol = picotool |
After the setup is complete, we can build/upload conveniently without having to keep pressing the BOOTSEL button each time we want to update the firmware. The button location on the Radxa X4 is somewhat inconvenient because it is placed on the bottom of the case. Therefore, using this method is more suitable.
Now that the Arduino firmware is uploaded to the board, we will test whether the communication between RP2040 and N100 is correct by using a minicom to monitor the data sent between the CPU and MCU.
1 |
minicom -D /dev/ttyS4 -b 115200 |
This will display the data read from the GPS receiver on the terminal. We can connect various devices to the Radxa X4 board easily thanks to the ability to develop code with Arduino using either PlatformIO or the Arduino IDE. The data transmission between the CPU and MCU has some limitations since it only relies on UART for communication.
Radxa X4 on Ubuntu 24.04 conclusion and Raspberry Pi 5 comparison
After having tested the Radxa X4 SBC on Ubuntu 24.04 we can compare it to the Raspberry Pi 5. There are many interesting aspects, such as Raspberry Pi 5 scoring higher in the benchmarks in memset, 7-zip, and OpenSSL AES-256 16K, which scored slightly higher. However, the web browsing experience is better on x86 than on Arm as usual. Networking performance is also better on the Radxa X4 both for Ethernet and WiFi, and the power consumption is usually lower on the Raspberry Pi 5.
Radxa X4 also scored three times higher in Unigine Heaven 3D graphics benchmarks and it supports much higher SSD read speeds.
When looking at device connectivity and general usage, these two boards are not that different. However, in terms of GPIO usage, the Raspberry Pi 5 is still more convenient because it is directly connected to the CPU without having to go through the co-processor like the Radxa X4 chose to do through the RP2040.
In terms of OS support, Windows on Arm can run on the Raspberry Pi 5 but with serious limitations (some features are not working), while it will just work right after installing on the Radxa X4. So if you have to use Windows, the Radxa X4 is the answer. But if you plan on running Linux, then it depends on your use case. The Radxa X4 is better if you need higher graphics performance and/or faster Ethernet and WiFi. Another advantage is that you can expand the board with its built-in M.2 socket without having to rely on additional HAT+ expansion boards.
While everything basically works on the Radxa X4, the main disappointment is the performance compared to other Intel N100 SBCs we’ve tested. This can be mitigated by adjusting the PL1 power limit to some extent, but then high CPU temperatures cause thermal throttling since the cooling solution does not seem to be adequate for higher power limits. [Update: based on the comments below, this seems related to a dried-up thermal pad that Radxa sent with a few boards. We’ll try to test again with another thermal pad].
We’d like to thank Radxa for sending a kit with the X4 SBC and accessories for review. The Radxa X4 is currently out of stock on AliExpress, but it can be purchased on Arace for $80 and up, and we can also see some models with 64GB eMMC flash.
CNXSoft: This review is a translation – with some additional insights – of the article on CNX Software Thailand by Arnon ThongTem and edited by Suthinee Kerdkaew.
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
There is definitely an issue with cooling using that standard case.
I forgot to buy one so I jerry-rigged a €15 Raspberry Pi cooler from Amazon (GeeekPi ICE Tower Cooler) on to the Radxa with a few hand-made adapters. I never went over 47C in any of the tests.
https://0x0.st/Xgmi.bin
I was just going to ask that as with those temps surely the benches are being affected by throttling?
I was hoping for a picture of your cooler setup behind that link. Maybe you can share that too 🙂 Those are indeed low temps.
I have not seen a review of 2 dead cheap devices Radxa 2A and 2F.
They are not that dead cheap when you look at the far more powerful Radxa Zero3 or 3c.
They are a curious inclusion and buy…
BTW some devices looking better in benchmarks with super cooling however you can run easily in stability issues when your power source is POE with 30W limit. So I am alright with Radxa cooling capacity for this SBC and taking in account peak consumption of SSD drive I would rather set PL2 to half value and do retest because in future it might suffer unexpected shutdowns.
Thanks for this review.
I have several sbc: nanopi r4s, rock 5b, orangepi 5, … each being passively cooled and put in a 3d-printed case to fit in 1U in my rack. https://postimg.cc/S2TLjY8B
I prefer arm64 devices, but I need ONE x86 sbc (for running gitlab on k8s via its helm chart install, which is not available for arm64).
Should I consider this raxda x4 associated with passive cooling, for low to medium loads only, and which would fit in 1U height (41mm) ?
The board would have no problem fitting in a rack with 41mm height as long as you design a case for it.
Passive cooling is feasible for Intel N100. Check out the UP 7000 board review: https://www.cnx-software.com/2023/07/26/up-7000-powerful-intel-alder-lake-n-alternative-raspberry-pi-4-sbc/
If you install that thick of a heatsink, the height might become an issue (TBC).
“renderer: llvmpipe (LLVM 17.0.6 256 bits)”
This doesn’t seem right… And inxi says the GPU driver is “n/a”. Either inxi it’s wrong (likely) or you used software rendering (unlikely).
Also, the problems with overheating seem to be the fault of a dried up pad the that even was too slim to make any contact between the heat spreader and the CPU. Have you checked this? Those who got the proper pad, report 70 C max.
I’ll ask Arnon if he can test it again with another thermal pad (sbc-bench.sh only).
I forgot he already had to hack the cooling design as documented in part one. He added a smaller thermal pad for an NVMe SSD to fill the gap left by the stock thermal pad.
https://www.cnx-software.com/wp-content/uploads/2024/08/Intel-N100-SBC-thermal-pads-1200×900.webp
Thank you… I wonder why people report temperatures so different then.
He is still using the dried up thermal pad and just added another one, so it might be the explanation for the differences.
Got mine a couple days ago.
No thermal issues at all with the standard upside down half case.
Running brilliant except for one fault found.
It refuses to work through my kvm, all my other gear works great with my kvm but this just cannot keep monitor sync.
Thanks for another quality review. These intel n100 sbc’s come at a similar price and performance to rockchip rk3588. Thermals on this debunk the theory that intel match arm on performance per watt, but its getting closer. Take your choice, want mainline kernel with good support go intel, this is a major drawback with rockchip. Its taken many years to get hardware acceleration video for ffmpeg. The npu libs are closed source, and to access any of those things you must use rockchip hybrid bsp combo android/linux kernel
All in all, for my needs, a Pi5 or a Lemon (Orange) Pi 5/RK3588 would never get a look in for purchase consideration.
The heatsink/fan design is very poor but if you look at the latest YouTube review from ExplainingComputers, he used a copper shim and paste, instead of the pad to massively reduce temps to the point where the fan is not required at all. It really was jaw dropping to see how low the temps got.
Hopefully Radxa will see and change the design because silence is golden.
I have asus mini-atx board with N100 and when I run 4thread benchmark and CPU is on 3GHz there is zero chance to cool it without fan.
Is it possible to connect a PCIe M2 to SATA adapters (ASM1061 for instance) ? Someone test it ? Thanks