🐱 うさねこ教室 Python と可観測性の教室

レイテンシとタイムスケール

🐱 この章の目次

レイテンシとは

レイテンシ(latency) は、ある操作が完了するまでの待ち時間です。 『詳解システムパフォーマンス』第 2 章では、レイテンシをパフォーマンス分析の最も基本的な指標として位置づけています。 システム設計では、各レイヤーのレイテンシの桁感覚を持つことが判断の起点になります。

すべてのプログラマが知るべきレイテンシ

Jeff Dean / Peter Norvig が公開した「Latency Numbers Every Programmer Should Know」は、ハードウェア操作のタイムスケールを一覧にしたものです。 以下の表は代表的な値をまとめたものです(2020 年代の概算値)。

操作時間倍率の目安
L1 キャッシュ参照1 ns基準
L2 キャッシュ参照4 ns×4
メインメモリ参照100 ns×100
SSD ランダムリード16 µs×16,000
HDD シーク2 ms×2,000,000
同一 DC 内 RTT0.5 ms×500,000
東京↔米国西海岸 RTT120 ms×120,000,000

L1 キャッシュ参照を 1 秒に置き換えると、大陸間 RTT は約 4 年に相当します。 この桁感覚があれば「このデータはキャッシュすべきか」「ネットワーク呼び出しを減らすべきか」を即座に判断できます。

帯域は伸びるがレイテンシは縮まない

帯域幅(bandwidth) は並列化や太い回線で改善できますが、レイテンシは光速や物理距離に制約されます。 これは「レイテンシは物理で、帯域は工学で決まる」と要約されます。 したがって、レイテンシを隠す設計(プリフェッチ、非同期化、キャッシュ)が性能改善の鍵になります。

設計への応用

システム設計時には、クリティカルパス上の各操作のレイテンシを合算し、全体のレスポンスタイムを概算します。 たとえば DB クエリ 2 回 + 外部 API 呼び出し 1 回なら、それぞれ数 ms〜数百 ms を見込む必要があります。 この見積もりが『詳解システムパフォーマンス』第 2 章で述べられている サービスタイムウェイトタイム の分離につながります。