変更要約: 初版
2.2キャッシュとメモリ保護
キャッシュ更新の2方式であるライトスルーとライトバック、性能を左右するヒット率、そして組込みシステム特有のリアルタイム性への影響(キャッシュミスによる応答時間のばらつき)、さらにアドレス空間や領域を保護するMMUとMPUの違いを学びます。
組込みシステムでキャッシュを使うと平均的な処理性能は向上しますが、「平均が速い」ことと「リアルタイム性が保証される」ことは別問題です。ファームウェア開発者は、キャッシュの更新方式が信頼性・性能にどう影響するか、そしてキャッシュミスがリアルタイムタスクの応答時間をどれだけばらつかせるかを理解した上で設計しなければなりません。この節では、キャッシュの2つの更新方式と、メモリ保護の仕組みであるMMU/MPUを、リアルタイム性という軸から見ていきます。
2.2.1ライトスルーとライトバック
- ライトスルー=CPUがデータを書き込むたび、キャッシュと主記憶の両方に同時に書き込む方式。主記憶が常に最新の値を持つため信頼性・一貫性が高いが、毎回主記憶への書き込みが発生するため書き込み性能はライトバックより劣る。
- ライトバック=CPUの書き込みはキャッシュにのみ反映し、該当キャッシュラインが追い出される(置き換えられる)タイミングでまとめて主記憶へ反映する方式。書き込み性能は高いが、主記憶とキャッシュの内容が一時的に不一致(主記憶側が古い値)になる時間帯が存在し、その間に電源断や別デバイスからのメモリアクセスが起きるとデータ不整合のリスクになる。
2.2.2ヒット率とリアルタイム性への影響
- ヒット率=CPUがアクセスしたデータがキャッシュに存在した(ヒットした)割合。ヒット率が高いほど平均アクセス時間は短縮されるが、ヒット率はプログラムの実行パターンやキャッシュ容量に依存し、常に一定とは限らない。
- 組込みのリアルタイムタスクにとって重要なのは平均アクセス時間だけでなく、キャッシュミス時の遅延——ミスが発生すると主記憶への低速アクセスが必要になり、そのタスクの実行時間が普段より大きくばらつく(ジッタが増える)。割込み処理やデッドラインが厳しいタスクでは、このばらつきそのものがリアルタイム性の破綻要因になり得る。
「ライトスルー=毎回主記憶も更新・信頼性高いが低速」「ライトバック=キャッシュのみ即時更新・高速だが一時的な不一致あり」「キャッシュミス=応答時間のばらつき(ジッタ)に直結しリアルタイム性を脅かす」が最頻出です。「キャッシュを使えばリアルタイム性が向上する」という短絡は誤りである点に注意しましょう。
あるファームウェア開発者が、モータ制御用の組込みシステムで、一定周期ごとにセンサ値を読み取りPWM出力を更新するリアルタイムタスクの応答時間が、ごくまれに規定のデッドラインを超えるという不具合を調査しています。プロファイリングの結果、平均実行時間は十分にデッドライン内に収まっているものの、特定の分岐パスを通ったときだけキャッシュミスが集中発生し、そのときだけ主記憶への低速アクセスが重なって実行時間が跳ね上がっていることが判明しました。これは典型的な「平均は速いがリアルタイム性を破壊する」キャッシュの落とし穴であり、ヒット率という平均指標だけを見ていては見逃してしまう問題です。対処として、そのタスクが頻繁に参照する制御ループ本体のコードとデータをキャッシュにロックする(キャッシュラインを固定し追い出されないようにする)、あるいは当該タスクの実行時間の見積もりを平均実行時間ではなく最悪実行時間(WCET)ベースで再設計するという判断が必要です。次に、この開発者は不揮発メモリへのログ書き込み処理について、ライトスルーとライトバックのどちらを使うか検討します。ログは頻繁に書き込まれるためライトバックの方が性能面では有利ですが、このシステムには予期しない瞬断(電源不安定)のリスクがあるため、ライトバックを採用すると瞬断時にキャッシュ内の未反映データが失われ、主記憶(あるいは不揮発ストレージ)のログが不整合になる恐れがあります。そこで、性能よりもデータの一貫性・信頼性を優先し、ログ書き込みにはライトスルーを採用するという判断が妥当です。このように、キャッシュ方式の選択は「速いかどうか」ではなく「その用途がリアルタイム性と信頼性のどちらを優先するか」で決まります。
| 項目 | ライトスルー | ライトバック |
|---|---|---|
| 主記憶への反映 | 書き込みのたび即時 | キャッシュライン追い出し時にまとめて |
| 一貫性 | 高い(常に最新) | 一時的な不一致の期間あり |
| 書き込み性能 | 低め | 高い |
| 瞬断・電源断リスク | 影響小さい | 未反映データの消失リスク |
ひっかけ: 「キャッシュを導入すれば必ずリアルタイム性が向上する」は誤りです——平均実行時間は短縮されても、キャッシュミス発生時の遅延によって実行時間のばらつき(ジッタ)が増え、デッドラインを外す原因になり得ます。リアルタイム設計ではヒット率という平均指標だけでなく最悪実行時間(WCET)を評価すべきです。また「ライトバックは性能が高いので常にライトスルーより優れている」も誤り=瞬断リスクがある用途や一貫性を最優先すべき用途では、性能を犠牲にしてもライトスルーを選ぶ判断が正しいことがあります。
2.2.3MMUとMPUによるメモリ保護
- MMU(メモリ管理ユニット)=仮想アドレスを物理アドレスへ変換し、プロセスごとに独立したアドレス空間を提供するハードウェア機構。仮想記憶やプロセス間のメモリ保護を実現できるが、アドレス変換の処理コストとハードウェア規模が大きく、割込み応答の予測性を損ないやすいため、ハードリアルタイム用途の小型MCUには搭載されないことが多い。
- MPU(メモリ保護ユニット)=アドレス変換は行わず、固定の物理アドレス範囲ごとにアクセス権限(読み取り専用・実行禁止等)を設定するだけの軽量な保護機構。仮想記憶は提供できないが、処理オーバヘッドが小さく応答が予測しやすいため、リアルタイム性が重視される組込みMCU(Cortex-Mクラス等)でよく採用される。
2.2.4この節のまとめ
- ライトスルー=毎回主記憶も更新・信頼性高いが低速、ライトバック=キャッシュのみ即時更新・高速だが一時的な不一致あり
- キャッシュミスは平均実行時間でなく応答時間のばらつき(ジッタ)としてリアルタイム性を脅かす
- MMUは仮想アドレス変換・プロセス分離だが重い、MPUはアドレス変換なしの軽量な領域保護でリアルタイムMCU向き
進捗の記録にはログインが必要です。
理解度チェック
(軽い確認用)Q1. モータ制御タスクの平均実行時間はデッドラインに十分収まっているが、特定の分岐を通るときだけデッドラインを超過する不具合が発生している。プロファイリングで、その分岐時にのみキャッシュミスが集中していることが判明した。最も適切な対処はどれか。
Q2. 不揮発ストレージへの頻繁なログ書き込みを行う組込みシステムで、電源が不安定で予期しない瞬断が起こり得るという制約がある。この制約下でキャッシュの書き込み方式を選ぶ際、最も妥当な判断はどれか。
Q3. ハードリアルタイム性が重視される小型組込みMCUで、メモリ領域ごとの読み取り専用・実行禁止などのアクセス権限を軽量な仕組みで保護したい。仮想アドレス変換までは不要な場合、最も適切な機構はどれか。

