NVMeブートとBOOT_ORDER
Raspberry Pi 5では、最初からNVMeブートできるようにEEPROMのBOOT_ORDER
が0xf461
に設定されています。ここで0x6
がNVMeブート用の値となっています。
NVMe用のHATとSSD
今回は、たまたま入手することの出来たGeekworm X1002を使っています。入手できれば、Geekworm X1001でも良いかとは思ったのですが。
搭載するSSDは、KIOXIAの500GBにしてみました。
config.txtの設定
これは追加しなくても大丈夫なのですが、一応次の行を追加します。
dtparam=pciex1
Raspberry Pi OSのコピー
Raspberry Pi 5にHATを接続して、HATにSSDを装填しておきます。
mSDから起動すると、nvme0n1
として認識しています。
$ lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
mmcblk0 179:0 0 58G 0 disk
├─mmcblk0p1 179:1 0 512M 0 part /boot/firmware
└─mmcblk0p2 179:2 0 57.5G 0 part /
nvme0n1 259:0 0 465.8G 0 disk
Raspberry Piメニューの「アクセサリー」から「SD Card Copier」を起動して、現在のmSDの内容をSSDにコピーします。
FromをmSDにして、ToをSSDにします。SSDに作成されるパーティションのUUIDを新しくするために「New Partition UUIDs」にチェックを入れています。
「Start」をクリックして実行して、完了するのを待ちます。
NVMe M.2 SSDからの起動
シャットダウンしてからmSDを取り外して、SSDだけにしてから電源を投入します。
今回は、Raspberry Pi 4用の電源アダプターを使用しているために5V 5A
を供給することが出来なくて、前回のUSBブートと同様にメッセージが表示されて停止します。
***
USB boot requires high current (5 volt 5 amp) power supply.
To disable this check set usb_max_current_enable=1 in config.txt or
press the power button to temporarily enable usb_max_current_enable
and continue booting.
See https://rptl.io/rpi5-power-supply-info for more information
***
このメッセージを止めるためには、Raspberry Pi 5の電源ボタンを押して先に進めます。
起動時に毎回止まるのを防ぐためには、メッセージに表示されているように/boot/firmware/config.txt
ファイルにusb_max_current_enable=1
の行を追加します。
NVMe M.2 SSDから起動した状態では、次の内容になっていました。
$ lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
nvme0n1 259:0 0 465.8G 0 disk
├─nvme0n1p1 259:1 0 512M 0 part /boot/firmware
└─nvme0n1p2 259:2 0 465.3G 0 part /
デバイス名からもNVMeからブートして使用していることが確認できます。
hdparmでのパフォーマンス
やはりUSBブートの場合と同様に、hdparm
コマンドを実行してパフォーマンスを測定してみます。次の内容でコマンドを5回ずつ実行して最高、最低を除いた3回分の値の平均値を取っています。
$ for i in $(seq 5); do sudo hdparm -t /dev/nvme0n1p2; sleep 5; done
平均: 422.13MB/sec
SSDをUSB接続した場合よりは130%程度早くなっています。
ここで、Raspberry Pi 5ではPCI Express 2.0×1として使用することができるようになっています。ところがconfig.txt
ファイルにdtparam=pciex1_gen=3
を追加することでPCI Express 3.0×1としての使用を強制することが出来ます。ただし、公式にサポートされているものではありませんから、動作が不安定になる場合もあるとされています。ここでは、パフォーマンスを見るためにconfig.txt
ファイルに先ほど追加した行にこのdtparam=pciex1_gen=3
を追加してみます。
dtparam=pciex1
dtparam=pciex1_gen=3
この状態で再起動してパフォーマンスを見てみます。先ほどと同様にhdparam
コマンドを実行した平均値です。
平均: 801.04MB/sec
随分と早くなっています。これであれば、色々な用途で使っていくことが出来そうです。
その後
先ほどの、dtparam=pciex1_gen=3
を追加している状態で負荷をかけてみようとしてカーネルのビルドを実行してみました。
ところが、ビルドが完了する前に電力不足(今回はRaspberry Pi 5用の5.1V 5A
ではなく、Raspberry Pi 4用の電源アダプターを使っています)でシステムがビルドの途中で止まってしまいました。
やはりNVMe M.2 SSDは、正式にRaspberry Pi 5に対応した電力を供給できる電源アダプターを入手してから使用することにして、それまではUSB接続のSSDを使うことにしようと思います。