5.2. パフォーマンスのボトルネックの特定
VDO パフォーマンスのボトルネックを特定することは、システム効率を最適化するために重要です。実行できる主要な手順の 1 つは、ボトルネックが CPU、メモリー、バッキングストレージの速度のうちどこにあるのかを判断することです。最も遅いコンポーネントを特定したら、パフォーマンスを向上させる戦略を立てることができます。
パフォーマンス低下の根本原因がハードウェアの問題ではないことを確認するには、ストレージスタックで VDO を使用した場合と使用しない場合のテストを実行します。
VDO の journalQ
スレッドは、特に VDO ボリュームが書き込み操作を処理している場合には、必然的にボトルネックになります。別のスレッドタイプの使用率が journalQ
スレッドよりも高いことが判明した場合、当該タイプのスレッドをさらに追加することでこの問題を修正できます。
5.2.1. top による VDO パフォーマンスの分析
top
ユーティリティーを使用して、VDO スレッドのパフォーマンスを調べることができます。
手順
個々のスレッドを表示します。
$ top -H
注記top
などのツールは、生産的な CPU サイクルと、キャッシュまたはメモリーの遅延により停止したサイクルを区別できません。このようなツールは、キャッシュの競合と、低速なメモリーアクセスを実際の動作として解釈します。ノード間でスレッドを移動すると、1 秒あたりの操作数が増加した一方で、CPU 使用率が低下したように見えることがあります。- f キーを押してフィールドマネージャーを表示します。
-
(↓) キーを使用して
P = Last Used Cpu (SMP)
フィールドに移動します。 -
スペースバーを押して、
P = Last Used Cpu (SMP)
フィールドを選択します。 -
q キーを押してフィールドマネージャーを閉じます。
top
ユーティリティーは、個々のコアの CPU 負荷を表示し、各プロセスまたはスレッドが最近使用した CPU を示します。1 を押すと、CPU ごとの統計情報に切り替えることができます。
関連情報
-
top(1)
man ページ - top の結果の解釈
5.2.2. top の結果の解釈
VDO スレッドのパフォーマンスを分析する際には、次の表を使用して top
ユーティリティーの結果を解釈してください。
値 | 説明 | 提案 |
---|---|---|
スレッドまたは CPU 使用率が 70% を超えている。 | スレッドまたは CPU がオーバーロード状態です。実際の作業を伴わずに CPU 上でスケジュールされている VDO スレッドにより、使用率が高くなっている可能性があります。この状況は、過度のハードウェア割り込み、メモリーの競合、またはリソースの競合によって発生する可能性があります。 | このコアを実行するタイプのスレッドの数を増やします。 |
| コアがタスクをアクティブに処理しています。 | アクションは不要です。 |
| コアが標準の処理作業を実行しています。 | パフォーマンスを向上させるには、コアを追加します。NUMA の競合を回避します。 |
| コアがオーバーコミットされています。 | カーネルスレッドとデバイス割り込み処理を別のコアに再割り当てします。 |
| VDO が、ストレージシステムを I/O リクエストで常にビジー状態に保っています。 [b] | CPU 使用率が非常に低い場合は、I/O 送信スレッドの数を減らします。 |
|
VDO に、必要以上の |
|
I/O リクエストあたりの CPU 使用率が高い。 | スレッドが増えると、I/O リクエストごとの CPU 使用率が増加します。 | CPU、メモリー、またはロックの競合がないか確認します。 |
[a]
数パーセントを超えた値
[b]
この状態は、ストレージシステムが複数のリクエストを処理できる場合、またはリクエストの処理が効率的である場合には適切です。
|
5.2.3. perf による VDO パフォーマンスの分析
perf
ユーティリティーを使用して、VDO の CPU パフォーマンスを確認できます。
前提条件
-
perf
パッケージがインストールされている。
手順
パフォーマンスプロファイルを表示します。
# perf top
perf
の結果を解釈して CPU パフォーマンスを分析します。表5.2 perf の結果の解釈 値 説明 提案 kvdo:bioQ
スレッドがスピンロックを取得するために過度にサイクルを費やす。VDO の下のデバイスドライバーで過度の競合が発生している可能性があります。
kvdo:bioQ
スレッドの数を減らします。CPU 使用率が高い。
NUMA ノード間で競合が生じています。
プロセッサーが対応している場合は、
stalled-cycles-backend
、cache-misses
、およびnode-load-misses
などのカウンターを確認します。ミス率が高いと、他のツールで CPU 使用率が高い場合と同様にストールが発生する場合があり、競合の可能性があります。VDO カーネルスレッドの CPU アフィニティーまたは割り込みハンドラーの IRQ アフィニティーを実装して、処理作業を単一ノードに制限します。
関連情報
-
man ページの
perf-top(1)
5.2.4. sar による VDO パフォーマンスの分析
sar
ユーティリティーを使用すると、VDO パフォーマンスに関する定期レポートを作成できます。
すべてのブロックデバイスドライバーが sar
ユーティリティーに必要なデータを提供できるわけではありません。たとえば、MD RAID などのデバイスは %util
値を報告しません。
前提条件
sysstat
ユーティリティーをインストールします。# dnf install sysstat
手順
ディスク I/O 統計情報を 1 秒間隔で表示します。
$ sar -d 1
sar
の結果を解釈して VDO パフォーマンスを分析します。表5.3 sar の結果の解釈 値 説明 提案 -
基盤となるストレージデバイスの
%util
値が 100% を大きく下回っている。 - VDO が 100% でビジー状態である。
-
bioQ
スレッドが大量の CPU 時間を使用している。
VDO の
bioQ
スレッドが高速デバイスに対して少なすぎます。bioQ
スレッドを追加します。bioQ
スレッドを追加すると、スピンロックの競合により、特定のストレージドライバーの速度が低下する可能性があることに注意してください。-
基盤となるストレージデバイスの
関連情報
-
sar(1)
man ページ