見出し画像

Raspberry Pi 5をSSDで高速化する

オリジナルの記事が長くなってしまったので、SSDで高速化する話は別の記事として切り出しました。元々の記事はコチラ↓

RasPiの動作がモッサリしているのは、microSDのI/Oが遅いのが一因です。このストレージをより高速なものに交換することで、RasPiの動作を高速化することができます。


USBとNVMe

microSDに代わるストレージとして、RasPi5ではUSB SSDとNVMe SSDが利用できます。

USB SSD

RasPi4から、新しめのファームウェアを導入することでUSBブートが可能となりました。USB 3.0対応のSSDにRaspberry Pi OSを焼くことで、かなりの高速化ができます。

USB SSDですが、USBメモリに似たドングル型のモデルが各メーカから発売されています。私の一押しは、外形が非常に小さくUSBポートに干渉しないバッファローのSSD-PSTU3Aシリーズです (トップ画像中央下)。

これ以外のモデルの場合、隣接するUSBポートに干渉してしまい、キーボードを繋ぐのにも一苦労するばかりか、干渉したまま差し込むとUSBポート (ひいてはRasPi本体) の故障の原因となる可能性があります。

NVMe SSD

RasPi5からPCIeポートが追加され、NVMe SSDから起動できるようになりました。HAT (外付けのボード) にフラットケーブルで接続して利用します。現時点では公式のNVMe HATは発売されておらず、サードパーティのボードを利用することになります。

皆さんご存知、RasPiの通販でお馴染のPimoroniからは、2230~2280サイズのNVMe SSDに対応したベースボードが発売されています (トップ画像左側)。RasPiの下部に接続するタイプで、公式ケースには納まらず、このベースボードに対応したケースも発売されていません。

RasPiのヒートシンクやケースなどを発売しているGeekwormからは数種類のNMVeボードが発売されており、公式ケースに納まるタイプのボード (X1003) もあります (トップ画像右側)。ただし、このX1003は実質2242専用です (2230も一応使えます)。

2280サイズに対応したNVMeボードを試したいのであれば、Geekwormオリジナルのケースも対応したX1001などを選択するのがよいと思います (ページ最下部のケース入り画像) 。


導入手順

基本的にはUSBもNVMeも同じです。ここではmicroSDで起動しているRasPi5があるものとして話を進めます。

SSDを接続

USB SSDの場合はSSDをUSB 3.0ポートに接続します。NVMe SSDの場合はボードのマニュアルに従ってボードとNVMe SSDをRasPi5に組み込みます。NVMeの接続前にはRasPi5の電源が接続されていない (電源コードが抜けている) ことを必ず確認しましょう。

RasPi5の更新

RasPi5を起動したら、最新の状態に更新します。

$ sudo apt update; sudo apt -y upgrade

RasPi5本体のファームウェアを更新します。

$ sudo rpi-eeprom-update -a

RasPi5本体のブート順をUSB/NVMe優先に設定します。

$ sudo raspi-config

Advanced Options -> Boot Order -> NVMe/USBと選択し、Finishを選択したらRasPi5を再起動します。

OSインストール

Imagerを起動し、Raspberry Pi OSをSSDに焼きます。デバイスは「Raspberry Pi 5」、OSは「Raspberry Pi OS (64bit)」、ターゲットは接続したSSDに合わせて選択します。一般的に、USB SSDは/dev/sda、NVMe SSDは/dev/nvme0n1のように表示されます。この時、ターゲット選択のダイアログが空欄になる場合はSSDが適切に認識されていません。

NVMeの場合のみ必要な作業

この節の作業は、NVMe SSDの場合のみ必要です。USB SSDの場合は電源off・再起動の節まで読み飛ばして下さい。

OSを焼き終えたら、SSDのbootfsをマウントします。ここではマウントポイントとしてホームディレクトリ直下にmntディレクトリを作成しています。NVMe SSDのbootfsは/dev/nvme0n1p1です;

$ mkdir ~/mnt
$ sudo mount /dev/nvme0n1p1 ~/mnt

起動設定ファイルの末尾に設定を追加します。ここではechoコマンドで追記していますが、nanoやviを使ってもOKです。

$ sudo echo 'dtparam=pciex1' >> ~/mnt/config.txt

デフォルトのPCIe 2.0ではなく高速なPCIe 3.0としての動作を強制したい場合は、さらに以下の記述を追加します。ただし、動作が不安定になる可能性があり、現時点では非推奨のようです。

$ sudo echo 'dtparam=pciex1_gen=3' >> ~/mnt/config.txt

