Embassy/Rust vs FreeRTOS/C 対決:STM32F446 で実測
Embedded Rust RTOS vs. C RTOS

Tweede golf のブログ記事では、STM32F446 マイコン上で Embassy(async Rust)と FreeRTOS(C)を比較しています。同じ動作をするアプリケーションを実装し、割り込みレイテンシ、プログラムサイズ、RAM使用量、プログラミングの容易さを評価。結果は、Rust の方がメモリ効率が良く、C の方がレイテンシが短い可能性が示唆されます。
Rust のコンパイラが生成する future は、await ポイントをまたいで保持する変数だけを格納し、フルスタックサイズを割り当てる必要がないため、Rust 実装が勝つはずです。
HNでの議論
56- Animats
これは非常に軽いCPU負荷の下での話だ。だから、プリエンプションなしの非同期アプローチでも機能する。しかし、何か重要な計算が行われているなら、うまく機能しないだろう。
スコープで測定するのに有用な数値は、最悪ケースの割り込みレイテンシだ。ハードリアルタイムの制約がある場合、これが重要になる。彼らは標準偏差を測定したが、最悪ケースは測定していない。通常のテスト設定は、入力信号(通常は方形波)を入力ピンに送り、割り込みが妨げられていなければ割り込みが発生し、タスクが開始され、タスクが出力ピンをオンにするというものだ。スコープで入力から出力への遅延を観察し、外れ値を探す。
完全にラン・トゥ・コンプリーションで実行している場合、外れ値は最も長い計算タスクによって決まる。計算タスクがある場合、これは問題だ。
歴史的に、ここでQNXが輝く。割り込みが処理され、スレッドがスケジュールされる。割り込みレベルで行われるのは、ほぼスレッドのアクティベーションだけだ。スレッドが出力ピンをオンにする。スコープでスケジューリングの外れ値を観察できる。ベストケースのレイテンシは、割り込みレベルで作業を行う場合よりも高いが、最悪ケースのレイテンシは、優先度の低いスレッドが計算バウンドであっても、一定である。
これがリアルタイムと「ニアリアルタイム」スケジューリングの違いだ。
- CupricTea
タイトルを変更すべきだ。非同期RustはRTOSではない。RTOSはプリエンプティブなマルチスレッドであり、非同期は協調的にyieldポイントで行われる。
おそらく「組み込み非同期Rust vs C RTOS」だろう。
- bfrog
一方で、今や何もかもが重要でなくなったかのようだが、Zephyrは脱出速度を獲得し、ほとんどLinuxのようになっている。地球上のすべてのベンダーが今やこれをサポートしており、これらの人々は金の流れに従っている。
Rustはいくつかの場所で控えめなサポートがあるようだ。
AIの時代には、言語が本当に重要かどうかはわからない。
- joshchngs
この記事はもう5年前のもので、組み込みRustの観点からするとかなり古い。全体的な状況はあまり変わっていないと思うが、詳細に依存するのは慎重であるべきだ。
- aw1621107
(2022)