Dev Study
← コンピュータの基礎

システム性能分析

12 カテゴリ・120

性能分析I(方法論と待ち行列)

10

性能問題に出くわしたとき、勘で「速くしよう」とする前に、どこが遅いかを体系的に絞り込むための考え方を学びます。リソース側から攻めるUSEメソッドと、リクエスト側から攻めるREDメソッドの視点の違い、使用率・飽和・待ち行列の関係、リトルの法則、そして使用率100%が必ずしも限界を意味しない理由を扱います。/proc/loadavg や /proc/pressure、iostat や vmstat といったLinuxの実際の指標に照らして、数字がなぜそう動くのかを理解することが目標です。

性能分析II(CPUとスケジューラ)

10

LinuxがCPUを誰に配るかを決める仕組みを、CFSからEEVDFへの世代交代、vruntimeとlag、nice値の重み付けという内部構造から追いかけます。そのうえで、ランキュー待ち時間・自発/非自発コンテキストスイッチ・ロードアベレージ・スチールタイム・cgroupスロットリングといった飽和シグナルを、/proc配下の具体的なファイルと結びつけて読み解けるようになります。「CPU使用率が100%でない=余裕がある」とは限らない理由が、指標の定義から説明できるようになることが目標です。

性能分析III(メモリ逼迫の診断)

10

メモリが足りているかを「空き容量」ではなく逼迫の兆候から読み解く方法を学びます。kswapd によるバックグラウンド回収と直接回収の違い、/proc/pressure/memory の some と full、RSS・VSZ・PSS の使い分け、swappiness や oom_score_adj の意味など、診断に直結する指標を扱います。どの数値が動いたとき何を疑うべきか、判断の順序が身につきます。

性能分析IV(ディスクI/Oの測定)

10

ディスクI/Oを「指標としてどう読むか」に絞って学びます。IOPS・スループット・レイテンシの三者がどう連動するか、iostat の await や %util、aqu-sz が実際には何を数えているのか、そしてなぜ現代のNVMeでは %util 100% が飽和を意味しないのかを、man-pages とカーネル公式ドキュメントの定義に沿って確認します。キュー深度や先読み(readahead)を変えたときに、どの指標がどちら向きに動くのかを説明できるようになることが目標です。

性能分析V(プロファイリングとトレーシング)

10

Linuxで「どこが遅いのか」を突き止める観測ツールの原理を学びます。一定間隔でスタックを取るサンプリングと、イベントごとに記録するトレーシングのコスト構造の違いを起点に、perf record と perf stat の仕組み、フレームグラフの正しい読み方、スタックが欠ける原因、ftrace・kprobes・USDT・eBPF・strace がそれぞれカーネルのどこに介入しているのかを整理します。ツールを暗記するのではなく、なぜそのオーバーヘッドになるのかを説明できる状態を目指します。

性能分析VI(スケーラビリティと競合)

10

スレッドやコアを増やしても速くならない、むしろ遅くなる現象の裏側を学びます。ユニバーサル・スケーラビリティ法則のコヒーレンシ項、キャッシュラインの奪い合い、ロック粒度やロックコンボイ、優先度逆転、ワークスティーリングといった「並列化が効かなくなる原因」を、perf c2c や perf lock contention などの計測手段と結び付けて理解できます。

性能分析VII(ネットワーク性能の測定)

10

ネットワークの遅さやスループット不足を、勘ではなくLinuxの実際の指標とツールから読み解く力を養います。ss -ti で見える輻輳ウィンドウやRTT、tcp_rmem/tcp_wmem によるバッファ自動調整、nstat で数える再送やリッスンキュー溢れ、iperf3 のTCP/UDPで測るものの違い、そしてバッファブロートのように「なぜその遅延が生まれるか」に踏み込みます。輻輳制御の一般論ではなく、測る側とチューニングパラメータに焦点を当てます。

性能分析VIII(言語ランタイムとGC)

10

GCの停止やJITのウォームアップなど、アプリ層のランタイムがレイテンシに与える影響を仕組みから理解します。世代別GC・低遅延GC・Goスケジューラ・コネクションプール枯渇まで、「なぜ跳ねるか」を一次ソースで裏取りした2択で確かめます。

性能分析IX(ベンチマークと負荷試験)

10

正しく測るための方法論を扱います。マイクロベンチマークがコンパイラ最適化で計測対象ごと消える罠、協調的欠落(coordinated omission)でテールを見落とす仕組み、クローズドループとオープンループの負荷モデルの違い、周波数スケーリングによる再現性の崩れなど、「その数字は本当に測れているのか」を一次ソースから理解します。

性能分析X(eBPF/BPFによる動的追跡)

10

eBPFを「実際にどう使って観測するか」に踏み込みます。bpftraceのワンライナーがプローブ・フィルタ・アクションでどう組み立てられるか、kprobeとtracepointをどう使い分けるか、検証器(verifier)が何を保証しその代わり何を禁じるのか、マップ(map)でカーネル内集計する意味、per-event転送が必要なときのリングバッファ、そしてCO-RE/BTFがカーネル差をどう吸収するかを、カーネル公式ドキュメントとbpftrace/bccの公式資料の定義に沿って確認します。なぜeBPFがstraceより桁違いに軽いのかを、仕組みから説明できるようになることが目標です。

性能分析XI(クラウド環境の性能)

10

クラウドでは、同じインスタンスタイプでも実測性能が揺れたり、指標が突然頭打ちになったりします。このカテゴリでは、スチールタイム・CPUクレジット・接続ストレージのIOPS上限・ネットワーク帯域バースト・コールドスタートといったクラウド特有の現象を「どの指標を見て、なぜそう動くのか」という診断の視点で学びます。特定サービスの機能紹介ではなく、劣化の症状を読み解けるようになることが目標です。

性能分析XII(CPUキャッシュとメモリアクセス)

10

同じCPU・同じクロックでもプログラムの速さは何倍も変わります。その正体はキャッシュミスやメモリ待ちで生まれる「見えない停滞」です。perf stat のカウンタ(cycles/instructions/cache-misses/branch-misses)を読んでCPUバウンドかメモリバウンドかを切り分け、キャッシュ階層・NUMA・TLB・false sharingがなぜ遅さとして現れるかを測定の視点から理解します。