レイテンシとタイムスケール
🐱 この章の目次
レイテンシとは
レイテンシ(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 内 RTT | 0.5 ms | ×500,000 |
| 東京↔米国西海岸 RTT | 120 ms | ×120,000,000 |
L1 キャッシュ参照を 1 秒に置き換えると、大陸間 RTT は約 4 年に相当します。 この桁感覚があれば「このデータはキャッシュすべきか」「ネットワーク呼び出しを減らすべきか」を即座に判断できます。
帯域は伸びるがレイテンシは縮まない
帯域幅(bandwidth) は並列化や太い回線で改善できますが、レイテンシは光速や物理距離に制約されます。 これは「レイテンシは物理で、帯域は工学で決まる」と要約されます。 したがって、レイテンシを隠す設計(プリフェッチ、非同期化、キャッシュ)が性能改善の鍵になります。
設計への応用
システム設計時には、クリティカルパス上の各操作のレイテンシを合算し、全体のレスポンスタイムを概算します。 たとえば DB クエリ 2 回 + 外部 API 呼び出し 1 回なら、それぞれ数 ms〜数百 ms を見込む必要があります。 この見積もりが『詳解システムパフォーマンス』第 2 章で述べられている サービスタイム と ウェイトタイム の分離につながります。