リアルタイムにおける考慮事項とレイテンシー
ソフトリアルタイムおよびハードリアルタイムシステム向けに、タイミングが予測可能なコードを記述します。
「リアルタイムにおける考慮事項とレイテンシー」はCoddyKit上の無料C++ Academyレッスンです。 これはレッスン3/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはC++ Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 C++ Academyコースには全4レッスンが含まれています。
リアルタイムとは
リアルタイムシステムは、期限内に応答しなければなりません。期限を逃すと障害につながります。
- ハードリアルタイム — 期限を逃すとシステム障害になります(医療、航空電子機器)
- ソフトリアルタイム — 期限を逃すと品質は低下しますが、許容されます(音声、映像)
速度よりも決定性
リアルタイムコードでは、ピーク性能よりも予測可能なタイミングを重視します。常に10マイクロ秒かかる関数は、1〜20マイクロ秒かかる関数よりも好まれます。
ヒープ割り当てを避ける
ヒープ操作には、メモリの断片化やアロケータの判断などの予測できない要素があります。起動時に割り当て、その後は再利用してください。組み込み向けのコーディング規約では、初期化処理以外でのnewを禁止していることがよくあります。
例外を避ける
例外の送出には予測できないコストがかかります。ほとんどのリアルタイムC++コードは-fno-exceptionsを指定してコンパイルします。
ホットパスでの仮想関数呼び出しを避ける
仮想関数は間接呼び出しを追加し、分岐予測を乱す可能性があります。静的ポリモーフィズムには、テンプレートまたはCRTPを使用してください。
決定性のためのロックフリー
ロックは優先度逆転を引き起こす可能性があります。ロックを保持している低優先度スレッドが、高優先度スレッドをブロックするためです。ロックフリーのデータ構造を使えば、この問題を避けられます。
優先度逆転の軽減
ロックを使わなければならない場合は、優先度継承をサポートするものを優先してください。OSがロック保持側の優先度を一時的に引き上げます。
最悪実行時間(WCET)
コードがたどる最悪の経路を分析します。ツールや手動分析によって、関数が要する最大サイクル数を見積もります。WCETはスケジューリングの判断に影響します。
OSスケジューラを避ける
ハードリアルタイムでは、RTOS(FreeRTOS、Zephyr、VxWorks)またはベアメタルを使用します。汎用OSでは、タスクが無期限に遅延する可能性があります。
キャッシュとTLBの影響
キャッシュミスやTLBミスは、予測できないストールを引き起こします。最も重要な部分のデータはキャッシュに固定するか、スクラッチパッドRAMを使用してください。
メモリプール
一般的なヒープではなく、あらかじめサイズを決めたプールから割り当てます。割り当てと解放を一定時間で実行できます。多くの組み込みC++プロジェクトでは、これだけを使用しています。
実機でプロファイリングする
ワークステーションでの性能は、MCUでの性能とはほとんど関係ありません。常に、現実的な負荷をかけてターゲットハードウェア上でベンチマークを実行してください。
クイックチェック
リアルタイムC++コードでは、なぜヒープ割り当てが問題になるのですか。
まとめ
リアルタイムC++では、ピーク性能よりも予測可能性を重視します。ヒープ、例外、仮想関数、OSが管理するロックを避けてください。静的メモリ、メモリプール、ロックフリー構造を使用し、最悪実行時間を分析します。実際のターゲットでプロファイリングしてください。
よくある質問
「リアルタイムにおける考慮事項とレイテンシー」レッスンは無料ですか?
はい。「リアルタイムにおける考慮事項とレイテンシー」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、C++ Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 C++ Academyコースには全4レッスンが含まれています。
「リアルタイムにおける考慮事項とレイテンシー」で何を学びますか?
ソフトリアルタイムおよびハードリアルタイムシステム向けに、タイミングが予測可能なコードを記述します。 ブラウザで直接実行するハンズオンコードでC++ Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
C++ Academyを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのC++ Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン3/4です。
「リアルタイムにおける考慮事項とレイテンシー」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このC++ Academyレッスンでコードを書いて実行できますか?
はい。すべてのC++ Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- 組み込み環境の制約:RTTIなし、例外なし
- メモリマップドI/Oとvolatile
- リアルタイムにおける考慮事項とレイテンシー
- ARMターゲット向けクロスコンパイル