はじめに
[!NOTE] この記事は、筆者が鈍器本を読みながら書き殴った個人的な読書メモをAIに食べさせ、ブログ用に読みやすく再構成させたものです。
ファイルシステムとネットワークの沼をくぐり抜け、今回は物理層の最深部であり、システムの足を最も引っ張るレイヤ「9章 ディスク」です。
データベースのパフォーマンスを追求する際、最終的なデータの永続化を担うディスクの特性を無視することはできませんよね。しかし、現代のディスクは単なる「回転する円盤」から「SSD」へ、さらにはクラウドの「仮想ディスク」へと進化しており、その裏側には何層ものキューやコントローラキャッシュが隠れています。
今回は、iostat の数値を盲信してパニックに陥るのを防ぎ、最新のBPFツールを駆使して「真のディスクボトルネック」を暴き出すためのサバイバル術をチートシート化しました。
1. 「IOPS」の罠:すべてのI/Oが平等だと思うな
ストレージのカタログスペックやベンチマークで「○○万 IOPS!」という数字を見て喜ぶのは素人です。IOPS(1秒あたりのI/Oオペレーション数)は、それ単体では何の意味も持たない指標だと言っても過言ではありません。
- ランダムかシーケンシャルか: 回転磁気ディスクはもちろん、SSDであってもシーケンシャルアクセスとランダムアクセスではスループットやレイテンシの特性が大きく異なります。
- I/Oのサイズと読み書きの割合: 「512バイトの読み出し」と「128KBの書き込み」を同じ1回のIOPSとして数えるのは無意味ですよね。
パフォーマンスを語るなら、「ランダムかシーケンシャルか」「I/Oサイズはいくつか」「読み出しか書き込みか」という前提条件を必ずセットにしなければなりません。ストリーミング(シーケンシャル)なワークロードにとって、IOPSはむしろ下げて大きなI/Oサイズで転送した方がスループットが上がる、なんてこともザラにあります。
2. 「使用率100%」の嘘:仮想ディスクとパーセンテージの罠
iostat を実行して、ディスクの使用率(%util)が100%に張り付いているのを見て「ディスクの限界だ!」と即断するのは非常に危険です。
- 仮想ディスクのブラックボックス: クラウド環境やハードウェアRAIDが提供する「仮想ディスク」の場合、OSから見える使用率は、裏側にある物理ディスクの実際の状態を正確に反映していないことがあります。
- 「100%=余裕ゼロ」ではない: 複数の物理ディスクからなる仮想ボリュームの場合、一部のディスクがビジーなだけでOSには「100%ビジー」と報告されることがあります。実際には残りのディスクがアイドル状態で、まだまだ要求を受け付けられる場合もあるのです。数字に振り回されてはいけませんね。
3. 平均レイテンシは嘘をつく:二峰分布と外れ値
ディスクの応答時間(レイテンシ)を「平均値」だけで評価してはいけません。平均値は、パフォーマンス障害の真犯人である「致命的な外れ値」を綺麗に隠蔽してしまうからです。
- 二峰分布の現実: ディスクからの応答は、オンディスクキャッシュにヒットした場合(100μ秒未満の爆速)と、キャッシュミスして物理メディアにアクセスした場合(数ミリ秒の激遅)が混ざって返ってきます。これをごちゃ混ぜにして「平均」をとることは、現実を大きく歪める行為でしかありません。
biolatencyによる可視化: 平均値を見るのではなく、分布を見ましょう。BCCツールのbiolatencyを使えば、ディスクI/Oレイテンシをヒストグラム化して「二峰分布」や「外れ値」を一目で確認できます。グラフの形こそが真実を語ってくれます。
4. 謎のI/Oの犯人を追う biostacks
「アプリケーションは何もしていないはずなのに、なぜかディスクI/Oが大量に発生している」という怪奇現象に出くわしたとき、旧来のツールだけでは手詰まりになります。
biostacksによる「犯人探し」: I/Oを発行したプロセス名だけでなく、**「そのI/Oを初期化したカーネルのスタックトレース」**まで表示してくれる神ツールです。これを一発叩けば、「実はファイルパーミッションのチェックの過程で発生していた」「バックグラウンドのファイルシステムタスクだった」といった、アプリケーションとは無関係なディスクI/Oの真の理由が白日の下に晒されます。biosnoopによる個別の追跡: I/Oレイテンシの平均ではなく、個別のI/O要求を追跡し、どれが極端に遅いのかを突き止めるツールです。一件ずつ丁寧に追いかける根気も時には必要ですね。
おわりに
この章を読むと、ディスクデバイスは単なるデータの入れ物ではなく、独自のキューやキャッシュ、マイクロプロセッサ(コントローラ)を持った「独立したコンピュータ」であることが痛いほどよくわかります。









