# レイテンシ分析 ## 定義 レイテンシ分析は、オペレーションが完了するまでにかかる時間を細かいコンポーネントに分解し、もっともレイテンシの高いコンポーネントをさらに分解して根本原因を突き止め、定量化する観察型メソドロジである。ドリルダウン分析と同様にソフトウェアスタックの各レイヤを掘り下げるが、レイテンシ分析はワークロードから始めてアプリケーション内の処理、OS ライブラリ、システムコール、カーネル、デバイスドライバへと下る。各ステップはレイテンシをふたつ(A・B)に分割する問いを立て、遅い方をさらに分割していく「レイテンシの二分探索」として進む。MySQL クエリーを例にすると、「クエリーレイテンシに問題があるか」→「on-CPU か off-CPU か」→「待機対象は何か(ファイルシステム I/O)」→「ディスク I/O かロック競合か」→「キューイングかサービス提供か」→「I/O 初期化かデータ転送か」というように段階的に問いを絞り込む。データベースの分析に特化した派生としてメソッド R があり、Oracle データベース向けに開発された、Oracle のイベントトレーシングに基づきレイテンシの源を突き止めることに重点を置くパフォーマンス分析メソドロジである。アプローチ自体はデータベースに限らずどのシステムにも応用できる。(Source: [[@2023__OReillyJapan__詳解 システム・パフォーマンス 第2版 - Chapter 2 メソドロジ]] §2.5.13-2.5.14) 9章はディスクI/Oへのレイテンシ分析の具体適用例を示す。アプリケーションからディスクドライバまでの各レイヤでレイテンシを計測し、値が近い層まではその層に原因があると推定する。I/O A(アプリケーション530m秒→ドライバ526m秒までほぼ一定)のようにレイヤ間の減少幅が小さい場合はディスク(またはディスクドライバ)が原因、I/O B(アプリケーション470m秒→ファイルシステム468m秒→ブロックデバイスインターフェイス10m秒)のようにファイルシステムレベルより下で急減する場合はファイルシステムレベル(ロッキングやキューイング)が原因と推定できる。計測方法として、インターバルごとの平均・完全な分布(ヒストグラム/ヒートマップ)・I/Oごとのレイテンシ値の3種類があり、外れ値の原因特定には後者2つが有効とされる。(Source: [[@2023__OReillyJapan__詳解 システム・パフォーマンス 第2版 - Chapter 9 ディスク]] §9.5.5) 10章はネットワークレイテンシへのレイテンシ分析の具体適用例を示す。名前解決レイテンシ・pingレイテンシ・TCP接続確立レイテンシ・TTFB(Time To First-Byte)・RTT(ラウンドトリップ時間)・接続の寿命という区間ごとの分解に加え、「システムコール送受信レイテンシ」「割り込みレイテンシ」「インタースタックレイテンシ(パケットがカーネルのTCP/IPスタックを通過する時間)」という、より低レイヤのレイテンシも表10-3として一覧化している。TCP再送によるレイテンシ外れ値が共通の問題原因であるとし、完全な分布の可視化やオペレーションごとのレイテンシトレースで明らかにすること、SO_TIMESTAMPINGソケットオプションで送信ディレイ・RTT・インタースタックレイテンシを個別計測できることを述べる。(Source: [[@2023__OReillyJapan__詳解 システム・パフォーマンス 第2版 - Chapter 10 ネットワーク]] §10.3.5, §10.5.4) ## 横断的知見 - **「レイテンシをどのレイヤで計測するか」というトレードオフは、ドリルダウンの深さそのものと表裏一体である**: [[@2023__OReillyJapan__詳解 システム・パフォーマンス 第2版 - Chapter 2 メソドロジ]]が示すレイテンシ分析はレイヤを段階的に下る二分探索として一般化されているが、[[@2023__OReillyJapan__詳解 システム・パフォーマンス 第2版 - Chapter 8 ファイルシステム]] §8.5.2はこれをファイルシステムという具体的なサブシステムに適用し、計測対象を「アプリケーション・システムコールインターフェイス・VFS・ファイルシステム固有層」の4レイヤに分解して長所短所を整理している(表8-4)。アプリケーション層は最も正確だがアプリケーションごとに手法が異なり、VFS層は標準インターフェイスだが非ストレージファイルシステムまで拾ってしまうという指摘は、二分探索の各ステップで「どの粒度まで下るか」を決める際の実務的な判断材料になる。抽象的な方法論(第2章)と具体的なレイヤ選択基準(第8章)を合わせて読むことで、レイテンシ分析を実システムに適用する際の解像度が上がる。(Source: [[@2023__OReillyJapan__詳解 システム・パフォーマンス 第2版 - Chapter 2 メソドロジ]] §2.5.13, [[@2023__OReillyJapan__詳解 システム・パフォーマンス 第2版 - Chapter 8 ファイルシステム]] §8.5.2) - **8章のファイルシステム4レイヤ分解と9章のディスクスタック分解は、隣接するレイヤをそのまま接続する**: 8章はアプリケーション→システムコール→VFS→ファイルシステム固有層で止まるのに対し、9章はアプリケーション→システムコール→VFS→ファイルシステム→ブロックデバイスインターフェイス→ドライバ→ディスクへと下位に続く。両者を合わせると、MySQLクエリーのレイテンシがアプリケーションからディスクデバイスまで一気通貫でレイヤ分解できる二分探索のフルスタック実例になっており、2章の抽象的な例示(「クエリーレイテンシ→on/off-CPU→ファイルシステムI/O→ディスクI/O」)が8・9章それぞれの具体的な計測レイヤ選択基準によって肉付けされている。(Source: [[@2023__OReillyJapan__詳解 システム・パフォーマンス 第2版 - Chapter 8 ファイルシステム]] §8.5.2, [[@2023__OReillyJapan__詳解 システム・パフォーマンス 第2版 - Chapter 9 ディスク]] §9.5.5) - **ネットワークのレイテンシ分解(10章)は「区間ベース」、ファイルシステム/ディスク(8・9章)の分解は「レイヤベース」という異なる分割軸を採る**: 8・9章はアプリケーション→システムコール→VFS→ファイルシステム→ブロックデバイス→ドライバ→ディスクという、ソフトウェアスタックの垂直方向のレイヤに沿って計測点を置く。対して10章のネットワークレイテンシ分解(名前解決・ping・接続確立・TTFB・RTT・接続寿命)は、単一の通信オペレーションを時系列の区間に分割する水平方向の分解であり、レイヤをまたぐ複数のホスト(クライアント・サーバー)にまたがる点が特徴的である。2章が示す抽象的な二分探索(A・Bへの分割)は両方の軸に適用できる一般原則だが、実際の分解軸の選び方はサブシステムの性質(単一プロセス内の垂直スタックか、複数ホスト間の水平タイムラインか)に依存することが、8・9章と10章の対比から見える。(Source: [[@2023__OReillyJapan__詳解 システム・パフォーマンス 第2版 - Chapter 8 ファイルシステム]] §8.5.2, [[@2023__OReillyJapan__詳解 システム・パフォーマンス 第2版 - Chapter 9 ディスク]] §9.5.5, [[@2023__OReillyJapan__詳解 システム・パフォーマンス 第2版 - Chapter 10 ネットワーク]] §10.3.5) ## 未解決の問い - ネットワークスタックの分解(10章、§10.3.5・§10.5.4)は、8章が提示した「計測レイヤ選択の長所短所マトリクス」(§8.5.2の問い、49行目参照)の具体例になっているか。10章はTTFB・RTT・インタースタックレイテンシという区間を列挙するが、各区間をどのツール(ソケットオプション・トレースポイント・kprobe)で計測すべきかの長所短所マトリクスまでは明示していない。 - レイテンシの二分探索(A・Bへの分割)は、単一の支配的なボトルネックが存在する場合に有効だが、複数の要因がレイテンシに同程度寄与している場合(例: 40% がディスクI/O、35% がロック競合)にはどう適用すべきか。本章は単一要因を前提とした例のみを示している。 - メソッド R が前提とする Oracle のイベントトレーシングに相当する仕組みが存在しないシステム(トレーシングインフラが未整備な自作アプリケーション等)では、レイテンシ分析の二分探索をどう実現するか。 - ファイルシステムの4レイヤ(アプリケーション・システムコール・VFS・ファイルシステム固有層)という分解は第8章の具体例だが、ネットワークスタックやCPUスケジューラなど他のサブシステムでも同様の「計測レイヤ選択の長所短所マトリクス」が成立するか。他章のingestで横断的に確認したい。 - 9章のI/O B例では「下位レベルでは1つのI/O(10m秒)しか観測されておらず、同じファイルシステムI/Oを処理するための関連I/O(メタデータ操作等)を計算に入れ損ねている可能性がある」と注意されている。レイヤをまたいでI/Oの数・サイズ・レイテンシが変化する場合(分割・結合)、二分探索の「値が近い層まで原因と推定する」という判定基準はどう修正すべきか。 ## 関連 - [[@2023__OReillyJapan__詳解 システム・パフォーマンス 第2版 - Chapter 2 メソドロジ]] — レイテンシ分析とメソッド R の原典解説(§2.5.13-2.5.14)。 - [[@2023__OReillyJapan__詳解 システム・パフォーマンス 第2版 - Chapter 8 ファイルシステム]] — ファイルシステムの4レイヤへのレイテンシ分析の具体適用(§8.5.2)。 - [[@2023__OReillyJapan__詳解 システム・パフォーマンス 第2版 - Chapter 9 ディスク]] — アプリケーションからディスクドライバまでのスタックレイテンシ分析(§9.5.5)。 - [[@2023__OReillyJapan__詳解 システム・パフォーマンス 第2版 - Chapter 10 ネットワーク]] — 名前解決・ping・接続確立・TTFB・RTT・接続寿命という区間ベースのネットワークレイテンシ分解(§10.3.5, §10.5.4)。 - [[ドリルダウン分析]] — 同じソフトウェアスタック掘り下げの発想を共有する関連メソドロジ。 - [[レイテンシヒートマップ]] — レイテンシ分布の可視化による外れ値原因特定の補完手法。 ## 出典 - [[@2023__OReillyJapan__詳解 システム・パフォーマンス 第2版 - Chapter 2 メソドロジ]] §2.5.13-2.5.14 - [[@2023__OReillyJapan__詳解 システム・パフォーマンス 第2版 - Chapter 8 ファイルシステム]] §8.5.2 - [[@2023__OReillyJapan__詳解 システム・パフォーマンス 第2版 - Chapter 9 ディスク]] §9.5.5 - [[@2023__OReillyJapan__詳解 システム・パフォーマンス 第2版 - Chapter 10 ネットワーク]] §10.3.5, §10.5.4