In the first part of the ODROID-H4+ kit review, I checked out the hardware and showed how to install the Intel N97 SBC into the H4 Type 3 case taking up to four 2.5-inch SATA drives. I’ve now had time to test the ODROID-H4 Plus with Ubuntu 24.04 both as an actively cooled NAS kit and a fanless SBC and will report benchmark results, 2.5GbE and storage test results, 4K and 8K YouTube video playback capability, check IBECC memory support, measure power consumption, and more in the second part of the review.
Ubuntu 24.04 installation on ODROID-H4 Plus
The ODROID-H4 Plus SBC does not come with any preinstalled OS since there’s no storage by default, so I installed Ubuntu 24.04 on the 128GB M.2 NVMe SSD I inserted into the board. The installation went relatively smoothly, but in hindsight, I would have probably installed the OS before installing the SBC into the case along with the SATA drive because that made Ubuntu installation slightly more complicated.
That’s because two of my SATA drives already had Ubuntu installed on them, so I had to switch to “Manual partitioning” to understand what was going on and select the M.2 NVMe SSD as the installation medium. That M.2 SSD was also previously used to boot Raspberry Pi OS, so I deleted that partition and created a new one for Ubuntu. Somehow the M.2 drive was not selectable for the bootloader installation (not sure why, but I thought it might have been a space issue, more on that later), so I selected one of the hard drives. That means Grub is on one of the SATA hard drives and Ubuntu is on the M.2 drive. Not quite ideal, but that will do for now.
Ubuntu 24.04 system information
The rest of the installation went smoothly, so going to Settings->About confirms we have a HARDKERNEL ODROID-H4 with a quad-core Intel N97 processor, 32GB memory, and 128GB storage (NVMe only).
We can get a few more details in the command line:
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 |
jaufranc@ODROID-H4-CNX:~$ uname -a Linux ODROID-H4-CNX 6.8.0-31-generic #31-Ubuntu SMP PREEMPT_DYNAMIC Sat Apr 20 00:40:06 UTC 2024 x86_64 x86_64 x86_64 GNU/Linux jaufranc@ODROID-H4-CNX:~$ cat /etc/lsb-release DISTRIB_ID=Ubuntu DISTRIB_RELEASE=24.04 DISTRIB_CODENAME=noble DISTRIB_DESCRIPTION="Ubuntu 24.04 LTS" jaufranc@ODROID-H4-CNX:~$ df -h Filesystem Size Used Avail Use% Mounted on tmpfs 3.2G 2.5M 3.2G 1% /run /dev/nvme0n1p2 117G 14G 97G 13% / tmpfs 16G 4.0K 16G 1% /dev/shm tmpfs 5.0M 8.0K 5.0M 1% /run/lock efivarfs 192K 111K 77K 60% /sys/firmware/efi/efivars /dev/sdc1 511M 6.1M 505M 2% /boot/efi tmpfs 3.2G 2.5M 3.2G 1% /run/user/1000 /dev/sdb1 118G 1.5M 118G 1% /media/jaufranc/New Volume /dev/sda2 70G 68G 0 100% /media/jaufranc/9e1084f6-dfda-4fad-9b71-20062c0507e5 /dev/sdc2 802G 570G 192G 75% /media/jaufranc/NEWHOPE /dev/sda3 846G 645G 158G 81% /media/jaufranc/NEWHOPE1 /dev/sdc3 116G 93M 116G 1% /media/jaufranc/NTFS_Review jaufranc@ODROID-H4-CNX:~$ free -mh total used free shared buff/cache available Mem: 31Gi 2.6Gi 27Gi 456Mi 2.3Gi 28Gi Swap: 8.0Gi 0B 8.0Gi |
The system is running Ubuntu 24.04 with Linux 6.8, and all three SATA drives are properly detected (/dev/sda, /dev/sdb, /dev/sdc) and mounted.
Further information can be had with the inxi program:
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 |
jaufranc@ODROID-H4-CNX:~$ sudo inxi -Fc0 System: Host: ODROID-H4-CNX Kernel: 6.8.0-31-generic arch: x86_64 bits: 64 Console: pty pts/1 Distro: Ubuntu 24.04 LTS (Noble Numbat) Machine: Type: Desktop System: HARDKERNEL product: ODROID-H4 v: 1.0 serial: N/A Mobo: HARDKERNEL model: ODROID-H4 v: 1.0 serial: N/A UEFI: American Megatrends LLC. v: 1.2 date: 04/29/2024 CPU: Info: quad core model: Intel N97 bits: 64 type: MCP cache: L2: 2 MiB Speed (MHz): avg: 824 min/max: 800/3600 cores: 1: 800 2: 897 3: 800 4: 800 Graphics: Device-1: Intel Alder Lake-N [UHD Graphics] driver: i915 v: kernel Display: server: X.org v: 1.21.1.11 with: Xwayland v: 23.2.6 driver: gpu: i915 tty: 80x24 resolution: 1920x1080 API: EGL v: 1.5 drivers: iris,swrast platforms: surfaceless,device API: OpenGL v: 4.6 compat-v: 4.5 vendor: mesa v: 24.0.5-1ubuntu1 note: console (EGL sourced) renderer: Mesa Intel Graphics (ADL-N), 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-31-generic status: kernel-api Network: Device-1: Intel Ethernet I226-V driver: igc IF: enp1s0 state: down mac: 00:1e:06:45:5a:bd Device-2: Intel Ethernet I226-V driver: igc IF: enp2s0 state: up speed: 1000 Mbps duplex: full mac: 00:1e:06:45:5a:be Drives: Local Storage: total: 2.05 TiB used: 1.26 TiB (61.6%) ID-1: /dev/nvme0n1 model: PCIe SSD size: 119.24 GiB ID-2: /dev/sda vendor: Toshiba model: MQ01ABD100 size: 931.51 GiB ID-3: /dev/sdb model: CJ225128TC size: 118 GiB ID-4: /dev/sdc vendor: Toshiba model: HDWL110 size: 931.51 GiB Partition: ID-1: / size: 116.32 GiB used: 13.44 GiB (11.6%) fs: ext4 dev: /dev/nvme0n1p2 ID-2: /boot/efi size: 511 MiB used: 6.1 MiB (1.2%) fs: vfat dev: /dev/sdc1 Swap: ID-1: swap-1 type: file size: 8 GiB used: 0 KiB (0.0%) file: /swap.img Sensors: System Temperatures: cpu: 45.0 C mobo: N/A Fan Speeds (rpm): N/A Info: Memory: total: 32 GiB available: 31.09 GiB used: 2.67 GiB (8.6%) igpu: 60 MiB Processes: 256 Uptime: 2h 31m Init: systemd target: graphical (5) Shell: Sudo inxi: 3.3.34 |
The idle temperature is reported to be 45°C. Note the large fan on top of the enclosure very seldomly rotates when idle.
ODROID-H4 Plus benchmarks on Ubuntu 24.04
Hardkernel implemented an “Unlimited Performance” mode for the ODROID-H3/H4 boards that can be enabled in the BIOS. As Hardkernel explains, the “Unlimited Performance” mode makes use of a new Power Limit 4 (PL4) introduced with 10th-generation Intel Core processors that sets the maximum power limit at the package level. I thought it was not enabled by default, but initially planned to test stock and “Unlimited Performance” mode, but going into the BIOS in Advanced->CPU – Power Management Control revealed that PL4 is already set to 0 or the so-called “Unlimited Performance” mode.
As usual, let’s start 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 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 |
jaufranc@ODROID-H4-CNX:~$ sudo ./sbc-bench.sh -r Starting to examine hardware/software for review purposes... sbc-bench v0.9.65 Installing needed tools: apt-get -f -qq -y install gcc make build-essential powercap-utils curl git links mmc-utils smartmontools stress-ng, p7zip 16.02, tinymembench, ramlat, mhz, cpufetch, cpuminer. 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 (10 minutes elapsed). Results validation: * Measured clockspeed not lower than advertised max CPU clockspeed * No swapping * Background activity (%system) OK * Too much other background activity: 0% avg, 6% max -> https://tinyurl.com/mr2wy5uv * Powercap detected. Details: "sudo powercap-info -p intel-rapl" -> https://tinyurl.com/4jh9nevj Full results uploaded to https://sprunge.us/8a0Ihc # HARDKERNEL ODROID-H4 1.0 / N97 Tested with sbc-bench v0.9.65 on Sat, 18 May 2024 14:27:17 +0700. Full info: [https://sprunge.us/8a0Ihc](http://sprunge.us/8a0Ihc) ### General information: Information courtesy of cpufetch: Name: Intel(R) N97 Microarchitecture: Alder Lake Technology: 10nm Max Frequency: 3.600 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 N97, 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 800 3600 - 1 0 1 800 3600 - 2 0 2 800 3600 - 3 0 3 800 3600 - 31841 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 45.0°C: cpu0: OPP: 3600, Measured: 3586 After at 52.0°C: cpu0: OPP: 3600, Measured: 3586 ### Performance baseline * memcpy: 12400.1 MB/s, memchr: 18946.1 MB/s, memset: 13755.9 MB/s * 16M latency: 106.8 96.56 107.1 96.75 106.0 90.60 92.30 95.84 * 128M latency: 116.8 110.6 117.1 110.8 116.4 110.5 107.2 110.4 * 7-zip MIPS (3 consecutive runs): 13984, 14045, 14056 (14030 avg), single-threaded: 4151 * `aes-256-cbc 940911.87k 1244938.58k 1289130.75k 1300187.82k 1303216.13k 1298339.16k` * `aes-256-cbc 955928.03k 1246933.67k 1289093.55k 1299651.58k 1301949.10k 1303565.65k` ### PCIe and storage devices: * Intel Ethernet I226-V: Speed 5GT/s, Width x1, driver in use: igc, * Intel Ethernet I226-V: Speed 5GT/s, Width x1, driver in use: igc, * ASMedia ASM1064 Serial ATA: Speed 8GT/s, Width x1, driver in use: ahci, * 119.2GB "PCIe SSD" SSD as /dev/nvme0: Speed 8GT/s, Width x4, 0% worn out, drive temp: 38°C, ASPM Disabled * 931.5GB "Toshiba TOSHIBA MQ01ABD100" HDD as /dev/sda: SATA 2.6, 3.0 Gb/s (current: 3.0 Gb/s), drive temp: 40°C * 118GB "CJ225128TC" SSD as /dev/sdb: SATA 2.6, 3.0 Gb/s (current: 3.0 Gb/s), drive temp: 40°C * 931.5GB "Toshiba TOSHIBA HDWL110" HDD as /dev/sdc: SATA 3.3, 6.0 Gb/s (current: 6.0 Gb/s), drive temp: 38°C * Winbond W25Q128JV 16MB SPI NOR flash, drivers in use: spi-nor/intel-spi ### Challenging filesystems: The following partitions are NTFS: sdc3 -> https://tinyurl.com/mv7wvzct ### Swap configuration: * /swap.img on /dev/nvme0n1p2: 8.0G (0K used) ### Software versions: * Ubuntu 24.04 LTS (noble) * Compiler: /usr/bin/gcc (Ubuntu 13.2.0-23ubuntu4) 13.2.0 / x86_64-linux-gnu * OpenSSL 3.0.13, built on 30 Jan 2024 (Library: OpenSSL 3.0.13 30 Jan 2024) ### Kernel info: * `/proc/cmdline: BOOT_IMAGE=/boot/vmlinuz-6.8.0-31-generic root=UUID=9c6e490c-bb54-4870-8aaa-08fc8ac455c4 ro quiet splash vt.handoff=7` * Vulnerability Reg file data sampling: Mitigation; Clear Register File * Vulnerability Spec store bypass: Mitigation; Speculative Store Bypass disabled via prctl * Vulnerability Spectre v1: Mitigation; usercopy/swapgs barriers and __user pointer sanitization * Kernel 6.8.0-31-generic / CONFIG_HZ=1000 Waiting for the device to cool down...................................... 32.0°C |
As we’ll see below the results are somewhat better than other Intel N97/N100 devices thanks to the higher PL4 power limit and large cooling fan.
We can also check the power limit.
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 |
jaufranc@ODROID-H4-CNX:~$ sudo powercap-info -p intel-rapl [sudo] password for jaufranc: enabled: 1 Zone 0 name: package-0 enabled: 1 max_energy_range_uj: 262143328850 energy_uj: 14619764453 Constraint 0 name: long_term power_limit_uw: 12000000 time_window_us: 27983872 max_power_uw: 12000000 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: 3441110636 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: 3729055 Constraint 0 name: long_term power_limit_uw: 0 time_window_us: 976 |
Our Intel N97 is set to have a 12W PL1 power limit and a 25W PL2 power limit. Hardkernel explains that PL1 will be set to 15W for the Core i3-N305 found in the ODROID-H4 Ultra.
We’ve run Geekbench 6 with sbc-bench four times to check variances between runs.
1 2 3 4 5 6 7 8 9 10 11 12 13 |
jaufranc@ODROID-H4-CNX:~$ for i in 1 2 3 ; do sudo ./sbc-bench.sh -G ; done sbc-bench v0.9.65 taking care of Geekbench Installing needed tools: distro packages already installed, geekbench 6.3.0. Done. Checking cpufreq OPP. Done. Executing RAM latency tester. Done. Executing Geekbench... Executing on all cores 1st time Geekbench 6.3.0 : https://www.geekbench.com/ |
Four results for single-core (SC) and multi-core (MC) results:
- SC: 1,331 points; MC: 3,413 points – See the full results on the Geekbench website
- SC: 1,332 points; MC: 3,429 points- See the full results on the Geekbench website
- SC: 1,333 points; MC: 3,438 points- See the full results on the Geekbench website
- SC: 1,332 points; MC: 3,415 points – See the full results on the Geekbench website
The single-core results are basically the same for all four runs. There’s more variance for the multi-core results, but nothing much. I took a break around the end of the third run and turned off the aircon as I forgot to let it run. With the aircon, the room temperature was about 28°C and without it, the room temperature slowly increased to about 30-31°C, which may explain why the latest multi-core run’s score is slightly lower. You can find more details including CPU temperature during testing in the full SBC-bench log.
We started GPU performance testing with Unigine Heaven Benchmark 4.0.
That would be 17.2 fps and a 433 score at the standard 1920×1080 resolution.
We further tested the internal GPU (iGPU) by playing some YouTube videos starting in Firefox at 4K and 8K resolutions.
4K 30 fps YouTube video streaming works great with only 10 frames dropped out of 6589 while watching a video for over 9 minutes. Four of those were while taking the screenshot.
Switching to 8K resolution (4320p) but at 60 fps is still smooth with just 3 frames dropped over a little 3 minutes of watching.
4K 60 FPS videos are still watchable, but the number of dropped frames increased to 238 out of 48907 while streaming the video for over 13 minutes.
8K 60 FPS is often a challenge, but the ODROID-H4 Plus handles that relatively well, although not perfectly, with 380 frames dropped out of 18241 while watching the video for about 5 minutes, or a 2% dropped rate. It will be acceptable to some, but not others, so I tried again with Google Chrome.
I did have to test that part for too long because it was an immediate and complete disaster with well over 50% frame dropped and the video was unwatchable. I noticed 100% CPU usage on all four cores, so I went to check whether video decoding hardware acceleration was enabled and it was.
I quickly tried with 4Kp60 and it worked just as well as in Firefox. So the issue in Google Chrome is only with 8K 60 FPS which most people will likely not use. Note that both Firefox and Chrome used AV1 video codec for all tested resolutions and frame rates.
Let’s use the Firefox web browser again to evaluate the performance with Speedometer 2.0.
That’s 164 runs per minute. We can repeat the same test in Google Chrome.
At 198 runs per minute, Google Chrome is quite faster than Firefox this time around.
Speedometer 2.0 will be deprecated, so I also ran Speedometer 3.0 to get some data for future reviews.
Mozilla Firefox
The new score is obviously not comparable and is expressed in points. ODROID-H4 Plus achieved 8.15 points in Firefox on Ubuntu 24.04. The detailed view is much more informative than before as well.
Google Chrome
Google Chrome confirms the higher web-rendering performance over Firefox on the ODROID-H4 Plus with 12.2 points.
ODROID H4 Plus benchmarks comparison against other Alder Lake-N platforms
Let’s now compare ODROID H4 Plus’ Ubuntu 24.04 benchmark results against other Alder Lake-N platforms running Ubuntu 22.04/Fedora 39, namely Blackview MP80 (N97) mini PC, MINIX Z100-0dB fanless mini PC (N100), GEEKOM Mini Air12 mini PC (N100), and Weibu N10 mini PC (Core i3-N305) whose main specifications are shown in the table below.
ODROID-H4 Plus | Blackview MP80 (N97) | MINIX Z100-0dB | GEEKOM Mini Air12 | Weibu N10 | |
---|---|---|---|---|---|
SoC | Intel Processor N97 | Intel Processor N97 | Intel Processor N100 | Intel Processor N100 | Intel Core i3-N305 |
CPU | 4-core processor up to 3.6 GHz | 4-core processor up to 3.6 GHz | 4-core processor up to 3.4 GHz | 4-core processor up to 3.4 GHz | 8-core processor up to 3.80 GHz |
GPU | 24EU Intel UHD Graphics @ 1.2 GHz | 24EU Intel UHD Graphics @ 1.2 GHz | 24EU Intel HD Graphics @ 750 MHz | 24EU Intel HD Graphics @ 750 MHz | 32EU Intel HD Graphics @ 1.25 GHz |
TDP | 12W | 12W | 6W | 6W | 15W |
Memory | 32GB DDR5-5600 SO-DIMM (user installed) | 16GB LPDDR5 SDRAM | 16 GB DDR4-3200 | 16GB DDR5-4800 | 8GB DDR4-3200 |
Storage | 128GB M.2 NVMe SSD (user installed) | 512GB M.2 SATA SSD | 512GB NVMe SSD | 512GB NVMe SSD | 512GB NVMe SSD |
Default OS | N/A | Windows 11 Pro | Windows 11 Pro | Windows 11 Pro | Windows 11 Pro |
Linux OS | Ubuntu 24.04 | Fedora 39 | Ubuntu 22.04 | Ubuntu 22.04 | Ubuntu 22.04 |
There’s a mixture of OS with Ubuntu 22.04, Ubuntu 24.04, and Fedora Workstation 39 so that’s not ideal, but it will still give an idea of the relative performance, so here are the Linux benchmark results.
ODROID-H4 Plus "Unlimited Performance" mode | Blackview MP80 (N97) | MINIX Z100-0dB | GEEKOM Mini Air12 | Weibu N10 Core i3-N305 | |
---|---|---|---|---|---|
sbc-bench.sh | |||||
- memcpy | 12400.1 MB/s | 8989.0 MB/s | 9,572.6 MB/s, | 10,459.3 MB/s | 9,949.4 MB/s |
- memset | 13755.9 MB/s | 12881.2 MB/s | 8,552.2 MB/s | 10,665.4 MB/s | 8,991.6 MB/s |
- 7-zip (average) | 14,030 | 13,230 | 10,680 | 13,940 | 17,615 |
- 7-zip (top result) | 14,056 | 13,270 | 12,324 | 13,976 | 20,002 |
- OpenSSL AES-256 16K | 1303565.65k | 1302822.91k | 1,232,743.08k | 1,233,283.75k | 1,377,211.73k |
Geekbench 6 Single | 1,332 | 1,251 | 1,243 | 1,213 | 1,177 (Geekbench 5) |
Geekbench 6 Multi | 3,429 | 3,141 | 3,189 | 3,272 | 4,856 (Geekbench 5) |
Unigine Heaven score | 433 | 404 | 294 | 303 | 451 |
Speedometer 2.0 (Firefox) | 164 | 152 | 146 | 149 | N/A |
The ODROID-H4 Plus performs quite better than other quad-core Alder Lake-N systems. ODROID-H4 Plus has higher memory bandwidth likely due to the faster Samsung 32GB DDR5-5600 SO-DIMM. Note this is user-installed memory and you’d have to use the same type of RAM to get a similar level of performance. 7-zip score is also notably higher and increases with runs (13984 -> 14045 -> 14056) meaning the cooling solution is more than adequate, and maybe caching helps improve results over time. The octa-core Weibu N10 mini PC is still faster in this multi-core test. Note the ODROID-H4 Plus comparison is not entirely fair as it’s a larger system than other mini PCs and also benefits from a large fan missing from other systems. Geekbench 6 confirms the excellent single-core and multi-core performance of the system. and 3D graphics is also pretty good considering we’re using an entry-level SoC with integrated graphics.
We’re not quite finished with benchmarks, as we’ll run some more performance tests with IBECC enabled and in fanless mode after taking the SBC out of the enclosure near the end of the review.
Storage testing
Note that the ODROID-H4 boards do not come with any storage by default, so what I’ll do here is mostly test the interfaces with drives that won’t max out the bandwidth.
Let’s start with the NVMe SSD (MAKERDISK 128GB drive) rated for 1,800 MB/s read and 560 MB/s write speeds:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
jaufranc@ODROID-H4-CNX:~$ sudo 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.506 $ Compiled for 64 bit mode. Build: linux-AMD64 random random bkwd record stride kB reclen write rewrite read reread read write read rewrite read fwrite frewrite fread freread 1024000 4 159418 269909 111528 111859 54083 240251 1024000 16 476668 646944 159372 160563 165040 596690 1024000 512 2067408 2065507 969863 974640 970443 1898867 1024000 1024 2021430 2127022 1319260 1323195 1312995 2066323 1024000 16384 2038895 2090161 1867325 1865182 1949199 2103941 iozone test complete. |
Something is very wrong for writes (about 2,000 MB/s) unless Cytron wrongly advertised the write speed of their drives, but the read speed is about as advertised (1867325 KB/s or 1823 MB/s).
I’ll now test three of the four SATA interfaces. Two are fitted with SATA drives whose performance should be around 100MB/s and the remaining one with a low-end SATA SSD which we previously tested in the MINIX NEO Z100-0dB mini PC with about 252 MB/s reads and 144MB/s writes.
/dev/sda2 (SATA HDD – EXT-4 partition):
1 2 3 4 |
jaufranc@ODROID-H4-CNX:/media/jaufranc/9e1084f6-dfda-4fad-9b71-20062c0507e5$ sudo iozone -e -I -a -s 100M -r 16384k -i 0 -i 1 random random bkwd record stride kB reclen write rewrite read reread read write read rewrite read fwrite frewrite fread freread 102400 16384 97879 99553 104155 106871 |
/dev/sdb1 (SATA SSD – exFAT partition):
1 2 3 4 |
jaufranc@ODROID-H4-CNX:/media/jaufranc/New Volume$ sudo iozone -e -I -a -s 100M -r 16384k -i 0 -i 1 random random bkwd record stride kB reclen write rewrite read reread read write read rewrite read fwrite frewrite fread freread 102400 16384 143925 131966 237566 240040 |
/dev/sdc2 (SATA HDD – EXT-4 partition):
1 2 3 4 |
aufranc@ODROID-H4-CNX:/media/jaufranc/NEWHOPE$ sudo iozone -e -I -a -s 100M -r 16384k -i 0 -i 1 random random bkwd record stride kB reclen write rewrite read reread read write read rewrite read fwrite frewrite fread freread 102400 16384 135256 134341 136123 141541 |
All within expectation for the drives used.
2.5GbE benchmarks and stability testing
Let’s now test 2.5GbE performance on both RJ45 jacks using iperf3 and UP Xtreme i11 Edge mini PC (192.168.31.12) at the other end.
Left RJ45 jack:
- Upload
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
jaufranc@ODROID-H4-CNX:~$ iperf3 -t 60 -c 192.168.31.12 -i 10 Connecting to host 192.168.31.12, port 5201 [ 5] local 192.168.31.150 port 52046 connected to 192.168.31.12 port 5201 [ ID] Interval Transfer Bitrate Retr Cwnd [ 5] 0.00-10.01 sec 2.74 GBytes 2.36 Gbits/sec 0 834 KBytes [ 5] 10.01-20.01 sec 2.74 GBytes 2.35 Gbits/sec 1 652 KBytes [ 5] 20.01-30.01 sec 2.74 GBytes 2.35 Gbits/sec 1 680 KBytes [ 5] 30.01-40.01 sec 2.74 GBytes 2.35 Gbits/sec 23 626 KBytes [ 5] 40.01-50.01 sec 2.74 GBytes 2.35 Gbits/sec 216 625 KBytes [ 5] 50.01-60.01 sec 2.74 GBytes 2.35 Gbits/sec 0 840 KBytes - - - - - - - - - - - - - - - - - - - - - - - - - [ ID] Interval Transfer Bitrate Retr [ 5] 0.00-60.01 sec 16.4 GBytes 2.35 Gbits/sec 241 sender [ 5] 0.00-60.10 sec 16.4 GBytes 2.35 Gbits/sec receiver iperf Done. |
- Download
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
jaufranc@ODROID-H4-CNX:~$ iperf3 -t 60 -c 192.168.31.12 -i 10 -R Connecting to host 192.168.31.12, port 5201 Reverse mode, remote host 192.168.31.12 is sending [ 5] local 192.168.31.150 port 57652 connected to 192.168.31.12 port 5201 [ ID] Interval Transfer Bitrate [ 5] 0.00-10.01 sec 2.74 GBytes 2.35 Gbits/sec [ 5] 10.01-20.01 sec 2.74 GBytes 2.35 Gbits/sec [ 5] 20.01-30.01 sec 2.74 GBytes 2.35 Gbits/sec [ 5] 30.01-40.01 sec 2.74 GBytes 2.35 Gbits/sec [ 5] 40.01-50.01 sec 2.74 GBytes 2.35 Gbits/sec [ 5] 50.01-60.01 sec 2.74 GBytes 2.35 Gbits/sec - - - - - - - - - - - - - - - - - - - - - - - - - [ ID] Interval Transfer Bitrate Retr [ 5] 0.00-60.06 sec 16.4 GBytes 2.35 Gbits/sec 1 sender [ 5] 0.00-60.01 sec 16.4 GBytes 2.35 Gbits/sec receiver iperf Done. |
- Full duplex (bidirectional)
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 |
jaufranc@ODROID-H4-CNX:~$ iperf3 -t 60 -c 192.168.31.12 -i 10 --bidir Connecting to host 192.168.31.12, port 5201 [ 5] local 192.168.31.150 port 41682 connected to 192.168.31.12 port 5201 [ 7] local 192.168.31.150 port 41692 connected to 192.168.31.12 port 5201 [ ID][Role] Interval Transfer Bitrate Retr Cwnd [ 5][TX-C] 0.00-10.01 sec 2.74 GBytes 2.35 Gbits/sec 0 897 KBytes [ 7][RX-C] 0.00-10.01 sec 2.73 GBytes 2.34 Gbits/sec [ 5][TX-C] 10.01-20.01 sec 2.73 GBytes 2.35 Gbits/sec 0 1.30 MBytes [ 7][RX-C] 10.01-20.01 sec 2.73 GBytes 2.35 Gbits/sec [ 5][TX-C] 20.01-30.01 sec 2.73 GBytes 2.35 Gbits/sec 0 1.30 MBytes [ 7][RX-C] 20.01-30.01 sec 2.73 GBytes 2.35 Gbits/sec [ 5][TX-C] 30.01-40.01 sec 2.73 GBytes 2.35 Gbits/sec 0 1.30 MBytes [ 7][RX-C] 30.01-40.01 sec 2.73 GBytes 2.35 Gbits/sec [ 5][TX-C] 40.01-50.01 sec 2.73 GBytes 2.35 Gbits/sec 0 1.30 MBytes [ 7][RX-C] 40.01-50.01 sec 2.73 GBytes 2.35 Gbits/sec [ 5][TX-C] 50.01-60.01 sec 2.73 GBytes 2.35 Gbits/sec 0 1.30 MBytes [ 7][RX-C] 50.01-60.01 sec 2.73 GBytes 2.35 Gbits/sec - - - - - - - - - - - - - - - - - - - - - - - - - [ ID][Role] Interval Transfer Bitrate Retr [ 5][TX-C] 0.00-60.01 sec 16.4 GBytes 2.35 Gbits/sec 0 sender [ 5][TX-C] 0.00-60.04 sec 16.4 GBytes 2.35 Gbits/sec receiver [ 7][RX-C] 0.00-60.01 sec 16.4 GBytes 2.35 Gbits/sec 1 sender [ 7][RX-C] 0.00-60.04 sec 16.4 GBytes 2.35 Gbits/sec receiver iperf Done. |
Perfect! Since the left RJ45 worked well, we’ll go straight to full-duplex testing for the right RJ45 jack:
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 |
jaufranc@ODROID-H4-CNX:~$ iperf3 -t 60 -c 192.168.31.12 -i 10 --bidir Connecting to host 192.168.31.12, port 5201 [ 5] local 192.168.31.149 port 48584 connected to 192.168.31.12 port 5201 [ 7] local 192.168.31.149 port 48586 connected to 192.168.31.12 port 5201 [ ID][Role] Interval Transfer Bitrate Retr Cwnd [ 5][TX-C] 0.00-10.01 sec 2.74 GBytes 2.35 Gbits/sec 0 816 KBytes [ 7][RX-C] 0.00-10.01 sec 2.73 GBytes 2.35 Gbits/sec [ 5][TX-C] 10.01-20.01 sec 2.73 GBytes 2.35 Gbits/sec 0 816 KBytes [ 7][RX-C] 10.01-20.01 sec 2.73 GBytes 2.35 Gbits/sec [ 5][TX-C] 20.01-30.01 sec 2.73 GBytes 2.35 Gbits/sec 0 1.18 MBytes [ 7][RX-C] 20.01-30.01 sec 2.73 GBytes 2.35 Gbits/sec [ 5][TX-C] 30.01-40.01 sec 2.73 GBytes 2.35 Gbits/sec 0 1.75 MBytes [ 7][RX-C] 30.01-40.01 sec 2.73 GBytes 2.35 Gbits/sec [ 5][TX-C] 40.01-50.01 sec 2.73 GBytes 2.35 Gbits/sec 0 1.75 MBytes [ 7][RX-C] 40.01-50.01 sec 2.73 GBytes 2.35 Gbits/sec [ 5][TX-C] 50.01-60.01 sec 2.73 GBytes 2.35 Gbits/sec 1027 1.20 MBytes [ 7][RX-C] 50.01-60.01 sec 2.73 GBytes 2.35 Gbits/sec - - - - - - - - - - - - - - - - - - - - - - - - - [ ID][Role] Interval Transfer Bitrate Retr [ 5][TX-C] 0.00-60.01 sec 16.4 GBytes 2.35 Gbits/sec 1027 sender [ 5][TX-C] 0.00-60.05 sec 16.4 GBytes 2.35 Gbits/sec receiver [ 7][RX-C] 0.00-60.01 sec 16.4 GBytes 2.35 Gbits/sec 0 sender [ 7][RX-C] 0.00-60.05 sec 16.4 GBytes 2.35 Gbits/sec receiver iperf Done. |
All good.
Usually, I’d stop Ethernet testing here, but several people noted a potential issue with Intel 2.5GbE controllers when ASPM is enabled and there’s low or no traffic. Hardkernel tested it successfully for over 400+ hours on the ODROID-H4 and ping Google every 30 minutes, and the ODROID-H4+ with a 2-second ping, as a first test failed after 6 hours potentially due to a bad cable connection (TBC).
But maybe they were lucky, so I’ll repeat that test for over 24 hours on the ODROID-H4 with a 10-second ping to cnx-software.com. But first, we have to make sure ASPM is enabled with:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
jaufranc@ODROID-H4-CNX:~$ sudo lspci -vvPPDq | awk '/ASPM/{print $0}' RS= | grep --color -P '(^[a-z0-9:./]+|:\sASPM (\w+)?( \w+)? ?((En|Dis)abled)?)'; 0000:00:1c.0 PCI bridge: Intel Corporation Device 54ba (prog-if 00 [Normal decode]) LnkCtl: ASPM L1 Enabled; RCB 64 bytes, Disabled- CommClk+ 0000:00:1c.3 PCI bridge: Intel Corporation Device 54bb (prog-if 00 [Normal decode]) LnkCtl: ASPM L1 Enabled; RCB 64 bytes, Disabled- CommClk+ 0000:00:1c.6 PCI bridge: Intel Corporation Device 54be (prog-if 00 [Normal decode]) LnkCtl: ASPM L0s L1 Enabled; RCB 64 bytes, Disabled- CommClk+ 0000:00:1d.0 PCI bridge: Intel Corporation Device 54b0 (prog-if 00 [Normal decode]) LnkCtl: ASPM L1 Enabled; RCB 64 bytes, Disabled- CommClk+ 0000:00:1c.0/01:00.0 Ethernet controller: Intel Corporation Ethernet Controller I226-V (rev 04) LnkCtl: ASPM L1 Enabled; RCB 64 bytes, Disabled- CommClk+ 0000:00:1c.3/02:00.0 Ethernet controller: Intel Corporation Ethernet Controller I226-V (rev 04) LnkCtl: ASPM L1 Enabled; RCB 64 bytes, Disabled- CommClk+ 0000:00:1c.6/03:00.0 SATA controller: ASMedia Technology Inc. ASM1064 Serial ATA Controller (rev 02) (prog-if 01 [AHCI 1.0]) LnkCtl: ASPM L0s L1 Enabled; RCB 64 bytes, Disabled- CommClk+ 0000:00:1d.0/04:00.0 Non-Volatile memory controller: Phison Electronics Corporation PS5013-E13 PCIe3 NVMe Controller (DRAM-less) (rev 01) (prog-if 02 [NVM Express]) LnkCtl: ASPM L1 Enabled; RCB 64 bytes, Disabled- CommClk+ |
Curious minds can also find the full output of the lspci command on pastebin. The important part is that ASPM is enabled, so let’s start pinging CNX Software every 60 seconds while connected to the right RJ45 jack through a 2.5GbE TP-Link switch using the following script:
1 2 3 4 5 6 7 8 |
#!/bin/bash while true do CUR=`date '+%m/%d %H:%M:%S'` PING=`/usr/bin/ping -c 1 cnx-software.com` echo ${CUR} ${PING} | tee --append ping.log sleep 60 done |
I did not get any connection issues during that test:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
jaufranc@ODROID-H4-CNX:~$ time ./ping-cnx.sh 05/21 18:27:27 PING cnx-software.com (104.21.91.125) 56(84) bytes of data. 64 bytes from 104.21.91.125: icmp_seq=1 ttl=54 time=10.8 ms --- cnx-software.com ping statistics --- 1 packets transmitted, 1 received, 0% packet loss, time 0ms rtt min/avg/max/mdev = 10.835/10.835/10.835/0.000 ms 05/21 18:28:27 PING cnx-software.com (104.21.91.125) 56(84) bytes of data. 64 bytes from 104.21.91.125: icmp_seq=1 ttl=54 time=11.0 ms --- cnx-software.com ping statistics --- 1 packets transmitted, 1 received, 0% packet loss, time 0ms rtt min/avg/max/mdev = 11.029/11.029/11.029/0.000 ms ... 05/22 20:00:21 PING cnx-software.com (172.67.219.78) 56(84) bytes of data. 64 bytes from 172.67.219.78: icmp_seq=1 ttl=54 time=12.7 ms --- cnx-software.com ping statistics --- 1 packets transmitted, 1 received, 0% packet loss, time 0ms rtt min/avg/max/mdev = 12.659/12.659/12.659/0.000 ms 05/22 20:01:21 PING cnx-software.com (172.67.219.78) 56(84) bytes of data. 64 bytes from 172.67.219.78: icmp_seq=1 ttl=54 time=13.0 ms --- cnx-software.com ping statistics --- 1 packets transmitted, 1 received, 0% packet loss, time 0ms rtt min/avg/max/mdev = 12.958/12.958/12.958/0.000 ms 05/22 20:02:21 PING cnx-software.com (172.67.219.78) 56(84) bytes of data. 64 bytes from 172.67.219.78: icmp_seq=1 ttl=54 time=13.4 ms --- cnx-software.com ping statistics --- 1 packets transmitted, 1 received, 0% packet loss, time 0ms rtt min/avg/max/mdev = 13.386/13.386/13.386/0.000 ms ^C real 1535m19.376s user 0m5.146s sys 0m15.628s |
The IP address changed but that’s not unexpected as CNX Software is behind Cloudflare.
I’ve also configured two SAMBA shares on the ODROID-H4 Plus: one of the NVMe SSD and the other on the SATA SSD, since the latter is not quite fast enough to saturate a 2.5GbE connection. I’ll access those from the UP Xtreme i11 mini PC:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
devkit@UPX-i11:~$ smbclient -L //192.168.31.149 Password for [WORKGROUP\devkit]: Sharename Type Comment --------- ---- ------- print$ Disk Printer Drivers NVME-SHARE Disk Samba share on NVMe SSD SATA-SSD-SHARE Disk Samba share on SATA SSD IPC$ IPC IPC Service (ODROID-H4-CNX server (Samba, Ubuntu)) Reconnecting with SMB1 for workgroup listing. smbXcli_negprot_smb1_done: No compatible protocol selected by server. protocol negotiation failed: NT_STATUS_INVALID_NETWORK_RESPONSE Unable to connect with SMB1 -- no workgroup available devkit@UPX-i11:~$ sudo mount -t cifs -o username=jaufranc //192.168.31.149/NVME-SHARE samba-mnt1 Password for jaufranc@//192.168.31.149/NVME-SHARE: ********** devkit@UPX-i11:~$ sudo mount -t cifs -o username=jaufranc //192.168.31.149/SATA-SSD-SHARE samba-mnt2 Password for jaufranc@//192.168.31.149/SATA-SSD-SHARE: ********** |
I copied the latest Ubuntu 24.04 Desktop ISO (5.7GB) in each share:
1 2 3 |
jaufranc@ODROID-H4-CNX:/$ ls -lh ~/sambashare/ total 5.7G -rwxr-xr-x 1 jaufranc jaufranc 5.7G May 25 10:31 ubuntu-24.04-desktop-amd64.iso |
and transferred the file to /dev/null from each share:
1 2 3 4 5 6 7 8 9 10 11 |
devkit@UPX-i11:~$ time cp samba-mnt1/ubuntu-24.04-desktop-amd64.iso /dev/null real 0m20,809s user 0m0,012s sys 0m2,345s devkit@UPX-i11:~$ time cp samba-mnt2/ubuntu-24.04-desktop-amd64.iso /dev/null real 0m20,796s user 0m0,000s sys 0m2,470s |
Similar results, or about a 280 MB/s (2,240 Mbps) transfer rate. I’d expect that from the NVMe SSD, but not so much from the SATA SSD (about 240MB/s reads with iozone). That’s because when we have 32GB of RAM, two 5.7GB files get easily cached, so let’s reboot the system, and try again:
1 2 3 4 5 |
devkit@UPX-i11:~$ time cp samba-mnt2/ubuntu-24.04-desktop-amd64.iso /dev/null real 0m23,420s user 0m0,012s sys 0m2,455s |
That’s slightly slower, but still pretty good about 249MB/s (1,991 Mbps).
Stress test and CPU temperature
I ran a stress test while checking the CPU temperature to see how well the ODROID H4 Plus with the Type 3 enclosure cools the Intel Processor N97 quad-core CPU.
The CPU temperature maxes out at 57°C and stabilizes at 54-55°C, so the system operates nice and cool under load and we are in “Unlimited Performance” mode. sbc-bench.sh reports the CPU runs at 2900 MHz. The idle CPU temperature was about 37-39°C in a room with an ambient temperature of around 28°C. By comparison, the much smaller Blackview MP80 (N97) mini PC got quite a lot hotter at 79°C while the CPU was still running at 2900MHz. We’ll try again with the ODROID-H4 Plus in “fanless SBC” mode later.
ECC memory testing
ECC memory is not often supported on low-end hardware, but Hardkernel modified the BIOS to add support for IBECC (In-band ECC), so let’s try it, and see what impact it may have on the system.
Let’s look at the output of the free command before doing anything:
1 2 3 4 |
jaufranc@ODROID-H4-CNX:~$ free total used free shared buff/cache available Mem: 32605440 3233088 21553464 726936 8985416 29372352 Swap: 8388604 0 8388604 |
Now let’s enter the BIOS and go to Chipset -> System Agent (SA) Configuration -> Memory Configuration. In-Band ECC Support is set to Disabled as expected.
We can change that to Enable, and a new “In-Band ECC Operation Mode” option shows up. It’s set to 2 by default meaning “Make all requests protected and ignore range checks”.
Time to go back into Ubuntu 24.04 and run the free command again:
1 2 3 4 |
jaufranc@ODROID-H4-CNX:~$ free total used free shared buff/cache available Mem: 31573252 1155248 30110668 100112 787824 30418004 Swap: 8388604 0 8388604 |
The amount of memory has decreased from 32605440 to 31573252, or about 3.16% which happens to be abound 1/32 (0.03125). This makes sense due to the added parity bit for 32-bit data. There’s nothing else that changed in the system from the user’s perspective. In theory, we can get ECC errors with rasdaemon:
1 2 3 4 5 |
jaufranc@ODROID-H4-CNX:~$ sudo apt install rasdaemon jaufranc@ODROID-H4-CNX:~$ ras-mc-ctl --error-count Label CE UE MC#0_Chan#1_DIMM#0 0 0 MC#0_Chan#0_DIMM#0 0 0 |
CE standard for Correctable Errors, and UE for Uncorrectable Errors, But I won’t be able to test that since I don’t have the equipment to generate bitflips on the RAM, and software hacks to do the same are not obvious…
What I can do is run some benchmarks to see if the performance was impacted. I’ll go with sbc-bench.sh, Geekbench 6.3, and Unigine Heaven Benchmark 4.0 since 3D graphics applications are bandwidth-sensitive.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 |
jaufranc@ODROID-H4-CNX:~$ sudo ./sbc-bench.sh -r [sudo] password for jaufranc: Starting to examine hardware/software for review purposes... sbc-bench v0.9.65 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 (10 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 # HARDKERNEL ODROID-H4 1.0 / N97 Tested with sbc-bench v0.9.65 on Sat, 25 May 2024 11:53:45 +0700. ### General information: Information courtesy of cpufetch: Name: Intel(R) N97 Microarchitecture: Alder Lake Technology: 10nm Max Frequency: 3.600 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 N97, 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 800 3600 Alder Lake 1 0 1 800 3600 Alder Lake 2 0 2 800 3600 Alder Lake 3 0 3 800 3600 Alder Lake 30833 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 44.0°C: cpu0: OPP: 3600, Measured: 3587 After at 54.0°C: cpu0: OPP: 3600, Measured: 3587 ### Performance baseline * memcpy: 11353.5 MB/s, memchr: 15874.7 MB/s, memset: 10534.9 MB/s * 16M latency: 126.8 116.0 126.7 116.1 126.4 108.9 114.8 123.4 * 128M latency: 137.2 133.2 137.3 134.0 140.6 131.6 136.1 139.5 * 7-zip MIPS (3 consecutive runs): 13598, 13680, 13698 (13660 avg), single-threaded: 3991 * `aes-256-cbc 943324.85k 1247326.19k 1289378.73k 1300250.28k 1303426.39k 1302528.00k` * `aes-256-cbc 955762.86k 1246891.97k 1289397.50k 1300363.95k 1297640.11k 1303767.72k` ### PCIe and storage devices: * Intel Ethernet I226-V: Speed 5GT/s, Width x1, driver in use: igc, * Intel Ethernet I226-V: Speed 5GT/s, Width x1, driver in use: igc, * ASMedia ASM1064 Serial ATA: Speed 8GT/s, Width x1, driver in use: ahci, * 119.2GB "PCIe SSD" SSD as /dev/nvme0: Speed 8GT/s, Width x4, 0% worn out, drive temp: 36°C, ASPM Disabled * 931.5GB "Toshiba TOSHIBA MQ01ABD100" HDD as /dev/sda: SATA 2.6, 3.0 Gb/s (current: 3.0 Gb/s), drive temp: 37°C * 118GB "CJ225128TC" SSD as /dev/sdb: SATA 2.6, 3.0 Gb/s (current: 3.0 Gb/s), drive temp: 40°C * 931.5GB "Toshiba TOSHIBA HDWL110" HDD as /dev/sdc: SATA 3.3, 6.0 Gb/s (current: 6.0 Gb/s), drive temp: 36°C * Winbond W25Q128JV 16MB SPI NOR flash, drivers in use: spi-nor/intel-spi ### Challenging filesystems: The following partitions are NTFS: sdc3 -> https://tinyurl.com/mv7wvzct ### Swap configuration: * /swap.img on /dev/nvme0n1p2: 8.0G (0K used) ### Software versions: * Ubuntu 24.04 LTS (noble) * Compiler: /usr/bin/gcc (Ubuntu 13.2.0-23ubuntu4) 13.2.0 / x86_64-linux-gnu * OpenSSL 3.0.13, built on 30 Jan 2024 (Library: OpenSSL 3.0.13 30 Jan 2024) ### Kernel info: * `/proc/cmdline: BOOT_IMAGE=/boot/vmlinuz-6.8.0-31-generic root=UUID=9c6e490c-bb54-4870-8aaa-08fc8ac455c4 ro quiet splash vt.handoff=7` * Vulnerability Reg file data sampling: Mitigation; Clear Register File * Vulnerability Spec store bypass: Mitigation; Speculative Store Bypass disabled via prctl * Vulnerability Spectre v1: Mitigation; usercopy/swapgs barriers and __user pointer sanitization * Kernel 6.8.0-31-generic / CONFIG_HZ=1000 Waiting for the device to cool down............. 37.0°C^C |
I used sbc-bench.sh to run Geekbench 6.3:
1 |
jaufranc@ODROID-H4-CNX:~$ sudo ./sbc-bench.sh -G |
The average scores of the two runs are 1,305 points (single) and 3,266 points (multi-core). Full results can be found on the Geekbench website.
Let’s compare those results to the one with IBECC disabled, both in “Unlimited Performance” mode.
ODROID-H4 Plus IBECC disabled | ODROID-H4 Plus IBECC enabled | Delta | |
---|---|---|---|
sbc-bench.sh | |||
- memcpy | 12400.1 MB/s | 11,353.5 MB/s | -8.44% |
- memset | 13755.9 MB/s | 10534.9 MB/s | -23.38% |
- 7-zip (average) | 14,030 | 13,660 | -2.64% |
- 7-zip (top result) | 14,056 | 13,698 | -2.55% |
- OpenSSL AES-256 16K | 1303565.65k | 1303767.72k | +0.015% |
Geekbench 6 Single | 1,332 | 1,305 | -2.03% |
Geekbench 6 Multi | 3,429 | 3,266 | -4.75% |
Unigine Heaven score | 433 | 409 | -5.54% |
As one should have expected, memory bandwidth benchmarks are the most impacted, but regular benchmarks not so much. Unigine Heaven experienced a loss of about 5.5%.
Fan noise with H4 Type 3 case
While the ODROID-H4 SBC is a fanless SBC, I installed it in the H4 Type 3 case with a large fan on the top. Before I switched to “Unlimited Performance” mode, the PWM fan came on and off during idle and may be off most of the time in cooler rooms. But right now, the fan is constantly rotating even after I close all user programs. It’s still audible about 2 meters away whether at idle or under load.
I still measured the noise with a sound level meter placed approximately 5 cm from the top case:
- Idle (fan active) – 46 – 47 dBA
- Stress test on 4 cores – 46 – 47 dBA
The meter reports 37.5 – 38.5 dBA in a quiet room.
That’s with the default settings, and you can modify the behavior of the fan by software especially since we have plenty of legroom when it comes to CPU temperature.
ODROID-H4 Plus power consumption (Multimedia NAS mode)
Let’s now check the ODROID-H4 Plus power consumption while the system is still inside the enclosure. The system is still in “Unlimited Performance” mode and with IBECC enabled, and I’ll test it as a “multimedia NAS” with SATA drives, 2.5GbE, an HDMI display, and two RF dongles for a wireless keyboard and a wireless mouse.
- Power Off – 0.4 to 0.5 Watt
- Idle
- 8.3 – 8.4 Watts (Fan off)
- 10.5 – 10.9 Watts (Fan active)
- Note: the fan is active most of the time in my environment.
- File transfer (SAMBA SATA SSD drive) – 15.9-16.5 Watts
- Video playback – 19.4 – 22.5 Watts (YouTube 8K60fps in Firefox)
- CPU stress test (stress -c 4) – 24.4 -24.8 Watts
Let’s now remove some items one by one to measure idle power consumption (fan off):
- Remove HDMI – 7.3 -7.4 Watts
- Remove USB RF dongles – 6.3 – 6.4 Watts
- Remove Ethernet cable – 5.5 – 5.6 Watts
I’ll now go to the BIOS and disable Unlimited Performance (PL4=0) mode, but first let’s check if ASPM is enabled for all our devices:
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 |
jaufranc@ODROID-H4-CNX:~$ sudo lspci -vv | awk '/ASPM/{print $0}' RS= | grep --color -P '(^[a-z0-9:.]+|ASPM )' [sudo] password for jaufranc: 00:1c.0 PCI bridge: Intel Corporation Device 54ba (prog-if 00 [Normal decode]) LnkCap: Port #3, Speed 8GT/s, Width x1, ASPM L0s L1, Exit Latency L0s <1us, L1 <16us LnkCtl: ASPM L1 Enabled; RCB 64 bytes, Disabled- CommClk+ 00:1c.3 PCI bridge: Intel Corporation Device 54bb (prog-if 00 [Normal decode]) LnkCap: Port #4, Speed 8GT/s, Width x1, ASPM L0s L1, Exit Latency L0s <1us, L1 <16us LnkCtl: ASPM L1 Enabled; RCB 64 bytes, Disabled- CommClk+ 00:1c.6 PCI bridge: Intel Corporation Device 54be (prog-if 00 [Normal decode]) LnkCap: Port #7, Speed 8GT/s, Width x1, ASPM L0s L1, Exit Latency L0s <1us, L1 <16us LnkCtl: ASPM L0s L1 Enabled; RCB 64 bytes, Disabled- CommClk+ 00:1d.0 PCI bridge: Intel Corporation Device 54b0 (prog-if 00 [Normal decode]) LnkCap: Port #9, Speed 8GT/s, Width x4, ASPM L0s L1, Exit Latency L0s <1us, L1 <16us LnkCtl: ASPM L1 Enabled; RCB 64 bytes, Disabled- CommClk+ 01:00.0 Ethernet controller: Intel Corporation Ethernet Controller I226-V (rev 04) LnkCap: Port #0, Speed 5GT/s, Width x1, ASPM L1, Exit Latency L1 <4us LnkCtl: ASPM L1 Enabled; RCB 64 bytes, Disabled- CommClk+ 02:00.0 Ethernet controller: Intel Corporation Ethernet Controller I226-V (rev 04) LnkCap: Port #0, Speed 5GT/s, Width x1, ASPM L1, Exit Latency L1 <4us LnkCtl: ASPM L1 Enabled; RCB 64 bytes, Disabled- CommClk+ 03:00.0 SATA controller: ASMedia Technology Inc. ASM1064 Serial ATA Controller (rev 02) (prog-if 01 [AHCI 1.0]) LnkCap: Port #0, Speed 8GT/s, Width x1, ASPM L0s L1, Exit Latency L0s <4us, L1 <64us LnkCtl: ASPM L0s L1 Enabled; RCB 64 bytes, Disabled- CommClk+ 04:00.0 Non-Volatile memory controller: Phison Electronics Corporation PS5013-E13 PCIe3 NVMe Controller (DRAM-less) (rev 01) (prog-if 02 [NVM Express]) LnkCap: Port #1, Speed 8GT/s, Width x4, ASPM L1, Exit Latency L1 unlimited LnkCtl: ASPM L1 Enabled; RCB 64 bytes, Disabled- CommClk+ |
Everything appears to have ASPM enabled. I went back to the BIOS to set PL4 back to 30000 and disable IBECC. I then checked idle power consumption with the same peripherals as above attached to the device:
- Idle (fan off) – 8.8 – 8.9 Watts
- Idle (fan active) – 9.0 to 9.1 Watts
- Remove HDMI – 7.2 – 7.4 Watts (fan off)
- Remove USB RF dongles – 6.3 – 6.4 Watts (fan off)
There’s not that much difference, except for the fan active mode where maybe the fan rotates more slowly in that test…
Fanless SBC – benchmarks, power consumption, and GPIO testing
So far, I’ve reviewed the ODROID-H4 Plus in the H4 Type 3 enclosure with active cooling. I’ll now take it out of the enclosure to use it as a fanless SBC and revert the BIOS to PL4=0 before running benchmarks, checking thermal performance, measuring power consumption, and quickly testing some of the pins on the GPIO header.
I had to reinstall Ubuntu 24.04 on the ODROID-H4 Plus since the EFI partition was on one of the SATA drives. The first time, I could not select the NVMe SSD because the EFI binaries are over 1GB and I did not leave enough space…
This time around, I cleared everything from the drive and created the bootloader partition before creating the rootfs partition.
ODROID-H4 Plus “fanless” benchmarks
Let’s go through the same list of benchmarks in fanless 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 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 |
jaufranc@ODROID-H4-CNX:~$ sudo ./sbc-bench.sh -r Starting to examine hardware/software for review purposes... sbc-bench v0.9.66 Installing needed tools: apt-get -f -qq -y install gcc make build-essential lm-sensors powercap-utils curl git links mmc-utils smartmontools stress-ng, p7zip 16.02, tinymembench, ramlat, mhz, cpufetch, cpuminer. 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 (10 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 # HARDKERNEL ODROID-H4 1.0 / N97 Tested with sbc-bench v0.9.66 on Sat, 25 May 2024 17:11:35 +0700. ### General information: Information courtesy of cpufetch: Name: Intel(R) N97 Microarchitecture: Alder Lake Technology: 10nm Max Frequency: 3.600 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 N97, 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 800 3600 - 1 0 1 800 3600 - 2 0 2 800 3600 - 3 0 3 800 3600 - 31841 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 61.0°C: cpu0: OPP: 3600, Measured: 3587 After at 87.0°C: cpu0: OPP: 3600, Measured: 3587 ### Performance baseline * memcpy: 12347.0 MB/s, memchr: 18861.7 MB/s, memset: 13637.3 MB/s * 16M latency: 107.0 96.78 107.2 97.14 106.1 91.04 92.47 96.34 * 128M latency: 117.1 111.1 117.3 111.2 116.8 111.0 107.6 111.1 * 7-zip MIPS (3 consecutive runs): 13996, 14030, 13926 (13980 avg), single-threaded: 4156 * `aes-256-cbc 942131.38k 1247398.53k 1289545.64k 1300334.25k 1303486.46k 1302593.54k` * `aes-256-cbc 951613.39k 1247000.30k 1289383.42k 1300343.81k 1302405.12k 1303876.95k` ### PCIe and storage devices: * Intel Ethernet I226-V: Speed 5GT/s, Width x1, driver in use: igc, * Intel Ethernet I226-V: Speed 5GT/s, Width x1, driver in use: igc, * ASMedia ASM1064 Serial ATA: Speed 8GT/s, Width x1, driver in use: ahci, * 119.2GB "PCIe SSD" SSD as /dev/nvme0: Speed 8GT/s, Width x4, 0% worn out, unhealthy drive temp: 61°C, ASPM Disabled * Winbond W25Q128JV 16MB SPI NOR flash, drivers in use: spi-nor/intel-spi "smartctl -x /dev/nvme0" could be used to get further information about the reported issues. ### Swap configuration: * /swap.img on /dev/nvme0n1p2: 8.0G (0K used) ### Software versions: * Ubuntu 24.04 LTS (noble) * Compiler: /usr/bin/gcc (Ubuntu 13.2.0-23ubuntu4) 13.2.0 / x86_64-linux-gnu * OpenSSL 3.0.13, built on 30 Jan 2024 (Library: OpenSSL 3.0.13 30 Jan 2024) ### Kernel info: * `/proc/cmdline: BOOT_IMAGE=/boot/vmlinuz-6.8.0-31-generic root=UUID=f09bfb56-7068-4aa0-bc33-4fbb387f3778 ro quiet splash vt.handoff=7` * Vulnerability Reg file data sampling: Mitigation; Clear Register File * Vulnerability Spec store bypass: Mitigation; Speculative Store Bypass disabled via prctl * Vulnerability Spectre v1: Mitigation; usercopy/swapgs barriers and __user pointer sanitization * Kernel 6.8.0-31-generic / CONFIG_HZ=1000 Waiting for the device to cool down.......................................................................... 55.0°C |
The temperature is much higher than with the cooling fan, benchmark a little bit lower, and sbc-bench.sh also complains about the high temperature of the NVMe SSD. It also reports that ASPM is disabled as previously. So I ran the same command as in the power consumption section, and ASPM is disabled for every device as it looks like sbc-bench.sh disabled it to improve 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 |
jaufranc@ODROID-H4-CNX:~$ sudo lspci -vv | awk '/ASPM/{print $0}' RS= | grep --color -P '(^[a-z0-9:.]+|ASPM )' 00:1c.0 PCI bridge: Intel Corporation Device 54ba (prog-if 00 [Normal decode]) LnkCap: Port #3, Speed 8GT/s, Width x1, ASPM L0s L1, Exit Latency L0s <1us, L1 <16us LnkCtl: ASPM Disabled; RCB 64 bytes, Disabled- CommClk+ 00:1c.3 PCI bridge: Intel Corporation Device 54bb (prog-if 00 [Normal decode]) LnkCap: Port #4, Speed 8GT/s, Width x1, ASPM L0s L1, Exit Latency L0s <1us, L1 <16us LnkCtl: ASPM Disabled; RCB 64 bytes, Disabled- CommClk+ 00:1c.6 PCI bridge: Intel Corporation Device 54be (prog-if 00 [Normal decode]) LnkCap: Port #7, Speed 8GT/s, Width x1, ASPM L0s L1, Exit Latency L0s <1us, L1 <16us LnkCtl: ASPM Disabled; RCB 64 bytes, Disabled- CommClk+ 00:1d.0 PCI bridge: Intel Corporation Device 54b0 (prog-if 00 [Normal decode]) LnkCap: Port #9, Speed 8GT/s, Width x4, ASPM L0s L1, Exit Latency L0s <1us, L1 <16us LnkCtl: ASPM Disabled; RCB 64 bytes, Disabled- CommClk+ 01:00.0 Ethernet controller: Intel Corporation Ethernet Controller I226-V (rev 04) LnkCap: Port #0, Speed 5GT/s, Width x1, ASPM L1, Exit Latency L1 <4us LnkCtl: ASPM Disabled; RCB 64 bytes, Disabled- CommClk+ 02:00.0 Ethernet controller: Intel Corporation Ethernet Controller I226-V (rev 04) LnkCap: Port #0, Speed 5GT/s, Width x1, ASPM L1, Exit Latency L1 <4us LnkCtl: ASPM Disabled; RCB 64 bytes, Disabled- CommClk+ 03:00.0 SATA controller: ASMedia Technology Inc. ASM1064 Serial ATA Controller (rev 02) (prog-if 01 [AHCI 1.0]) LnkCap: Port #0, Speed 8GT/s, Width x1, ASPM L0s L1, Exit Latency L0s <4us, L1 <64us LnkCtl: ASPM Disabled; RCB 64 bytes, Disabled- CommClk+ 04:00.0 Non-Volatile memory controller: Phison Electronics Corporation PS5013-E13 PCIe3 NVMe Controller (DRAM-less) (rev 01) (prog-if 02 [NVM Express]) LnkCap: Port #1, Speed 8GT/s, Width x4, ASPM L1, Exit Latency L1 unlimited LnkCtl: ASPM Disabled; RCB 64 bytes, Disabled- CommClk+ |
That will matter for power consumption measurements, so I’ll have to make sure to reboot the board for that part. But let’s carry on with the benchmarks. Next up is Geekbench 6.3:
1 |
sudo ./sbc-bench.sh -G |
The scores are very similar to the ones with active cooling, so “Unlimited Performance” mode looks to work fine in fanless mode as well, at least with the Processor N97-powered ODROID-H4 and ODROID-H4 Plus, but that may be another story with the Core i3-N305-based ODROID-H4 Ultra. You’ll find the full results on the Geekbench website, and sbc-bench.sh’s output on Pastebin.
Unigine Heaven Benchmark 4.0 results are impacted a bit more with 411 points.
The single-threaded Speedometer 2.0 web browser benchmark is barely impacted (Firefox).
ODROID-H4 Plus Active cooling | ODROID-H4 Plus Fanless | Delta | |
---|---|---|---|
sbc-bench.sh | |||
- memcpy | 12400.1 MB/s | 12347.0 MB/s | -0.42% |
- memset | 13755.9 MB/s | 13637.3 MB/s | -0.86% |
- 7-zip (average) | 14,030 | 13980 | -0.35% |
- 7-zip (top result) | 14,056 | 14030 | -0.18% |
- OpenSSL AES-256 16K | 1303565.65k | 1303876.95k | +0.023% |
Geekbench 6 Single | 1,332 | 1326 | -0.45% |
Geekbench 6 Multi | 3,429 | 3425 | -0.12% |
Unigine Heaven score | 433 | 411 | -5.08% |
Speedometer 2.0 (Firefox) | 164 | 163 | -0.61% |
The summary of results above shows the ODROID-H4 Plus runs fanless just as well as inside the actively-cooled enclosure, except for 3D graphics where the system loses about 5% of performance in Unigine Heaven Benchmark 4.0.
Stress test
Let’s repeat the stress test in Ubuntu 24.04 and check out the CPU temperature when operating fanless.
As expected the temperature is much higher than in the enclosure, reaching up to 96°C and some minimal throttling occurs after a while with the CPU frequency gradually dropping from 2900MHz to 2,500 MHz and stabilizing there if we run the test long enough. That’s in a room with an ambient temperature of about 27°C and the “Unlimited Performance” mode.
ODROID-H4 Plus power consumption
Since I removed the three SATA drives and the fan, the power consumption might be lower, so after a shutdown and a restart, I tested the power consumption again using the same accessories (HDMI display, Ethernet, and 2x RF dongles).
- Power Off – 0.4 Watt (Note: a red LED is ON on the board and a green on the power supply which may slightly contribute to the power consumption)
- Idle – 7.0 – 7.1 Watts
- Video playback – 17.1 – 20.6 Watts (YouTube 8K60fps in Firefox)
- CPU stress test (stress -c 4) – 24.0 – 24.5 Watts
We can confirm ASPM is enabled:
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 |
jaufranc@ODROID-H4-CNX:~$ sudo lspci -vv | awk '/ASPM/{print $0}' RS= | grep --color -P '(^[a-z0-9:.]+|ASPM )' [sudo] password for jaufranc: 00:1c.0 PCI bridge: Intel Corporation Device 54ba (prog-if 00 [Normal decode]) LnkCap: Port #3, Speed 8GT/s, Width x1, ASPM L0s L1, Exit Latency L0s <1us, L1 <16us LnkCtl: ASPM L1 Enabled; RCB 64 bytes, Disabled- CommClk+ 00:1c.3 PCI bridge: Intel Corporation Device 54bb (prog-if 00 [Normal decode]) LnkCap: Port #4, Speed 8GT/s, Width x1, ASPM L0s L1, Exit Latency L0s <1us, L1 <16us LnkCtl: ASPM L1 Enabled; RCB 64 bytes, Disabled- CommClk+ 00:1c.6 PCI bridge: Intel Corporation Device 54be (prog-if 00 [Normal decode]) LnkCap: Port #7, Speed 8GT/s, Width x1, ASPM L0s L1, Exit Latency L0s <1us, L1 <16us LnkCtl: ASPM L0s L1 Enabled; RCB 64 bytes, Disabled- CommClk+ 00:1d.0 PCI bridge: Intel Corporation Device 54b0 (prog-if 00 [Normal decode]) LnkCap: Port #9, Speed 8GT/s, Width x4, ASPM L0s L1, Exit Latency L0s <1us, L1 <16us LnkCtl: ASPM L1 Enabled; RCB 64 bytes, Disabled- CommClk+ 01:00.0 Ethernet controller: Intel Corporation Ethernet Controller I226-V (rev 04) LnkCap: Port #0, Speed 5GT/s, Width x1, ASPM L1, Exit Latency L1 <4us LnkCtl: ASPM L1 Enabled; RCB 64 bytes, Disabled- CommClk+ 02:00.0 Ethernet controller: Intel Corporation Ethernet Controller I226-V (rev 04) LnkCap: Port #0, Speed 5GT/s, Width x1, ASPM L1, Exit Latency L1 <4us LnkCtl: ASPM L1 Enabled; RCB 64 bytes, Disabled- CommClk+ 03:00.0 SATA controller: ASMedia Technology Inc. ASM1064 Serial ATA Controller (rev 02) (prog-if 01 [AHCI 1.0]) LnkCap: Port #0, Speed 8GT/s, Width x1, ASPM L0s L1, Exit Latency L0s <4us, L1 <64us LnkCtl: ASPM L0s L1 Enabled; RCB 64 bytes, Disabled- CommClk+ 04:00.0 Non-Volatile memory controller: Phison Electronics Corporation PS5013-E13 PCIe3 NVMe Controller (DRAM-less) (rev 01) (prog-if 02 [NVM Express]) LnkCap: Port #1, Speed 8GT/s, Width x4, ASPM L1, Exit Latency L1 unlimited LnkCtl: ASPM L1 Enabled; RCB 64 bytes, Disabled- CommClk+ |
Let’s go back to idle and disconnect a few items one by one:
- Remove HDMI – 5.6 – 5.7 Watts
- Remove USB RF dongles – 4.6 – 4.7 Watts
- Remove 2.5GbE – 3.4 – 3.5 Watts
ODROID-H4 Plus GPIO header
The ODROID-H4 boards come with a 24-pin GPIO header with 2x I2C, UART, HDMI CEC, 3x USB 2.0, etc…
You’ll find some instructions to use those interfaces in the application notes section of the wiki. I’ll be testing I2C0 using an OLED based on the SSD1306 controller. Let’s install and run i2ctools first to check if the display is connected:
1 2 3 4 5 6 7 8 9 10 11 |
jaufranc@ODROID-H4-CNX:~$ sudo apt install i2c-tools jaufranc@ODROID-H4-CNX:~$ sudo i2cdetect -y -r 0 0 1 2 3 4 5 6 7 8 9 a b c d e f 00: -- -- -- -- -- -- -- -- 10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 30: -- -- -- -- -- -- -- -- -- -- -- -- 3c -- -- -- 40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 70: -- -- -- -- -- -- -- -- |
The display shows at the address 0x3c. We can display some text by building and running the SSD1306 OLED project:
1 2 3 4 5 6 |
git clone https://github.com/armlabs/ssd1306_linux cd ssd1306-linux make -j 4 sudo ./ssd1306_bin -I 128x32 sudo ./ssd1306_bin -c sudo ./ssd1306_bin -m "CNX Software\nODROID-H4+\nReview" |
Success!
Each I2C port can also be enabled (default) or disabled in the BIOS, and the speed can be set from 100 KHz to 3.4 MHz. Simply go to Chipset->PCH-IO Configuration->SerialIO Configuration once you are in the BIOS.
Conclusion
The ODROID-H4 Plus is a solid Alder Lake-N single board computer that typically works faster than equivalent mini PCs running Ubuntu 22.04/24.04 thanks to appropriate cooling solutions (both actively cooled and fanless) and optimization in the BIOS. It’s also a versatile platform with SATA ports that can easily be converted into a complete NAS with up to four drives with a range of enclosures and Hardkernel sells a range of accessories. Power consumption is also a bit lower than other systems, but maybe not as much as advertised…
Some potential downsides are that the system is a little bit bigger, it lacks an M.2 socket for wireless modules so a USB dongle would be the only option to add WiFi 5/6 and Bluetooth, and the overall price is typically higher than more or less equivalent systems. Few systems come with four SATA ports and a GPIO header, so that may be the price of versatility.
That will be all for today. I’d like to thank Hardkernel for sending the ODROID-H4+ kit for review. Readers can reproduce this exact setup with the following items:
- ODROID-H4+ SBC – $139
- H4 Type 3 case – $17
- 15V/4A power adapter – $9.40 as an option when ordering the board. Note a 19V~20V laptop power supply would also work. Just make sure to check the polarity.
- SATA data and power cables – $3 per set, or $12 in total
- RTC backup battery – $2.50 (Note it might be included by default, TBC).
- 92x92x15mm PWM cooling fan – $4
- Samsung 32GB DDR5-5600 SO-DIMM – $95 on Hardkernel. Not a bad deal when we compare the price to the Samsung 32GB DDR5-5600 memory sticks sold on Amazon. CRUCIAL ones are a little cheaper
That would be $278.90 plus shipping in total to which you’d have to add an M.2 SSD for the OS (unless you’re fine running the OS from one of the SATA drives) and a few SATA drives. A fanless SBC setup would cost about $245.9 plus shipping
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
That’s a lot of money. Do the benchmarks justify purchasing the H4+ as opposed to purchasing a RK3588 SBC?
Most of the quad-core Alder Lake-N products this would be compared to probably have 16 GB, so some money could be subtracted from selecting a cheaper SO-DIMM stick. On the other hand, the competing boxes might come with a Windows 10/11 Pro license, if that matters.
You’re getting a lot more ports and features with this setup, such as the ability to add four SATA drives.
I’ll let someone else address the RK3588.
The rock-5-itx comes with 8GB RAM and 4 SATA for something like $111 last time I checked. It also has 2 2.5GbE ports. I’m running it with a 10GbE NIC on the M.2 adapter and it’s able to fill the 10G cable from SATA. That’s probably the most comparable 3588 board to date, and, admittedly, a bit cheaper (but less powerful on single-core workloads).
> Do the benchmarks justify
Only if your only use case is running benchmarks. With other use cases the situation x86 vs. ARM is much more complicated.
It’s a well-performing implementation of Alder Lake-N, barebones, cheap, customizable (case options). What’s not to like (probably aspects of ADL-N)?
EFI binaries over 1 GB? Where did you get this? They are a few megabytes… What you see there is the partition size.
When partitioning manually you also need to manually create the EFI partition. This is why it did not work.
The installation wizard created a partition well over 1GB to store the bootloader.
Yup, but that doesn’t mean it’s filled – most of the partition is empty (usually). Anyhow, great review!
I wonder why the H4+ does not use a second M.2 connector and “M.2 NVME NGFF M-KEY/B-KEY SSD HDD to 5 ports SATA 3 PCIe 3.0” based on JMB585 instead of the the onboard SATA controller?With H4, you get a H4+ PCB without soldered SATA controller but with a second M.2 connector you would not have to choose between H4 or H4+, would not loose PCIe lanes (if you don’t want SATA) and could choose another M.2 adapter (like U.2)…I am likely completely wrong.
My Odroid-H4(basic model) runs much faster than the Rock5A(rk3588) and operates the latest Linux kernel and OS out of the box. Power consumption in idle mode is rather small, and multiple virtual machines run smoothly.
Once I activated the new ECC feature, it put my mind at ease considerably.
Now there seems to be very little reason to use the ARM platform for small servers.
Odorid-H4 : $99
16GB DDR5 SO-DIMM : $46
Case + PSU : $20
Shipping from Korea to US via DHL: $25
what about operating temperature of this SBC, – 20 C or even – 10 C in winter will be working?
The ambient operating temperature range of most commercial SBCs is known to be around 0 to 60°C due to the DDR RAM.
However, it seems to work without critical issue up to -10°C.
At -20°C the CMOS backup battery is likely to be the cause of the problem.
Have you ever seen an inexpensive SBC that guarantees operation at -20°C?
Odroid boards tend to be particularly tolerant to temperature in my experience. this is in part due to the huge heat sink.
Do heatsinks also help with low temperatures?
I guess once the device is running it might, but when booting at -20°C, the heatsink would probably not help that much.
IMHO the two main problems with booting at -20 is the risk of presence of ice under the pins, and the risk that some capacitors either don’t work at all or behave like a short. BGA devices are not much prone to ice under pins (or are easy to isolate), but capacitors will depend on the models chosen. Regarding the heat sink, I was mostly mentioning it regarding the top of the range suggested in the previous comment (0-60). I agree it will not bring any benefit at -20, though it should not hurt. At best it could avoid large… Read more »
What better use in -10 or even -20? – closed box with warm materials (heating from working SBC) or use varnish (dialectrician) on SBC or both variants simultaneously?