Raspberry Pi 5 review – Part 2: Raspberry Pi OS Bookworm, benchmarks, power consumption, and more

A few days ago I finally went through the Raspberry Pi 5 kit I received last September going through the items and booting it with Raspberry Pi OS bookworm. I’ve now had time to perform more tests to check out the performance with benchmarks and test various features on the Raspberry Pi 5. So I’ll report my experience in the second part of the review and compare the Raspberry Pi 5 to the Raspberry Pi 4 and some other Arm Linux SBCs.

System information in Raspberry Pi OS Bookworm

Last time around, I installed the Raspberry Pi 5 in its official case, but for most of the testing, I decided to go back to the bare board fitted with its active cooler since it’s the best cooling option as we’ll see further in the review.

Let’s first check some of the system information:

pi@raspberrypi:~ $ cat /etc/issue      
Debian GNU/Linux 12 \n \l

pi@raspberrypi:~ $ uname -a
Linux raspberrypi 6.1.0-rpi4-rpi-2712 #1 SMP PREEMPT Debian 1:6.1.54-1+rpt2 (2023-10-05) aarch64 GNU/Linux
pi@raspberrypi:~ $ df -h 
Filesystem      Size  Used Avail Use% Mounted on
udev            3.8G     0  3.8G   0% /dev
tmpfs           806M  5.8M  800M   1% /run
/dev/mmcblk0p2   29G  4.7G   23G  17% /
tmpfs           4.0G  368K  4.0G   1% /dev/shm
tmpfs           5.0M   48K  5.0M   1% /run/lock
/dev/mmcblk0p1  510M   73M  438M  15% /boot/firmware
tmpfs           806M  144K  806M   1% /run/user/1000
pi@raspberrypi:~ $ cat /proc/cpuinfo 
processor	: 0
BogoMIPS	: 108.00
Features	: fp asimd evtstrm aes pmull sha1 sha2 crc32 atomics fphp asimdhp cpuid asimdrdm lrcpc dcpop asimddp
CPU implementer	: 0x41
CPU architecture: 8
CPU variant	: 0x4
CPU part	: 0xd0b
CPU revision	: 1

...
processor	: 3
BogoMIPS	: 108.00
Features	: fp asimd evtstrm aes pmull sha1 sha2 crc32 atomics fphp asimdhp cpuid asimdrdm lrcpc dcpop asimddp
CPU implementer	: 0x41
CPU architecture: 8
CPU variant	: 0x4
CPU part	: 0xd0b
CPU revision	: 1

Hardware	: BCM2835
Revision	: d04170
Serial		: 77b8297ac79ffbf1
Model		: Raspberry Pi 5 Model B Rev 1.0

The Raspberry Pi 5 runs Debian 12 with Linux 6.1 as expected and the Broadcom BCM2712 processor (still shown as BCM2835 as in all RPi boards) does come with four Cortex-A76 cores.

pi@raspberrypi:~ $ inxi -Fc0
System:
  Host: raspberrypi Kernel: 6.1.0-rpi4-rpi-2712 arch: aarch64 bits: 64
    Console: pty pts/0 Distro: Debian GNU/Linux 12 (bookworm)
Machine:
  Type: ARM System: Raspberry Pi 5 Model B Rev 1.0 details: BCM2835
    rev: d04170 serial: 77b8297ac79ffbf1
CPU:
  Info: quad core model: N/A variant: cortex-a76 bits: 64 type: MCP
  Speed (MHz): avg: 1000 min/max: 1000/2400 cores: 1: 1000 2: 1000 3: 1000
    4: 1000
Graphics:
  Device-1: bcm2712-hdmi0 driver: vc4_hdmi v: N/A
  Device-2: bcm2712-hdmi1 driver: vc4_hdmi v: N/A
  Display: wayland server: X.org v: 1.21.1.7 with: Xwayland v: 22.1.9
    compositor: wayfire v: 0.7.5 driver:
    gpu: vc4-drm,vc4_crtc,vc4_dpi,vc4_dsi,vc4_firmware_kms,vc4_hdmi,vc4_hvs,vc4_txp,vc4_v3d,vc4_vec
    tty: 80x24 resolution: 1280x800
  API: EGL/GBM Message: No known Wayland EGL/GBM data sources.
Audio:
  Device-1: bcm2712-hdmi0 driver: vc4_hdmi
  Device-2: bcm2712-hdmi1 driver: vc4_hdmi
  API: ALSA v: k6.1.0-rpi4-rpi-2712 status: kernel-api
  Server-1: PipeWire v: 0.3.65 status: active
Network:
  Device-1: driver: rp1
  IF: wlan0 state: up mac: d8:3a:dd:7b:e6:58
  IF-ID-1: eth0 state: down mac: d8:3a:dd:7b:e6:56
Bluetooth:
  Device-1: bcm7271-uart driver: bcm7271_uart
  Report: hciconfig ID: hci0 state: up address: D8:3A:DD:7B:E6:59 bt-v: 3.0
  Device-2: bcm7271-uart driver: N/A
Drives:
  Local Storage: total: 29.72 GiB used: 4.69 GiB (15.8%)
  ID-1: /dev/mmcblk0 model: SL32G size: 29.72 GiB
Partition:
  ID-1: / size: 28.7 GiB used: 4.62 GiB (16.1%) fs: ext4 dev: /dev/mmcblk0p2
Swap:
  ID-1: swap-1 type: file size: 100 MiB used: 0 KiB (0.0%) file: /var/swap
Sensors:
  System Temperatures: cpu: 59.0 C mobo: N/A
  Fan Speeds (RPM): cpu: 2951
Info:
  Processes: 181 Uptime: 17h 24m Memory: 7.87 GiB used: 525.5 MiB (6.5%)
  gpu: 4 MiB Init: systemd target: graphical (5) Shell: Bash inxi: 3.3.26

inxi utility further confirms my board comes with 8GB RAM, the 2.4 GHz frequency advertised for the BCM2712 CPU, and lists the peripherals with two HDMI ports, Ethernet, WiFi, and Bluetooth, and we can also see Wayland and PipeWire as now used in Raspberry Pi OS as was announced during the release of the Bookworm version of the operating system. The microSD card capacity is reported correctly at around 32GB, and we can see 100MB of it is used for swap. There also appears to be a reference to the Raspberry Pi RP1 chip in the Network section, although it’s the same for the driver…

If anybody is interested I also saved the Raspberry Pi 5 Linux boot log.

Raspberry Pi 5 Benchmarks

Let’s start the Raspberry Pi 5 benchmarks with Thomas sbc-bench.sh script:

pi@raspberrypi:~ $ sudo ./sbc-bench.sh -r
Starting to examine hardware/software for review purposes...

sbc-bench v0.9.50

Installing needed tools: 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 (12 minutes elapsed).

Results validation:

  * Measured clockspeed not lower than advertised max CPU clockspeed
  * No swapping
  * Background activity (%system) OK
  * No throttling

Full results uploaded to http://ix.io/4KDM

# Raspberry Pi 5 Model B Rev 1.0

