Raspberry Pi Advent Calendar 2024の14日目です。今日はこちらのブログに投稿です。
先月末に発売されたRaspberry Pi Compute Module 5を買ってみたのでレビューしていきます。
最初に言うと、CM5は技適がまだなので、今回は電波暗箱で検証しています。技適未取得機器を用いた実験等の特例制度を申請して検証するのもアリだと思いますが、180日ごとに検証内容を変えてまで、技適マークがつくのをまたずに買うものかどうかは各自で判断が必要そうです。わたしの場合は、暗箱である程度検証が済んだら、無線チップはヒートガンで炙って剥がしてしまおうかと考えています。
Seeedさんでポチポチ
今回は、先に販売ページができてたSeeedさんで購入しました。ついでにSeeed XIAO RP2350が欲しかったのもあります。さらについででUSBハブもポチり。
CM5は、4GB RAM・32GB eMMC・無線ありモデルです。Dev Kitに含まれているのと同モデルのため、これがCM5の標準的なモデルに当たりのではないかと思っています。Pimoroniでは8GB RAMモデルなど別のモデルも展開されていますが、今のところ”無線なし”が売られているところは確認していません。よって、日本では現状は技適がないなりの対応が求められます。
IOボードは、購入時点では売られていなかったので、一旦はCM4のIOボードを流用する方向にしました。
しかし、もう少し待てば、PimoroniからIOボードとかも含めて一式が発売されていたので、焦らないで待てばよかったなあと後悔しました。あと、Seeedからの配送は2週間ほどかかり、Pimoroniで購入した勢の方が先に受け取っていたようなので、それもまた悔しみ。
外観とか
表面は冒頭の画像の通り。右上には、Pi5で登場した容量の表記があります。CM5はeMMCの概念もあるので、列は2つです。16GBはCM5のリリースでも触れられていましたが、シルク印刷は今のところ略されている模様。Pi 5で増えたRP1がどうなるか気になっていましたが、ちゃんと搭載されましたね。このおかげで、CM5でもUSB3.0が標準で使えるようになったのはいい話です。
裏面。CM4と比べると、チップ部品が増えた印象です。そして、部品の斜め配置も少し増えたなと言う感じです。eMMCはこちらに移動しました。CM5ではRP1チップが増えたので、追いやられた感がありますね。認証は、FCCIDとIC、KC IDの3つが見えます。PIPで確認するとFCC、CE、イスラエルとシンガポールしか確認できませんでしたが、KC IDって韓国だったような。
実際にCM4と並べて比較。下がCM5です。上のCM4がLite版なせいもあるとは思いますが、密度が違いますね。
表面もついでに比較。
側面。Pi 5では側面の加工が改善されてバリがなくなりましたが、CM5でも同じく側面がきれいな処理になりました。以前のモデルでは、届いてたらまず紙やすりで側面を削ったりしていましたが、そんな作業とはお別れです。
GbEのトランシーバーチップは、CM4から変わらず、BCM54210PEが採用されています。
無線チップも、RPi-RM0 Cモジュールが搭載されています。じゃあ技適とか問題ないんじゃないのって思うかもしれませんが、アンテナがCM5側にあるため、アンテナと込みで技適の取り直しが必要になると推測されます。これがRM2みたいに、アンテナも込みのモジュールだったら関係なくなるんじゃないかと思うのですが、そうはなってないし、推測の話をしてもしょうがないので忘れます。
ブートローダーEEPROMも、さりげなく裏面に移動していたので、いちおう。
さわるぞ!!
というわけでやっと本編(?)。実際に触っていきます。いつもJAMの開催スペースを提供くださっているミドクラさんから借用中の電波暗箱を活用させていただきました。
箱内の構成は、スイッチサイエンスさんの5A対応電源と、D-Sub9端子経由で有線LANで接続をします。今回使用したのはIOボードはWaveShareのCM4-IO-BASE-Bと、CM4-NANO-Bの2種類。前者はNVMe SSDの接続も含めた検証用で、校舎はeMMCの書き込み管理およびeMMCからブートして試験する用にしました。
CM4-NANO-Bを使用してeMMCに書き込む準備をした状態。箱の右側にあるUSB端子を経由してMacに接続します。有線LANはいらないですが、その後起動することも考えて一応。IOボードのBOOTスイッチをオンにしたら箱を閉じます。
eMMCへのRaspberry Pi OSの書き込み
eMMCにRaspberry Pi OSを書き込むには、usbbootリポジトリのrpibootコマンドを使用します。コンパイルの手順はREADMEに従ってください。
https://github.com/raspberrypi/usbboot
rpibootコマンドのコンパイルができたら、次のコマンドを実行して、USBケーブルを接続します。箱の外から伸ばしたUSBケーブルをMacに接続します。しばらくすると、eMMCストレージが見えるようになるので、後はRaspberry Pi Imagerで書き込みを行います。
$ sudo ./rpiboot -d mass-storage-gadget64
起動!
一度MacからUSBケーブルを抜いて箱を開き、BOOTスイッチを戻したら、電源ケーブルにつなぎ替えて箱を閉じます。箱の外のコンセントを接続して、Raspberry Piを起動します。
起動後は普通にSSHして、いつも通りに使えます。
IOボードの互換性?
今回使用しているIOボードは、いずれもCM4向けのボードです。USB3.0ポートはないため、USB3.0の性能を得ることはできませんが、USB2.0ポート、HDMIポート、LANポートは使えるようでした。LANはSSHで、HDMIはUSBキャプチャボードで、USB2.0ポートは適当なCircuitPythonなPicoボードで確認できました。カメラポートとかも確認すべきですが、今日は一旦割愛ということで。まあ、一通り使えていそうです。
HSMIキャプチャの接続の様子。
NVMeのことを忘れていますが、これはIOボードをチェンジする必要があるので後述します。
eMMCの読み書き速度をみてみる
CM4では、eMMCの速度はややいまいちな印象でした。実際、ベンチマークを取ってみると、100MB/s以下と、もっさりめです。ちなみにベンチマークは https://pibenchmarks.com/ のテストを使用しました。
$ sudo curl https://raw.githubusercontent.com/TheRemote/PiBenchmarks/master/Storage.sh | sudo bash
(略)
MMC Type: eMMC v4 (Embedded) - Manufacturer: Samsung/SanDisk/LG - Model: AJTD4R - Size: 14.3G
(略)
Category Test Result
HDParm Disk Read 75.54 MB/sec
HDParm Cached Disk Read 76.34 MB/sec
DD Disk Write 32.1 MB/s
FIO 4k random read 7922 IOPS (31690 KB/s)
FIO 4k random write 7449 IOPS (29799 KB/s)
IOZone 4k read 18428 KB/s
IOZone 4k write 22075 KB/s
IOZone 4k random read 20386 KB/s
IOZone 4k random write 20903 KB/s
Score: 4701
では、CM5ではどうかと言うと……早い!!シーケンシャルリードは300MB/s、シーケンシャルライトは100MB/sと、普通に使うぶんにはまず困らない速度になりました。ランダム性能も100MB/s前後で悪くないですね。これは意外です。
$ sudo curl https://raw.githubusercontent.com/TheRemote/PiBenchmarks/master/Storage.sh | sudo bash
(略)
MMC Type: eMMC v4 (Embedded) - Manufacturer: Samsung/SanDisk/LG - Model: BJTD4R - Size: 28.6G
(略)
Category Test Result
HDParm Disk Read 313.89 MB/sec
HDParm Cached Disk Read 227.71 MB/sec
DD Disk Write 109 MB/s
FIO 4k random read 23594 IOPS (94377 KB/s)
FIO 4k random write 25006 IOPS (100024 KB/s)
IOZone 4k read 45470 KB/s
IOZone 4k write 69301 KB/s
IOZone 4k random read 44893 KB/s
IOZone 4k random write 56323 KB/s
Score: 13136
NVMeはどう?
IOボードをCM4-IO-BASE-Bにチェンジして、NVMeの性能をみていきます。Jeffがすでにテスト済みらしいのですが、CM4向けのIOボードでもPCIe3.0x1接続でNVMeを使えるらしく、追試ということにして私も試してみました。
ちなみに、デフォルトのブート順はeMMCが先になっているので、EEPROMの設定を開いて、eMMCの順番を後ろにしておきました。
$ sudo rpi-eeprom-config -e
# Default BOOT_ORDER for provisioning
# NVMe -> USB -> SD -> Network
BOOT_ORDER=0xf2146
これでNVMeからブートするようになりましたので、PCIeのスピードを3.0に変更します。
$ sudo vi /boot/firmware/config.txt
[cm5]
dtparam=pciex1_gen=3
これで再起動して、ベンチマークを取ってみましょう。結果は……あれ、なんかリードが妙に遅いですね。ライトは早いんですけど。あと、ランダムリードも早いので、シーケンシャルリードだけなんかおかしいですね。SSSTC CL1-3D256-Q11 256GBを使いましたが、こいつが悪いのかしら。
Category Test Result
HDParm Disk Read 156.65 MB/sec
HDParm Cached Disk Read 125.58 MB/sec
DD Disk Write 594 MB/s
FIO 4k random read 155151 IOPS (620606 KB/s)
FIO 4k random write 88658 IOPS (354632 KB/s)
IOZone 4k read 243558 KB/s
IOZone 4k write 198683 KB/s
IOZone 4k random read 62502 KB/s
IOZone 4k random write 232042 KB/s
Score: 51281
というわけで、Samsung PM991a 256GBに変更して再テスト。結果は以下の通り、PCIe3.0x1っぽいスピード感を得られていました。ふぅ〜よかった。
Category Test Result
HDParm Disk Read 748.64 MB/sec
HDParm Cached Disk Read 664.08 MB/sec
DD Disk Write 493 MB/s
FIO 4k random read 208979 IOPS (835918 KB/s)
FIO 4k random write 93090 IOPS (372363 KB/s)
IOZone 4k read 208154 KB/s
IOZone 4k write 173558 KB/s
IOZone 4k random read 57892 KB/s
IOZone 4k random write 193770 KB/s
Score: 48226
既存環境でCM5をブートするときはそのままではUSB2.0が使えないので注意
既存環境でブートしてUSBデバイスを試そうとしたら、デバイスが認識しなくて「おや?」となりました。IOボードの五感の問題かと思ったらそうではなく、CM4ではotg_modeの設定を投入する必要があったのと同じように、CM5ではdwc2の設定が必要になるようでした。eMMCに導入した環境のconfig.txtには含まれていたので、古いバージョンからのアップデートでは自動挿入されないようです。それもそうか。
というわけで、既存環境にも設定を投入したところ、無事にUSB2.0ポートが認識するようになりました
[cm4]
otg_mode=1
# [cm4]と[all]の間あたりに差し込んでおく
[cm5]
dtoverlay=dwc2,dr_mode=host
[all]
まとめ!
届いたCM5を早速舐め回してみました。一晩でざっと触っただけなので、まだ全然見きれていないですが、CM5は逃げるわけではないので、ゆっくり触っていけたらと思っています。
そう、冬コミの執筆が終わったら、ゆっくり触りたいンゴね……(死)