Raspberry Piを快適に使えるUSBストレージはどれだ選手権
はじめに
Raspberry Pi はOSが書き込まれたmicroSDカードを挿して電源を入れるだけでLinux環境が上がってくるというお手軽にもほどがあるシングルボードコンピュータだが
これを簡易サーバとして使うとなったとき、ストレージがmicroSDなのは少々不安があったので、USBブートで使うこととした。
で、実際どのタイプのストレージが速いのかチェックしてみることにした。
環境
- Minisforum DMAF5 (Ryzen 5 3550H/Windows 11)
- Raspberry Pi 4B (4GB)
※Raspberry Pi にある程度新しいファームウェア(2020年12月版以降?)が導入されていれば、すでにUSBブートができる環境にあるため何もしなくてもよい。
もし非対応の古いファームウェアで動作していた場合は、アップデートが必要になる。(手順は割愛)
テスト対象ストレージ
メーカー・品番 | 容量 | フォームファクタ | Seq.Read | Seq.Write |
---|---|---|---|---|
ESSENCORE K032GUSD6U1-CA | 32GB | microSD Class10 U1 V10 A2 | 100MB/s | N/A |
Seagate ST1000LM048 | 1000GB | 2.5in 5.4krpm SATA HDD | 140MB/s | N/A |
ADATA ASU650SS-120GT | 120GB | 2.5in SATA SSD | 520MB/s | 450MB/s |
Patriot P300P128GM28 | 128GB | M.2 2280 NVMe SSD | 1,600MB/s | 600MB/s |
(転送速度は公称値)
また、それぞれのストレージについて下記の装置を使用してUSBに変換した。
(microSDをRaspberry Piで使用する際は変換なし)
メーカー・品番 | IN | OUT | Bridge |
---|---|---|---|
BUFFALO BSCR27U3 | SD or microSD | USB3.0 | ? |
SABRENT EC-SSHD | SATA | USB3.1 Gen1 | JMicon JMS578? |
ELUTENG M.2 USB アダプター | NGFF or NVMe | USB3.1 Gen2 | Realtek RTL9210B |
ベンチマーク
CrystalDiskMark (Windows)
CrystalDiskMark 8.0.4 x64、Windows 11 環境下で測定。
各ストレージはexFATでフォーマットした。
ESSENCORE K032GUSD6U1-CA w/ BUFFALO BSCR27U3
ちょっといいmicroSDカードと一般的なカードリーダーの組み合わせ。
シーケンシャルはほぼ公称通りの速度が出ている。ランダムアクセスについても善戦。
CrystalDiskMark Output
------------------------------------------------------------------------------
CrystalDiskMark 8.0.4 x64 (C) 2007-2021 hiyohiyo
Crystal Dew World: https://crystalmark.info/
------------------------------------------------------------------------------
* MB/s = 1,000,000 bytes/s [SATA/600 = 600,000,000 bytes/s]
* KB = 1000 bytes, KiB = 1024 bytes
[Read]
SEQ 1MiB (Q= 8, T= 1): 97.460 MB/s [ 92.9 IOPS] < 85207.32 us>
SEQ 1MiB (Q= 1, T= 1): 95.842 MB/s [ 91.4 IOPS] < 10920.95 us>
RND 4KiB (Q= 32, T= 1): 11.320 MB/s [ 2763.7 IOPS] < 11556.83 us>
RND 4KiB (Q= 1, T= 1): 9.891 MB/s [ 2414.8 IOPS] < 412.97 us>
[Write]
SEQ 1MiB (Q= 8, T= 1): 31.884 MB/s [ 30.4 IOPS] <248676.70 us>
SEQ 1MiB (Q= 1, T= 1): 31.877 MB/s [ 30.4 IOPS] < 32822.89 us>
RND 4KiB (Q= 32, T= 1): 5.290 MB/s [ 1291.5 IOPS] < 24697.43 us>
RND 4KiB (Q= 1, T= 1): 5.081 MB/s [ 1240.5 IOPS] < 804.00 us>
Profile: Default
Test: 1 GiB (x5) [E: 0% (0/931GiB)]
Mode: [Admin]
Time: Measure 5 sec / Interval 5 sec
Date: 2023/02/04 8:55:54
OS: Windows 11 Professional [10.0 Build 22621] (x64)
Comment: ESSENCORE K032GUSD6U1-CA w/ BUFFALO BSCR27U3
SEAGATE ST1000LM048 w/ SABRENT EC-SSHD
エントリーモデルのSATA-HDDと安価なSATA-USB変換ケーブルの組み合わせ。
シーケンシャルは速度が出るが、ランダムに難ありという低回転HDDらしい結果となった。
CrystalDiskMark Output
------------------------------------------------------------------------------
CrystalDiskMark 8.0.4 x64 (C) 2007-2021 hiyohiyo
Crystal Dew World: https://crystalmark.info/
------------------------------------------------------------------------------
* MB/s = 1,000,000 bytes/s [SATA/600 = 600,000,000 bytes/s]
* KB = 1000 bytes, KiB = 1024 bytes
[Read]
SEQ 1MiB (Q= 8, T= 1): 136.838 MB/s [ 130.5 IOPS] < 60833.38 us>
SEQ 1MiB (Q= 1, T= 1): 134.773 MB/s [ 128.5 IOPS] < 7765.02 us>
RND 4KiB (Q= 32, T= 1): 1.294 MB/s [ 315.9 IOPS] < 98935.41 us>
RND 4KiB (Q= 1, T= 1): 0.526 MB/s [ 128.4 IOPS] < 7765.47 us>
[Write]
SEQ 1MiB (Q= 8, T= 1): 135.377 MB/s [ 129.1 IOPS] < 61408.44 us>
SEQ 1MiB (Q= 1, T= 1): 135.203 MB/s [ 128.9 IOPS] < 7738.65 us>
RND 4KiB (Q= 32, T= 1): 1.559 MB/s [ 380.6 IOPS] < 83332.79 us>
RND 4KiB (Q= 1, T= 1): 1.571 MB/s [ 383.5 IOPS] < 2602.15 us>
Profile: Default
Test: 1 GiB (x5) [E: 0% (0/931GiB)]
Mode: [Admin]
Time: Measure 5 sec / Interval 5 sec
Date: 2023/02/04 8:46:06
OS: Windows 11 Professional [10.0 Build 22621] (x64)
Comment: SEAGATE ST1000LM048 w/ SABRENT EC-SSHD
ADATA ASU650SS-120GT w/ SABRENT EC-SSHD
エントリーモデルのSATA-SSDと安価なSATA-USB変換ケーブルの組み合わせ。
公称値までは届かないが、ランダムアクセス性能も良好。
CrystalDiskMark Output
------------------------------------------------------------------------------
CrystalDiskMark 8.0.4 x64 (C) 2007-2021 hiyohiyo
Crystal Dew World: https://crystalmark.info/
------------------------------------------------------------------------------
* MB/s = 1,000,000 bytes/s [SATA/600 = 600,000,000 bytes/s]
* KB = 1000 bytes, KiB = 1024 bytes
[Read]
SEQ 1MiB (Q= 8, T= 1): 423.096 MB/s [ 403.5 IOPS] < 19759.85 us>
SEQ 1MiB (Q= 1, T= 1): 309.827 MB/s [ 295.5 IOPS] < 3380.75 us>
RND 4KiB (Q= 32, T= 1): 76.235 MB/s [ 18612.1 IOPS] < 1663.01 us>
RND 4KiB (Q= 1, T= 1): 22.738 MB/s [ 5551.3 IOPS] < 179.37 us>
[Write]
SEQ 1MiB (Q= 8, T= 1): 360.256 MB/s [ 343.6 IOPS] < 23163.01 us>
SEQ 1MiB (Q= 1, T= 1): 323.001 MB/s [ 308.0 IOPS] < 3242.43 us>
RND 4KiB (Q= 32, T= 1): 68.622 MB/s [ 16753.4 IOPS] < 1847.73 us>
RND 4KiB (Q= 1, T= 1): 32.093 MB/s [ 7835.2 IOPS] < 126.95 us>
Profile: Default
Test: 1 GiB (x5) [E: 0% (0/112GiB)]
Mode: [Admin]
Time: Measure 5 sec / Interval 5 sec
Date: 2023/02/04 9:05:17
OS: Windows 11 Professional [10.0 Build 22621] (x64)
Comment: ADATA ASU650SS-120GT w/ SABRENT EC-SSHD
Patriot P300P128GM28 w/ ELUTENG M.2 USB アダプター
エントリーモデルのNVMe SSDと、安価なNVMe-USB変換コネクタの組み合わせ。
さすがにフルスピードは出ないが十分高速で、ランダムアクセス性能も良好。
CrystalDiskMark Output
------------------------------------------------------------------------------
CrystalDiskMark 8.0.4 x64 (C) 2007-2021 hiyohiyo
Crystal Dew World: https://crystalmark.info/
------------------------------------------------------------------------------
* MB/s = 1,000,000 bytes/s [SATA/600 = 600,000,000 bytes/s]
* KB = 1000 bytes, KiB = 1024 bytes
[Read]
SEQ 1MiB (Q= 8, T= 1): 960.665 MB/s [ 916.2 IOPS] < 8708.59 us>
SEQ 1MiB (Q= 1, T= 1): 826.065 MB/s [ 787.8 IOPS] < 1267.69 us>
RND 4KiB (Q= 32, T= 1): 77.210 MB/s [ 18850.1 IOPS] < 1641.84 us>
RND 4KiB (Q= 1, T= 1): 29.517 MB/s [ 7206.3 IOPS] < 138.07 us>
[Write]
SEQ 1MiB (Q= 8, T= 1): 683.108 MB/s [ 651.5 IOPS] < 12216.02 us>
SEQ 1MiB (Q= 1, T= 1): 674.208 MB/s [ 643.0 IOPS] < 1552.43 us>
RND 4KiB (Q= 32, T= 1): 70.388 MB/s [ 17184.6 IOPS] < 1800.94 us>
RND 4KiB (Q= 1, T= 1): 30.834 MB/s [ 7527.8 IOPS] < 132.19 us>
Profile: Default
Test: 1 GiB (x5) [E: 0% (0/112GiB)]
Mode: [Admin]
Time: Measure 5 sec / Interval 5 sec
Date: 2023/02/04 9:15:10
OS: Windows 11 Professional [10.0 Build 22621] (x64)
Comment: Patriot P300P128GM28 w/ ELUTENG M.2 USB アダプター
hdparm
microSDカードで起動したRaspberry Pi OSより測定。
Raspberry Pi 4BのUSB3ポートに接続し、ext4でフォーマット。
ESSENCORE K032GUSD6U1-CA w/ BUFFALO BSCR27U3
VID/PID: 05e3:0749 Genesys Logic, Inc. SD Card Reader and Writer
Attempt | Cached read | Buffered read |
---|---|---|
1 | 736.89MB/s | 85.94MB/s |
2 | 698.09MB/s | 83.88MB/s |
3 | 694.94MB/s | 83.52MB/s |
4 | 740.06MB/s | 80.47MB/s |
5 | 740.77MB/s | 82.77MB/s |
Average (Cached): 722.15MB/s
Average (Buffered): 83.32MB/s
SEAGATE ST1000LM048 w/ SABRENT EC-SSHD
VID/PID: 152d:0576 JMicron Technology Corp. / JMicron USA Technology Corp. Gen1 SATA 6Gb/s Bridge
Attempt | Cached read | Buffered read |
---|---|---|
1 | 706.96MB/s | 124.01MB/s |
2 | 728.09MB/s | 124.86MB/s |
3 | 687.79MB/s | 124.52MB/s |
4 | 698.62MB/s | 123.84MB/s |
5 | 689.98MB/s | 124.83MB/s |
Average (Cached): 702.29MB/s
Average (Buffered): 124.41MB/s
ADATA ASU650SS-120GT w/ SABRENT EC-SSHD
VID/PID: 152d:0576 JMicron Technology Corp. / JMicron USA Technology Corp. Gen1 SATA 6Gb/s Bridge
Attempt | Cached read | Buffered read |
---|---|---|
1 | 699.36MB/s | 297.63MB/s |
2 | 688.14MB/s | 299.70MB/s |
3 | 684.15MB/s | 303.00MB/s |
4 | 726.57MB/s | 300.04MB/s |
5 | 562.15MB/s | 303.64MB/s |
Average (Cached): 672.07MB/s
Average (Buffered): 300.8MB/s
Patriot P300P128GM28 w/ ELUTENG M.2 USB アダプター
VID/PID: 0bda:0031 Realtek Semiconductor Corp. 31
Attempt | Cached read | Buffered read |
---|---|---|
1 | 713.17MB/s | 234.39MB/s |
2 | 704.63MB/s | 228.71MB/s |
3 | 702.85MB/s | 228.02MB/s |
4 | 710.89MB/s | 232.11MB/s |
5 | 707.22MB/s | 223.49MB/s |
Average (Cached): 707.75MB/s
Average (Buffered): 229.34MB/s
gnome-disks (Linux)
microSDカードで起動したRaspberry Pi OSより測定。
ESSENCORE K032GUSD6U1-CA w/ BUFFALO BSCR27U3
SEAGATE ST1000LM048 w/ SABRENT EC-SS
ADATA ASU650SS-120GT w/ SABRENT EC-SSHD
Patriot P300P128GM28 w/ ELUTENG M.2 USB アダプター
Raspberry Pi OS起動速度
各ストレージにRaspberry Pi OSを書き込み、直接ブートさせた。
電源投入からRaspberry Pi OSのメニューバーが表示されるまでの時間をストップウォッチ(目視)で記録した。
ESSENCORE K032GUSD6U1-CA
本体のmicroSDスロットに直接挿入して起動させている。
Attempt | Time |
---|---|
1 | 30.88Sec |
2 | 31.20Sec |
3 | 31.02Sec |
4 | 31.07Sec |
5 | 30.89Sec |
Average: 31.01Sec
SEAGATE ST1000LM048 w/ SABRENT EC-SSHD
Attempt | Time |
---|---|
1 | 44.56Sec |
2 | 43.36Sec |
3 | 48.67Sec |
4 | 47.82Sec |
5 | 47.77Sec |
Average: 46.44Sec
ADATA ASU650SS-120GT w/ SABRENT EC-SSHD
Attempt | Time |
---|---|
1 | 28.03Sec |
2 | 27.49Sec |
3 | 27.67Sec |
4 | 27.70Sec |
5 | 27.72Sec |
Average: 27.72Sec
Patriot P300P128GM28 w/ ELUTENG M.2 USB アダプター
Attempt | Time |
---|---|
1 | 27.96Sec |
2 | 27.41Sec |
3 | 27.96Sec |
4 | 27.43Sec |
5 | 28.05Sec |
Average: 27.76Sec
Raspberry Pi と UAS (USB Attached SCSI)
接続されたUSBストレージデバイスがUASに対応している場合、マスストレージドライバではなく標準SCSIコマンドでデータ転送をすることにより、高速に読み書きを行うことができる。
ただし、ストレージデバイス側のUAS対応が不十分もしくは不具合がある場合、データの読み書きが極端に遅くなったり、デバイスが接続・切断を繰り返したり、結果的にデータの損失を引き起こしたりする可能性があり、常用するのは厳しいと言える。
UAS対応デバイスは、従来のUSBマスストレージクラスにフォールバックできることが仕様として定められており、一般的にUSBマスストレージクラスの方が安定して動作するとされている。(ただし、データの読み書き速度はUASを使う場合に比べ低下する)
もしRaspberry Pi にてそのような状況に遭遇した場合は、/boot/cmdline.txt
に特定デバイスをフォールバックするよう指定してやる必要がある。
今回のテストでは、先に外付けデバイスとして接続テストを行うことによって実際にフォールバックが必要か判断できるよう工夫した。
(ベンチマーク結果が異様に遅かったり、デバイスが正常に認識できない場合は、デバイス側のUASに問題がある可能性を考慮に入れることができる)
今回は、幸いにしてフォールバックせざるを得ないデバイスに遭遇することはなかった。
総評(という名の感想)
- テストした限りでは、SATA SSDが最も高速だった。僅差でMVMe SSD、続いてmicroSD、最も遅いのは5400rpm HDDであった。
半導体ストレージの強みはランダムアクセスに強いところであり、今回のテスト内容ではそれが顕著に表れた形となった。 - 正直NVMe SSDの一人勝ちだと思っていたが、USB変換が噛んでいるせいか、あるいはRaspberry Pi側のUSBコントローラの問題か、性能を十分発揮できなかったようだ。
結果的にSATA SSDと同等、もしくは劣るパフォーマンスとなった。 - Raspberry Piにおいて、もうちょっとマシなディスクパフォーマンスの評価方法や基準があれば教えてほしい。
Discussion