Tested with sbc-bench v0.9.50 on Sat, 04 Nov 2023 11:21:04 +0700. Full info: [http://ix.io/4KDM](http://ix.io/4KDM)

### General information:

    BCM2712, Kernel: aarch64, Userland: arm64
    
    CPU sysfs topology (clusters, cpufreq members, clockspeeds)
                     cpufreq   min    max
     CPU    cluster  policy   speed  speed   core type
      0        0        0     1000    2400   Cortex-A76 / r4p1
      1        0        0     1000    2400   Cortex-A76 / r4p1
      2        0        0     1000    2400   Cortex-A76 / r4p1
      3        0        0     1000    2400   Cortex-A76 / r4p1

8053 KB available RAM

### Governors/policies (performance vs. idle consumption):

Original governor settings:

    cpufreq-policy0: ondemand / 1800 MHz (conservative ondemand userspace powersave performance schedutil / 1000 1100 1200 1300 1400 1500 1600 1700 1800 1900 2000 2100 2200 2300 2400)

Tuned governor settings:

    cpufreq-policy0: performance / 2400 MHz

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 48.0°C:

    cpu0 (Cortex-A76): OPP: 2400, ThreadX: 2400, Measured: 2398 

After at 65.5°C:

    cpu0 (Cortex-A76): OPP: 2400, ThreadX: 2400, Measured: 2398 

### Performance baseline

  * memcpy: 5158.3 MB/s, memchr: 13463.2 MB/s, memset: 11671.4 MB/s
  * 16M latency: 122.3 122.6 127.0 120.9 121.5 131.2 142.4 155.4 
  * 128M latency: 141.0 151.6 141.3 140.0 140.9 140.6 140.8 142.7 
  * 7-zip MIPS (3 consecutive runs): 10840, 10973, 10980 (10930 avg), single-threaded: 3136
  * `aes-256-cbc     589992.63k  1051401.64k  1273872.30k  1338653.35k  1365144.92k  1367588.86k`
  * `aes-256-cbc     590378.41k  1051301.08k  1273969.32k  1340480.17k  1365131.26k  1367736.32k`

### PCIe and storage devices:

  * Raspberry Pi Ltd. RP1: Speed 5GT/s, Width x4, driver in use: rp1
  * 29.7GB "SanDisk SL32G" UHS SDR104 SD card as /dev/mmcblk0: date 02/2023, manfid/oemid: 0x000003/0x5344, hw/fw rev: 0x8/0x0

### Swap configuration:

  * /var/swap on /dev/mmcblk0p2: 100.0M (0K used) on ultra slow SD card storage

### Software versions:

  * Debian GNU/Linux 12 (bookworm)
  * Build scripts: http://archive.raspberrypi.com/debian/ bookworm main
  * Compiler: /usr/bin/gcc (Debian 12.2.0-14) 12.2.0 / aarch64-linux-gnu
  * ThreadX: c2da2ae7 / 2023/10/18 18:30:17 

### Kernel info:

  * `/proc/cmdline: coherent_pool=1M 8250.nr_uarts=1 pci=pcie_bus_safe snd_bcm2835.enable_compat_alsa=0 snd_bcm2835.enable_hdmi=1  smsc95xx.macaddr=D8:3A:DD:7B:E6:56 vc_mem.mem_base=0x3fc00000 vc_mem.mem_size=0x40000000  console=ttyAMA10,115200 console=tty1 root=PARTUUID=57655639-02 rootfstype=ext4 fsck.repair=yes rootwait quiet splash plymouth.ignore-serial-consoles cfg80211.ieee80211_regdom=TH`
  * Vulnerability Spec store bypass:    Mitigation; Speculative Store Bypass disabled via prctl
  * Vulnerability Spectre v1:           Mitigation; __user pointer sanitization
  * Vulnerability Spectre v2:           Mitigation; CSV2, BHB
  * Kernel 6.1.0-rpi4-rpi-2712 / CONFIG_HZ=250

Kernel 6.1.0 is not latest 6.1.61 LTS that was released on 2023-11-02.

See https://endoflife.date/linux for details. It is somewhat likely that
a lot of exploitable vulnerabilities exist for this kernel as well as many
unfixed bugs.

All known settings adjusted for performance. Device now ready for benchmarking.
Once finished stop with [ctrl]-[c] to get info about throttling, frequency cap
and too high background activity all potentially invalidating benchmark scores.
All changes with storage and PCIe devices as well as suspicious dmesg contents
will be reported too.

Time        fake/real   load %cpu %sys %usr %nice %io %irq   Temp    VCore    PMIC   DC(V)
11:21:04: 2400/2400MHz  3.82   1%   0%   1%   0%   0%   0%  57.9°C  0.9100V   3.5W   5.14V 
11:22:04: 2400/2400MHz  1.40   0%   0%   0%   0%   0%   0%  52.4°C  0.9100V   3.1W   5.15V 
11:23:05: 2400/2400MHz  0.51   0%   0%   0%   0%   0%   0%  53.5°C  0.9100V   3.1W   5.15V 

First, the good news is that there was no CPU throttling and the temperature never exceeded 66.1°C when using the active cooler in a room with an ambient temperature of around 28°C.

Let’s compare the memory bandwidth and 7-zip results against the Raspberry Pi 4 and other SBCs such as Khadas VIM4 (Amlogic A311D2), ODROID-N2+ (Amlogic S922X), Radxa Rock 5B (Rockchip RK3588), and others.

Higher is better

The memory bandwidth of the Raspberry Pi 5 is much higher than the Raspberry Pi 4, but based on memcpy and memset results the Rockchip RK3588 platforms are still way ahead in that metric, and they also outperform the Raspberry Pi 5 in 7-zip benchmarks which benefit from a larger number of cores (Rockchip RK3588 comes with 4x Cortex-A76 cores, 4x Cortex-A55 cores). The Raspberry Pi 5’s 7-zip performance is about the same as the Khadas VIM4 and ODROID-N2+ SBCs, and about double the performance of the previous generation Raspberry Pi 4.

The Broadcom BCM2712 is the first processor used in a Raspberry Pi board that comes with Armv8 Crypto extension and that shows in AES-256 benchmarks with the new Raspberry Pi 5 over 21 times faster than the Raspberry Pi 4.

Time to have a look a web browsing performance, especially since the Raspberry Pi OS Bookworm introduced an optimized version of Firefox besides the usual Chromium browser.

We’ll first use Speedometer 2.0 to check the performance in Chromium…

… and in Firefox.

Firefox is often significantly slower than Chromium in benchmarks, so Raspberry Pi Ltd and Mozilla have done a relatively good job optimizing Firefox for the Raspberry Pi 5 with Chromium achieving 63.5 runs per minute against 56.6 on Firefox. The chart below compares that performance against the Amlogic A311D2-based Khadas VIM4 (35.6 points), the Amlogic A311D-powered Khadas VIM3 (against 25.6 points), the Rockchip RK3588S-based Khadas Edge2 Pro, and a Raspberry Pi 4 overclocked at 2.0 GHz (21 points).

Please note that web browsers are constantly evolving with performance optimizations (or bloat) getting added after each release, and we did not redo the tests on older platforms due to time constraints.

I also ran the glmark2 benchmark to test graphics performance on the Raspberry Pi 5.

pi@raspberrypi:~ $ DISPLAY=:0 glmark2 
WARNING: v3d support for hw version 71 is neither a complete nor a conformant OpenGL implementation. Testing use only.
=======================================================
    glmark2 2023.01
=======================================================
    OpenGL Information
    GL_VENDOR:      Broadcom
    GL_RENDERER:    V3D 7.1
    GL_VERSION:     3.1 Mesa 23.2.1-0+rpt2
    Surface Config: buf=32 r=8 g=8 b=8 a=8 depth=24 stencil=0 samples=0
    Surface Size:   800x600 windowed
=======================================================
[build] use-vbo=false: FPS: 1074 FrameTime: 0.932 ms
[build] use-vbo=true: FPS: 1220 FrameTime: 0.820 ms
[texture] texture-filter=nearest: FPS: 1097 FrameTime: 0.912 ms
[texture] texture-filter=linear: FPS: 1090 FrameTime: 0.918 ms
[texture] texture-filter=mipmap: FPS: 1101 FrameTime: 0.909 ms
[shading] shading=gouraud: FPS: 1121 FrameTime: 0.892 ms
[shading] shading=blinn-phong-inf: FPS: 1117 FrameTime: 0.895 ms
[shading] shading=phong: FPS: 1078 FrameTime: 0.928 ms
[shading] shading=cel: FPS: 1068 FrameTime: 0.937 ms
[bump] bump-render=high-poly: FPS: 793 FrameTime: 1.261 ms
[bump] bump-render=normals: FPS: 1170 FrameTime: 0.855 ms
[bump] bump-render=height: FPS: 1129 FrameTime: 0.886 ms
[effect2d] kernel=0,1,0;1,-4,1;0,1,0;: FPS: 704 FrameTime: 1.422 ms
[effect2d] kernel=1,1,1,1,1;1,1,1,1,1;1,1,1,1,1;: FPS: 368 FrameTime: 2.723 ms
[pulsar] light=false:quads=5:texture=false: FPS: 1260 FrameTime: 0.794 ms
[desktop] blur-radius=5:effect=blur:passes=1:separable=true:windows=4: FPS: 286 FrameTime: 3.500 ms
[desktop] effect=shadow:windows=4: FPS: 1048 FrameTime: 0.955 ms
[buffer] columns=200:interleave=false:update-dispersion=0.9:update-fraction=0.5:update-method=map: FPS: 457 FrameTime: 2.189 ms
[buffer] columns=200:interleave=false:update-dispersion=0.9:update-fraction=0.5:update-method=subdata: FPS: 445 FrameTime: 2.248 ms
[buffer] columns=200:interleave=true:update-dispersion=0.9:update-fraction=0.5:update-method=map: FPS: 542 FrameTime: 1.846 ms
[ideas] speed=duration: FPS: 1123 FrameTime: 0.891 ms
[jellyfish] <default>: FPS: 904 FrameTime: 1.107 ms
[terrain] <default>: FPS: 67 FrameTime: 14.928 ms
[shadow] <default>: FPS: 160 FrameTime: 6.280 ms
[refract] <default>: FPS: 73 FrameTime: 13.854 ms
[conditionals] fragment-steps=0:vertex-steps=0: FPS: 1288 FrameTime: 0.777 ms
[conditionals] fragment-steps=5:vertex-steps=0: FPS: 1255 FrameTime: 0.797 ms
[conditionals] fragment-steps=0:vertex-steps=5: FPS: 1288 FrameTime: 0.777 ms
[function] fragment-complexity=low:fragment-steps=5: FPS: 1283 FrameTime: 0.780 ms
[function] fragment-complexity=medium:fragment-steps=5: FPS: 1116 FrameTime: 0.896 ms
[loop] fragment-loop=false:fragment-steps=5:vertex-steps=5: FPS: 1282 FrameTime: 0.780 ms
[loop] fragment-steps=5:fragment-uniform=false:vertex-steps=5: FPS: 1281 FrameTime: 0.781 ms
[loop] fragment-steps=5:fragment-uniform=true:vertex-steps=5: FPS: 1118 FrameTime: 0.895 ms
=======================================================
                                  glmark2 Score: 920 
=======================================================

920 points look to be on the low side, as a Rockchip RK3588 hardware such as the NanoPi R6S mini PC router achieved 4,525 points with glmark2-es2-wayland… [Update: I was unable to find glmark2-es2-wayland  yesterday, but it’s just an apt install:

pi@raspberrypi:~ $ glmark2-es2-wayland 
WARNING: v3d support for hw version 71 is neither a complete nor a conformant OpenGL implementation. Testing use only.
=======================================================
    glmark2 2023.01
=======================================================
    OpenGL Information
    GL_VENDOR:      Broadcom
    GL_RENDERER:    V3D 7.1
    GL_VERSION:     OpenGL ES 3.1 Mesa 23.2.1-0+rpt2
    Surface Config: buf=32 r=8 g=8 b=8 a=8 depth=24 stencil=0 samples=0
    Surface Size:   800x600 windowed
=======================================================
[build] use-vbo=false: FPS: 2731 FrameTime: 0.366 ms
[build] use-vbo=true: FPS: 3490 FrameTime: 0.287 ms
[texture] texture-filter=nearest: FPS: 2725 FrameTime: 0.367 ms
[texture] texture-filter=linear: FPS: 2677 FrameTime: 0.374 ms
[texture] texture-filter=mipmap: FPS: 2786 FrameTime: 0.359 ms
[shading] shading=gouraud: FPS: 2776 FrameTime: 0.360 ms
[shading] shading=blinn-phong-inf: FPS: 2762 FrameTime: 0.362 ms
[shading] shading=phong: FPS: 2414 FrameTime: 0.414 ms
[shading] shading=cel: FPS: 2384 FrameTime: 0.420 ms
[bump] bump-render=high-poly: FPS: 1479 FrameTime: 0.676 ms
[bump] bump-render=normals: FPS: 3272 FrameTime: 0.306 ms
[bump] bump-render=height: FPS: 3020 FrameTime: 0.331 ms
[effect2d] kernel=0,1,0;1,-4,1;0,1,0;: FPS: 1245 FrameTime: 0.804 ms
[effect2d] kernel=1,1,1,1,1;1,1,1,1,1;1,1,1,1,1;: FPS: 480 FrameTime: 2.085 ms
[pulsar] light=false:quads=5:texture=false: FPS: 3070 FrameTime: 0.326 ms
[desktop] blur-radius=5:effect=blur:passes=1:separable=true:windows=4: FPS: 292 FrameTime: 3.427 ms
[desktop] effect=shadow:windows=4: FPS: 1081 FrameTime: 0.926 ms
[buffer] columns=200:interleave=false:update-dispersion=0.9:update-fraction=0.5:update-method=map: FPS: 487 FrameTime: 2.055 ms
[buffer] columns=200:interleave=false:update-dispersion=0.9:update-fraction=0.5:update-method=subdata: FPS: 469 FrameTime: 2.135 ms
[buffer] columns=200:interleave=true:update-dispersion=0.9:update-fraction=0.5:update-method=map: FPS: 574 FrameTime: 1.743 ms
[ideas] speed=duration: FPS: 2244 FrameTime: 0.446 ms
[jellyfish] <default>: FPS: 1393 FrameTime: 0.718 ms
[terrain] <default>: FPS: 72 FrameTime: 13.990 ms
[shadow] <default>: FPS: 178 FrameTime: 5.647 ms
[refract] <default>: FPS: 76 FrameTime: 13.177 ms
[conditionals] fragment-steps=0:vertex-steps=0: FPS: 3487 FrameTime: 0.287 ms
[conditionals] fragment-steps=5:vertex-steps=0: FPS: 2687 FrameTime: 0.372 ms
[conditionals] fragment-steps=0:vertex-steps=5: FPS: 3384 FrameTime: 0.296 ms
[function] fragment-complexity=low:fragment-steps=5: FPS: 3073 FrameTime: 0.325 ms
[function] fragment-complexity=medium:fragment-steps=5: FPS: 2308 FrameTime: 0.433 ms
[loop] fragment-loop=false:fragment-steps=5:vertex-steps=5: FPS: 2979 FrameTime: 0.336 ms
[loop] fragment-steps=5:fragment-uniform=false:vertex-steps=5: FPS: 2987 FrameTime: 0.335 ms
[loop] fragment-steps=5:fragment-uniform=true:vertex-steps=5: FPS: 2164 FrameTime: 0.462 ms
=======================================================
                                  glmark2 Score: 2036 
=======================================================

The score is indeed different, and does not look as bad. But 2,036 points is still significantly lower than the 4,000-4,500 points achieved on Rockchip RK3588 hardware.

]

The WebGL Aquarium demo works fine with Chromium and Firefox, although the frame rate is significantly better with the Chromium browser.

1000 fish, 48 fps – Chromium

 

1000 fish, 35 fps – Firefox

For reference, in the NanoPi R6S review, I mentioned that “the demo renders smoothly with 1000 fish at 60 fps, and it’s still good with 5,000 fish at around 30 fps”, so the Raspberry Pi 5 is indeed not quite as performant as Rockchip RK3588/RK3588S system when it comes to graphics either.

So far, we can say the benchmarks show that Raspberry Pi 5 is a clear step up compared to the Raspberry Pi 4 with typically 2 to 3 times better performance, and even over 20 times for cryptographic workload (like AES, TLS, etc…), but it does not quite reach the performance of the popular Rockchip RK3588 CPU although it can get close for some specific workloads.

microSD storage and USB 3.0 benchmarks

I built iozone for the Raspberry Pi to run the storage benchmarks on both the provided 32GB Class A1 microSD card as part of the Raspberry Pi 5 kit and a USB 3.0 NVMe SSD drive.

Results for the microSD card:

pi@raspberrypi:~/$ sudo iozone -e -I -a -s 100M -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-arm 
                                                                    random    random      bkwd     record     stride                                        
              kB  reclen    write    rewrite      read    reread      read     write      read    rewrite       read    fwrite  frewrite     fread   freread
          102400       4      4434      4568     14278     14268     11953      2372                                                                
          102400      16      6470      8731     35712     35647     28960      6648                                                                
          102400     512     17973     19024     89484     89484     88337     18580                                                                
          102400    1024     18912     21470     87139     89739     89001     17230                                                                
          102400   16384     19198     18610     89380     89382     89369     19610                                                                

SD card performance is supposed to be improved thanks to the RP1 chipset, but it’s hard to see with that specific microSD card. Reads are up to about 89MB/s and writes max out at 19MB/s. Random read and write speed is also important, and it looks decent which is probably why I didn’t notice any massive slowdowns due to I/Os during use. But note that (more expensive) competing boards with built-in 32GB or 64GB eMMC flash are usually much faster and more responsive.

I also tested the USB 3.0 bandwidth (5 Gbps) with an ORICO enclosure fitted with an Apacer NVMe SSD formatted with EXT-4.

Top USB 3.0 port:

pi@raspberrypi:/media/pi/CNXSOFT-ORICO $ sudo iozone -e -I -a -s 1000M -r 16384k -i 0 -i 1     
	Iozone: Performance Test of File I/O
	        Version $Revision: 3.506 $
		Compiled for 64 bit mode.
		Build: linux-arm 
                                                                    random    random      bkwd     record     stride                                        
              kB  reclen    write    rewrite      read    reread      read     write      read    rewrite       read    fwrite  frewrite     fread   freread
         1024000   16384    411901    411707    388762    389020                                                                                  

Bottom USB 3.0 port:

pi@raspberrypi:/media/pi/CNXSOFT-ORICO $ sudo iozone -e -I -a -s 1000M -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
         1024000   16384    411677    410461    388602    388934

In both cases, we got about 388MB/s sequential read speeds and 411MB/s write speeds, or about as expected for a 5 Gbps USB link. It’s unclear why writes are faster than reads as we disabled caching in the iozone command.

Gigabit Ethernet, WiFi, and Bluetooth

We’ll now use iperf3 to test gigabit Ethernet and WiFi 5 network performance. I’ll also test Bluetooth with my phone and a Bluetooth headset.

Here’s the Raspberry Pi 5’s gigabit Ethernet download speed using UP Xtreme 11 Edge mini PC‘s 2.5 GbE port on the other side of the connection.

devkit@UPX-i11:~$ iperf3 -t 60 -c 192.168.31.209 -i 10
Connecting to host 192.168.31.209, port 5201
[  5] local 192.168.31.12 port 42968 connected to 192.168.31.209 port 5201
[ ID] Interval           Transfer     Bitrate         Retr  Cwnd
[  5]   0.00-10.00  sec  1.10 GBytes   944 Mbits/sec    0    583 KBytes       
[  5]  10.00-20.00  sec  1.10 GBytes   942 Mbits/sec    0    666 KBytes       
[  5]  20.00-30.00  sec  1.10 GBytes   942 Mbits/sec    0    666 KBytes       
[  5]  30.00-40.00  sec  1.10 GBytes   942 Mbits/sec    0    988 KBytes       
[  5]  40.00-50.00  sec  1.10 GBytes   942 Mbits/sec    0    988 KBytes       
[  5]  50.00-60.00  sec  1.10 GBytes   942 Mbits/sec    0    988 KBytes       
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval           Transfer     Bitrate         Retr
[  5]   0.00-60.00  sec  6.58 GBytes   942 Mbits/sec    0             sender
[  5]   0.00-60.00  sec  6.58 GBytes   942 Mbits/sec                  receiver

Now for upload:

devkit@UPX-i11:~$ iperf3 -t 60 -c 192.168.31.209 -i 10 -R
Connecting to host 192.168.31.209, port 5201
Reverse mode, remote host 192.168.31.209 is sending
[  5] local 192.168.31.12 port 56822 connected to 192.168.31.209 port 5201
[ ID] Interval           Transfer     Bitrate
[  5]   0.00-10.00  sec  1.09 GBytes   936 Mbits/sec                  
[  5]  10.00-20.00  sec  1.09 GBytes   936 Mbits/sec                  
[  5]  20.00-30.00  sec  1.09 GBytes   936 Mbits/sec                  
[  5]  30.00-40.00  sec  1.09 GBytes   936 Mbits/sec                  
[  5]  40.00-50.00  sec  1.09 GBytes   936 Mbits/sec                  
[  5]  50.00-60.00  sec  1.09 GBytes   936 Mbits/sec                  
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval           Transfer     Bitrate         Retr
[  5]   0.00-60.00  sec  6.54 GBytes   937 Mbits/sec    0             sender
[  5]   0.00-60.00  sec  6.54 GBytes   936 Mbits/sec                  receiver

Both are great and around 940 is expected in either direction. Let’s now try a more demanding full-duplex (bi-directional) transfer:

devkit@UPX-i11:~$ iperf3 -t 60 -c 192.168.31.209 -i 10 --bidir
Connecting to host 192.168.31.209, port 5201
[  5] local 192.168.31.12 port 51906 connected to 192.168.31.209 port 5201
[  7] local 192.168.31.12 port 51916 connected to 192.168.31.209 port 5201
[ ID][Role] Interval           Transfer     Bitrate         Retr  Cwnd
[  5][TX-C]   0.00-10.00  sec  1.09 GBytes   936 Mbits/sec    0    831 KBytes       
[  7][RX-C]   0.00-10.00  sec  1.08 GBytes   925 Mbits/sec                  
[  5][TX-C]  10.00-20.00  sec  1.09 GBytes   935 Mbits/sec    0   1.22 MBytes       
[  7][RX-C]  10.00-20.00  sec  1.08 GBytes   925 Mbits/sec                  
[  5][TX-C]  20.00-30.00  sec  1.09 GBytes   935 Mbits/sec    0   1.22 MBytes       
[  7][RX-C]  20.00-30.00  sec  1.08 GBytes   925 Mbits/sec                  
[  5][TX-C]  30.00-40.00  sec  1.09 GBytes   936 Mbits/sec    0   1.22 MBytes       
[  7][RX-C]  30.00-40.00  sec  1.08 GBytes   925 Mbits/sec                  
[  5][TX-C]  40.00-50.00  sec  1.09 GBytes   936 Mbits/sec    0   1.22 MBytes       
[  7][RX-C]  40.00-50.00  sec  1.08 GBytes   925 Mbits/sec                  
[  5][TX-C]  50.00-60.00  sec  1.09 GBytes   936 Mbits/sec    0   1.22 MBytes       
[  7][RX-C]  50.00-60.00  sec  1.08 GBytes   925 Mbits/sec                  
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID][Role] Interval           Transfer     Bitrate         Retr
[  5][TX-C]   0.00-60.00  sec  6.54 GBytes   936 Mbits/sec    0             sender
[  5][TX-C]   0.00-60.00  sec  6.54 GBytes   936 Mbits/sec                  receiver
[  7][RX-C]   0.00-60.00  sec  6.46 GBytes   925 Mbits/sec  199             sender
[  7][RX-C]   0.00-60.00  sec  6.46 GBytes   925 Mbits/sec                  receiver

