RTOSとしての応答速度を比較してみた(Zephyrでのベンチマーク)

本サイトはアフィリエイト広告を利用しています。
Zephyr

Zephyr RTOSでは、デバイスの性能(処理速度や応答速度)を簡単に測定できます。

公式ベンチマークテスト(latency_measure)が用意されています。

ラズパイ5(A76)、ラズパイ4B(A72)、Pico2W(M33)、Pico(M0+)で比較したテスト内容・結果を紹介します。

 

RTOSとしての応答速度を比較してみた(Zephyrでのベンチマーク)

Zephyr RTOSでは、デバイスの性能(処理速度や応答速度)を簡単に測定できます。

公式ベンチマークテスト(latency_measure)が用意されています。

下記のようなベンチマークが簡単に実施できました。

 

ラズパイ4B(A72)、Pico2W(M33)、Pico(M0+)で比較したテスト内容・結果を紹介します。

数値が小さいほど高性能(高速)です。単位はすべて ナノ秒 (ns) です。

大きいコアのA72がモチロン高速なのですが、Pico2W(M33)も頑張っていました。

*追記ラズパイ5(A76)でも測定出来ましたので追記しました。更に高速でした。

項目 内容 RPi5(A76) RPi4B(A72) Pico2W(M33) Pico(M0+)
Context Switch スレッド切り替え 47 464 1,145 2,165
ISR Resume 割り込みから復帰 38 273 2,897 5,573
Mutex Lock 排他制御ロック 7 236 471 740
Semaphore Take 待機あり取得 51 615 1,794 3,205
Heap Malloc メモリ確保 35 376 4,199 8,830
Thread Create スレッド作成 480 3,876 1,481 2,870

 

(Geminiにも協力してもらった)まとめとしては下記となります。

  1. Pico 2 W (M33) はPico(M0+)と比べて「約2倍」速い

    • ほぼ全ての項目で、初代Picoの半分の時間で処理を完了しています。RTOSを載せ替えるだけでシステム全体の応答性が2倍になることを意味します。

  2. スレッド作成 (Thread Create) の逆転現象

    • 表の一番下にある通り、スレッド作成だけは RPi 4Bよりも Pico 2 W の方が高速 です (1,481ns vs 3,876ns)。

    • 理由: RPi 4B (Cortex-A72) は高機能な分、メモリ管理やキャッシュの一貫性制御などのオーバーヘッドが大きいため、単純なスレッド構造体の初期化においては、構造がシンプルなマイコン (Pico 2 W) が勝ることがあります。

  3. RPi 5 vs RPi 4B:「10倍」高速化

    • RPi 4Bも十分高速でしたが、RPi 5はそのさらに10倍高速です。

 

詳細なテスト内容・結果を紹介していきます。

 

ベンチマーク

よく見かけるデバイスとしてのスペック比較のCoremarkベンチマークもあります。

ただ今回使用したZephyr(RTOS)のベンチマークは、下記のlatency_measureを使いました。

RTOSとしての比較・ベンチマークしてみたいと思ったためです。

zephyr/tests/benchmarks/latency_measure at main · zephyrproject-rtos/zephyr
Primary Git Repository for the Zephyr Project. Zephyr is a new generation, scalable, optimized, secure RTOS for multiple...

 

RTOSとしての応答速度を比較(Latency Measure)

  • 割り込み遅延
  • コンテキストスイッチ
  • ミューテックスのロック解除など、

OSのオーバーヘッドを含めた速度を測定する場合、Zephyr標準の latency_measure を使います。

リアルタイム性を重視する場合に重要です。

 

ラズパイでZephyr(RTOS)を実装

実装・測定方法としては、公式のリポジストリをそのままビルドしただけです。

普通にZephyrのwest使ってビルドして、書き込んだだけです。

Pico2W(M33)、Pico(M0+)に関しては、そのままFlashまで出来ます。

 

普通のラズパイ4Bへの書き込み

ラズパイ4Bに関しては、最初のブートファイルを弄る必要があります。

config.txtを下記のように編集して、ビルドしたzephyr.binファイルも入れます。

 

筆者は手を抜いて下記感じで、ラズパイのOS(Raspbian)が入った環境を直接弄りました。

 

公式の手順を確認したい方は下記を参照ください。

Raspberry Pi 4 Model B (Cortex-A72) — Zephyr Project Documentation

 

USBシリアルで結果表示

デフォルトでベンチマーク結果をUART出力してくれますので、配線をします。

Pico2W(M33)、Pico(M0+)は下記形です。

  1. Pico Pin 1 (GP0 / TX) -> アダプタの RX

  2. Pico Pin 2 (GP1 / RX) -> アダプタの TX

  3. Pico GND -> アダプタの GND

 

ラズパイ4B(A72)は下記形です。

  • USB変換器の GND -> RPi4の GND (Pin 6)

  • USB変換器の RX -> RPi4の TX (Pin 8)

  • USB変換器の TX -> RPi4の RX (Pin 10)

 

 

ベンチマーク結果

あとは電源ONすれば勝手にRTOSがベンチマーク・結果表示してくれます。

各結果を貼り付けておきます。

ラズパイ5(A76)

 

ラズパイ4B(A72)

 

Pico2W(M33)

 

Pico(M0+)

 

ベンチマーク比較・まとめ