設定が済んだら念の為にちゃんと追記されているか確認しておきましょう。

$ tail -n 2 ~/mnt/config.txt

末尾に上記の設定が追記されていればOKです。SSDをアンマウントします。

$ sudo umount ~/mnt
$ rmdir ~/mnt

電源off・再起動

RasPi5の電源を落とし、microSDを抜き取ったら改めて起動します。この時、パーティションの拡張などの初期設定を行うため、自動的に何度か再起動します。その後、RasPi5のデスクトップ画面が表示されれば完了です。おそらくデフォルトの英語表示になっていると思います。

tips

tipsについては別記事を作成しました。


注意点など

フラットケーブル

NVMeボードとPCIeポートを接続するフラットケーブルに差し込む向きが指定されている場合は、その通りに正しく接続しましょう。表裏だけでなく、PCIeポート (RasPi5) 側とNVMeボード側とを逆に接続すると、RasPiからSSDが認識されません。逆向きに接続しても通電するため気付きにくいですが注意が必要です。

ファームウェアの更新 (rpi-eeprom-update)

この記事ではapt upgrade後にrpi-eeprom-updateでファームウェアを更新していますが、この手順では厳密には最新版になりません。この状態でもそれなりに新しいファームウェアに更新されて問題なく動作しているのでこの記述にしていますが、PimoroniのGetting startedではraspi-configのAdvanced Options -> Bootloader -> Latestと選択することになっています。こちらの手順を行うことで最新版のファームウェアに更新されます。

ブート順の設定 (raspi-config)

ブート順の変更をraspi-configを使うのではなくファイル編集で行っている解説サイトもあるようです。ファイル編集でミスする可能性もあるので、ここではraspi-configで済ませています。

ImagerとCopier

OSを焼く際にImagerではなくSD Card Copierを利用している解説サイトもあります。コピー元とコピー先のストレージの容量が違う時の挙動や、OSインストール後 (初回起動時) のパーティションの拡張がどうなるかを私が把握していないので、ここではImagerでクリーンインストールしています。

RasPiのフォーラムを見ると、SD Card Copierは自動的にパーティションを拡張してくれるようなことが書いてありますので、問題なく起動できているmicroSDがあるのであれば、ImagerではなくSD Card Copierを利用するのもいいと思います。

ファイル編集

echoでconfig.txtに追記する時は > (上書き) すると悲惨なことになるので、必ず >> (追記) を使いましょう。rootfs上の/boot/config.txtはsymlinkで、実体はbootfsにあるconfig.txtです。ここでは~/mntにマウントしていますので、~/mnt/config.txtとなります。

技適

この無線設備は、電波法に定める技術基準への適合が確認されておらず、法に定める特別な条件の下でのみ使用が認められています。この条件に違反して無線設備を使用することは、法に定める罰則その他の措置の対象となります。


ベンチマーク

簡易的に、RasPiにプリインストールされているRaspberry Pi DiagnosticsでI/Oがどの程度改善されたか計測してみます。

使い古しのmicroSD

比較対象として、使い古しのmicroSDで計測してみました。Amazonで購入したTranscendの64GB, Class10, UHS-I対応のmicroSDです。想定しているI/O性能を満たしていないために3回計測が行われ、テスト結果はFAILEDになっています。

Raspberry Pi Diagnostics - version 0.13
Fri Feb  2 13:37:00 2024

Test : SD Card Speed Test
Run 1
prepare-file;0;0;19533;38
seq-write;0;0;17255;33
rand-4k-write;0;0;1061;265
rand-4k-read;5886;1471;0;0
Sequential write speed 17255 KB/sec (target 10000) - PASS
Random write speed 265 IOPS (target 500) - FAIL
Random read speed 1471 IOPS (target 1500) - FAIL
Run 2
prepare-file;0;0;21874;42
seq-write;0;0;18034;35
rand-4k-write;0;0;1155;288
rand-4k-read;5259;1314;0;0
Sequential write speed 18034 KB/sec (target 10000) - PASS
Random write speed 288 IOPS (target 500) - FAIL
Random read speed 1314 IOPS (target 1500) - FAIL
Run 3
prepare-file;0;0;20641;40
seq-write;0;0;17205;33
rand-4k-write;0;0;1111;277
rand-4k-read;5903;1475;0;0
Sequential write speed 17205 KB/sec (target 10000) - PASS
Random write speed 277 IOPS (target 500) - FAIL
Random read speed 1475 IOPS (target 1500) - FAIL
Test FAIL

