8.2. パフォーマンスの問題の監視と診断
Red Hat Enterprise Linux 7 ではシステムパフォーマンスの監視、I/O およびファイルシステムやその設定に関連するパフォーマンスの問題の診断を行う際に便利なツールがいくつか用意されています。このセクションではこうしたツールの概要、および I/O およびファイルシステム関連のパフォーマンス問題を監視、診断する方法を例を使用して説明していきます。
8.2.1. vmstat を使用したシステムパフォーマンスの監視
vmstat はシステム全体のプロセス、メモリー、ページング、ブロック I/O、割り込み、CPU アクティビティーについて報告を行います。管理者はこのツールを使用することで、パフォーマンスの問題が I/O サブシステムによるものかを判断しやすくなります。
I/O パフォーマンスに最も関連する情報は以下のコラムです。
- si
- スワップインまたはスワップ領域からの読み取り (KB 単位)。
- so
- スワップアウトまたはスワップ領域への書き込み (KB 単位)。
- bi
- ブロックインまたはブロック書き込み操作 (KB 単位)。
- bo
- ブロックアウトまたはブロック読み取り操作 (KB 単位)。
- wa
- I/O 操作の完了を待機しているキューの部分。
swap 領域とデータが同じデバイスにある場合、スワップインとスワップアウトはメモリー使用量の目安として特に役立ちます。
また、free、buff、cache の各コラムはライトバック頻度を確認する際に役立ちます。cache の値が突然下がって free の値が増えるような場合、ライトバックとページのキャッシュの無効化が始まったことを指しています。
vmstat による分析で、I/O サブシステムがパフォーマンス低下の原因であることを示している場合、管理者は iostat を使用して責任のある I/O デバイスを判断できます。
vmstat は procps-ng パッケージで提供されます。vmstat の使い方については man ページをご覧ください。
$ man vmstat
8.2.2. iostat を使用した I/O パフォーマンスの監視
iostat は sysstat パッケージで提供されます。システム内の I/O デバイスの負荷について報告します。vmstat による分析で、I/O サブシステムがパフォーマンス低下を担当していることが示されている場合は、iostat を使用して I/O デバイスに関する責任を判断できます。
iostat の man ページで定義されているパラメーターを使用すると、iostat レポートの出力にフォーカスできます。
$ man iostat
8.2.2.1. blktrace を使用した詳細な I/O 分析
blktrace は、I/O サブシステムで費やされた時間に関する詳細情報を提供します。コンパニオンユーティリティー blkparse は、blktrace から未加工の出力を読み取り、blktrace によって記録された入出力操作の人間が判読できる要約を生成します。
このツールの詳細は、blktrace(8) および blkparse(1) の man ページを参照してください。
$ man blktrace
$ man blkparse
8.2.2.2. btt を使用した blktrace 出力の分析
btt ユーティリティーは、blktrace パッケージの一部として提供されます。blktrace 出力を分析し、I/O スタックの各領域でデータが費やした時間を表示するため、I/O サブシステムのボトルネックの特定が容易になります。
blktrace
メカニズムによって追跡され、btt によって分析される重要なイベントの一部は次のとおりです。
- I/O イベントのキューイング(
Q
) - ドライバーイベント()への I/O
の
ディスパッチ - I/O イベントの完了(
C
)
イベントの組み合わせを検証して、I/O のパフォーマンスに関与する要因を含むまたは除外することができます。
各 I/O デバイスのサブポートのタイミングを検査するには、I/O デバイスのキャプチャーされた
blktrace
イベント間のタイミングを確認します。たとえば、以下のコマンドは、スケジューラー、ドライバー、およびハードウェアレイヤーを含む、カーネル I/O スタックの下位部分に費やされた合計時間(Q2C
)を待機時間の平均として報告します。
$
iostat -x
[...]
Device: await r_await w_await
vda 16.75 0.97 162.05
dm-0 30.18 1.13 223.45
dm-1 0.14 0.14 0.00
[...]
デバイスが要求の処理に長い時間がかかる場合(
D2C
)、デバイスがオーバーロードしているか、デバイスに送信されたワークロードが最適ではない可能性があります。ストレージデバイスにディスパッチされる前にブロック I/O が長時間キューに置かれている場合(Q2G
)、使用中のストレージが I/O 負荷を提供できないことを示す場合があります。たとえば、LUN のキューが満杯の状態になり、I/O をストレージデバイスにディスパッチできないことがあります。
前後の I/O のタイミングを調べると、ボトルネックの状況が分かります。たとえば、btt がブロック層に送信されるリクエスト間の時間(
Q2Q
)が、ブロックレイヤーで費やされた要求の合計時間(Q2C
)よりも大きいことを示す場合、I/O 要求と I/O サブシステムの間にアイドル時間があり、I/O サブシステムがパフォーマンスの問題を担当しない可能性があることを意味します。
隣接 I/O の
Q2C
値を比較すると、ストレージサービス時間の変動量を示すことができます。値は以下のいずれかになります。
- 小さい範囲ではほぼ一貫している。
- 分布範囲では変動が大きく、ストレージデバイス側での輻輳問題の可能性がある。
このツールの詳細については、btt(1) の man ページをご覧ください。
$
man btt
8.2.2.3. iowatcher を使用した blktrace 出力の分析
iowatcher ツールは blktrace 出力を使用して、I/O を経時的にグラフ化できます。このツールは、ディスク I/O の論理ブロックアドレス (LBA)、1 秒あたりのスループット (メガバイト単位)、シーク数および I/O 操作に重点を置いています。これを使用することで、デバイスの演算回数の上限に到達するタイミングを判断しやすくなります。
このツールの詳細については、iowatcher(1) の man ページをご覧ください。
8.2.3. SystemTap を使用したストレージの監視
Red Hat Enterprise Linux 7 SystemTap ビギナーズガイドには、ストレージパフォーマンスのプロファイリングおよび監視に便利な複数のサンプルスクリプトが含まれています。
以下の SystemTap のサンプルスクリプトはストレージパフォーマンスに関連し、ストレージまたはファイルシステムのパフォーマンスの問題を診断する際に役に立つ場合があります。デフォルトでは、これらは
/usr/share/doc/systemtap-client/examples/io
ディレクトリーにインストールされます。
disktop.stp
- ディスクの読み取りや書き込みの状態を 5 秒ごとにチェックして上位 10 位のエントリーを出力します。
iotime.stp
- 読み取りおよび書き込みの動作に費やした時間、読み取りと書き込みのバイト数を出力します。
traceio.stp
- 監視した累積 I/O トラフィックに応じた上位 10 位の実行可能ファイルを毎秒出力します。
traceio2.stp
- 指定デバイスに対して読み取りおよび書き込みが発生するとその実行可能ファイル名とプロセス ID を出力します。
inodewatch.stp
- 指定のメジャーまたはマイナーデバイス上の指定 inode に対して読み取りや書き込みが発生するたびにその実行可能ファイル名とプロセス ID を出力します。
inodewatch2.stp
- 指定のメジャーまたはマイナーデバイス上の指定 inode で属性が変更されるたびにその実行可能ファイル名、プロセス ID、属性を出力します。