リアルタイム制約とWCET
組込みの「間に合う」を勘ではなく数値で保証できる。ハードとソフトの違い、最悪実行時間の見積り、スケジュール可能性の判定までを原理から押さえ、締切超過のリスクを設計段階で潰せる。
- 1.リアルタイムは「速い」ではなく「締切を守る」こと。ハードは1回の締切超過が致命傷、ソフトは超過で価値が劣化する程度、という区別が設計方針を決める。
- 2.WCET(最悪実行時間)はキャッシュ・パイプライン・分岐予測で経路依存に変わるため、実測の最大値では上界にならない。静的解析または測定+安全余裕で「絶対に超えない上界」を求める。
- 3.各タスクのWCETが分かれば、周期・締切・優先度からスケジュール可能性を数式で判定できる。RMのCPU利用率上界やEDFの100%、応答時間解析が定番の道具。
「速い」と「間に合う」は別物
一般のソフトウェアでは平均が速いほど良いとされます。しかし組込み制御では評価軸が違います。エアバッグ展開やモーター制御は、平均何ミリ秒かではなく 「どんなに悪くても指定時刻までに必ず終わるか」 が問われます。平均1msでも、稀に50msかかる瞬間があれば制御は破綻します。リアルタイムシステムとは高速なシステムではなく、時間的な正しさ(時刻という結果の正しさ)が保証されたシステム です。
この保証を組み立てる部品が3つあります。締切(デッドライン)に対する厳しさの分類、1タスクの最悪実行時間(WCET)の見積り、そして複数タスクが同居しても全員が締切を守れるかの判定(スケジュール可能性)です。順に見ていきます。
ハードリアルタイムとソフトリアルタイム
締切を1回でも破ったときの「損害の質」で分類します。速度の大小ではない点に注意が必要です。
| 区分 | 締切超過の意味 | 結果の価値 | 代表例 |
|---|---|---|---|
| ハード | システムの失敗・危険 | 締切後は価値ゼロ以下(有害) | エアバッグ、ABS、原子炉制御、フライトコントロール |
| ファーム | その結果は破棄すべき | 締切後は価値ゼロ(無害) | 動画1フレームの合成、産業機械の1サイクル |
| ソフト | 品質・満足度が劣化 | 締切後も価値は残るが低下 | 動画ストリーミング、UI応答、音声通話 |
区別が決定的なのは、要求される「証明の強さ」が変わる からです。ソフトリアルタイムは「99パーセンタイルで20ms以内」のような統計的目標で足り、平均性能の最適化と相性が良い。対してハードリアルタイムは統計では不十分で、最悪ケースでも締切内 という決定論的な保証を、解析によって事前に示す必要があります。この「最悪ケース」を扱う中心概念がWCETです。
ハードリアルタイム設計では、平均を犠牲にしてでも最悪値を抑える選択が正当化されます。たとえばキャッシュを敢えて無効化したり、動的メモリ確保(malloc)を禁止して静的確保に統一したりします。malloc は空きブロック探索やヒープ断片化で実行時間が入力依存に大きく揺れ、最悪値の上界を取りにくいためです。平均は落ちても、上界が保証できる方を選びます。
WCET:なぜ「実測の最大値」では足りないか
WCET(Worst-Case Execution Time)は、あるタスクを単独で走らせたときにかかりうる実行時間の上界です。ここで最大の落とし穴は、「何回も測って一番遅かった値」がWCETの上界にはならない という点です。理由は現代プロセッサの実行時間が経路と履歴に強く依存するからです。
同じ関数でも実行時間が変わる主因(速い⇔遅いの幅を生む要素)
命令キャッシュ : ヒットなら数サイクル、ミスなら主メモリ往復で数十〜数百サイクル
データキャッシュ: 同上。アクセスパターン次第でミス率が激変
分岐予測 : 的中なら遅延ゼロ、外すとパイプラインフラッシュ
パイプライン : 直前命令との依存でストール(追い越し不可の待ち)
DRAMリフレッシュ / バス競合 : 他マスタ(DMA等)と衝突すると待たされる
これらの状態は入力データや直前に何が動いていたかで変わるため、テストで最悪の組合せを踏む保証がありません。実測の最大値は下界(少なくともこれ以上はかかる)にはなっても、上界の証明にはならないのです。そこで実務では次の3系統を使い分けます。
| 手法 | 考え方 | 長所 | 短所 |
|---|---|---|---|
| 静的解析 | コードとハード模型から経路ごとの最悪サイクルを積み上げ、実行せず上界を計算 | 安全側の真の上界を保証 | ハードのモデル化が難しく、悲観的(過大)になりがち |
| 測定ベース | 多数の入力・経路で実測し分布を取る | 実機の挙動を直接反映 | 最悪経路を踏み逃す危険。上界の保証にならない |
| ハイブリッド | 基本ブロック単位で測定し、静的な経路解析で結合 | 現実的な精度と網羅性の両立 | 計測環境の整備コスト |
いずれの結果にも 安全余裕(マージン) を上乗せして設計WCETとするのが通例です。静的解析器は分岐の到達可能性やループ回数の上限(ループバウンド)を必要とするため、開発者が上限を注釈で与えることも多くあります。
キャッシュは平均を劇的に速くしますが、WCET解析では厄介です。あるタスクの実行中に割込みや別タスクが割り込むと、キャッシュの中身が追い出され(キャッシュ汚染)、復帰後のミスで実行時間が伸びます。この プリエンプションによるキャッシュ関連遅延(CRPD) を見積もりに織り込まないと、単独測定のWCETを超えて締切を破ります。ハード用途でキャッシュをロックしたり無効化するのは、この不確実性を消すためです。
デッドラインとスケジュール可能性
各タスクのWCETが求まったら、次は複数タスクを同じCPUに載せて 全員が締切を守れるか を判定します。周期タスクを次の記号で表します(すべてインラインコードで表記)。実行時間 C(WCET)、周期 T、相対締切 D。CPU利用率は各タスクで U = C / T、システム全体では総和 Utotal = Σ(Ci / Ti) です。
代表的な固定優先度方式が レート単調(RM) です。周期が短いタスクほど高い優先度を与えます。RM には有名な十分条件があり、n 個のタスクで全締切が D = T のとき、Utotal が n * (2^(1/n) - 1) 以下ならスケジュール可能です。n が大きくなるとこの上界は約 0.693(ln 2)に収束します。つまり 利用率が約69%以下なら、RMで必ず間に合う という強力な指針が得られます。
RM 利用率上界(Liu & Layland 境界)
n=1 : 100.0 %
n=2 : 82.8 %
n=3 : 78.0 %
n→∞ : 69.3 % ( = ln 2 )
→ この値“以下”なら十分条件を満たす(必要条件ではない)
動的優先度方式の EDF(最早締切優先) はさらに強力で、締切が最も近いタスクを常に優先します。締切と周期が等しい前提なら、Utotal が 100% 以下 でスケジュール可能という必要十分条件が成り立ちます。理論上はCPUを1%も無駄にせず使い切れるわけです。RMと比べた性質を整理します。
| 観点 | RM(固定優先度) | EDF(動的優先度) |
|---|---|---|
| 優先度 | 周期の短い順に静的に固定 | 実行中に締切の近い順で動的に変化 |
| 利用率上界 | 約69%〜(十分条件) | 100%(必要十分条件) |
| 実装コスト | 低い。多くのRTOSが固定優先度で直接支援 | 高い。締切に基づく再ソートが必要 |
| 過負荷時 | 低優先度タスクが確実に犠牲になる(予測可能) | ドミノ倒し的に多数が締切超過しうる |
RMの利用率境界はあくまで 十分条件 です。境界を超えても実際には間に合う場合があり、より精密に判定するのが 応答時間解析(RTA) です。各タスクの最悪応答時間 R(起動から完了までの最大時間)を、自身の C に、より高優先度タスクから受ける割込み(干渉)を足し込んで反復計算し、最終的に R が D 以下なら合格とします。境界法より甘くない、正確な合否判定を与えます。
「ハードとソフトの違い」は速度ではなく『締切超過が失敗(有害)か、品質低下か』で答えます。「WCETをテストの最大値で決めてよいか」には『不可。経路とキャッシュ・分岐予測依存で最悪経路を踏み逃すため、静的解析または安全余裕で上界を取る』。RMは『周期が短いほど高優先度、利用率境界は約69%(十分条件)』、EDFは『締切最優先、境界100%(必要十分)』が定番の対比です。
ジッタ:締切を守っても揺れは残る
締切を守れても、まだ品質を損なう要素があります。ジッタ(jitter) ——本来一定であるべきタイミングのばらつきです。周期タスクの起動が理想時刻から前後にずれる リリースジッタ、開始が高優先度タスクの割込みで遅れる 開始ジッタ、そして完了時刻が揺れる 完了ジッタ に分けられます。
これが問題になるのは、周期の一定性そのものが結果の質を決める 制御だからです。モーター制御やセンサーサンプリングでは、各回の実行が「均等な時間間隔」で行われる前提で制御則が設計されます。実行間隔が揺れると、微分・積分項の計算が狂い、制御が不安定化したりノイズが乗ったりします。締切内には収まっていても、間隔がばらつくだけで悪化するのです。
サンプリング周期の揺れを消す常套手段は、「処理の完了時刻」ではなく「割込みで確定するタイムスタンプ」を基準にする ことです。ハードウェアタイマーの周期割込みで入力をラッチ(値を確定)し、実際の演算は多少遅れて実行してよい設計にすれば、演算完了時刻がばらついてもサンプル間隔は一定に保てます。加えて高優先度の割込みハンドラを短く保ち、割込み禁止区間を最小化することが、開始ジッタの削減に直結します。
まとめ:時間を「保証」する設計へ
リアルタイム設計の核心は、平均を速くすることではなく 最悪ケースの時間的振る舞いを事前に証明する ことにあります。締切超過の質でハード/ソフトを分類し、経路とハードウェア状態に依存するWCETを実測ではなく上界として見積もり、RMの利用率境界やEDFの100%基準、応答時間解析でスケジュール可能性を判定し、最後にジッタを抑えて周期の一定性を守る——この一連の流れが揃って初めて「間に合う」を保証できます。土台にあるのはCPUのキャッシュやパイプラインといった/hardware-components/や/semiconductor/の挙動、そしてタスクをどう切り替えるかという/os/のスケジューリング機構であり、それらの理解の上に時間保証は成り立っています。
組込み・IoT Article
リアルタイム制約とWCETを実務で読む
TL;DRは入口です。実際に選ぶ・使う段階では、何を解決するか、何と比較するか、導入後にどこで詰まるかまで見る必要があります。
解決すること
リアルタイム
比較で見る軸
難易度: advanced / カテゴリ: 組込み・IoT / タグ数: 6
導入後に効く点
WCET(最悪実行時間)はキャッシュ・パイプライン・分岐予測で経路依存に変わるため、実測の最大値では上界にならない。静的解析または測定+安全余裕で「絶対に超えない上界」を求める。
先に潰すリスク
用語だけ覚えても、設計・実装・運用でどこに効くかを確認しないと判断を誤る。
- 難易度
- advanced
- カテゴリ
- 組込み・IoT
- タグ数
- 6
判断チェックリスト
- 自社の用途が「リアルタイム / WCET」に近いか確認する。
- 強みである「リアルタイムは「速い」ではなく「締切を守る」こと。ハードは1回の締切超過が致命傷、ソフトは超過で価値が劣化する程度、という区別が設計方針を決める。」が本当に評価軸になるか確認する。
- 注意点の「用語だけ覚えても、設計・実装・運用でどこに効くかを確認しないと判断を誤る。」を運用で吸収できるか確認する。
- 公開値や仕様値は、対象プラン・対象機種・対象リージョンまで確認する。
- 既存システム、ID、ネットワーク、監視、バックアップとの接続方法を先に洗い出す。
- 小さく試してから、本番移行、権限設計、障害時手順、コスト監視を決める。