新品のmicroSD

これだけではアレなので、新品のmicroSDでも計測することにしました。RasPi界隈では定番のSunDisk Extremeです。UHS-I U3 A1 V30といった各規格に対応し、公称書込最大60MB/sの32GBモデルを選択しました。ちなみに大容量のモデルの方が高速なようです。

Raspberry Pi Diagnostics - version 0.13
Fri Feb  9 19:15:54 2024

Test : SD Card Speed Test
Run 1
prepare-file;0;0;52012;101
seq-write;0;0;52386;102
rand-4k-write;0;0;2759;689
rand-4k-read;15933;3983;0;0
Sequential write speed 52386 KB/sec (target 10000) - PASS
Random write speed 689 IOPS (target 500) - PASS
Random read speed 3983 IOPS (target 1500) - PASS
Test PASS

使い古しのmicroSDの倍以上の性能が出ていることが確認でき、テストもPASSしました。

USB SSD

ここからがメインです。まずはBuffaloの超小型USB SSDであるSSD-PSTU3A 250GBについて計測してみました。Amazonで6,000円ほどで販売されています。

Raspberry Pi Diagnostics - version (unknown)
Wed Nov 29 13:03:46 2023

Test : SD Card Speed Test
Run 1
prepare-file;0;0;397187;775
seq-write;0;0;387786;757
rand-4k-write;0;0;118724;29681
rand-4k-read;30298;7574;0;0
Sequential write speed 387786 KB/sec (target 10000) - PASS
Random write speed 29681 IOPS (target 500) - PASS
Random read speed 7574 IOPS (target 1500) - PASS
Test PASS

NVMe SSD (2280)

次に、Pimoroni NVMe Baseにバンドルされていた2280サイズのKIOXIA 500GB NVMe SSDを接続して測定しました。イギリスからの送料込みでボードとSSDを合わせて8,000円ほどです。

Raspberry Pi Diagnostics - version (unknown)
Tue Jan 16 19:50:51 2024

Test : SD Card Speed Test
Run 1
prepare-file;0;0;394795;771
seq-write;0;0;394795;771
rand-4k-write;0;0;364088;91022
rand-4k-read;196215;49053;0;0
Sequential write speed 394795 KB/sec (target 10000) - PASS
Random write speed 91022 IOPS (target 500) - PASS
Random read speed 49053 IOPS (target 1500) - PASS
Test PASS

NVMe SSD (2242)

Geekworm X1003にAmazonで購入した2242サイズのTranscendの256GB NVMe SSDを接続して測定しました。ボードが中国からの送料込みで4,000円ほど、SSDがAmazonで5,500円です。

Raspberry Pi Diagnostics - version (unknown)
Wed Jan 31 11:28:58 2024

Test : SD Card Speed Test
Run 1
prepare-file;0;0;689852;1347
seq-write;0;0;712347;1391
rand-4k-write;0;0;316599;79149
rand-4k-read;147271;36817;0;0
Sequential write speed 712347 KB/sec (target 10000) - PASS
Random write speed 79149 IOPS (target 500) - PASS
Random read speed 36817 IOPS (target 1500) - PASS
Test PASS

NVMe SSD (2280, DRAMキャッシュあり)

追加でGeekworm 1001に接続したTranscendの512GB, DRAMキャッシュありのNVMe SSDを計測してみました。AmazonでボードとSSDがそれぞれ2,600円と9,000円でした。

Raspberry Pi Diagnostics - version 0.13
Fri Feb  9 20:16:03 2024

Test : SD Card Speed Test
Run 1
prepare-file;0;0;771011;1505
seq-write;0;0;728177;1422
rand-4k-write;0;0;385505;96376
rand-4k-read;233224;58306;0;0
Sequential write speed 728177 KB/sec (target 10000) - PASS
Random write speed 96376 IOPS (target 500) - PASS
Random read speed 58306 IOPS (target 1500) - PASS
Test PASS

比較

使い古しのmicroSDの性能は論外だったので、比較対象から外します。

新品のmicroSDとUSB SSDを比較すると、シーケンシャルライトで7倍、ランダムライトが40倍、ランダムリードで2倍、USB SSDの方がそれぞれ高速です。書き込み性能に大きな差があることが分かります。

USB SSDとNVMe SSDを比較すると、シーケンシャルライトはUSBも遜色ありませんが、ランダムリード/ライトはNVMeが数倍高速です。細かいファイルを読み書きするような日常的な利用ではNVMeが優位ですね。

