Raspberry Pi4 USB3.0 Storage Performance
The ability to boot from USB3.0 storage devices attached to the Raspberry Pi4 has been long anticipated. On 17 June 2020 the bootloader firmware moved from BETA to STABLE status, so I thought it was time to take a look at what this new capability can do for the Raspberry Pi SBC. Note, the firmware will need to be moved from stable to critical before it becomes part of the default Raspberry Pi OS updates. The firmware is stored on EEPROM on the Raspberry Pi 4, so if you do update the firmware, changing SD card won’t undo the change, you’ll need to reflash with rpi-eeprom-update
.
There have been long-standing concerns around the use of SD card as primary storage on the Raspberry Pi, indeed from my own personal experience SD cards can and do fail and I’ve lost more than one in my various Raspberry Pi projects. Whilst you’ve been able to add secondary storage via USB, booting from an attached mass storage device hasn’t been possible until these more recent firmware developments. Being able to use more reliable and faster storage is a significant step forward for the platform.
I’d love to see an M.2 connector on a future Raspberry Pi, so that modern M.2 SSD storage devices could be directly on the board without additional bulky USB to SATA adapters.
Testing
Whilst reliability is something that moving away from micro SD cards brings, testing this isn’t really practical, so instead I’m focusing on the performance gains expected from being able to use USB 3.0 mass storage devices. Performance is assessed using:
- Storage performance throughout tests using
microsd-benchmarks.sh
from pidramble.com benchmarking tests.-
dd
to write 50,000 8k blocks ~ 400MB. This is a simple sequential read/write test, of a sufficient size that the OS won’t just cache the data but will write it out to the storage device iozone
(version 3.434) 4k random read/write. This small block size represents common operations such as logging and database actions.- Note: The above tests are run 3 times and the results averaged
-
- Time-based measurements for:
- Rebooting the Raspberry Pi from within a desktop session, until the desktop (3440×1440) is loaded and the wastebasket is shown.
- Pi is connected to WiFi and Ethernet. It also has SSH and VNC enabled.
- Application load times for:
- Chromium
- LibreOffice Calc
- LibreOffice Impress
- Compilation of Linux kernel image
make -j4 zImage modules dtbs
- Rebooting the Raspberry Pi from within a desktop session, until the desktop (3440×1440) is loaded and the wastebasket is shown.
Initial tests with the MicroSD Card are performed with the current release firmware, then repeated with the new STABLE bootloader firmware, ahead of testing USB 3 mass storage boot devices. The contents of the SD card were copied to the USB flash drive and SSD using the SD Card Copier utility on the Raspberry Pi Desktop.
Once the bootloader is updated the Pi will boot from a USB device first, it present. But to ensure the SD card wasn’t being used in error it was removed whilst testing the USB connected storage.
Test Devices
As can be seen from the extensive results collated on the Raspberry Pi Dramble microSD Card Benchmark page, microSD card performance is very variable even across devices in the same class. USB 3.0 flash drives (USB thumb drives, or whatever you want to call them) similarly vary significantly in performance. To establish the performance and select the best device for testing the devices were initially performance tested on my Windows PC using CrystalDiskMark 64bit with 1 GiB test file. Note, I didn’t buy any new devices for this testing, it was just what I had to hand.
Testing the performance of the Samsung SSD I had available using a USB to SATA adapter showed significantly higher performance than any of the USB flash drives.
The following devices were selected for the tests:
- MicroSD: Samsung Pro Plus 32GB
- USB3 Flash Drive: SanDisk Extreme USB 3.0 16GB
- USB to SATA Adapter: Sabrent USB 3.1 to SATA
- SSD: Samsung 120GB (MZ-7PA1280/0D1) – This is a fairly old SSD
Results
Release firmware: a5e1b95f320810c69441557c5f5f0a7f2460dfb8 (Apr 16 2020 18:11:26)
Stable firmware: c302dea096cc79f102cec12aeeb51abf392bd781 (Jun 15 2020 14:36:19)
Test: dd write 50,000 8k blocks
Test: iozone
Test: Raspberry Pi 4 Reboot Time
Test: Application Start Time
Test: Compile Kernel Image Time
Conclusions
- The new STABLE firmware (15 June 2020) performs the same (within the margin of error) as the current Release bootloader firmware (16 April 2020)
- USB3 connected devices provide access to greater storage performance should you need it.
- First time activities, such as application load, compiling the kernel can benefit from the improved performance of USB3 storage devices. However subsequent repeated activity doesn’t benefit, due to file system caching.
- Whilst other post and videos I’ve seen indicate no change in booting performance, my reboot testing did show a significant gain, with times reduced by around 10 seconds.
- If the workload on your Raspberry Pi performs heavy random read/write IO then this is where access to fast SSD storage can really bring some benefits.
- HIgher performance might be available with the latest USB flash drives and SSD, but the gains provided with even quite old storage can clearly be seen.
Parts Tested
- Raspberry Pi 4 – 2GB Version (Amazon) (Pimoroni) (The Pi Hut) (Seeed)
- Argon40 NEO Raspberry Pi 4 case (Amazon) (The Pi Hut) (Seeed) (Argon40)
- Storage Devices:
- SanDisk Extreme USB 3.0 16GB (old)
- Samsung Pro Plus 32GB (Amazon UK)
- Samsung 120GB SSD (old)
- Sabrent USB 3.1 USB 3.0 to SATA Adapter (Amazon)