Again excellent.

Let’s now test WiFi 5 (at 5 GHz) connected with a 433 Mbps link to Xiaomi Mi AX6000 router.

pi@raspberrypi:~ $ iwconfig wlan0
wlan0     IEEE 802.11  ESSID:"CNX_Software_Xiaomi_5G"  
          Mode:Managed  Frequency:5.18 GHz  Access Point: 3C:CD:57:F5:AF:91   
          Bit Rate=433.3 Mb/s   Tx-Power=31 dBm   
          Retry short limit:7   RTS thr:off   Fragment thr:off
          Power Management:on
          Link Quality=70/70  Signal level=-24 dBm  
          Rx invalid nwid:0  Rx invalid crypt:0  Rx invalid frag:0
          Tx excessive retries:0  Invalid misc:0   Missed beacon:0

Download:

devkit@UPX-i11:~$ iperf3 -t 60 -c 192.168.31.211 -i 10
Connecting to host 192.168.31.211, port 5201
[  5] local 192.168.31.12 port 59618 connected to 192.168.31.211 port 5201
[ ID] Interval           Transfer     Bitrate         Retr  Cwnd
[  5]   0.00-10.00  sec   257 MBytes   216 Mbits/sec    0   3.15 MBytes       
[  5]  10.00-20.00  sec   261 MBytes   219 Mbits/sec    0   3.15 MBytes       
[  5]  20.00-30.00  sec   284 MBytes   238 Mbits/sec    0   3.15 MBytes       
[  5]  30.00-40.00  sec   279 MBytes   234 Mbits/sec    0   3.15 MBytes       
[  5]  40.00-50.00  sec   269 MBytes   225 Mbits/sec    0   3.15 MBytes       
[  5]  50.00-60.00  sec   254 MBytes   213 Mbits/sec    0   3.15 MBytes       
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval           Transfer     Bitrate         Retr
[  5]   0.00-60.00  sec  1.57 GBytes   224 Mbits/sec    0             sender
[  5]   0.00-60.00  sec  1.57 GBytes   224 Mbits/sec                  receiver

