Chapter 14
タイミングとリアルタイム性を測る — 「速さ」と「揺れ」
この章のゴール.
組み込みで機能と同じくらい重要な「いつ・どれだけ速く・どれだけ揺れずに」応答するかを、 外から測る方法をつかむこと。レイテンシ・ジッタ・デッドライン・スループットという指標と、 それらを測るための刺激と観測の当て方を理解する。
この章で使う既出の用語(定義は各リンク先). オラクル(01 章 8 節)、ブラックボックステスト(01 章 1 節)、刺激(02 章 1 節)、電源(02 章 2 節)、オシロ(04 章 8 節)、UART(05 章 1 節)、並行接続(10 章 4 節)、キャプチャ(13 章 3 節)
1. 「正しい値」だけでは足りない
生成 AI 製ファームは、値としては正しくても遅すぎる・たまに大きく遅れることがよくある。リアルタイム系(モータ制御、通信、センサ融合)では、遅れや揺れそのものが不具合になる。ブラックボックステストは、機能に加えて時間特性を測らねばならない。
まず言葉を揃える。
- レイテンシ(遅延): 刺激を与えてから応答が出るまでの時間
- ジッタ(揺らぎ): そのレイテンシのばらつき。周期処理なら周期の揺れ
- デッドライン: 「この時刻までに応答すべき」という締め切り。守れないと故障
- スループット: 単位時間に処理できる量(件/秒、バイト/秒)
2. どう測るか — 刺激と観測に「時刻」を打つ
レイテンシは「刺激の時刻」と「応答の時刻」の差である。だから鍵は、両方に正確な時刻(タイムスタンプ)を打つこと。精度の高い順に:
- オシロ/ロジアナで両端を見る(04 章): 入力エッジと出力エッジの時間差を直接測る。最も正確(マイクロ秒〜ナノ秒)。刺激と応答が電気信号なら最良
- GPIO のトグルを目印にする: 「処理開始で 1、終了で 0」を機器に出させ(または刺激側で出し)、その幅を測る。SWO/RTT(08 章)でも同様
- PC 側の時刻: 送信直前・受信直後の時刻差。数百マイクロ秒〜ミリ秒の精度で、OS のゆらぎが乗る。無線・ネットワーク越しはこれが基本
大原則: 測定系の精度が対象の要求より粗いと、揺れの原因が「対象」か「測定」か分からなくなる。まず測定系の下限(分解能・自分のジッタ)を把握する。
3. ジッタを見る — 一発でなく分布で
レイテンシは 1 回測っても意味が薄い。何千回測って分布を見る。
- ヒストグラム: 横=レイテンシ、縦=回数。中央値、ばらつき、そして裾(たまに出る大遅延)を見る
- 最悪値(worst case): 平均が良くても、まれな大遅延がデッドラインを破ると故障。組み込みでは最悪値がしばしば本命
- 時系列プロット: 時間とともに悪化する(メモリリークで遅くなる、熱で遅くなる)傾向を捕まえる
平均 2 ms・最悪 50 ms のような裾の長い分布は、割り込み競合・GC 的な処理・ロック・電源管理(スリープ復帰)を疑う手がかりになる。
4. 観測が対象を乱す — ハイゼンベルク問題
時間を測るときの最大の罠が、観測行為そのものが対象のタイミングを変えることである。
- デバッガでブレークを張れば、当然そこで時間は止まる(08 章)
- UART に大量ログを吐かせれば、その出力自体が時間を食う(ログが遅延を作る)
- 通信で問い合わせれば、その通信の負荷が乗る
対策は「乱さない観測」を選ぶこと: GPIO トグル+オシロ(ほぼゼロ負荷)、SWO/RTT(08 章、低侵襲)、受動キャプチャ(06 章・11 章)。測るために足したものが、測りたいものを変えていないかを常に疑う。
5. 負荷をかけて測る — スループットと劣化
軽い状態で速くても、込み合うと崩れるのが組み込みの常。刺激側で負荷を上げながら測る。
- 要求レートを上げていき、どこで応答が崩れ始めるか(飽和点)を探す
- 同時接続・同時イベントを増やす(10 章・11 章の並行接続と連携)
- 長時間流し続けてじわじわ悪化しないか(リーク、断片化)——ソーク試験(16 章)
6. 何をオラクルにするか
- レイテンシの中央値と最悪値がデッドライン内
- ジッタ(ばらつき)が許容範囲、時系列で悪化しない
- 目標スループットを満たし、飽和後も破綻せず劣化する(きれいに詰まる)
- 測定系の精度が要求より十分細かい(測定が結論を汚していない)
7. 手を動かす
レイテンシとジッタを可視化する
この章のポイント
- 機能が正しくても遅い・揺れるは不具合。レイテンシ・ジッタ・デッドライン・スループットを測る
- 測定の鍵は刺激と応答に正確な時刻を打つこと。オシロ/GPIO トグルが最精度、PC 時刻は OS の揺れが乗る
- 1 回でなく分布(ヒストグラム)で見て、平均より最悪値と裾に注目する
- 観測が対象を乱す(ブレーク・ログ・問い合わせ)罠に注意。低侵襲な観測を選ぶ
- 負荷をかけて飽和点と長時間の劣化を探る