今回は待望のRaspberry Pi 5を入手しましたので、レビューしていきたいと思います。
Raspberry Pi 5の発表は2023年9月でしたが、2024年2月になってようやく日本国内での販売が開始されました。
実は私は日本国内販売開始よりも先に、Raspberry Pi 5を海外から直接取り寄せて手に入れていました。
この海外版の個体は日本の技適を未取得なので、技適未取得機器を用いた実験等の特例制度の適用を申請して半年間は合法的に使えるようにしました。
後になって購入した日本国内版との違いは、パッケージの技適シールの有無だけのようです。
今回はこれらのRaspberry Pi 5を実際に使ってみたり、性能をベンチマークしてみたりして、レビューしたいと思います。
また、発売前から噂になっていたGPIOの入出力遅延などの問題について、実際に検証したうえで考察していこうと思います。
動画
本記事と併せて公開している動画も是非ご覧ください。
ハードウェアについて
外観はRaspberry Pi 4から大きく変わりました。
Raspberry Pi 4と見比べて一番目立つ点はRJ45コネクタとUSB2.0コネクタの位置が入れ替わっている点です。
これについてはPi3Bまでこの配置だったものが4で入れ替わっていたので、元に戻ったといえます。
フォームファクタは継承しているので、取り付けネジ穴位置は同じですが、Pi3のケースが流用できるかは未確認です。
また、SoCの位置は4から変わっているのでファンの流用はできません。
他にも電源ボタン追加、イヤホンジャック廃止などハード面での変更点が多数あります。
SoCはBroadcom BCM2712で、従来の1.5GHzクアッドコアから2.4GHzクアッドコアになっています。
unicBenchでCPUのベンチマークスコアを計測したところ、Raspberry Pi 4比で3倍以上になりました。
また、RAMの容量は、現在販売されているものでは4GB,8GBの選択肢があります。基板上の抵抗の実装位置でRAM容量を表示している点がユニークだと思いました。
これを見ると、1,2GBの選択肢もあるようですが、現在のところ販売されていません。今後下位モデルの選択肢が増える可能性はありそうです。
また、電源は最低限5V3A、5V5A推奨となっており、PDでの5Vより高い電圧での給電には対応していないようですが、純正ACアダプタを使用することでRaspberry Pi独自の給電規格により、5V5Aが給電されるようです。
給電能力がそれに満たない電源を使用すると、周辺機器への電力供給が制限される旨の警告が表示されます。
USBへの給電が一部制限されるようですが、ワイヤレスマウス&キーボードのレシーバの動作には問題ありませんでした。
今回は手元にあった5V3Aの電源を使用します。
電源投入
それでは実際に電源を投入してみます。
まず公式で配布されているRaspberry Pi Imagerを使用して、microSDにOSを書き込みます。
この段階でWiFiの設定やユーザアカウント設定を書き込むことができ、とても便利になっています。
また、SSH有効化の設定もあるので、セットアップ後に一度HDMIケーブルでディスプレイに接続してSSH有効化の設定をする必要もなく、完全にヘッドレスでの動作が可能になっています。それに加えて、必要があればPCからSSH接続するための公開鍵情報を書き込んでおくことも可能になっています。
OSのイメージが書き込めたので、電源ボタンを押して起動してみます。
第一印象としては、非常にスムーズでストレス無く動作しています。
ターミナルで少し操作していると、ホームディレクトリの下の「ダウンロード」や「ドキュメント」などのディレクトリ名が日本語になっていることに気が付きました。イメージ書き込み時に言語やロケール設定を日本にしたことが原因と思われます。
標準ではでは日本語IMEが入っていないので、ターミナル操作で「ダウンロード」フォルダに移動することができません。
日本語入力をしたい場合は、自分でmozc等の日本語IMEをインストールする必要があります。
昔からこの仕様だった気がするのですが、まだ直っていません。不便です。
セットアップ時は言語とロケール設定はデフォルトのままにしておき、初回起動後に変更するようにしましょう。
デスフラッシュ現象とは?
発売直後から噂になっていたデスフラッシュ現象を試してみます。
デスフラッシュ現象とは、回路に強い光が当たると動作に不調をきたす現象のことです。
光電効果により回路中に電子が放出されることが原因とされています。
カメラのストロボの光を当ててみると、その瞬間に電源が落ちてしまいました。
RaspberryPi2,3の頃に問題となっていましたが、それが5でも発現するようです。
光電効果については、近いうちに詳細に解説する動画を制作する予定です。
SSDを試す
Raspberry Pi 5はPCIeポートにNVMeシールドを取り付けることで、SSDをマウントすることができます。
実際にSSDを取り付けて、ベンチマークをしてみました。
結果は400MB/sと、思ったより速度が出ませんでした。
これはPCIeが2.0であることがボトルネックになっていると考えられます。
後になって調べてわかったことですが、Raspberry Pi 5は公式にはPCIe2.0までの対応ですが、ブートパーティションの設定ファイルを編集することで、非公式にPCIe3.0として動作させることができるようです。
/boot/firmware/config.txt
に以下の1行を加えました。
dtparam=pciex1_gen=3
この状態でSSDのベンチマークを行うと、次のような結果になりました。
PCIe2.0の帯域の上限以上の速度は出ていますが、それでもSSDの性能を使い切れる速度は出ませんでした。
なお、PCIe3.0を有効にしているとなぜか起動中に再起動がかかったり、GUIがうまく起動しなかったりと、動作が不安定になることが多くなりました。それについて原因は究明できていません。
ただ、microSDと比べればPCIe2.0でもSSDは速度も耐久性も大幅に優れているというアドバンテージはあるので、SSDを使うメリットが無いわけではないと思います。導入コストとの兼ね合いで慎重に考えるべきでしょう。
ネットワーク速度測定
ネットワークの通信速度を測定します。
以前紹介したSBC、ROCKはWiFiモジュールは後付けで、アンテナが突き出していました。Raspberry Pi 5は基板上のアンテナパターンになっています。
計測は前回同様、LAN内に建てたiperf3サーバ宛に実施します。
有線であれば上下ともに1Gbpsの帯域はほぼ使い切れていますが、無線は思ったほど速度が出ませんでした。
確認してみると、搭載しているWiFiチップはBCM4345で、Raspberry Piの公称通り5GHzの11ac(WiFi5)の通信規格に対応しているはずです。
一方で、アクセスポイント側のステータスを確認すると、2.4GHzの11nでしかリンクアップしていませんでした。
調べてみるとWiFiのロケール設定の問題だったようで、設定を見直したところ5GHzで接続することができました。
raspi-config > Localisation Options > WLAN Country の項目で国を選択すると、その国の法規に合わせた動作をできるようになります。
その状態で測定したところ、上限ともに200Mbpsと多少速くなりましたが、それでも帯域を使い切るほどの速度は出ませんでした。
オーバークロック
CPUのオーバークロックを試してみます。
/boot/firmware/config.txt
を編集してOCの設定を書き込みました。
どの程度までクロックが上げられるか試したところ、周波数2.8GHzで電圧は1.4Vが限界でした。2.9~3GHzまで上げると動作が不安定になり、突然OSがクラッシュするようになりました。
この状態と標準状態で、CPUの性能をunixBenchで評価します。
およそ10%程度の向上が見られました。
今回は純正冷却ファンを取り付けたうえで、横から別の12cmファンで風を送っている状態で動作させました。
さらに冷却効率を上げることができれば、3GHzくらいまでは動作させられそうな雰囲気でした。
GPIOの仕様変更について
次に、Raspberry Pi 5発売直後から話題になっていたGPIOの入出力について検証します。
4から5への変更点として、SoCとGPIOピンの間にコントローラが一つ挟まるようになりました。
このRP1というチップは、GPIOの他にもUSBやEthernetの通信も担当していて、一般的なPCでいうところのサウスブリッジのような役割を果たします。
SoCとRP1はPCIeバスで繋がっています。
この仕様変更によってGPIOの応答速度が遅くなるという声もあります。
RP1のデータシートを読んでみると確かにレイテンシに関する記述がありました。
The PCIe link between RP1 and the host processor inserts an unavoidable amount of latency, typically 1μs at the design link width and speed.
RP1 Peripherals https://datasheets.raspberrypi.com/rp1/rp1-peripherals.pdf
プロセッサ・RP1間のPCIeリンクには回避不能な1μsの遅延が発生するとのことです。
これが実際どの程度のものなのか、実用上どういった影響があるのかについて検証していきます。
検証用プログラムの作成にはC言語を使用しました。
C言語は人間が読める形式のプログラムをコンパイラによって実行可能な形式に事前に変換してから実行されるタイプのプログラミング言語です。Pythonのようにインタプリタがその都度ソースコードを解釈して実行していくタイプの言語と比べて、C言語はハードウェアに近いレイヤで動作することができます。
計測で使用したプログラムのソースコードはGithubにて公開しておりますので、ぜひご確認ください。
GPIO出力書き換え速度測定
まずGPIO出力の書き換え速度を計測してみます。
GPIO出力を可能な限り高速にHigh/Low切替を繰り返すプログラムを作成しました。
これはオシロスコープでその出力波形を確認している様子です。
約1.25MHzの周期で矩形波の波形が出ています。
この波形1周期の間に、GPIO出力をHigh/Lowへ切り替えるため2回のGPIO出力が発生しています。
したがって、GPIOの書き換え速度は1.25[MHz]*2=2.5[MHz]となります。
波形をオシロスコープ上に表示してしばらく観察していると、周期に若干の振れ幅があることがわかります。
これはRaspberry Pi上で動くOSの動作が影響していると思われます。
これについては後で解説します。
同様の実験をRaspberry Pi 4とRaspberry Pi Picoで行ったところ、次のような結果が得られました。
Raspberry Pi 4より5の方が速く、また、それらよりもRaspberry Pi Picoは圧倒的に高速でした。
GPIO応答速度測定
次に、GPIOが入力を受けてから出力にレスポンスを返すまでの応答時間を計測します。
オシロスコープでボタンが押されてからGPIOの出力状態が変化するまでの時間差を観察します。
画像のように、グラフが立ち上がるタイミングに時間差があります。これがRaspberry Pi内部で処理に要していた時間です。
同様にPi 4、Pi Picoでも計測を行います。
Raspberry PiシリーズがGPIO入力が内蔵プルダウンされているのに対して、Pi Picoは内蔵プルアップかプルアップ無しを選択できます。そのため、ボタン入力を表す2chの水色の線がRaspberry Piと比べて反転しています。
今回の実験でも結果に若干の振れ幅があったため、複数回計測して平均を取りました。
結果はこのようになりました。
書き換え速度同様にRaspberry Pi 4よりRaspberry Pi 5の方が速く、それらよりもRaspberry Pi Picoがずっと高速であるという結果でした。
なぜこのような結果になったのか、次の章で解説していきます。
解説
これまでの実験で次の3つのことがわかっています。
・Raspberry Pi 4よりRaspberry Pi 5の方が若干速い
・Raspberry Pi 4,5よりPicoの方が圧倒的に速い
・Raspberry Piは応答速度が時と場合によってまちまち
これらの実験を通して、CPUの性能で劣るはずのマイコンが、なぜRaspberry Piよりも高速に動作できていたのでしょうか。
その理由は、ソフトウェア構造の違いにあります。
コンピュータは、メモリ上のプログラムに書かれた命令を一つ一つプロセッサが読んでいくことで動作します。
マイコンは、電源が投入されるとブートローダがRAMにプログラムを展開して動作します。つまり、マイコンはプログラムがハードウェアリソースに直接触れられるので応答速度が速くなるというわけです。
一方でRasPiでは、ハードウェアの上でオペレーティングシステム(OS)が多数のプロセスを管理することで動作しています。
OS上で動作するプログラムはIOに直接触れることはできません。なぜなら、IOはメモリ領域などと同じくOSが管理する共有資源であり、OSに制御を仲介してもらう必要があります。
これをシステムコールと呼び、複数のプロセスが同一のIOに同時に触れないようにする排他制御もOSが行っています。
これらの複雑な処理が間に入ることにより、遅延が発生していたと考えられます。
また、OSがプロセッサの数よりも多いプロセスを同時に動いているように見せるため、スケジューリングと呼ばれる処理を行っています。これは、様々な条件を考慮したアルゴリズムに従って、プロセスに対してプロセッサを使わせる時間を割り振るものです。
マイコンのように基本的に一つのプロセッサに一つのスレッドしか割り当てられないコンピュータと比べて、処理の完了までに時間がかかります。
ではRaspberry Pi 4と5で比べると、「遅くなった」との声に反して5の方が速かったのはなぜでしょうか。
これはCPUの処理速度の向上などの要因が考えられます。
CPUの性能が上がれば、システムコール中の特権モードによる処理も、スケジューリングにより本来の処理の間に挟まる処理も高速に処理することができます。
これらの結果から、Raspberry Piにおける「応答速度」は、IOコントローラによる遅延よりもOSの処理による遅延が支配的であるといえるでしょう。
OSの載ったコンピュータで応答速度が遅いのは仕方ないことです。一般的なプログラミングや電子工作では、この遅延は問題にならないことがほとんどです。
Raspberry Piはマイコンと同じようにOSを介さず直接プログラムを実行するベアメタルプログラミングも可能なようなので、その段階で初めてGPIO遅延問題を気にする必要が発生するかと思います。
もしこれ以上の応答速度がどうしても必要な場合は、マイコンやFPGAなどの選択肢を検討したほうがよいでしょう。
組み込みシステムに詳しい方なら、プロセスの厳格なスケジューリング機能を持ったリアルタイムOSを使うのも選択肢の一つです。
【参考】割り込み処理と条件分岐の違い
今回の応答速度計測の実験に併せて、参考までに次のような実験も行っていました。
先ほどの実験で使用した計測プログラムは、whileループ内でGPIOの入力状態によって条件分岐して、GPIOの出力のHigh/Lowを切り替えるプログラムでした。
これは定期的に入力状態を監視するポーリングと呼ばれる処理方式です。
マイコンであるPi Picoではハードウェア割り込みと呼ばれる処理が可能です。
割り込みとは、IO端子への入力など割り込みのトリガとなる入力があった場合、その時点のプロセッサの状態を一時保存し、実行中の処理を中断したうえでサブルーチンの動作を開始する処理のことです。
例えば、High/Lowの2値を取る入力の状態によってイベントを起こしたい場合を想定します。
通常の方法でこれを実現しようとした場合、ポーリングが必要になります。
しかし、この処理では監視周期の都合で入力を見逃したり、積極的な監視処理にプロセッサのリソースを消費してしまうという欠点が存在します。
ここでハードウェア割込みを使うことで、プログラム中のいかなる処理の途中でも確実かつ高速に入力を拾い、それを中断してサブルーチンの実行に移ることができます。
その割り込み処理を使用したソースコードで、先ほど同様の応答速度計測の実験を行いました。
結果としては条件分岐よりも応答が遅いという結果になってしまいましたが、注目すべきは応答時間が常にほぼ一定であるという点です。
標準偏差/平均で求められる変動係数で、値のばらつきを評価することができます。
プログラム中の実行位置を表すプログラムカウンタがどこを指していたとしても、その時点の各レジスタの状態を他のレジスタに一時退避して、割り込み処理用サブルーチンにプログラムカウンタを移す処理にかかる時間は常に一定です。
一方で、ポーリング処理では、ループ内に存在する条件分岐の命令の位置は決まっているので、入力を判定するためにはその位置までプログラムが進む必要があり、その時間は一定しません。
今回の実験で条件分岐の方が高速だったのは、プログラムが単純であるため、ループ内に存在する命令数とそれで消費するクロック数が割り込み処理よりも少なかったことが要因であると考えられます。
もしあなたがIO入力によって動作するプログラムを作成することになった場合、条件分岐と割り込み処理を適切に使い分ける必要があります。
まとめ
ここまでRaspberry Pi 5のレビューをしてきました。
遅くなったと言われていたGPIOも、OSの上でプログラムを動かす分には特に問題になることはないかという印象でした。
ただ、これまで使えていたGPIO制御用ライブラリの一部、RPi.GPIOやpigpioなどが使えなくなるなど、破壊的変更があった点は否めません。
一方でコンピュータとしては正統な進化の道をたどって、我々が一般的に使うPCに近づいている印象でした。
消費電力も排熱も増えすぎてLinuxの組み込み用途には使いづらいという声もあるかと思いますが、そういった方のためにRaspberry PiシリーズにはRaspberry Pi Zero Wという製品もあります。
また、昨今では単体でWiFiに接続できるマイコンや、Intel N100などを搭載したミニPCなども登場しています。
気軽に使える開発環境の選択肢が増えることは歓迎されるべきことだと思います。
したがって、これからはSBCとマイコン、ミニPCなどを、用途やコストを考慮して使い分けていくことが重要になるかと思います。
その中でも、今回のレビューを通して感じられたRaspberry Piの利点は
- 本体の入手性の高さ
- サードパーティ製部品が潤沢にあること
- ユーザの多さにより蓄積される開発ノウハウ
にあると思いました。
皆さんだったらRaspberry Pi 5をどう使いますか?コメント欄で教えてください。
コメント