Upload:

devkit@UPX-i11:~$ iperf3 -t 60 -c 192.168.31.211 -i 10 -R
Connecting to host 192.168.31.211, port 5201
Reverse mode, remote host 192.168.31.211 is sending
[  5] local 192.168.31.12 port 49566 connected to 192.168.31.211 port 5201
[ ID] Interval           Transfer     Bitrate
[  5]   0.00-10.00  sec   306 MBytes   256 Mbits/sec                  
[  5]  10.00-20.00  sec   309 MBytes   259 Mbits/sec                  
[  5]  20.00-30.00  sec   309 MBytes   259 Mbits/sec                  
[  5]  30.00-40.00  sec   309 MBytes   259 Mbits/sec                  
[  5]  40.00-50.00  sec   308 MBytes   258 Mbits/sec                  
[  5]  50.00-60.00  sec   309 MBytes   259 Mbits/sec                  
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval           Transfer     Bitrate         Retr
[  5]   0.00-60.00  sec  1.81 GBytes   259 Mbits/sec    0             sender
[  5]   0.00-60.00  sec  1.81 GBytes   259 Mbits/sec                  receiver

The performance is fairly good with 224 Mbps uploads and 259 Mbps downloads, but if you want better network performance Ethernet should be used when possible. As a side note, high-end platforms with WiFi 6 can deliver over 1 Gbps transfer rates with that testbed.

Finally, I tested Bluetooth with my Android smartphone. The good news is that pairing worked flawlessly. The bad news is that Raspberry Pi OS does not know what to do with my phone with the error message:

Pairing successful – this device has no services which can be used with Raspberry Pi

So I can’t transfer files or do anything else for that matter.

Let’s try with a Bluetooth audio headset…

It works! I could listen to the audio from a YouTube video, but the volume control is not working right. I can only mute the audio or turn it on at 100% at whatever position it is on the slider. However, if I use the volume buttons on my headset, then the volume slider is properly synchronized in Raspberry Pi OS… That means I can control the volume from my headset, but not from Raspberry Pi OS except for mute/unmute.

YouTube and 4K video playback

I then tested YouTube videos up to 1920×1080 resolution at 30 fps in both Chromium and Firefox. 4K (2160p) resolution was not an option despite selecting a 4K video.

Firefox
Chromium

The video played smoothly in both web browsers with only a few frames dropped according to the “Stats for Nerds” overlay window.

Let’s now try to play some local 4K H.265 videos as well since the Broadcom BCM2712 SoC is supposed to support H.265 video decoding. So I connected a hard drive with some 4K video samples and played them by clicking on the file which opened VLC video player:

  • Beauty_3840x2160_120fps_420_8bit_HEVC_MP4.mp4 (H.265, no audio) – OK
  • MHD_2013_2160p_ShowReel_R_9000f_24fps_RMN_QP23_10b.mkv (10-bit HEVC, 24 fps, no audio) – First frame only for the duration of the video
  • Fifa_WorldCup2014_Uruguay-Colombia_4K-x265.mp4 (4K, H.265, 60 fps) – Video and audio OK

While two of the video could play fine if I enter full-screen mode, I can see a thick black bar at the bottom of the video (but no such thing at the top), and changing the aspect ratio does not help.

CPU usage while playing a 4K H.265 video at 60 fps is rather low which should indicate hardware video decoding is indeed working. For comparison, If I switch to a 4K H.264 video at 30 fps, the CPU usage is higher as software video decoding is used instead.

