# メモリバウンド ## 定義 メモリバウンド(memory bound)とは、CPU がメモリアクセスの待機(ストール)にサイクルを消費している状態を指す。現代の CPU は DRAM よりもはるかに高速に動作するため(CPU-DRAM ギャップ)、CPU が「非アイドル」であっても、その大半の時間が実際の演算ではなくメモリ待機に費やされている場合がある。(Source: [[@2017__brendangregg.com__CPU Utilization is Wrong]]) ## 命令バウンドとの対比・IPC による判別 メモリバウンドの対概念は命令バウンド(instruction bound)であり、CPU が実際に命令の実行(retire)に多くのサイクルを使っている状態を指す。両者は IPC(Instructions Per Cycle、サイクルあたり命令数)によって判別できる。Gregg(2017)は IPC が 1.0 未満ならメモリバウンド、1.0 以上なら命令バウンドと単純化する。一方『詳解 システム・パフォーマンス 第2版』第6章は、Netflix のクラウドワークロードの実測で IPC が 0.2(遅い、メモリバウンド寄り)から 1.5(良好、命令バウンド寄り)の範囲に分布したと示しつつ、高い/低いの基準はプロセッサによって異なるため実験的に判断すべきだと注記する。(Source: [[@2017__brendangregg.com__CPU Utilization is Wrong]], [[@2023__OReillyJapan__詳解 システム・パフォーマンス 第2版 - Chapter 6 CPU]] §6.3.7) ## %CPU が「実行中」と「ストール中」を区別しない問題との関係 CPU 利用率(%CPU)は、対象プロセスまたはシステムが CPU コアをアイドル状態以外で占有していた時間の割合であり、この「非アイドル時間」には実際の演算とメモリ待機(ストール)の両方が含まれる。したがって %CPU = 100% を示すシステムであっても、大半の時間がメモリバウンドなストールに費やされている可能性があり、%CPU 単体ではメモリバウンドかどうかを判別できない。(Source: [[@2017__brendangregg.com__CPU Utilization is Wrong]], [[@2023__OReillyJapan__詳解 システム・パフォーマンス 第2版 - Chapter 6 CPU]] §6.3.8) ## 横断的知見 - **両ソースとも「%CPU の非アイドル時間には演算とメモリストールが混在する」という同じ問題認識を共有するが、提示の順序が異なる**: Gregg(2017)のブログは実測データ(`perf stat -a sleep 10` で IPC = 0.16)を先に示し、そこから %CPU が誤解を招くという結論を導く。一方『詳解 システム・パフォーマンス 第2版』第6章は使用率の定義段階(§6.3.8)でメモリストールサイクルを含む旨を明記したうえで、Netflix クラウドの実例(使用率の多くがメモリストールサイクルに占められている)を後段で補強する。同じ事実(%CPU はストールを含む)を、記事は「発見の物語」として、教科書は「定義の一部」として提示している。(Source: [[@2017__brendangregg.com__CPU Utilization is Wrong]], [[@2023__OReillyJapan__詳解 システム・パフォーマンス 第2版 - Chapter 6 CPU]] §6.3.8) - **IPC のメモリバウンド判定閾値(1.0)は、書籍の実測分布(0.2〜1.5)のほぼ中間に位置する**: Gregg(2017)が提示する「IPC < 1.0 でメモリバウンド」という単純な閾値は、書籍が実測したNetflixクラウドワークロードのIPC分布(0.2〜1.5)のちょうど中間あたりにあり、書籍側は「基準はプロセッサ依存で実験的に判断すべき」と釘を刺す。ブログの単純化された閾値と教科書の実測分布は矛盾しないが、教科書の方が閾値の一般化に慎重である。(Source: [[@2017__brendangregg.com__CPU Utilization is Wrong]], [[@2023__OReillyJapan__詳解 システム・パフォーマンス 第2版 - Chapter 6 CPU]] §6.3.7) ## 未解決の問い - メモリバウンドの根本原因(キャッシュミス・TLB ミス・NUMA リモートアクセスなど)を IPC 単独からどこまで切り分けられるか。書籍が言及する pmcarch(8)・tlbstat(8) のような詳細 PMC ツールとの関係を整理する必要がある。 - コンテナ・クラウド環境で CPU ピニングや cgroup がメモリバウンド判定(IPC 計測)にどう影響するか。 ## 関連 - ソース: [[@2017__brendangregg.com__CPU Utilization is Wrong]] / [[@2023__OReillyJapan__詳解 システム・パフォーマンス 第2版 - Chapter 6 CPU]] - 概念: [[CPU利用率]] / [[Instructions Per Cycle]] / [[メモリ階層とキャッシュ]] / [[メモリウォール]] ## 出典 - [[@2017__brendangregg.com__CPU Utilization is Wrong]](IPC によるメモリバウンド/命令バウンド判定・CPU-DRAM ギャップ) - [[@2023__OReillyJapan__詳解 システム・パフォーマンス 第2版 - Chapter 6 CPU]](§6.3.7 IPC/CPI・§6.3.8 使用率の定義とメモリストールサイクル)