Adventures with a Raspberry Pi 4 Model B, some hard drives and some Chinese circuit boards.
The Raspberry Pi 4 Model B contains two USB 3.0 ports, something that previous versions did not. This upgrade finally opens up storage array possibilities as the RPi still has no SATA connections. USB 3.0 has a theoretical max transfer rate of 5 Gbps which translates to roughly 640 MBps. This brings it close to SATA 3’s 6.0 Gbps theoretical transfer rate; however, it’s not likely any of these “max” rates will be achievable, especially by a Raspberry Pi. That being said, we can give it the good ol fashioned college dropout try!
Next, lets talk about fancy extras. The Suptronics boards are not necessary at all. You can easily plug two HDD/SDD’s into the two available USB3.0 ports on the Raspberry Pi 4, but for sake of modularity and my desire to 3D print modular enclosures, I bought two expansion boards from Suptronics.
The Suptronics X822 allows you to mount two 2.5″ HDD/SDDs via SATA connections and then converts them over to USB3.0. It also allows you to power the entire rig right from the DC jack which power the Pi via a jumper wire. [Documentation]
The Suptronics X735 is a “smart” power and cooling expansion board that senses the temps and adjusts the speed. It is also claimed to be able to safely shut down the RPi running Raspbian with a 3-7 second depression of the button. [Documentation]
Heads up!
The Suptronics X822’s upstream USB3.0 jumper does NOT work on the Raspberry Pi 4 Model B as the ports were rearranged (I didn’t even realize this until I tried to plug them in). What you will find is that the USB jumper now plugs into one of the expansion USB3.0 ports on the X822. This sucks for the compactness of the whole thing. Not sure how this even happened as prior RPi models didn’t even have USB3.0.
What does this mean? Well, you can still use the board, but you’re going to have to use a cable to jump the upstream port on the X822 to the RPi 4. So much for the slim design.
A Raspberry Pi 3 with the X822 & X735 A Raspberry Pi 4 with X822 & X735
Anyways…
This page will serve as a record of testing for various types of hard drives and methods in which the hard drives are interfaced. It will continue to be updated as I test.
That being said, here is the current configuration
- Raspberry Pi 4 Model B
- SAMSUNG E 32GB EVO+ MSD CL10 U1
- Suptronics X822 Dual 2.5″ SATA HDD/SSD Shield USB 3.0 Expansion Board
- Suptronics X735 Power Management & Auto Cooling Expansion Board (Not really necessary but it’s cool right?)
- SEAGATE BARRACUDA 1TB 2.5″ 5400RPM
- SEAGATE BARRACUDA 1TB 2.5″ 7200RPM
Raspberry Pi 4 Storage Benchmark Testing
Samsung EVO+ CL10 U1 (microSD)
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.429 $
Compiled for 32 bit mode.
Build: linux
Run began: Sat Nov 23 05:40:25 2019
Include fsync in write timing
O_DIRECT feature enabled
Auto Mode
File size set to 102400 kB
Record Size 4 kB
Record Size 16 kB
Record Size 512 kB
Record Size 1024 kB
Record Size 16384 kB
Command line used: iozone -e -I -a -s 100M -r 4k -r 16k -r 512k -r 1024k -r 16384k -i 0 -i 1 -i 2
Output is in kBytes/sec
Time Resolution = 0.000001 seconds.
Processor cache size set to 1024 kBytes.
Processor cache line size set to 32 bytes.
File stride size set to 17 * record size.
random random bkwd record stride
kB reclen write rewrite read reread read write read rewrite read fwrite frewrite fread freread
102400 4 3426 2943 9560 9568 9679 2658
102400 16 14230 15581 20079 20053 20004 13807
102400 512 22279 22949 38963 38930 38929 23317
102400 1024 22828 23025 39040 39020 39012 17798
102400 16384 24746 24769 44180 44083 44134 24862
iozone test complete.
USB 3.0: Seagate Barracuda 1TB 5400RPM (2.5″ Internal HDD)
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.429 $
Compiled for 32 bit mode.
Build: linux
Run began: Sat Nov 23 14:27:14 2019
Include fsync in write timing
O_DIRECT feature enabled
Auto Mode
File size set to 102400 kB
Record Size 4 kB
Record Size 16 kB
Record Size 512 kB
Record Size 1024 kB
Record Size 16384 kB
Command line used: iozone -e -I -a -s 100M -r 4k -r 16k -r 512k -r 1024k -r 16384k -i 0 -i 1 -i 2
Output is in kBytes/sec
Time Resolution = 0.000001 seconds.
Processor cache size set to 1024 kBytes.
Processor cache line size set to 32 bytes.
File stride size set to 17 * record size.
random random bkwd record stride
kB reclen write rewrite read reread read write read rewrite read fwrite frewrite fread freread
102400 4 11151 13172 14929 15032 2016 1768
102400 16 41015 45008 46139 47657 7158 6853
102400 512 99346 101355 121738 127505 45954 77901
102400 1024 109938 111060 123744 128825 60772 90006
102400 16384 110876 111036 121348 127312 103544 83364
iozone test complete.
USB 3.0: Seagate Barracuda 1TB 7200RPM (2.5″ Internal HDD)
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.429 $
Compiled for 32 bit mode.
Build: linux
Run began: Sat Nov 23 17:27:57 2019
Include fsync in write timing
O_DIRECT feature enabled
Auto Mode
File size set to 102400 kB
Record Size 4 kB
Record Size 16 kB
Record Size 512 kB
Record Size 1024 kB
Record Size 16384 kB
Command line used: iozone -e -I -a -s 100M -r 4k -r 16k -r 512k -r 1024k -r 16384k -i 0 -i 1 -i 2
Output is in kBytes/sec
Time Resolution = 0.000001 seconds.
Processor cache size set to 1024 kBytes.
Processor cache line size set to 32 bytes.
File stride size set to 17 * record size.
random random bkwd record stride
kB reclen write rewrite read reread read write read rewrite read fwrite frewrite fread freread
102400 4 8837 11103 14885 14764 2006 1695
102400 16 36191 40158 45250 45791 7287 6799
102400 512 95890 97159 117716 114139 54371 84232
102400 1024 125403 120640 160471 176793 76717 102263
102400 16384 128367 146876 123975 130077 116287 90703
iozone test complete.
USB3.0: Dual Throughput Test
iozone -l 2 -u 2 -r 16k -s 512M -F seagate_1tb_5400/tmp1 seagate_1tb_7200/tmp2
Iozone: Performance Test of File I/O
Version $Revision: 3.429 $
Compiled for 32 bit mode.
Build: linux
Run began: Sat Nov 23 17:57:44 2019
Record Size 16 kB
File size set to 524288 kB
Command line used: iozone -l 2 -u 2 -r 16k -s 512M -F seagate_1tb_5400/tmp1 seagate_1tb_7200/tmp2
Output is in kBytes/sec
Time Resolution = 0.000001 seconds.
Processor cache size set to 1024 kBytes.
Processor cache line size set to 32 bytes.
File stride size set to 17 * record size.
Min process = 2
Max process = 2
Throughput test with 2 processes
Each process writes a 524288 kByte file in 16 kByte records
Children see throughput for 2 initial writers = 74987.70 kB/sec
Parent sees throughput for 2 initial writers = 69474.19 kB/sec
Min throughput per process = 33863.10 kB/sec
Max throughput per process = 41124.60 kB/sec
Avg throughput per process = 37493.85 kB/sec
Min xfer = 433632.00 kB
Children see throughput for 2 rewriters = 111439.20 kB/sec
Parent sees throughput for 2 rewriters = 95088.92 kB/sec
Min throughput per process = 24268.26 kB/sec
Max throughput per process = 87170.95 kB/sec
Avg throughput per process = 55719.60 kB/sec
Min xfer = 146160.00 kB
Children see throughput for 2 readers = 1455151.50 kB/sec
Parent sees throughput for 2 readers = 1238321.19 kB/sec
Min throughput per process = 723034.44 kB/sec
Max throughput per process = 732117.06 kB/sec
Avg throughput per process = 727575.75 kB/sec
Min xfer = 517888.00 kB
Children see throughput for 2 re-readers = 1396920.62 kB/sec
Parent sees throughput for 2 re-readers = 1353991.35 kB/sec
Min throughput per process = 695902.38 kB/sec
Max throughput per process = 701018.25 kB/sec
Avg throughput per process = 698460.31 kB/sec
Min xfer = 520544.00 kB
Children see throughput for 2 reverse readers = 1428006.00 kB/sec
Parent sees throughput for 2 reverse readers = 1381371.10 kB/sec
Min throughput per process = 694481.56 kB/sec
Max throughput per process = 733524.44 kB/sec
Avg throughput per process = 714003.00 kB/sec
Min xfer = 496432.00 kB
Children see throughput for 2 stride readers = 1397709.31 kB/sec
Parent sees throughput for 2 stride readers = 1346960.76 kB/sec
Min throughput per process = 692647.56 kB/sec
Max throughput per process = 705061.75 kB/sec
Avg throughput per process = 698854.66 kB/sec
Min xfer = 515120.00 kB
Children see throughput for 2 random readers = 1465685.56 kB/sec
Parent sees throughput for 2 random readers = 1420616.18 kB/sec
Min throughput per process = 725591.12 kB/sec
Max throughput per process = 740094.44 kB/sec
Avg throughput per process = 732842.78 kB/sec
Min xfer = 514080.00 kB
Children see throughput for 2 mixed workload = 886457.75 kB/sec
Parent sees throughput for 2 mixed workload = 33919.33 kB/sec
Min throughput per process = 162551.88 kB/sec
Max throughput per process = 723905.88 kB/sec
Avg throughput per process = 443228.88 kB/sec
Min xfer = 118032.00 kB
Children see throughput for 2 random writers = 37976.40 kB/sec
Parent sees throughput for 2 random writers = 22049.72 kB/sec
Min throughput per process = 13265.16 kB/sec
Max throughput per process = 24711.24 kB/sec
Avg throughput per process = 18988.20 kB/sec
Min xfer = 308112.00 kB
Children see throughput for 2 pwrite writers = 121606.70 kB/sec
Parent sees throughput for 2 pwrite writers = 50090.20 kB/sec
Min throughput per process = 14648.29 kB/sec
Max throughput per process = 106958.41 kB/sec
Avg throughput per process = 60803.35 kB/sec
Min xfer = 87088.00 kB
Children see throughput for 2 pread readers = 1453561.12 kB/sec
Parent sees throughput for 2 pread readers = 1228371.57 kB/sec
Min throughput per process = 726303.50 kB/sec
Max throughput per process = 727257.62 kB/sec
Avg throughput per process = 726780.56 kB/sec
Min xfer = 523632.00 kB
Children see throughput for 2 fwriters = 140499.27 kB/sec
Parent sees throughput for 2 fwriters = 91076.68 kB/sec
Min throughput per process = 47766.55 kB/sec
Max throughput per process = 92732.72 kB/sec
Avg throughput per process = 70249.63 kB/sec
Min xfer = 524288.00 kB
Children see throughput for 2 freaders = 1438866.69 kB/sec
Parent sees throughput for 2 freaders = 1425883.16 kB/sec
Min throughput per process = 714025.19 kB/sec
Max throughput per process = 724841.50 kB/sec
Avg throughput per process = 719433.34 kB/sec
Min xfer = 524288.00 kB
iozone test complete.