It should be the same for other video codecs, as I understand Broadcom BCM2712 only supports H.265 hardware video decoding, and all other codecs must be handled by software.

Raspberry Pi camera

I still have a Raspberry Pi camera module 3, but I had to skip testing because the camera connectors on the Raspberry Pi 5 are now smaller… It’s not such a big issue, as I understand it’s simply a matter of getting a $1 cable and you should be good to go with the new Raspberry Pi SBC and existing official camera modules.

Note that Broadcom BCM2712 does not support hardware video encoding, and it is now handled by software as well.

Thermal considerations

We’ve already seen the Raspberry Pi 5 offers a significant boost in performance compared to the Raspberry Pi 4, but we did so with a large heatsink and a PWM fan part of the “active cooler”. The fan is not particularly noisy, but some people may prefer to have a fanless system. Would that work with just the heatsink? What happens when we use the official Raspberry Pi 5 case? Let’s find out.

Note that usually perform testing in a room with 28°C ambient temperature which may impact the performance of the system. Just to show how ambient temperature may impact the CPU temperature I left the system run idly overnight (19:00 to about 10:00) just running sbc-bench.sh -m monitor temperature and rpi-monitor to draw the temperature chart.

The CPU temperature dropped from about 55°C to 50°C following the ambient temperature delta from about 26°C at 19:00 down to 21°C at 6:00 and going up from there.

Let’s check out the temperature chart starting from idle and running sbc-bench.sh script using the active cooler.

Raspberry Pi 5 with active cooler

The idle temperature was about 46-47°C and went up to around 66°C during CPUminer. No throttling occurred and we are far from the 85°C limit, so the active cooler perfectly did its job.

The heatsink is quite large covering most of the board, so let’s disconnect the fan and see what happens:

pi@raspberrypi:~ $ sudo ./sbc-bench.sh -r
Starting to examine hardware/software for review purposes...

sbc-bench v0.9.50

Installing needed tools: 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 (12 minutes elapsed).

Results validation:

  * Measured clockspeed not lower than advertised max CPU clockspeed
  * No swapping
  * Background activity (%system) OK
  * Throttling / frequency capping occured

Full results uploaded to http://ix.io/4KEa

### Performance baseline

  * memcpy: 5149.9 MB/s, memchr: 13453.4 MB/s, memset: 12362.2 MB/s
  * 16M latency: 123.9 119.8 126.3 121.6 121.7 126.2 150.7 155.6 
  * 128M latency: 141.3 143.7 146.4 140.2 141.1 140.8 140.9 142.6 
  * 7-zip MIPS (3 consecutive runs): 10890, 10818, 10293 (10670 avg), single-threaded: 3138
  * `aes-256-cbc     590088.22k  1051428.71k  1273858.47k  1338664.62k  1365114.88k  1367490.56k`
  * `aes-256-cbc     590457.53k  1051552.92k  1274097.32k  1342024.36k  1365286.91k  1368244.22k`

The idle temperature was quite higher at around 60°C, and we reached 85°C with both 7-zip and CPUminer, and throttling occurred with the CPU frequency dropping as low as 1,500 MHz from the usual 2,400 Mhz. That was only during short periods, so if your workload only requires bursts of performance, it should be possible to use the heatsink only. I’m also confident some will come with fanless cases for the Raspberry Pi 5.

Raspberry Pi also sent me the official case. So let’s remove the active cooler, stick the small heatsink from the kit on the Broadcom BCM2712 processor, and connect the fan…

before installing the cover and reconnecting everything.

Time to run sbc-bench.sh again:

pi@raspberrypi:~ $ sudo ./sbc-bench.sh   

sbc-bench v0.9.50

Installing needed tools: Done.
Checking cpufreq OPP. Done (results will be available in 7-10 minutes).
Executing tinymembench. Done.
Executing RAM latency tester. Done.
Executing OpenSSL benchmark. Done.
Executing 7-zip benchmark. Done.
Checking cpufreq OPP again. Done (8 minutes elapsed).

Results validation:

  * Measured clockspeed not lower than advertised max CPU clockspeed
  * No swapping
  * Background activity (%system) OK
  * No throttling

Memory performance
memcpy: 5142.9 MB/s
memset: 11781.0 MB/s

7-zip total scores (3 consecutive runs): 10676,10847,10657, single-threaded: 3108

OpenSSL results:
type             16 bytes     64 bytes    256 bytes   1024 bytes   8192 bytes  16384 bytes
aes-128-cbc     636995.34k  1313348.50k  1720131.67k  1853066.24k  1907924.99k  1911674.20k
aes-128-cbc     637428.34k  1312076.65k  1719778.99k  1853592.92k  1906480.47k  1913421.82k
aes-192-cbc     599322.82k  1171677.76k  1465508.27k  1545036.80k  1591457.11k  1594949.63k
aes-192-cbc     599599.38k  1171923.56k  1465062.66k  1543467.01k  1591375.19k  1595441.15k
aes-256-cbc     590231.97k  1051307.07k  1273963.52k  1340034.73k  1365352.45k  1367468.71k
aes-256-cbc     590235.99k  1051512.96k  1273754.28k  1338839.72k  1364970.15k  1368003.93k

Full results uploaded to http://ix.io/4KJo

pi@raspberrypi:~ $ 

The good news that is CPU throttling did not occur. But the idle temperature is a bit higher at 56°C, and under load, it peaked at about 75°C. That also means the official case performs its cooling duty just fine, but the fan may be activated more often than with the active cooler because of the much smaller heatsink.

Now let’s turn off the system, disconnect the fan, and run the script with the Raspberry Pi 5 in its case without any active cooling.

pi@raspberrypi:~ $ sudo ./sbc-bench.sh 

sbc-bench v0.9.50

Installing needed tools: Done.
Checking cpufreq OPP. Done (results will be available in 8-12 minutes).
Executing tinymembench. Done.
Executing RAM latency tester. Done.
Executing OpenSSL benchmark. Done.
Executing 7-zip benchmark. Done.
Checking cpufreq OPP again. Done (9 minutes elapsed).

Results validation:

  * Measured clockspeed not lower than advertised max CPU clockspeed
  * No swapping
  * Background activity (%system) OK
  * Throttling / frequency capping occured

Memory performance
memcpy: 5168.5 MB/s
memset: 11322.4 MB/s

7-zip total scores (3 consecutive runs): 7603,7477,7482, single-threaded: 2536

OpenSSL results:
type             16 bytes     64 bytes    256 bytes   1024 bytes   8192 bytes  16384 bytes
aes-128-cbc     505376.33k  1044658.20k  1401074.43k  1479606.61k  1574813.70k  1534121.30k
aes-128-cbc     446999.16k   993373.27k  1393114.97k  1466749.27k  1501372.42k  1534945.96k
aes-192-cbc     462834.45k   920687.94k  1137528.15k  1235878.57k  1225586.01k  1249946.28k
aes-192-cbc     437606.93k   888128.30k  1077913.00k  1187423.91k  1213527.38k  1208232.62k
aes-256-cbc     458931.29k   806966.14k   977979.31k  1039390.38k  1054946.65k  1089536.00k
aes-256-cbc     429332.22k   758800.09k   945642.75k   943875.41k   995794.94k  1006638.42k

Full results uploaded to http://ix.io/4KJt

It does not look good at all. I waited for about 20 minutes before starting the benchmark, and the idle temperature was already around 67-68°C, but when we ran sbc-bench.sh the temperature quickly shot up to 85°C and even peaked at about 88°C.

The benchmark ended about 15:30 and I first thought there must be some background process keeping it at an elevated (85°C) temperature. But htop did not show anything…

sbc-bench.sh monitor mode also reported the high temperature and virtually zero CPU load:

pi@raspberrypi:~ $  ./sbc-bench.sh -m
BCM2712, Kernel: aarch64, Userland: arm64

CPU sysfs topology (clusters, cpufreq members, clockspeeds)
                 cpufreq   min    max
 CPU    cluster  policy   speed  speed   core type
  0        0        0     1000    2400   Cortex-A76 / r4p1
  1        0        0     1000    2400   Cortex-A76 / r4p1
  2        0        0     1000    2400   Cortex-A76 / r4p1
  3        0        0     1000    2400   Cortex-A76 / r4p1

Thermal source: /sys/devices/virtual/thermal/thermal_zone0/ (cpu-thermal)

