🥧

Raspberry Piを快適に使えるUSBストレージはどれだ選手権

2023/02/04に公開

はじめに

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カードと一般的なカードリーダーの組み合わせ。
シーケンシャルはほぼ公称通りの速度が出ている。ランダムアクセスについても善戦。

ESSENCORE K032GUSD6U1-CA w/ BUFFALO BSCR27U3

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らしい結果となった。

SEAGATE ST1000LM048 w/ SABRENT EC-SSHD

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変換ケーブルの組み合わせ。
公称値までは届かないが、ランダムアクセス性能も良好。

ADATA ASU650SS-120GT w/ SABRENT EC-SSHD

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変換コネクタの組み合わせ。
さすがにフルスピードは出ないが十分高速で、ランダムアクセス性能も良好。

Patriot P300P128GM28 w/ ELUTENG M.2 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

ESSENCORE K032GUSD6U1-CA w/ BUFFALO BSCR27U3

SEAGATE ST1000LM048 w/ SABRENT EC-SS

SEAGATE ST1000LM048 w/ SABRENT EC-SS

ADATA ASU650SS-120GT w/ SABRENT EC-SSHD

ADATA ASU650SS-120GT w/ SABRENT EC-SSHD

Patriot P300P128GM28 w/ ELUTENG M.2 USB アダプター

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に特定デバイスをフォールバックするよう指定してやる必要がある。

https://forums.raspberrypi.com/viewtopic.php?t=245931

今回のテストでは、先に外付けデバイスとして接続テストを行うことによって実際にフォールバックが必要か判断できるよう工夫した。
(ベンチマーク結果が異様に遅かったり、デバイスが正常に認識できない場合は、デバイス側のUASに問題がある可能性を考慮に入れることができる)

今回は、幸いにしてフォールバックせざるを得ないデバイスに遭遇することはなかった。

総評(という名の感想)

  • テストした限りでは、SATA SSDが最も高速だった。僅差でMVMe SSD、続いてmicroSD、最も遅いのは5400rpm HDDであった。
    半導体ストレージの強みはランダムアクセスに強いところであり、今回のテスト内容ではそれが顕著に表れた形となった。
  • 正直NVMe SSDの一人勝ちだと思っていたが、USB変換が噛んでいるせいか、あるいはRaspberry Pi側のUSBコントローラの問題か、性能を十分発揮できなかったようだ。
    結果的にSATA SSDと同等、もしくは劣るパフォーマンスとなった。
  • Raspberry Piにおいて、もうちょっとマシなディスクパフォーマンスの評価方法や基準があれば教えてほしい。

Discussion