RTOSの性能を評価する上で最も重要な指標を抜粋・整理しました。

(Geminiにも協力してもらいました)単位はすべて ナノ秒 (ns) です。

 

大きいコアのA72がモチロン高速なのですが、Pico2W(M33)も頑張っていました。

特に、スレッド作成がPico2W(M33)の方が4B(A72)より早いのが面白い結果となりました。

*追記ラズパイ5(A76)でも測定出来ましたので追記しました。更に高速でした。

 

処理時間比較表 (単位: ns)

数値が小さいほど高性能(高速)です。

項目 内容 RPi5(A76) RPi4B(A72) Pico2W(M33) Pico(M0+)
Context Switch スレッド切り替え 47 464 1,145 2,165
ISR Resume 割り込みから復帰 38 273 2,897 5,573
Mutex Lock 排他制御ロック 7 236 471 740
Semaphore Take 待機あり取得 51 615 1,794 3,205
Heap Malloc メモリ確保 35 376 4,199 8,830
Thread Create スレッド作成 480 3,876 1,481 2,870

 

性能倍率・比較まとめ

「Pico 2 W」が「初代Pico」に対してどれくらい速くなったか、および「RPi 4B」がどれほど異次元かを表しています。

比較項目 Pico 2W (M33)vs Pico(M0+) RPi 4B(A72) vs Pico 2W(M33)
基本動作(Context Switch) 約 1.9倍 高速 RPi 4B が約 2.5倍 速い
割り込み応答(ISR Resume) 約 1.9倍 高速 RPi 4B が約 10倍 速い
同期処理(Mutex/Semaphore) 約 1.6〜1.8倍 高速 RPi 4B が約 2〜3倍 速い
メモリ確保(Malloc) 約 2.1倍 高速 RPi 4B が約 11倍 速い

 

データから読み取れる特記事項

  1. Pico 2 W (M33) はPico(M0+)と比べて「約2倍」速い

    • ほぼ全ての項目で、初代Picoの半分の時間で処理を完了しています。RTOSを載せ替えるだけでシステム全体の応答性が2倍になることを意味します。

  2. スレッド作成 (Thread Create) の逆転現象

    • 表の一番下にある通り、スレッド作成だけは RPi 4Bよりも Pico 2 W の方が高速 です (1,481ns vs 3,876ns)。

    • 理由: RPi 4B (Cortex-A72) は高機能な分、メモリ管理やキャッシュの一貫性制御などのオーバーヘッドが大きいため、単純なスレッド構造体の初期化においては、構造がシンプルなマイコン (Pico 2 W) が勝ることがあります。

  3. RPi 5 vs RPi 4B:「10倍」高速化

    • RPi 4Bも十分高速でしたが、RPi 5はそのさらに10倍高速です。

 

ラズパイ5での高速化の考察

RPi 4Bも十分高速でしたが、RPi 5はそのさらに10倍高速です。

  • コンテキストスイッチ: 464ns → 47ns (約10倍速い)

  • 割り込み応答: 273ns → 38ns (約7倍速い)

  • メモリ確保(Malloc): 376ns → 35ns (約10倍速い)

 

なぜこれほど速いのか?

  • アーキテクチャの進化: Cortex-A72 (RPi4) から Cortex-A76 (RPi5) への変更により、命令実行効率(IPC)が劇的に向上しています。

  • クロック周波数: 1.5GHz/1.8GHz から 2.4GHz への向上。

  • メモリ/キャッシュ: L2/L3キャッシュの帯域幅と速度が大幅に向上しており、OSのカーネル操作がほぼキャッシュ内で完結していると考えられます。

  • Mutex Lock (7ns): ロック取得がたった7ナノ秒ということは、メモリアクセス待ちが一切発生せず、CPUのL1キャッシュだけで爆速で処理が完了していることを示唆しています。

 

ラズパイ5(A76)のベンチマークは見送り

ラズパイ5も4B同様にRTOS実装して、テストしたのですがシリアル出力されませんでした。

*追記。Zephyrのメンテナーの方が対応していただき、ラズパイ5でも測定可能となりました。

但し従来のような40ピンのGPIOの配線ではなく、専用UARTコネクタの接続となります。

 

理由はラズパイ5以降SoCからPCIE経由で各GPIO接続されているためです。

単純にUART出力されず、PCIEドライバ経由で読み取る必要がありました。

さすがに面倒なのでラズパイ5の結果は見送ることにしました。

 

またブート方法に関しても4Bと差分があります。詳細は下記プルリクを参考ください。

この場を借りて、Zephyrのメンテナーの方には感謝申し上げます。

boards: raspberrypi: rpi5: Add RP1 pinctrl and SWD-friendly UART0 console by soburi · Pull Request #101635 · zephyrproject-rtos/zephyr
SummaryThis PR adds initial RP1 UART support for Raspberry Pi 5 by introducing RP1 pinctrl support and wiring up RP1 PL0...

 

まとめ

Zephyr RTOSでは、デバイスの性能(処理速度や応答速度)を簡単に測定できます。

公式ベンチマークテスト(latency_measure)が用意されています。

ラズパイ5(A76)、ラズパイ4B(A72)、Pico2W(M33)、Pico(M0+)で比較したテスト内容・結果を紹介しました。

 

コメント