Time        fake/real   load %cpu %sys %usr %nice %io %irq   Temp    VCore    PMIC   DC(V)
16:05:49: 2400/1500MHz  0.00   6%   0%   6%   0%   0%   0%  84.2°C  0.9150V   3.6W   5.14V 
16:05:54: 2400/1500MHz  0.00   0%   0%   0%   0%   0%   0%  84.8°C  0.7200V   2.7W   5.14V 
16:05:59: 2400/2201MHz  0.00   0%   0%   0%   0%   0%   0%  83.7°C  0.7200V   2.7W   5.15V 
16:06:04: 2400/2146MHz  0.00   0%   0%   0%   0%   0%   0%  83.2°C  0.7200V   2.6W   5.14V 
16:06:09: 2400/2256MHz  0.00   1%   0%   0%   0%   0%   0%  84.8°C  0.9150V   2.7W   5.15V 
16:06:15: 2400/1500MHz  0.00   0%   0%   0%   0%   0%   0%  83.2°C  0.7200V   2.6W   5.14V 
16:06:20: 2400/1500MHz  0.08   0%   0%   0%   0%   0%   0%  84.2°C  0.7200V   2.7W   5.15V 
16:06:25: 2400/2201MHz  0.07   0%   0%   0%   0%   0%   0%  83.7°C  0.7200V   2.7W   5.15V 
16:06:30: 2400/2146MHz  0.07   0%   0%   0%   0%   0%   0%  83.2°C  0.7200V   2.7W   5.14V 
16:06:35: 2400/1500MHz  0.06   0%   0%   0%   0%   0%   0%  85.9°C  0.7200V   2.7W   5.15V 
16:06:41: 2400/2201MHz  0.14   1%   0%   0%   0%   0%   0%  83.2°C  0.7200V   2.7W   5.15V 
16:06:46: 2400/2256MHz  0.13   0%   0%   0%   0%   0%   0%  84.8°C  0.7200V   2.7W   5.14V 
16:06:51: 2400/2146MHz  0.12   1%   0%   0%   0%   0%   0%  84.8°C  0.9150V   2.7W   5.15V 
16:06:56: 2400/2201MHz  0.17   0%   0%   0%   0%   0%   0%  84.8°C  0.7200V   3.6W   5.15V 

It’s like the temperature sensor was stuck at around 85°C… and it would not come back down…

So I opened the case and reconnected the fan while the board was still running (probably not recommended) and the temperature dropped immediately…

So if your plan was to use a tiny heatsink and put the Raspberry Pi 5 in an enclosure without a fan you can forget about it. That’s why Raspberry Pi provides an optional active cooler and the official case comes with an integrated fan, although it should perfectly be possible to create a fanless metal case for the board.

Power consumption

I measured Raspberry Pi 5’s power consumption with its active cooler using a wall power meter.

  • Power off – 1.7 Watts
  • Idle
    • 3.0 Watts (headless, WiFi only)
    • 3.6 Watts (Ethernet + WiFi, USB mouse & keyboard, HDMI connected)
  • 4K YouTube Video in Firefox (full screen – avc1 (H.264) codec) – 5.5 to 6.2 Watts
  • 4K YouTube Video in Chromium (full screen – avc1 (H.264) codec) – 5.7 to 6.8 Watts
  • Stress test on all 4 cores (stress -c 4) –  8.8 Watts

My Raspberry Pi kit comes with a USB PD power supply that supports 5.1V/5V or a little over 25W. The maximum in my test above is 8.8 Watts so that’s a lot of legroom when it comes to the power draw. So I tried to increase that by playing a 4K H.265 from a USB hard drive and run iozone on an external SSD while running stress -c 4 at the same time.

It did manage to peak at 16.8 Watts (and stabilize at 15.9 Watts), and so for that use case, a 5V/3V USB power supply as used with the Raspberry Pi 4 would not have been sufficient. For what it’s worth sbc-bench.sh does not report any drop in voltage under this specific stress test:

pi@raspberrypi:~ $ ./sbc-bench.sh -m
BCM2712, Kernel: aarch64, Userland: arm64

CPU sysfs topology (clusters, cpufreq members, clockspeeds)
                 cpufreq   min    max
 CPU    cluster  policy   speed  speed   core type
  0        0        0     1000    2400   Cortex-A76 / r4p1
  1        0        0     1000    2400   Cortex-A76 / r4p1
  2        0        0     1000    2400   Cortex-A76 / r4p1
  3        0        0     1000    2400   Cortex-A76 / r4p1

Thermal source: /sys/devices/virtual/thermal/thermal_zone0/ (cpu-thermal)

Time        fake/real   load %cpu %sys %usr %nice %io %irq   Temp    VCore    PMIC   DC(V)
20:06:31: 2400/2400MHz  6.27   9%   0%   7%   0%   0%   0%  74.3°C  0.9150V   6.8W   5.16V 
20:06:37: 2400/2400MHz  6.25 100%   9%  88%   0%   0%   1%  71.0°C  0.9150V   7.2W   5.14V 
20:06:42: 2400/2400MHz  6.23  99%   9%  88%   0%   0%   1%  74.3°C  0.9150V   7.7W   5.13V 
20:06:47: 2400/2400MHz  6.21  99%   9%  89%   0%   0%   1%  74.3°C  0.9150V   7.6W   5.14V 

That makes me believe it should be possible to use a 5V/3A power adapter with the Raspberry Pi 5 for many use cases unless you are connecting USB peripherals that draw a lot of current like mass storage devices.  Raspberry Pi confirms that saying:

When using a standard 5V, 3A (15W) USB-C power adapter with Raspberry Pi 5, by default we must limit downstream USB current to 600mA to ensure that we have sufficient margin to support these workloads.

I’m running out of time to test this in detail, however.

Conclusion

The Raspberry Pi 5 SBC is a great upgrade to the Raspberry Pi 4 if you feel the earlier SBC is sluggish with two to three times the performance depending on the workload. The Broadcom BCM2721 is also the first “Raspberry Pi” processor with Armv8 crypto extension catching up with the competition and delivering a 20 times boost in performance for AES-256 against the Raspberry Pi. If you are familiar with the Raspberry Pi ecosystem and want something faster, the Raspberry Pi 5 is almost a no-brainer.

Having said that, there are some changes to the layout that make previous cases incompatible, the MIPI CSI and DSI connectors are smaller and users must purchase new flat cables, a new power adapter is potentially needed, there aren’t any official fanless solutions yet, and some features like H.264 hardware video decoding, or any sort of hardware video encoding are now missing since the BCM2712 can handle that in software. That’s more flexible but also consumes more power.

More advanced users that are mostly vendor-agnostic may be disappointed with the performance and features compared to platforms based on Rockchip RK3588 processor with a similar price point, support for 8K video output, 8K/4K AV1/VP9/H.264 hardware video decoding, hardware video encoding, an AI accelerator, and more. Raspberry Pi hardware still probably benefits from a larger community and possibly better software support although the current Raspberry Pi OS Bookworm has a bit more bugs than I expected such as Bluetooth audio volume issues or a thick black bar under full-screen videos in VLC.

I’d like to thank Raspberry Pi for sending a complete Raspberry Pi 5 kit for review and testing. You should be able to purchase the board and accessories from any local distributor for $80 (8GB RAM as reviewed here) and up.

Share this:

Support CNX Software! Donate via cryptocurrencies, become a Patron on Patreon, or purchase goods on Amazon or Aliexpress