DRAMキャッシュのないNVMe同士で比較してみると、シーケンシャルライトはTranscendの方が倍の速度を叩き出していますが、ランダムリード/ライトはKIOXIAの方が1~3割ほど高性能なようです。

DRAMキャッシュのあるTranscendのNVMeを、同じTranscendのDRAMキャッシュなしのNVMeと比較してみます。シーケンシャルライトはほぼ同等ですが、ランダムライトで2割、ランダムリードで5割ほど高速です。DRAMキャッシュが効いてない感じがします。


グラフで比較

Linuxらしくgnuplotでグラフ化してみました。使い古しのmicroSDについては3回の平均値を使っています。

シーケンシャルライト

まずはシーケンシャルライトです。KIOXIAのNVMe SSDがUSB SSD並なのがちょっと気になりますが、実用上は問題ない速度だと思います。

シーケンシャルライト

ランダムライト

USB SSDよりNVMe SSDの方が3倍ほど高速であることが分かります。何と言うかmicroSDは比較するのが切なくなる程の遅さ……

ランダムライト

ランダムリード

ランダムライトよりUSB SSDとの差が開いていますね。TranscendのDRAMなしNVMe SSDが若干遅いのが気になりますが、それでもUSB SSDより数倍高速です。

ランダムリード

結論

1万円程度の追加投資を許容してでもRasPi5を高速化して利用したいという方には、SSDの導入は強くおすすめできます。ボトルネックとなっていたI/Oが劇的に改善し、プログラミング学習のPCとしてストレスなく活用できるようになります。

NVMe SSDのDRAMキャッシュの有無については、大きなパフォーマンスの差は確認できませんでした。それでもリード/ライトともに何割かは高速化されていますので、コストよりI/O性能を優先する場合はDRAMキャッシュありのSSDを選択してもよいと思います。

USB SSD

NVMe SSDに比べてI/O性能は劣りますが、microSDと比べれば充分に高速化されます。追加ボードが不要で、かつAmazonで購入できるのがメリットです。手軽に試してみたい場合におすすめできます。また、複数台のRasPi5がある環境をお手軽に行き来できるのも大きなメリットだと思います。

デメリットはUSB 3.0ポートを一つ使うことです。製品によっては外形が大きく他のUSBポートに干渉し、キーボードやマウスすら刺せなくなります。Bluetoothキーボードなどの活用も検討しましょう。

Pimoroni NVMe ボード

NVMe SSDによる高速化の効果は火を見るより明らかです。単体購入よりも、SSDバンドル版の方がコストパフォーマンスに優れています。ボード単体との差額を見ると、250GBが3,000円、500GBが6,000円です。前者は市価のほぼ半額です。

デメリットは、少なくとも現時点ではボードを納められるケースがないことです。ホコリや金属片でショートしたりするリスクがあります。また、RasPi5の下面側に設置されるのでアクティブクーラーによる空冷も効かず、排熱がちょっと心配です。

Geekworm X1003

こちらもNVMe SSDなので劇的に高速化されます。最大のメリットは公式ケースに納まることです。ぱっと見ではSSDを内蔵しているようには見えません。また、アクティブクーラーを塞がず、SSDの排熱も効いていそうです。

デメリットは二点。一つは若干割高なことです。AmazonのGeekwormストアで発売されるようになることで多少は改善かも知れません。もう一つは基板の固定にGPIOの1~6番のピンを使っているため、GPIOの使い勝手が悪くなっています。

Geekworm X1001

こちらはX1003とは異なり、PimoroniのNVMeボードと同様に2280サイズのSSDに対応しています。一方で、Geekwormオリジナルのケースに対応しており、Pimoroniのボードより安心感があります。ボードもケースもAmazonで購入できるのは大きなメリットと言えます。

X1003と同様、デメリットは若干割高な点です。強いてもう一つ挙げれば、2280サイズ以外の穴はタップが切られていないので自前でスペーサーとボルト・ナットを用意する必要がある点でしょうか。

Geekworm X1001ボード + P579ケース

更新履歴

2024/02/09追記: 誤りがあった箇所を修正し、新品のmicroSDとDRAMキャッシュのあるNVMe SSDを追加しました。

2024/02/13追記: 国内でも技適マークの付いたRasPi5が発売されました。注意点の項に技適の特例制度について記載していますが、この記事の作成に利用したRasPi5には技適マークがありませんので、この記述は残しておきます。

2024/02/14追記: グラフを追加しました。更新履歴を記事末尾に移動しました。

この記事が気に入ったらサポートをしてみませんか?