43 Replies to “Raspberry Pi 5 review – Part 2: Raspberry Pi OS Bookworm, benchmarks, power consumption, and more”

  1. The idle power consumption looks very bad. The board at its powered off state consumes more power than similar SBCs in idle state is…. ridiculous. The 3W idle is even more than some x86 systems.

        1. Interesting what backward compatibility can do…

          Do they have private forums on Raspberry Pi now? Clicking on the last link to a forum thread returns the following error after login:

          “You are not authorized to read this forum.”

          1. The Pi5 seems both a bit rushed and also hobnailed by backward compatibility.
            Its interesting where Raspberry go as the Broadcom base is looking extremely tired.
            I wonder if the Pi5 might be a last in that line and a jump to ArmV9 and new silicon sources?

          2. There have long been private forums for distributors, resellers, and other special interest groups within their ecosystem.

        2. I assume the idle power consumption test was either performed with the ondemand or the conservative setting? (It was not mentioned which mode was used so I assume ‘performance’.
          I am very much prejudiced against the RPI5, but rating the power consumption using the ‘performance’ settings seems unfair.)

          It would be a second condition to also use the “power_of_on_halt=1” rule. but I assume it should not matter (when powered of you’d better cut the power completely if your aim is powersaving).
          I still feel this might be unfair since wifi might be using pcie lanes which could have been put to ‘powersave’ but that probably still is more than a general user could establish.

        3. There are allways many switches to try when switching from ‘performance’ to some powersave mode.
          Can I at least assume you did enable ‘ondemand’, ‘powersave’ or ‘conservative’ before publishing some outragious consumption?
          I hate to say I am very much prejudiced against the RPI5, but whne I lean on unreasonable colored reviews, these only tag me as anti-raspberry when I point out the RPI5 is not ideal.

    1. Idle power consumption >3W is bad 🙁 Odroid H3/H3+ with x86 Intel N5105 / N6005 10W have 1.2—1.5 W ⚡️ idle – I mean when running Debian 12 with kernel 6.2 or newer, with newest BIOS.

      My Odroid H3 has ~1.5 W idle with 2x RAM DDR4 modules (16GB + 32GB) + 1TB Samsung 980 Pro m.2 SSD. Power consumption was measured on DC side.

      And it’s completely fanless system, very powerful, very efficient, with great support and community on forum.odroid.com 🙂 
      Note: such low power consumption is achieved not with defaults (ASPM needs to be enabled in BIOS and some SW tweaks via powertop)

      1. I have powerful PC/home server with desktop 13th gen Intel i3-13100 (TDP 60W) with idle power consumption only 2—3 W :-O

        MB:  Asus Pro H610T D4-CSM
        CPU: Intel i3-13100
        RAM: 1x Crucial 32GB DDR4-3200 SODIMM (CT32G4SFD832A)
        SSD: 1x SATA Crucial M4 128GB (CT128M4SSD2)
        

        I enabled power-saving features in BIOS like C-states and ASPM.
        OS: Debian 12 with DietPi, kernel 6.1.0-13-amd64, keyboard and LCD unplugged.

        Power consumption measured on DC side (12V). It’s fanless build.

        idle: 2—3 W
        load: 50—60W

        [spoiler title=”see idle power consumption”] https://forum.level1techs.com/uploads/default/original/4X/8/6/5/86523c2520b4191e9a649a031bc813edbfe0bda0.gif [/spoiler]

    1. Yeah. And still no proper USB-C PD support. (although i much prefer a 12V screw terminal on SBCs)

      Also the omission of an av1 decoder seems painful for future desktop use, as all high volume 2023 devices have it. H265 support seems like a waste, as thats never going to achieve critical mass.

      1. > H265 support seems like a waste, as thats never going to achieve critical mass.

        Isn’t HEVC currently the standard for IPTV and as such SoCs designed for the STB market (like BroadCom 2712) only need a HW decoder for this single codec?

        1. I don’t think it is the case with Raspberry Pi 5. In this generation, the only HEVC codec is developed in-house by Raspberry Pi themselves according to
          this blog. I don’t even **think** the BCM2712 is designed for IPTV initially as the Raspberry Pi is the only user and with Raspberry Pi’s own IP blocks. The code choice is just a cost-down measure. They don’t want to pay the license from Broadcom for other codecs and they don’t want to put resources to implement other codecs either.

        2. AFAIK, those are all still using h264. Or rather the IPTV providers are still using it.

          H265 was too much of a licensing mess, which made everyone but the biggest of players, avoid it

      2. H.265 does get used. Lack of AV1 decode is annoying, dropping H.264 and lacking VP9 is bad altogether. LibreELEC attempted to excuse these, but it’s a power-hungry mess.

        Just use $50-150 x86 for desktop people. Same for TV, or some other ARM option.

        1. > Lack of AV1 decode is annoying, dropping H.264 and lacking VP9 is bad altogether.

          Do these codecs matter in the IPTV/STB business?

          Over a decade ago when (former) BroadCom employees started with RPi and used one of their VideoCore SoCs these chips were used in a variety of devices that dictated the SoC’s interfaces.

          But nowadays VideoCore is only used by BroadCom’s STB division any more and as such both interfaces and capabilities were adjusted. And Raspberry Pi Ltd. had to deal with this (developing their RP1 chip bringing back the original interfaces to whatever PCIe attached main SoC)

          1. It sort of begs the question as to why they wouldn’t move on to a general purpose SoC.

            People going on about how the RP1 is their most important design, then when you think about it, it’s a South Bridge at a time where everyone is going in the opposite direction

          2. There can be good reasons for why it happened while sticking to Broadcom. I’m not sure how much credence we can give to that given that RPi is as popular as ever and pushing millions of units. They should have enough leverage to get something customized for them. Also, Broadcom sells TV SoCs that support AV1, presumably H.264/VP9 (good luck finding out what exactly): cnx-software.com/2019/09/25/broadcom-bcm7218x-stb-soc-av1-hardware-decoding-wifi-6/

            But the point is that RPi is half-baked and makes less sense than ever before for use cases like desktop and TV.

      3. Eh? h.265/hevc has already reached critical mass. It’s effectively the default codec for UHD HDR streaming used by all the main OTT streaming platforms like Netflix, Prime, Disney+, Apple TV+ etc. and is supported by pretty much every Smart TV, Media Player (Apple TV, Amazon Fire TV, Google Chromecast, nVidia Shield TV, Roku etc.). Pretty much every phone and tablet that can play modern media in Dolby Vision etc. supports it. It’s also the standard codec for the most recent linear TV platforms (Germany and Netherlands are both using it with DVB-T2 as are other countries, and the US ATSC 3.0 standard uses it).

  2. > It did manage to peak at 16.8 Watts (and stabilize at 15.9 Watts)

    With Rasperry Pi Ltd.’s fixed cable PSU the input voltage reported by sbc-bench -m (using vcgencmd pmic_read_adc | grep EXT5V_V under the hood) never dropped below 5.13V (for reasons why a PSU with fixed cable can avoid the usual voltage drop see here).

    Would be interesting to repeat such a test with another USB PD PSU and any random USB-C cable in between.15W limit doesn’t matter, the voltage (drop) is the interesting bit when approaching the 3A area…

  3. Designing such an SBC with a 5 V / 5 A power supply is such a dumb idea. They don’t seem to have learned anything from the mistakes with their earlier boards, with all those voltage drop issues.
    With USB PD they could have easily used 9 V or even 15 V, which would avoid such high currents and at the same time make voltage drops due to cheap cables rather irrelevant.

    Overall, I find the Raspberry Pi 5 to be a very disappointing product.

    1. When I read “So, we decided to do something a little bit non-standard, which is what we often do in search of performance, and create a five-volt, five-amp profile for our power supply.” here, I was like “are you guys insane?!”, and I still haven’t fully recovered from that.

      1. Yeah, that’s crazy. What do they think people should do if they want to integrate a Pi 5 into some project where it isn’t possible to use their special snowflake power supply?

        Similar situation with the PCIe interface. They could have used a standard connector on the bottom side of the board, but no, they decided again to go with something proprietary, requiring an additional addon board, driving the cost up even more.

    2. It’s very nutty. 3A cables are already extremely thick. They’re basically doing this because they don’t want to spend the money on step down regulation.

      Unfortunately those costs are passed to the consumer because finding cables and PSUs that handle that voltage and current is quite hard.

      Even a lot of lab bench PSUs don’t go to 5A

  4. Generally, comparing glmark2 against glmark2-es2-wayland is not a good idea.
    Comparing glmark2 on one board against glmark2-es2-wayland on another board is even worse…
    Would it be possible to run glmark2-es2-wayland on Pi5 please?

    1. Sorry about that. I tried to find it yesterday, but no luck. It’s actually just an apt install… I must have been tired…

      I’ve updated the post with the results for glmark2-es2-wayland. The score is a little over 2,000 points.

  5. Lack of 4k Youtube video could be due to the reason Youtube 4k videos are encoded in VP9 or AV1 only?
    Since Pi5 not supporting hardware decoding of VP9 or AV1, and software decoding of 4k H.264 already takes more than 50% of the CPU power, it is definitely not able to support smooth 4k software decodings of VP9 & AV1, which are much more power demanding.

  6. Thanks for this review Jean-Luc. So in the end it’s not *that* bad, except if you expect low idle consumption or high performance. They followed their long tradition of low memory performance that cripples everything, resulting in a 7-zip performance that’s on par with 2-years old devices that did not require a fan…

    Thus in short it looks like this device remains an improvement for those who are only able to operate RPi products and that as a punishment they’ll get more noise and an increased power bill.

    For now I’ll pass. My 15 month-old pre-release Rock5B is significantly faster, fanless, cold to the touch, and not much more expensive. Ah and it has eMMC and M2 connectors on board and a more convenient form factor 🙂

    1. Yeah, Opi5 here and quite happy.

      I will give them credit for a few things, though. They finally use a core with the crypto extensions! About damn time. And, um,,,, uhhh, oh.. Yeah, I guess that’s about it. The USB-C is still messed up, the tiny video connectors is still a horrible choice, the processor is still super hot and inefficient, the memory interface isn’t as horribly slow as usual, they stripped all of the useful video encode/decode, etc. So much NIH.

    1. [ “Pricing for the Raspberry Pi 5 is still very attractive, costing only $5 more than the Raspberry Pi 4 in equivalent configurations with the 4GB model going for $60 and the 8GB model for $80. Sales should start by the end of October, and the Raspberry Pi 5 will remain in production until at least January 2035, or about 11-year are of guaranteed availability.”
      https://www.cnx-software.com/2023/09/28/raspberry-pi-5-sbc-broadcom-bcm2712-quad-core-cortex-a76-soc/

      one can add an USB wifi adapter (low prices ~$10-12), for this a ~$60-85 SBC]

  7. I tried a mild OC to 2.6 Ghz and it was stable but strangely slower than stock and maybe usuing SIMD with an OC has some internal power limit?
    pi@raspberrypi:~/whisper.cpp $ ./extra/bench-all.sh
    Usage: ./bench.sh [n_threads] [encoder-only]

    Running memcpy benchmark

    memcpy: 5.66 GB/s (1 thread)
    sum:  136902081526.000000

    Running ggml_mul_mat benchmark with 4 threads

     64 x  64: Q4_0   5.5 GFLOPS (128 runs) | Q4_1   5.5 GFLOPS (128 runs)
     64 x  64: Q5_0   1.8 GFLOPS (128 runs) | Q5_1   5.2 GFLOPS (128 runs) | Q8_0   1.9 GFLOPS (128 runs)
     64 x  64: F16   5.6 GFLOPS (128 runs) | F32   1.7 GFLOPS (128 runs)
     128 x 128: Q4_0  24.4 GFLOPS (128 runs) | Q4_1  11.5 GFLOPS (128 runs)
     128 x 128: Q5_0  21.1 GFLOPS (128 runs) | Q5_1  11.2 GFLOPS (128 runs) | Q8_0  26.1 GFLOPS (128 runs)
     128 x 128: F16   27.4 GFLOPS (128 runs) | F32   25.1 GFLOPS (128 runs)
     256 x 256: Q4_0  49.9 GFLOPS (128 runs) | Q4_1  50.4 GFLOPS (128 runs)
     256 x 256: Q5_0  41.5 GFLOPS (128 runs) | Q5_1  31.9 GFLOPS (128 runs) | Q8_0  59.6 GFLOPS (128 runs)
     256 x 256: F16   65.5 GFLOPS (128 runs) | F32   48.6 GFLOPS (128 runs)
     512 x 512: Q4_0  62.8 GFLOPS (128 runs) | Q4_1  61.3 GFLOPS (128 runs)
     512 x 512: Q5_0  50.3 GFLOPS (128 runs) | Q5_1  47.1 GFLOPS (128 runs) | Q8_0  77.5 GFLOPS (128 runs)
     512 x 512: F16   85.4 GFLOPS (128 runs) | F32   50.4 GFLOPS (128 runs)
    1024 x 1024: Q4_0  68.0 GFLOPS ( 32 runs) | Q4_1  69.6 GFLOPS ( 33 runs)
    1024 x 1024: Q5_0  54.0 GFLOPS ( 26 runs) | Q5_1  51.0 GFLOPS ( 24 runs) | Q8_0  85.7 GFLOPS ( 40 runs)
    1024 x 1024: F16   93.5 GFLOPS ( 44 runs) | F32   49.0 GFLOPS ( 23 runs)
    2048 x 2048: Q4_0  71.0 GFLOPS ( 5 runs) | Q4_1  72.9 GFLOPS ( 5 runs)
    2048 x 2048: Q5_0  56.0 GFLOPS ( 4 runs) | Q5_1  52.9 GFLOPS ( 4 runs) | Q8_0  87.9 GFLOPS ( 6 runs)
    2048 x 2048: F16   93.4 GFLOPS ( 6 runs) | F32   44.1 GFLOPS ( 3 runs)
    4096 x 4096: Q4_0  72.3 GFLOPS ( 3 runs) | Q4_1  74.6 GFLOPS ( 3 runs)
    4096 x 4096: Q5_0  56.1 GFLOPS ( 3 runs) | Q5_1  52.9 GFLOPS ( 3 runs) | Q8_0  88.6 GFLOPS ( 3 runs)
    4096 x 4096: F16   80.0 GFLOPS ( 3 runs) | F32   32.2 GFLOPS ( 3 runs)

    Running benchmark for all models
    This can take a while!

    |  CPU |   OS |      Config |    Model | Th |  Enc. |  Dec. |   PP | Commit |
    |  --- |  --- |       --- |     --- | --- |   --- |   --- |   --- |   --- |
    | <todo> | <todo> |       NEON |    tiny |  4 | 1056.65 |  7.01 | 152.03 | f96e1c5 |
    | <todo> | <todo> |       NEON |    base |  4 | 2495.73 |  12.62 | 359.57 | f96e1c5 |
    | <todo> | <todo> |       NEON |    small |  4 | 8638.57 |  35.89 | 1352.77 | f96e1c5 |
    | <todo> | <todo> |       NEON |   medium |  4 |   ms | 105.50 | 4635.39 | f96e1c5 |
    | <todo> | <todo> |       NEON |    large |  4 |   ms | 189.43 | 8513.07 | f96e1c5 |

    Now with over_voltage_delta=100000 arm_freq=2600

    pi@raspberrypi:~/whisper.cpp $ ./extra/bench-all.sh
    Usage: ./bench.sh [n_threads] [encoder-only]

    Running memcpy benchmark

    memcpy: 5.63 GB/s (1 thread)
    sum:  136902081526.000000

    Running ggml_mul_mat benchmark with 4 threads

     64 x  64: Q4_0   5.9 GFLOPS (128 runs) | Q4_1   5.8 GFLOPS (128 runs)
     64 x  64: Q5_0   5.0 GFLOPS (128 runs) | Q5_1   5.5 GFLOPS (128 runs) | Q8_0   5.5 GFLOPS (128 runs)
     64 x  64: F16   6.0 GFLOPS (128 runs) | F32   5.9 GFLOPS (128 runs)
     128 x 128: Q4_0  23.5 GFLOPS (128 runs) | Q4_1  25.3 GFLOPS (128 runs)
     128 x 128: Q5_0  12.5 GFLOPS (128 runs) | Q5_1  22.0 GFLOPS (128 runs) | Q8_0  28.5 GFLOPS (128 runs)
     128 x 128: F16   12.9 GFLOPS (128 runs) | F32   27.6 GFLOPS (128 runs)
     256 x 256: Q4_0  53.8 GFLOPS (128 runs) | Q4_1  54.3 GFLOPS (128 runs)
     256 x 256: Q5_0  44.7 GFLOPS (128 runs) | Q5_1  18.9 GFLOPS (128 runs) | Q8_0  64.8 GFLOPS (128 runs)
     256 x 256: F16   70.2 GFLOPS (128 runs) | F32   29.7 GFLOPS (128 runs)
     512 x 512: Q4_0  54.3 GFLOPS (128 runs) | Q4_1  41.7 GFLOPS (128 runs)
     512 x 512: Q5_0  34.0 GFLOPS (127 runs) | Q5_1  35.5 GFLOPS (128 runs) | Q8_0  57.3 GFLOPS (128 runs)
     512 x 512: F16   68.6 GFLOPS (128 runs) | F32   38.6 GFLOPS (128 runs)
    1024 x 1024: Q4_0  50.9 GFLOPS ( 24 runs) | Q4_1  50.3 GFLOPS ( 25 runs)
    1024 x 1024: Q5_0  40.3 GFLOPS ( 19 runs) | Q5_1  39.4 GFLOPS ( 19 runs) | Q8_0  63.7 GFLOPS ( 31 runs)
    1024 x 1024: F16   72.3 GFLOPS ( 34 runs) | F32   36.7 GFLOPS ( 18 runs)
    2048 x 2048: Q4_0  53.1 GFLOPS ( 4 runs) | Q4_1  55.6 GFLOPS ( 4 runs)
    2048 x 2048: Q5_0  42.7 GFLOPS ( 3 runs) | Q5_1  39.3 GFLOPS ( 3 runs) | Q8_0  66.9 GFLOPS ( 5 runs)
    2048 x 2048: F16   70.3 GFLOPS ( 5 runs) | F32   33.5 GFLOPS ( 3 runs)
    4096 x 4096: Q4_0  53.6 GFLOPS ( 3 runs) | Q4_1  55.0 GFLOPS ( 3 runs)
    4096 x 4096: Q5_0  41.5 GFLOPS ( 3 runs) | Q5_1  39.3 GFLOPS ( 3 runs) | Q8_0  65.2 GFLOPS ( 3 runs)
    4096 x 4096: F16   66.3 GFLOPS ( 3 runs) | F32   28.6 GFLOPS ( 3 runs)

    Running benchmark for all models
    This can take a while!

    |  CPU |   OS |      Config |    Model | Th |  Enc. |  Dec. |   PP | Commit |
    |  --- |  --- |       --- |     --- | --- |   --- |   --- |   --- |   --- |
    | <todo> | <todo> |       NEON |    tiny |  4 | 1304.46 |  7.55 | 207.36 | f96e1c5 |
    | <todo> | <todo> |       NEON |    base |  4 | 2827.34 |  13.10 | 470.81 | f96e1c5 |
    | <todo> | <todo> |       NEON |    small |  4 | 9890.36 |  39.70 | 1674.03 | f96e1c5 |
    | <todo> | <todo> |       NEON |   medium |  4 |   ms | 117.49 | 5718.21 | f96e1c5 |
    | <todo> | <todo> |       NEON |    large |  4 |   ms | 220.34 |   ms | f96e1c5 |
    Which I guess somone will get to the bottom of?

  8. I thought “better buy those better SBC’s”, but … what a prices! More than a x86 NUC with 8GB RAM and SSD and powersupply and housing (120 euro):

    Khadas VIM4 (Amlogic A311D2): €200,58
    Radxa Rock 5B (Rockchip RK3588): €198,28

    You must really love the IO-pin and hardware thinkering to spend your money on that.

    1. The£56.93 4gb Orange Pi 5 is likely a much better option and likely the best budget Rk3588s.
      Khadas always seem to carry a premium
      Orange Pi do do cheaper RK3588 boards but I prefer the single 2.5gbe of the Rock5b from OKdo £135.60 which for me is used as a x6 sata Nas/home server.

      You can get some very good deals on Mini Pcs and likely I would dodge some of the ultra cheap ones but you can get a good Intel N95.N100 for £150.

      If you just want a general purpose consumer desktop for approx £150 range then there are a few mini pcs and cpus to choose from.
      They are just not very good for maker or commercial purposes like Pi & SBC are often used.
      These approx 10 watt devices have a lot of horsepower and are extremely efficient and yeah Raspberry have made a bit of a fail in this respect.

Leave a Reply

Your email address will not be published. Required fields are marked *