Red Hat Training
A Red Hat training course is available for RHEL 8
システムの状態とパフォーマンスの監視と管理
システムのスループット、レイテンシー、および電力消費の最適化
概要
多様性を受け入れるオープンソースの強化
Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。まずは、マスター (master)、スレーブ (slave)、ブラックリスト (blacklist)、ホワイトリスト (whitelist) の 4 つの用語の置き換えから始めます。この取り組みは膨大な作業を要するため、今後の複数のリリースで段階的に用語の置き換えを実施して参ります。詳細は、Red Hat CTO である Chris Wright のメッセージ を参照してください。
Red Hat ドキュメントへのフィードバック (英語のみ)
Red Hat ドキュメントに関するご意見やご感想をお寄せください。また、改善点があればお知らせください。
特定の文章に関するコメントの送信
- Multi-page HTML 形式でドキュメントを表示し、ページが完全にロードされてから右上隅に Feedback ボタンが表示されていることを確認します。
- カーソルを使用して、コメントを追加するテキスト部分を強調表示します。
- 強調表示されたテキストの近くに表示される Add Feedback ボタンをクリックします。
- フィードバックを追加し、Submit をクリックします。
Bugzilla からのフィードバック送信 (アカウントが必要)
- Bugzilla の Web サイトにログインします。
- Version メニューから正しいバージョンを選択します。
- Summary フィールドにわかりやすいタイトルを入力します。
- Description フィールドに、ドキュメントの改善に関するご意見を記入してください。ドキュメントの該当部分へのリンクも追加してください。
- Submit Bug をクリックします。
第1章 パフォーマンス監視オプションの概要
以下は、Red Hat Enterprise Linux 8 で利用可能なパフォーマンス監視および設定ツールの一部です。
-
Performance Co-Pilot (
pcp
) は、システムレベルのパフォーマンス測定の監視、視覚化、保存、および分析に使用されます。これにより、リアルタイムデータの監視および管理、および履歴データのログと取得が可能になります。 Red Hat Enterprise Linux 8 は、ランレベル
5
以外のシステムを監視するためにコマンドラインから使用できる複数のツールを提供します。以下は、ビルトインのコマンドラインツールです。-
top
は、procps-ng
パッケージで提供されます。これにより、実行中のシステムのプロセスの動的ビューが提供されます。システムの概要や Linux カーネルが現在管理しているタスクの一覧など、さまざまな情報が表示されます。 -
ps
はprocps-ng
パッケージで提供されます。これは、アクティブなプロセスの選択したグループのスナップショットをキャプチャーします。デフォルトでは、検査されたグループは、現在のユーザーが所有し、ps
コマンドが実行される端末に関連付けられているプロセスに制限されます。 -
仮想メモリーの統計 (
vmstat
) は、procps-ng
パッケージで提供されます。システムのプロセス、メモリー、ページング、ブロックの入出力、割り込み、および CPU アクティビティーの即時レポートを提供します。 -
System activity reporter (
sar
) はsysstat
パッケージで提供されます。過去に発生したシステムアクティビティーに関する情報を収集し、報告します。
-
-
perf
は、ハードウェアパフォーマンスカウンターとカーネルトレースポイントを使用して、システム上の他のコマンドやアプリケーションの影響を追跡します。 -
bcc-tools
は BPF コンパイラーコレクション (BCC) に使用され ます。これは、カーネルアクティビティーを監視する 100 を超えるeBPF
スクリプトを提供します。各ツールの詳細は、ツールの使用方法と、ツールが実行する機能について説明する man ページを参照してください。 -
turbostat
はkernel-tools
パッケージで提供されます。Intel 64 プロセッサーのプロセッサートポロジー、周波数、アイドル時の電力状態の統計、温度、および電力使用量について報告します。 -
iostat
はsysstat
パッケージで提供されます。管理者が物理ディスク間で IO 負荷のバランスを取る方法を決定できるように、システム IO デバイスのロードを監視および報告します。 -
irqbalance
は、システムパフォーマンスを改善するために、複数のプロセッサーにハードウェア割り込みを分散します。 -
ss
はソケットに関する統計情報を出力するため、管理者は時間とともにデバイスのパフォーマンスを評価することができます。Red Hat は、Red Hat Enterprise Linux 8 でss
overnetstat
を使用することを推奨します。 -
numastat
はnumactl
パッケージで提供されます。デフォルトでは、numastat
は、カーネルメモリーアロケーターからノードごとの NUMA ヒットしたシステム統計を表示します。最適なパフォーマンスは、高いnuma_hit
値および低いnuma_miss
値によって示されます。 -
numad
は NUMA アフィニティーの自動管理デーモンです。NUMA リソースの割り当て、管理、システムのパフォーマンスを動的に改善するシステム内の NUMA トポロジーとリソースの使用状況を監視します。 -
SystemTap
は、特にカーネルアクティビティーなど、オペレーティングシステムのアクティビティーを監視および分析します。 -
valgrind
は、アプリケーションを合成 CPU で実行し、実行中の既存のアプリケーションコードをインストルメント化してアプリケーションを分析します。次に、アプリケーション実行に関連する各プロセスをユーザー指定のファイル、ファイル記述子、またはネットワークソケットに明確に識別するコメントを出力します。また、メモリーリークを見つける場合にも便利です。 -
pqos
はintel-cmt-cat
パッケージで提供されます。最新の Intel プロセッサーで CPU キャッシュとメモリー帯域幅を監視および制御します。
関連情報
-
pcp
、top
、ps
、vmstat
、sar
、perf
、iostat
、irqbalance
、ss
、numastat
、numad
、valgrind
、およびpqos
の man ページ -
/usr/share/doc/
ディレクトリー - What exactly is the meaning of value "await" reported by iostat?(Red Hat ナレッジベースのアーティクル記事)
- Performance Co-Pilot によるパフォーマンスの監視
第2章 TuneD を使い始める
システム管理者は、TuneD アプリケーションを使用して、さまざまなユースケースに合わせてシステムのパフォーマンスプロファイルを最適化できます。
2.1. TuneD の目的
TuneD は、システムを監視し、特定のワークロードでパフォーマンスを最適化するサービスです。TuneD の中核となるのは、さまざまなユースケースに合わせてシステムをチューニングする プロファイル です。
TuneD には、以下のようなユースケース用に定義されたプロファイルが多数同梱されています。
- 高スループット
- 低レイテンシー
- 節電
各プロファイル向けに定義されたルールを変更し、特定のデバイスのチューニング方法をカスタマイズできます。別のプロファイルに切り替えたり、TuneD を非アクティブにすると、以前のプロファイルによるシステム設定への変更はすべて、元の状態に戻ります。
また、TuneD を設定してデバイスの使用状況の変化に対応し、設定を調整して、アクティブなデバイスのパフォーマンスを向上させ、非アクティブなデバイスの消費電力を削減することもできます。
2.2. TuneD プロファイル
システムを詳細に分析することは、非常に時間のかかる作業です。TuneD では、一般的なユースケースに合わせて定義済みのプロファイルを多数提供しています。プロファイルを作成、変更、および削除することも可能です。
TuneD で提供されるプロファイルは、以下のカテゴリーに分類されます。
- 省電力プロファイル
- パフォーマンス重視プロファイル
performance-boosting プロファイルの場合は、次の側面に焦点が置かれます。
- ストレージおよびネットワークに対して少ないレイテンシー
- ストレージおよびネットワークの高い処理能力
- 仮想マシンのパフォーマンス
- 仮想化ホストのパフォーマンス
プロファイル設定の構文
tuned.conf
ファイルは、1 つの [main]
セクションとプラグインインスタンスを設定するためのその他のセクションが含まれます。ただし、すべてのセクションはオプションです。
ハッシュ記号 (#
) で始まる行はコメントです。
関連情報
-
tuned.conf(5)
の man ページ
2.3. デフォルトの TuneD プロファイル
インストール時に、システムの最適なプロファイルが自動的に選択されます。現時点では、以下のカスタマイズ可能なルールに従ってデフォルトのプロファイルが選択されます。
環境 | デフォルトプロファイル | 目的 |
---|---|---|
コンピュートノード |
| 最適なスループットパフォーマンス |
仮想マシン |
|
ベストパフォーマンスベストパフォーマンスが重要でない場合は、 |
その他のケース |
| パフォーマンスと電力消費の調和 |
関連情報
-
tuned.conf(5)
の man ページ
2.4. マージされた TuneD プロファイル
試験目的で提供された機能として、複数のプロファイルを一度に選択することができます。TuneD は、読み込み中にマージを試みます。
競合が発生した場合は、最後に指定されたプロファイルの設定が優先されます。
例2.1 仮想ゲストの低消費電力
以下の例では、仮想マシンでの実行でパフォーマンスを最大化するようにシステムが最適化され、同時に、(低消費電力が最優先である場合は) 低消費電力を実現するようにシステムがチューニングされます。
# tuned-adm profile virtual-guest powersave
マージは自動的に行われ、使用されるパラメーターの組み合わせが適切であるかどうかはチェックされません。結果として、この機能は一部のパラメーターを逆に調整する可能性があります。これは逆効果になる可能性があります。たとえば、throughput-performance
プロファイルで高スループットにディスクを設定し、同時に、spindown-disk
プロファイルでディスクスピンダウンを低い値に設定します。
関連情報
*tuned-adm
man ページ* tuned.conf(5)
の man ページ
2.5. TuneD プロファイルの場所
TuneD は、次のディレクトリーにプロファイルを保存します。
/usr/lib/tuned/
-
ディストリビューション固有のプロファイルは、このディレクトリーに保存されます。各プロファイルには独自のディレクトリーがあります。プロファイルは
tuned.conf
という名前の主要設定ファイルと、ヘルパースクリプトなどの他の任意のファイルから設定されます。 /etc/tuned/
-
プロファイルをカスタマイズする必要がある場合は、プロファイルのカスタマイズに使用されるディレクトリーにプロファイルディレクトリーをコピーします。同じ名前のプロファイルが 2 つある場合、カスタムのプロファイルは、
/etc/tuned/
に置かれています。
関連情報
-
tuned.conf(5)
の man ページ
2.6. RHEL とともに配布される TuneD プロファイル
以下は、Red Hat Enterprise Linux に TuneD とともにインストールされるプロファイルの一覧です。
利用可能な製品固有またはサードパーティーのTuneDプロファイルが複数存在する可能性があります。このようなプロファイルは通常、個別の RPM パッケージで提供されます。
balanced
デフォルトの省電力プロファイル。パフォーマンスと電力消費のバランスを取ることが目的です。可能な限り、自動スケーリングと自動チューニングを使用します。唯一の欠点はレイテンシーが増加することです。今回のTuneDリリースでは、CPU、ディスク、オーディオ、およびビデオプラグインを有効にし、
conservative
CPU ガバナーを有効にします。radeon_powersave
オプションは、dpm-balanced
値に対応している場合はその値を使用し、それ以外の場合はauto
に設定されます。energy_performance_preference
属性をnormal
の電力設定に変更します。また、scaling_governor
ポリシー属性をconservative
またはpowersave
CPU ガバナーのいずれかに変更します。powersave
省電力パフォーマンスを最大化するプロファイル。実際の電力消費を最小化するためにパフォーマンスを調整できます。今回のTuneDリリースでは、SATA ホストアダプターの USB 自動サスペンド、WiFi 省電力、および Aggressive Link Power Management (ALPM) の省電力を有効にします。また、ウェイクアップ率が低いシステムのマルチコア省電力がスケジュールされ、
ondemand
ガバナーがアクティブ化されます。さらに、AC97 音声省電力と、システムに応じて HDA-Intel 省電力 (10 秒のタイムアウト) が有効になります。KMS が有効なサポート対象の Radeon グラフィックカードがシステムに搭載されている場合、プロファイルは自動省電力に設定されます。ASUS Eee PC では、動的な Super Hybrid Engine が有効になります。energy_performance_preference
属性をpowersave
またはpower
電力設定に変更します。また、scaling_governor
ポリシー属性をondemand
またはpowersave
CPU ガバナーのいずれかに変更します。注記場合によっては、
balanced
プロファイルの方が、powersave
プロファイルよりも効率的です。定義された量の作業を行う場合 (たとえば、動画ファイルをトランスコードする必要がある場合) を考えてください。トランスコードがフルパワーで実行される場合に、マシンの電力消費が少なくなることがあります。これは、タスクがすぐに完了し、マシンがアイドル状態になり、非常に効率的な省電力モードに自動的に切り替わることがあるためです。その一方で、調整されたマシンでファイルをトランスコードすると、マシンはトランスコード中に少ない電力を消費しますが、処理に時間がかかり、全体的な消費電力は高くなることがあります。
このため、一般的に
balanced
プロファイルが優れたオプションになる場合があります。throughput-performance
高スループットに最適化されたサーバープロファイル。これにより、節電メカニズムが無効になり、
sysctl
が有効になるため、ディスクおよびネットワーク IO のスループットパフォーマンスが向上します。CPU ガバナーはperformance
に設定されます。energy_performance_preference
およびscaling_governor
属性をperformance
プロファイルに変更します。accelerator-performance
-
accelerator-performance
プロファイルには、throughput-performance
プロファイルと同じチューニングが含まれます。さらに、CPU を低い C 状態にロックし、レイテンシーが 100us 未満になるようにします。これにより、GPU などの特定のアクセラレーターのパフォーマンスが向上します。 latency-performance
低レイテンシーに最適化されたサーバープロファイル。省電力メカニズムが無効になり、レイテンシーを向上させる
sysctl
設定が有効になります。CPU ガバナーはperformance
に設定され、CPU は低い C 状態にロックされます (PM QoS を使用)。energy_performance_preference
およびscaling_governor
属性をperformance
プロファイルに変更します。network-latency
低レイテンシーネットワークチューニング向けプロファイル。
latency-performance
プロファイルに基づきます。さらに、透過的な huge page と NUMA 分散を無効にし、他のいくつかのネットワーク関連のsysctl
パラメーターの調整を行います。latency-performance
プロファイルを継承します。また、energy_performance_preference
およびscaling_governor
属性をperformance
プロファイルに変更します。hpc-compute
-
高パフォーマンスコンピューティング向けに最適化されたプロファイル。
latency-performance
プロファイルに基づきます。 network-throughput
スループットネットワークチューニング向けプロファイル。
throughput-performance
プロファイルに基づきます。さらに、カーネルネットワークバッファーを増やします。latency-performance
またはthroughput-performance
プロファイルのいずれかを継承します。また、energy_performance_preference
およびscaling_governor
属性をperformance
プロファイルに変更します。virtual-guest
throughput-performance
プロファイルに基づく Red Hat Enterprise 8 仮想マシンおよび VMWare ゲスト向けプロファイル。仮想メモリーのスワップの減少や、ディスクの readahead 値の増加などが行われます。ディスクバリアは無効になりません。throughput-performance
プロファイルを継承します。また、energy_performance_preference
およびscaling_governor
属性をperformance
プロファイルに変更します。virtual-host
throughput-performance
プロファイルに基づいて仮想ホスト用に設計されたプロファイル。他のタスクの中でも特に、仮想メモリーのスワップを減らし、ディスクの先読み値を増やし、ダーティーページの書き戻しというより積極的な値を可能にします。throughput-performance
プロファイルを継承します。また、energy_performance_preference
およびscaling_governor
属性をperformance
プロファイルに変更します。oracle
-
Oracle データベース向けに最適化されたプロファイルは、
throughput-performance
プロファイルに基づいて読み込まれます。これにより Transparent Huge Page が無効になり、その他のパフォーマンス関連カーネルパラメーターが変更されます。このプロファイルは、tuned-profiles-oracle
パッケージで利用できます。 desktop
-
balanced
プロファイルに基づく、デスクトップに最適化されたプロファイル。対話型アプリケーションの応答を向上させるスケジューラーオートグループが有効になります。 optimize-serial-console
printk 値を減らすことで、シリアルコンソールへの I/O アクティビティーを調整するプロファイル。これにより、シリアルコンソールの応答性が向上します。このプロファイルは、他のプロファイルのオーバーレイとして使用することが意図されています。以下に例を示します。
# tuned-adm profile throughput-performance optimize-serial-console
mssql
-
Microsoft SQL Server に提供されるプロファイル。
throughput-performance
プロファイルに基づきます。 intel-sst
ユーザー定義の Intel Speed Select Technology 設定で最適化されたプロファイル。このプロファイルは、他のプロファイルのオーバーレイとして使用することが意図されています。以下に例を示します。
# tuned-adm profile cpu-partitioning intel-sst
2.7. TuneD cpu-partitioning プロファイル
レイテンシーに敏感なワークロード用に Red Hat Enterprise Linux 8 を調整する場合は、cpu-partitioning
TuneD プロファイルを使用することが推奨されます。
Red Hat Enterprise Linux 8 以前では、低レイテンシーの Red Hat ドキュメントで、低レイテンシーのチューニングを実現するために必要な低レベルの手順が数多く説明されていました。Red Hat Enterprise Linux 8 では、cpu-partitioning
TuneD プロファイルを使用することで、低レイテンシーのチューニングをより効率的に実行できます。このプロファイルは、個々の低レイテンシーアプリケーションの要件に従って簡単にカスタマイズできます。
以下の図は、cpu-partitioning
プロファイルの使用方法を示す例になります。この例では、CPU とノードのレイアウトを使用します。
図2.1 cpu-partitioning の図

/etc/tuned/cpu-partitioning-variables.conf
ファイルで cpu-partitioning プロファイルを設定するには、以下の設定オプションを使用します。
- 負荷分散機能のある分離された CPU
cpu-partitioning の図では、4 から 23 までの番号が付けられたブロックが、デフォルトの分離された CPU です。カーネルスケジューラーのプロセスの負荷分散は、この CPU で有効になります。これは、カーネルスケジューラーの負荷分散を必要とする複数のスレッドを使用した低レイテンシープロセス用に設計されています。
isolated_cores=cpu-list
オプションを使用して、/etc/tuned/cpu-partitioning-variables.conf
ファイルで cpu-partitioning プロファイルを設定できます。このオプションは、カーネルスケジューラーの負荷分散を使用する分離する CPU を一覧表示します。分離された CPU の一覧はコンマ区切りで表示するか、
3-5
のようにハイフンを使用して範囲を指定できます。このオプションは必須です。この一覧にない CPU は、自動的にハウスキーピング CPU と見なされます。- 負荷分散を行わずに分離した CPU
cpu-partitioning の図では、2 と 3 の番号が付けられたブロックは、追加のカーネルスケジューラープロセスの負荷分散を提供しない分離された CPU です。
/etc/tuned/cpu-partitioning-variables.conf
ファイルで cpu-partitioning プロファイルを設定するには、no_balance_cores=cpu-list
オプションを使用します。このオプションは、カーネルスケジューラーの負荷分散を使用しない CPU を分離するように一覧表示します。no_balance_cores
オプションの指定は任意ですが、このリストの CPU は、isolated_cores
リストに記載されている CPU のサブセットである必要があります。このような CPU を使用するアプリケーションスレッドは、各 CPU に個別にピン留めする必要があります。
- ハウスキーピング CPU
-
cpu-partitioning-variables.conf
ファイル内で分離されていない CPU は、自動的にハウスキーピング CPU と見なされます。ハウスキーピング CPU では、すべてのサービス、デーモン、ユーザープロセス、移動可能なカーネルスレッド、割り込みハンドラー、およびカーネルタイマーの実行が許可されます。
関連情報
-
tuned-profiles-cpu-partitioning(7)
man ページ
2.8. 低レイテンシーチューニングへの TuneD の cpu-partitioning プロファイルの使用
この手順では、TuneD の cpu-partitioning
プロファイルを使用して、低レイテンシーになるようにシステムをチューニングする方法を説明します。これは、cpu-partitioning の図で説明されているように、cpu-partitioning
と CPU レイアウトを使用できる低レイテンシーのアプリケーションの例を使用します。
この場合のアプリケーションでは、以下を使用します。
- ネットワークからデータを読み込む 1 つの専用リーダースレッドが、CPU 2 に固定されます。
- このネットワークデータを処理する多数のスレッドは、CPU 4-23 に固定されます。
- 処理されたデータをネットワークに書き込む専用のライタースレッドは、CPU 3 に固定されます。
前提条件
-
yum install tuned-profiles-cpu-partitioning
コマンドを root で使用して、cpu-partitioning
TuneD プロファイルをインストールしている。
手順
/etc/tuned/cpu-partitioning-variables.conf
ファイルを編集し、以下の内容を追加します。# Isolated CPUs with the kernel’s scheduler load balancing: isolated_cores=2-23 # Isolated CPUs without the kernel’s scheduler load balancing: no_balance_cores=2,3
cpu-partitioning
TuneD プロファイルを設定します。# tuned-adm profile cpu-partitioning
再起動
再起動後、システムは、cpu-partitioning の図の分離に従って、低レイテンシーにチューニングされます。このアプリケーションでは、タスクセットを使用して、リーダーおよびライターのスレッドを CPU 2 および 3 に固定し、残りのアプリケーションスレッドを CPU 4-23 に固定できます。
関連情報
-
tuned-profiles-cpu-partitioning(7)
man ページ
2.9. cpu-partitioning TuneD プロファイルのカスタマイズ
TuneD プロファイルを拡張して、追加のチューニング変更を行うことができます。
たとえば、cpu-partitioning
プロファイルは、cstate=1
を使用する CPU を設定します。cpu-partitioning
プロファイルを使用しながら、cstate1 から cstate0 に CPU の cstate を変更するために、以下の手順では my_profile という名前の新しい TuneD プロファイルを説明しています。このプロファイルは、cpu-partitioning
プロファイルを継承した後、C state-0 を設定します。
手順
/etc/tuned/my_profile
ディレクトリーを作成します。# mkdir /etc/tuned/my_profile
このディレクトリーに
tuned.conf
ファイルを作成し、次の内容を追加します。# vi /etc/tuned/my_profile/tuned.conf [main] summary=Customized tuning on top of cpu-partitioning include=cpu-partitioning [cpu] force_latency=cstate.id:0|1
新しいプロファイルを使用します。
# tuned-adm profile my_profile
この共有例では、再起動は必要ありません。ただし、my_profile プロファイルの変更を有効にするために再起動が必要な場合は、マシンを再起動します。
関連情報
-
tuned-profiles-cpu-partitioning(7)
man ページ
2.10. RHEL とともに配布されるリアルタイムの TuneD プロファイル
リアルタイムプロファイルは、リアルタイムカーネルを実行するシステムを対象としています。特殊なカーネルビルドなしでは、システムはリアルタイムになりません。RHEL では、このプロファイルは追加のリポジトリーから利用できます。
利用できるリアルタイムプロファイルは以下の通りです。
リアルタイム
ベアメタルのリアルタイムシステムで使用します。
tuned-profiles-realtime
パッケージにより提供されます。これは、RT リポジトリーまたは NFV リポジトリーから入手できます。realtime-virtual-host
リアルタイムに設定された仮想ホストで使用します。
NFV リポジトリーから利用できる
tuned-profiles-nfv-host
パッケージにより提供されます。realtime-virtual-guest
リアルタイムに設定された仮想化ゲストで使用します。
NFV リポジトリーから利用できる
tuned-profiles-nfv-guest
パッケージにより提供されます。
2.11. TuneD の静的および動的チューニング
TuneD が適用するシステムチューニングの 2 つのカテゴリー (static と dynamic) の違いを理解することは、特定の状況や目的にどちらを使用するかを決定する際に重要です。
- 静的なチューニング
-
主に、事前定義された
sysctl
設定およびsysfs
設定の適用と、ethtool
などの複数の設定ツールのワンショットアクティベーションから設定されます。 - 動的チューニング
システムのアップタイム中に、さまざまなシステムコンポーネントがどのように使用されているかを監視します。TuneD は、その監視情報に基づいてシステム設定を動的に調整します。
たとえば、ハードドライブは起動時およびログイン時に頻繁に使用されますが、Web ブラウザーや電子メールクライアントなどのアプリケーションをユーザーが主に使用する場合はほとんど使用されません。同様に、CPU とネットワークデバイスは、異なるタイミングで使用されます。TuneD は、このようなコンポーネントのアクティビティーを監視し、その使用の変化に反応します。
デフォルトでは、動的チューニングは無効になっています。これを有効にするには、
/etc/tuned/tuned-main.conf
ファイルを編集して、dynamic_tuning
オプションを1
に変更します。TuneD は、システムの統計を定期的に分析してから、その統計を使用してシステムのチューニング設定を更新します。これらの更新間の時間間隔を秒単位で設定するには、update_interval
オプションを使用します。現在実装されている動的チューニングアルゴリズムは、パフォーマンスと省電力のバランスを取ろうとし、パフォーマンスプロファイルで無効になります。各プラグインのダイナミックチューニングは、TuneD プロファイルで有効または無効にできます。
例2.2 ワークステーションでの静的および動的のチューニング
一般的なオフィスワークステーションでは、イーサネットネットワークインターフェイスは常に非アクティブの状態です。少数の電子メールのみが出入りするか、一部の Web ページが読み込まれている可能性があります。
このような負荷の場合、ネットワークインターフェイスはデフォルト設定のように常に最高速度で動作する必要はありません。TuneD には、ネットワークデバイスを監視してチューニングを行うプラグインがあり、これによりこの低いアクティビティーを検出して、自動的にそのインターフェイスの速度を下げることができるため、通常は消費電力が少なくなります。
DVD イメージをダウンロードしているとき、または大きな添付ファイル付きのメールが開いているときなど、インターフェイスのアクティビティーが長期間にわたって増加した場合は、TuneD がこれを検出し、アクティビティーレベルが高い間にインターフェイスの速度を最大に設定します。
この原則は、CPU およびディスクの他のプラグインにも使用されます。
2.12. TuneD の no-daemon モード
TuneD は、常駐メモリーを必要としない no-daemon
モードで実行できます。このモードでは、TuneD が設定を適用して終了します。
デフォルトでは、このモードには、以下のように多くの TuneD 機能がないため、no-daemon
モードが無効になっています。
- D-Bus サポート
- ホットプラグサポート
- 設定のロールバックサポート
no-daemon
モードを有効にするには、/etc/tuned/tuned-main.conf
ファイルに以下の行を含めます。
daemon = 0
2.13. TuneD のインストールと有効化
この手順では、TuneD アプリケーションをインストールして有効にし、TuneD プロファイルをインストールして、システムにデフォルトの TuneD プロファイルをあらかじめ設定します。
手順
Tuned
パッケージをインストールします。# yum install tuned
Tuned
サービスを有効にして開始します。# systemctl enable --now tuned
必要に応じて、リアルタイムシステムのTuneD プロファイルをインストールします。
リアルタイムシステムの Tuned プロファイルの場合は、
rhel-8
リポジトリーを有効にします。# subscription-manager repos --enable=rhel-8-for-x86_64-nfv-beta-rpms
インストールします。
# yum install tuned-profiles-realtime tuned-profiles-nfv
TuneDプロファイルが有効であり、適用されていることを確認します。
$ tuned-adm active Current active profile: throughput-performance
注記TuneD が自動的にプリセットするアクティブなプロファイルは、マシンのタイプとシステム設定によって異なります。
$ tuned-adm verify Verification succeeded, current system settings match the preset profile. See tuned log file ('/var/log/tuned/tuned.log') for details.
2.14. 利用可能な TuneD プロファイルの一覧表示
この手順では、使用しているシステムで現在利用可能なTuneDプロファイルの一覧を表示します。
手順
システムで使用可能なすべてのTuneDプロファイルを一覧表示するには、次を使用します。
$ tuned-adm list Available profiles: - accelerator-performance - Throughput performance based tuning with disabled higher latency STOP states - balanced - General non-specialized TuneD profile - desktop - Optimize for the desktop use-case - latency-performance - Optimize for deterministic performance at the cost of increased power consumption - network-latency - Optimize for deterministic performance at the cost of increased power consumption, focused on low latency network performance - network-throughput - Optimize for streaming network throughput, generally only necessary on older CPUs or 40G+ networks - powersave - Optimize for low power consumption - throughput-performance - Broadly applicable tuning that provides excellent performance across a variety of common server workloads - virtual-guest - Optimize for running inside a virtual guest - virtual-host - Optimize for running KVM guests Current active profile: balanced
現在アクティブなプロファイルのみを表示する場合は、次のコマンドを使用します。
$ tuned-adm active Current active profile: throughput-performance
関連情報
-
tuned-adm(8)
の man ページ
2.15. TuneD プロファイルの設定
この手順では、選択した TuneD プロファイルを有効にします。
前提条件
-
TuneD
サービスが実行されています。詳細は、TuneD のインストールと有効化 を参照してください。
手順
必要に応じて、TuneD がシステムに最も適したプロファイルを推奨できます。
# tuned-adm recommend throughput-performance
プロファイルをアクティブ化します。
# tuned-adm profile selected-profile
または、複数のプロファイルの組み合わせをアクティベートできます。
# tuned-adm profile selected-profile1 selected-profile2
例2.3 低消費電力向けに最適化された仮想マシン
以下の例では、仮想マシンでの実行でパフォーマンスを最大化するようにシステムが最適化され、同時に、(低消費電力が最優先である場合は) 低消費電力を実現するようにシステムがチューニングされます。
# tuned-adm profile virtual-guest powersave
お使いのシステムで現在アクティブな TuneD プロファイルを表示します。
# tuned-adm active Current active profile: selected-profile
システムを再起動します。
# reboot
検証手順
TuneD プロファイルが有効であり、適用されていることを確認します。
$ tuned-adm verify Verification succeeded, current system settings match the preset profile. See tuned log file ('/var/log/tuned/tuned.log') for details.
関連情報
-
tuned-adm(8)
の man ページ
2.16. TuneD の無効化
この手順では、TuneD を無効にし、影響を受けるすべてのシステム設定を TuneD が変更する前の元の状態にリセットします。
手順
すべてのチューニングを一時的に無効にするには、次のコマンドを実行します。
# tuned-adm off
チューニングは、
TuneD
サービスの再起動後に再度適用されます。または、
TuneD
サービスを完全に停止して無効にするには、次のようにします。# systemctl disable --now tuned
関連情報
-
tuned-adm(8)
の man ページ
第3章 TuneD プロファイルのカスタマイズ
TuneDプロファイルを作成または変更して、ユースケースに合わせてシステムパフォーマンスを最適化できます。
前提条件
- TuneD のインストールと有効化 に詳述されているように、TuneD をインストールおよび有効化します。
3.1. TuneD プロファイル
システムを詳細に分析することは、非常に時間のかかる作業です。TuneD では、一般的なユースケースに合わせて定義済みのプロファイルを多数提供しています。プロファイルを作成、変更、および削除することも可能です。
TuneD で提供されるプロファイルは、以下のカテゴリーに分類されます。
- 省電力プロファイル
- パフォーマンス重視プロファイル
performance-boosting プロファイルの場合は、次の側面に焦点が置かれます。
- ストレージおよびネットワークに対して少ないレイテンシー
- ストレージおよびネットワークの高い処理能力
- 仮想マシンのパフォーマンス
- 仮想化ホストのパフォーマンス
プロファイル設定の構文
tuned.conf
ファイルは、1 つの [main]
セクションとプラグインインスタンスを設定するためのその他のセクションが含まれます。ただし、すべてのセクションはオプションです。
ハッシュ記号 (#
) で始まる行はコメントです。
関連情報
-
tuned.conf(5)
の man ページ
3.2. デフォルトの TuneD プロファイル
インストール時に、システムの最適なプロファイルが自動的に選択されます。現時点では、以下のカスタマイズ可能なルールに従ってデフォルトのプロファイルが選択されます。
環境 | デフォルトプロファイル | 目的 |
---|---|---|
コンピュートノード |
| 最適なスループットパフォーマンス |
仮想マシン |
|
ベストパフォーマンスベストパフォーマンスが重要でない場合は、 |
その他のケース |
| パフォーマンスと電力消費の調和 |
関連情報
-
tuned.conf(5)
の man ページ
3.3. マージされた TuneD プロファイル
試験目的で提供された機能として、複数のプロファイルを一度に選択することができます。TuneD は、読み込み中にマージを試みます。
競合が発生した場合は、最後に指定されたプロファイルの設定が優先されます。
例3.1 仮想ゲストの低消費電力
以下の例では、仮想マシンでの実行でパフォーマンスを最大化するようにシステムが最適化され、同時に、(低消費電力が最優先である場合は) 低消費電力を実現するようにシステムがチューニングされます。
# tuned-adm profile virtual-guest powersave
マージは自動的に行われ、使用されるパラメーターの組み合わせが適切であるかどうかはチェックされません。結果として、この機能は一部のパラメーターを逆に調整する可能性があります。これは逆効果になる可能性があります。たとえば、throughput-performance
プロファイルで高スループットにディスクを設定し、同時に、spindown-disk
プロファイルでディスクスピンダウンを低い値に設定します。
関連情報
*tuned-adm
man ページ* tuned.conf(5)
の man ページ
3.4. TuneD プロファイルの場所
TuneD は、次のディレクトリーにプロファイルを保存します。
/usr/lib/tuned/
-
ディストリビューション固有のプロファイルは、このディレクトリーに保存されます。各プロファイルには独自のディレクトリーがあります。プロファイルは
tuned.conf
という名前の主要設定ファイルと、ヘルパースクリプトなどの他の任意のファイルから設定されます。 /etc/tuned/
-
プロファイルをカスタマイズする必要がある場合は、プロファイルのカスタマイズに使用されるディレクトリーにプロファイルディレクトリーをコピーします。同じ名前のプロファイルが 2 つある場合、カスタムのプロファイルは、
/etc/tuned/
に置かれています。
関連情報
-
tuned.conf(5)
の man ページ
3.5. TuneD プロファイル間の継承
TuneDプロファイルは、他のプロファイルを基にして、親プロファイルの特定の側面のみを変更できます。
TuneD プロファイルの [main]
セクションは、include
オプションを認識します。
[main]
include=parent
親 プロファイルの設定はすべて、この 子 プロファイルに読み込まれます。以下のセクションでは、子 プロファイルは、親 プロファイルから継承された特定の設定をオーバーライドするか、親 プロファイルに表示されない新しい設定を追加します。
/usr/lib/tuned/
にあらかじめインストールしておいたプロファイルでパラメーターをいくつか調整するだけで、/etc/tuned/
に独自の 子 プロファイルを作成できます。
TuneD のアップグレード後などに、親 プロファイルが更新されると、この変更は 子 プロファイルに反映されます。
例3.2 バランスの取れた省電力プロファイル
以下は、balanced
プロファイルを拡張し、すべてのデバイスの Aggressive Link Power Management (ALPM) を最大省電力に設定するカスタムプロファイルの例です。
[main] include=balanced [scsi_host] alpm=min_power
関連情報
-
tuned.conf(5)
の man ページ
3.6. TuneD の静的および動的チューニング
TuneD が適用するシステムチューニングの 2 つのカテゴリー (static と dynamic) の違いを理解することは、特定の状況や目的にどちらを使用するかを決定する際に重要です。
- 静的なチューニング
-
主に、事前定義された
sysctl
設定およびsysfs
設定の適用と、ethtool
などの複数の設定ツールのワンショットアクティベーションから設定されます。 - 動的チューニング
システムのアップタイム中に、さまざまなシステムコンポーネントがどのように使用されているかを監視します。TuneD は、その監視情報に基づいてシステム設定を動的に調整します。
たとえば、ハードドライブは起動時およびログイン時に頻繁に使用されますが、Web ブラウザーや電子メールクライアントなどのアプリケーションをユーザーが主に使用する場合はほとんど使用されません。同様に、CPU とネットワークデバイスは、異なるタイミングで使用されます。TuneD は、このようなコンポーネントのアクティビティーを監視し、その使用の変化に反応します。
デフォルトでは、動的チューニングは無効になっています。これを有効にするには、
/etc/tuned/tuned-main.conf
ファイルを編集して、dynamic_tuning
オプションを1
に変更します。TuneD は、システムの統計を定期的に分析してから、その統計を使用してシステムのチューニング設定を更新します。これらの更新間の時間間隔を秒単位で設定するには、update_interval
オプションを使用します。現在実装されている動的チューニングアルゴリズムは、パフォーマンスと省電力のバランスを取ろうとし、パフォーマンスプロファイルで無効になります。各プラグインのダイナミックチューニングは、TuneD プロファイルで有効または無効にできます。
例3.3 ワークステーションでの静的および動的のチューニング
一般的なオフィスワークステーションでは、イーサネットネットワークインターフェイスは常に非アクティブの状態です。少数の電子メールのみが出入りするか、一部の Web ページが読み込まれている可能性があります。
このような負荷の場合、ネットワークインターフェイスはデフォルト設定のように常に最高速度で動作する必要はありません。TuneD には、ネットワークデバイスを監視してチューニングを行うプラグインがあり、これによりこの低いアクティビティーを検出して、自動的にそのインターフェイスの速度を下げることができるため、通常は消費電力が少なくなります。
DVD イメージをダウンロードしているとき、または大きな添付ファイル付きのメールが開いているときなど、インターフェイスのアクティビティーが長期間にわたって増加した場合は、TuneD がこれを検出し、アクティビティーレベルが高い間にインターフェイスの速度を最大に設定します。
この原則は、CPU およびディスクの他のプラグインにも使用されます。
3.7. TuneD プラグイン
プラグインは、TuneD がシステムのさまざまなデバイスを監視または最適化するために使用する TuneD プロファイルのモジュールです。
TuneD では、以下の 2 つのタイプのプラグインを使用します。
- プラグインの監視
モニターリングプラグインは、稼働中のシステムから情報を取得するために使用されます。監視プラグインの出力は、動的チューニング向けチューニングプラグインで使用できます。
監視プラグインは、有効ないずれかのチューニングプラグインでメトリクスが必要な場合に必ず自動的にインスタンス化されます。2 つのチューニングプラグインで同じデータが必要な場合は、監視プラグインのインスタンスが 1 つだけ作成され、データが共有されます。
- プラグインのチューニング
- 各チューニングプラグインは、個々のサブシステムをチューニングし、TuneD プロファイルから設定されたいくつかのパラメーターを取得します。各サブシステムには、チューニングプラグインの個別インスタンスで処理される複数のデバイス (複数の CPU やネットワークカードなど) を含めることができます。また、個別デバイスの特定の設定もサポートされます。
TuneD プロファイルのプラグインの構文
プラグインインスタンスが記述されるセクションは、以下のように書式化されます。
[NAME] type=TYPE devices=DEVICES
- NAME
- ログで使用されるプラグインインスタンスの名前です。これは、任意の文字列です。
- TYPE
- チューニングプラグインのタイプです。
- DEVICES
このプラグインインスタンスが処理するデバイスの一覧です。
device
の行には、リスト、ワイルドカード (*
)、否定 (!
) が含まれます。device
の行がないと、TYPE のシステムに現在または後で接続されるすべてのデバイスは、プラグインインスタンスにより処理されます。devices=*
オプションを使用する場合と同じです。例3.4 ブロックデバイスとプラグインのマッチング
次の例では、
sda
、sdb
などsd
で始まるすべてのブロックデバイスに一致し、それらに対する境界は無効にしない例になります。[data_disk] type=disk devices=sd* disable_barriers=false
次の例は、
sda1
およびsda2
を除くすべてのブロックデバイスと一致します。[data_disk] type=disk devices=!sda1, !sda2 disable_barriers=false
プラグインのインスタンスを指定しないと、そのプラグインは有効になりません。
このプラグインがより多くのオプションに対応していると、プラグインセクションでも指定できます。このオプションが指定されておらず、含まれているプラグインでこれまで指定しなかった場合は、デフォルト値が使用されます。
短いプラグイン構文
プラグインインスタンスにカスタム名を付ける必要がなく、設定ファイルにインスタンスの定義が 1 つしかない場合、TuneD は以下の簡単な構文に対応します。
[TYPE] devices=DEVICES
この場合は、type
の行を省略することができます。タイプと同様に、インスタンスは名前で参照されます。上記の例は、以下のように書き換えることができます。
例3.5 短い構文を使用したブロックデバイスのマッチング
[disk] devices=sdb* disable_barriers=false
プロファイルで競合するプラグインの定義
include
オプションを使用して同じセクションを複数回指定した場合は、設定がマージされます。設定をマージできない場合は、競合がある以前の設定よりも、競合がある最後の定義が優先されます。以前に定義されたものが分からない場合は、replace
ブール式オプションを使用して、それを true
に設定します。これにより、同じ名前の以前の定義がすべて上書きされ、マージは行われません。
また、enabled=false
オプションを指定してプラグインを無効にすることもできます。これは、インスタンスが定義されない場合と同じ効果になります。include
オプションから以前の定義を再定義し、カスタムプロファイルでプラグインをアクティブにしない場合には、プラグインを無効にすると便利です。
- 注記
TuneD には、チューニングプロファイルの有効化または無効化の一環として、シェルコマンドを実行する機能が含まれます。これにより、TuneD に統合されていない機能で、TuneD プロファイルを拡張できます。
任意のシェルコマンドは、
script
プラグインを使用して指定できます。
関連情報
-
tuned.conf(5)
の man ページ
3.8. 利用可能な TuneD プラグイン
プラグインの監視
現在、以下の監視プラグインが実装されています。
disk
- デバイスおよび測定間隔ごとのディスク負荷 (IO 操作の数) を取得します。
net
- ネットワークカードおよび測定間隔ごとのネットワーク負荷 (転送済みパケットの数) を取得します。
load
- CPU および測定間隔ごとの CPU 負荷を取得します。
プラグインのチューニング
現在、以下のチューニングプラグインが実装されています。動的チューニングを実装するのは、これらのプラグインの一部のみです。プラグインで対応しているオプションも一覧表示されます。
cpu
CPU ガバナーを、
governor
オプションで指定された値に設定し、CPU 負荷に応じて、電源管理サービス品質 (PM QoS) CPU ダイレクトメモリーアクセス (DMA) のレイテンシーを動的に変更します。CPU 負荷が
load_threshold
オプションで指定された値よりも小さい場合、レイテンシーはlatency_high
オプションで指定した値に設定されます。それ以外では、latency_low
で指定した値に設定されます。レイテンシーを特定の値に強制し、さらに動的に変更しないようにすることもできます。これを行うには、
force_latency
オプションを、必要なレイテンシーの値に設定します。eeepc_she
CPU の負荷に応じて、フロントサイドバス (FSB) の速度を動的に設定します。
この機能は一部のネットブックで利用でき、ASUS Super buf Engine (SHE) としても知られています。
CPU 負荷が
load_threshold_powersave
オプションで指定した値と同じかそれ未満の場合、プラグインは、FSB 速度を、she_powersave
オプションで指定した値に設定します。CPU 負荷がload_threshold_normal
オプションで指定した値と同じかそれより上になる場合は、FSB 速度が、she_normal
オプションで指定された値に設定されます。この機能のハードウェアサポートを TuneD が検出しない場合、静的チューニングには対応せず、プラグインも透過的に無効になります。
net
-
Wake on LAN 機能を、
wake_on_lan
オプションで指定した値に設定します。ethtool
ユーティリティーと同じ構文を使用します。また、インターフェイスの使用状況に応じてインターフェイス速度が動的に変更します。 sysctl
プラグインオプションで指定したさまざまな
sysctl
設定を設定します。この構文は、
name=value
です。name は、sysctl
ユーティリティーが指定した名前と同じです。TuneDで利用可能な別のプラグインで対応していない設定を変更する必要がある場合は、
sysctl
プラグインを使用します。他の特定プラグインが、この設定に対応している場合は、そのプラグインを使用することが推奨されます。usb
USB デバイスの autosuspend タイムアウトを、
autosuspend
パラメーターで指定した値に設定します。値が
0
の場合は、autosuspend が無効になります。vm
transparent_hugepages
オプションの値に合わせて、Transparent Huge Page を有効または無効にします。transparent_hugepages
オプションの有効な値は次のとおりです。- "always"
- "never"
- "madvise"
audio
音声コーデックの autosuspend タイムアウトを、
timeout
オプションで指定した値に設定します。現在、
snd_hda_intel
コーデックおよびsnd_ac97_codec
コーデックに対応しています。値が0
の場合は、autosuspend が無効になります。また、ブール値オプションreset_controller
をtrue
に設定することにより、コントローラーを強制的にリセットすることもできます。disk
elevator
オプションで指定された値にディスクエレベーターを設定します。また、以下も設定します。
-
apm
オプションで指定された値への APM -
scheduler_quantum
オプションで指定された値へのスケジューラーの量子 -
spindown
オプションで指定された値へのディスクスピンダウンタイムアウト -
readahead
パラメーターで指定した値までディスク先読み -
現在のディスクが、
readahead_multiply
オプションで指定した定数を掛けた値に先読みされます。
さらに、このプラグインにより、現在のドライブ使用状況に応じて、ドライブの高度な電力管理設定および spindown タイムアウト設定が動的に変更します。動的チューニングは、ブール値オプション
dynamic
により制御でき、デフォルトで有効になります。-
scsi_host
SCSI ホストのオプションをチューニングします。
Aggressive Link Power Management (ALPM) を、
alpm
オプションで指定した値に設定します。mounts
-
disable_barriers
オプションのブール値に応じて、マウントのバリアを有効または無効にします。 script
プロファイルの読み込み時またはアンロード時に、外部スクリプトまたはバイナリーを実行します。任意の実行可能ファイルを選択できます。
重要script
プラグインは、以前のリリースとの互換性を維持するために提供されています。必要な機能をカバーする場合は、他のTuneD プラグインを使用することが推奨されます。TuneD は、以下のいずれかの引数で実行ファイルを呼び出します。
-
プロファイルの読み込み時に
start
-
プロファイルのアンロード時に
stop
実行可能ファイルに
stop
アクションを適切に実装し、start
アクション中に変更したすべての設定を元に戻す必要があります。この手順を行わないと、TuneD プロファイルを変更した後のロールバック手順が機能しません。bash スクリプトは、Bash ライブラリー
/usr/lib/tuned/functions
をインポートし、そこで定義されている関数を使用できます。これらの関数は、TuneD がネイティブに提供していない機能にのみ使用してください。関数名が_wifi_set_power_level
などのアンダースコアで始まる場合は、将来変更される可能性があるため、関数をプライベートにし、スクリプトでは使用しないでください。プラグイン構造の
script
パラメーターを使用して、実行ファイルへのパスを指定します。例3.6 プロファイルからの Bash スクリプトの実行
プロファイルディレクトリーに置かれた
script.sh
という名前の Bash スクリプトを実行するには、次のコマンドを実行します。[script] script=${i:PROFILE_DIR}/script.sh
-
プロファイルの読み込み時に
sysfs
プラグインオプションで指定したさまざまな
sysfs
設定を設定します。構文は
name=value
となります。name は、使用するsysfs
パスです。このプラグインは、他のプラグインで対応していない一部の設定を変更する必要がある場合に使用します。特定のプラグインが必要な設定に対応する場合は、そのプラグインを優先します。
video
ビデオカードのさまざまな省電力レベルを設定します。現在、Radeon カードにのみ対応しています。
省電力レベルは、
radeon_powersave
オプションを使用して指定できます。対応している値は次のとおりです。-
default
-
auto
-
low
-
mid
-
High
-
dynpm
-
dpm-battery
-
dpm-balanced
-
dpm-perfomance
詳細は www.x.org を参照してください。このプラグインは実験的なものであるため、今後のリリースでオプションが変更する可能性があることに注意してください。
-
bootloader
カーネルコマンドラインにオプションを追加します。このプラグインは、GRUB 2 ブートローダーのみに対応しています。
grub2_cfg_file
オプションを使用すると、GRUB 2 設定ファイルの場所を、標準以外のカスタマイズされた場所に指定できます。そのカーネルオプションは、現在の GRUB 設定とそのテンプレートに追加されます。カーネルオプションを有効にするには、システムを再起動する必要があります。
別のプロファイルに切り替えるか、
TuneD
サービスを手動で停止すると、追加のオプションが削除されます。システムをシャットダウンまたは再起動しても、カーネルオプションはgrub.cfg
ファイルに残ります。カーネルオプションは、以下の構文で指定できます。
cmdline=arg1 arg2 ... argN
例3.7 カーネルコマンドラインの変更
たとえば、
quiet
カーネルオプションを TuneD プロファイルに追加するには、tuned.conf
ファイルに次の行を含めます。[bootloader] cmdline=quiet
以下に、
isolcpus=2
オプションをカーネルコマンドラインに追加するカスタムプロファイルの例を示します。[bootloader] cmdline=isolcpus=2
3.9. TuneD プロファイルの変数
TuneD プロファイルがアクティブになると、変数は実行時に展開します。
TuneD変数を使用すると、TuneDプロファイルで必要な入力を減らすことができます。
TuneDプロファイルには事前定義された変数はありません。プロファイルに [variables]
セクションを作成し、以下の構文を使用すると、独自の変数を定義できます。
[variables] variable_name=value
プロファイル内の変数の値を展開するには、以下の構文を使用します。
${variable_name}
例3.8 変数を使用した CPU コアの分離
以下の例では、${isolated_cores}
変数が 1,2
に展開されるため、カーネルは isolcpus=1,2
オプションで起動します。
[variables] isolated_cores=1,2 [bootloader] cmdline=isolcpus=${isolated_cores}
変数は個別のファイルで指定できます。たとえば、次の行を tuned.conf
に追加できます。
[variables]
include=/etc/tuned/my-variables.conf
[bootloader]
cmdline=isolcpus=${isolated_cores}
isolated_cores=1,2
オプションを /etc/tuned/my-variables.conf
ファイルに追加すると、カーネルが isolcpus=1,2
オプションで起動します。
関連情報
-
tuned.conf(5)
の man ページ
3.10. TuneD プロファイルの組み込み関数
組み込み関数は、TuneD プロファイルがアクティブになると、実行時に拡張します。
これにより、以下が可能になります。
- さまざまな組み込み関数と、TuneD変数の使用
- Python でカスタム関数を作成し、プラグインの形式でTuneD に追加します。
関数を呼び出すには、以下の構文を使用します。
${f:function_name:argument_1:argument_2}
プロファイルと tuned.conf
ファイルが置かれたディレクトリーパスを展開するには、特殊な構文が必要な PROFILE_DIR
関数を使用します、
${i:PROFILE_DIR}
例3.9 変数と組み込み関数を使用した CPU コア分離
次の例では、${non_isolated_cores}
変数は 0,3-5
に展開され、cpulist_invert
組み込み関数が 0,3-5
引数で呼び出されます。
[variables] non_isolated_cores=0,3-5 [bootloader] cmdline=isolcpus=${f:cpulist_invert:${non_isolated_cores}}
cpulist_invert
関数は、CPU の一覧を反転します。6 CPU のマシンでは、反転が 1,2
になり、カーネルは isolcpus=1,2
コマンドラインオプションで起動します。
関連情報
-
tuned.conf(5)
の man ページ
3.11. TuneD プロファイルで利用可能な組み込み関数
すべての TuneD プロファイルで、以下の組み込み関数を使用できます。
PROFILE_DIR
-
プロファイルと
tuned.conf
ファイルが置かれているディレクトリーパスを返します。 exec
- プロセスを実行し、その出力を返します。
assertion
- 2 つの引数を比較します。一致しない 場合、関数は最初の引数からテキストをログに記録し、プロファイルの読み込みを中止します。
assertion_non_equal
- 2 つの引数を比較します。2 つの引数が 一致する 場合、関数は最初の引数からテキストをログに記録し、プロファイルの読み込みを中止します。
kb2s
- キロバイトをディスクセクターに変換します。
s2kb
- ディスクセクターをキロバイトに変換します。
strip
- 渡されたすべての引数から文字列を作成し、最初と最後の空白の両方を削除します。
virt_check
TuneD が仮想マシン (VM) またはベアメタルのどちらで実行しているかを確認します。
- 仮想マシン内では、この関数が最初の引数を返します。
- ベアメタルでは、この関数は、エラーが発生した場合でも 2 番目の引数を返します。
cpulist_invert
-
補完するために CPU の一覧を反転します。たとえば、0 から 3 までの番号が付けられた 4 つの CPU を持つシステムでは、リスト
0,2,3
の反転は1
です。 cpulist2hex
- CPU リストを 16 進数の CPU マスクに変換します。
cpulist2hex_invert
- CPU リストを 16 進数の CPU マスクに変換し、反転します。
hex2cpulist
- 16 進数の CPU マスクを CPU リストに変換します。
cpulist_online
- リストからの CPU がオンラインかどうかをチェックします。オンライン CPU のみを含むリストを返します。
cpulist_present
- リストに CPU が存在するかどうかを確認します。存在する CPU のみを含むリストを返します。
cpulist_unpack
-
1-3,4
形式の CPU リストを、1,2,3,4
に展開します。 cpulist_pack
-
CPU リストを、
1,2,3,5
の形式で1-3,5
に圧縮します。
3.12. 新しい TuneD プロファイルの作成
この手順では、カスタムパフォーマンスルールを使用して新しいTuneDプロファイルを作成します。
前提条件
-
TuneD
サービスが実行されています。詳細は、TuneD のインストールと有効化 を参照してください。
手順
/etc/tuned/
ディレクトリーで、作成するプロファイルと同じ名前の新しいディレクトリー作成します。# mkdir /etc/tuned/my-profile
新しいディレクトリーに、ファイル
tuned.conf
を作成します。必要に応じて、[main]
セクションとプラグイン定義を追加します。たとえば、
balanced
プロファイルの設定を表示します。[main] summary=General non-specialized TuneD profile [cpu] governor=conservative energy_perf_bias=normal [audio] timeout=10 [video] radeon_powersave=dpm-balanced, auto [scsi_host] alpm=medium_power
プロファイルをアクティベートするには、次のコマンドを実行します。
# tuned-adm profile my-profile
TuneD プロファイルが有効であり、システム設定が適用されていることを確認します。
$ tuned-adm active Current active profile: my-profile
$ tuned-adm verify Verification succeeded, current system settings match the preset profile. See tuned log file ('/var/log/tuned/tuned.log') for details.
関連情報
-
tuned.conf(5)
の man ページ
3.13. 既存の TuneD プロファイルの変更
この手順では、既存のTuneD プロファイルに基づいて変更した子プロファイルを作成します。
前提条件
-
TuneD
サービスが実行されています。詳細は、TuneD のインストールと有効化 を参照してください。
手順
/etc/tuned/
ディレクトリーで、作成するプロファイルと同じ名前の新しいディレクトリー作成します。# mkdir /etc/tuned/modified-profile
新しいディレクトリーに、ファイル
tuned.conf
を作成し、以下のように[main]
セクションを設定します。[main] include=parent-profile
parent-profile を、変更しているプロファイルの名前に置き換えます。
プロファイルの変更を含めます。
例3.10 throughput-performance プロファイルでスワップを低減
throughput-perfromance
プロファイルの設定を使用し、vm.swappiness
の値を、デフォルトの 10 ではなく 5 に変更するには、以下を使用します。[main] include=throughput-performance [sysctl] vm.swappiness=5
プロファイルをアクティベートするには、次のコマンドを実行します。
# tuned-adm profile modified-profile
TuneD プロファイルが有効であり、システム設定が適用されていることを確認します。
$ tuned-adm active Current active profile: my-profile
$ tuned-adm verify Verification succeeded, current system settings match the preset profile. See tuned log file ('/var/log/tuned/tuned.log') for details.
関連情報
-
tuned.conf(5)
の man ページ
3.14. TuneD を使用したディスクスケジューラーの設定
この手順では、選択したブロックデバイスに特定のディスクスケジューラーを設定するTuneD プロファイルを作成して有効にします。この設定は、システムを再起動しても持続します。
以下のコマンドと設定で、以下の内容を置き換えます。
-
device をブロックデバイスの名前に置き換えます (例:
sdf
)。 -
selected-scheduler を、デバイスに設定するディスクスケジューラーに置き換えます (例:
bfq
)。
前提条件
-
Tuned
サービスがインストールされ、有効になっている。詳細は、TuneD のインストールと有効化 を参照してください。
手順
必要に応じて、プロファイルのベースとなる既存のTuneDプロファイルを選択します。利用可能なプロファイルの一覧は、RHEL とともに配布される TuneD プロファイル を参照してください。
現在アクティブなプロファイルを確認するには、次のコマンドを実行します。
$ tuned-adm active
TuneD プロファイルを保持する新しいディレクトリーを作成します。
# mkdir /etc/tuned/my-profile
選択したブロックデバイスのシステム固有の識別子を見つけます。
$ udevadm info --query=property --name=/dev/device | grep -E '(WWN|SERIAL)' ID_WWN=0x5002538d00000000_ ID_SERIAL=Generic-_SD_MMC_20120501030900000-0:0 ID_SERIAL_SHORT=20120501030900000
注記この例のコマンドは、指定したブロックデバイスに関連付けられた World Wide Name (WWN) またはシリアル番号として識別されるすべての値を返します。WWN を使用することが推奨されますが、WWN は特定のデバイスで常に利用できる訳ではなく、コマンド例で返される値は、デバイスのシステム固有の ID として使用することが許容されます。
/etc/tuned/my-profile/tuned.conf
設定ファイルを作成します。このファイルで、以下のオプションを設定します。必要に応じて、既存のプロファイルを追加します。
[main] include=existing-profile
WWN 識別子に一致するデバイスに対して選択したディスクスケジューラーを設定します。
[disk] devices_udev_regex=IDNAME=device system unique id elevator=selected-scheduler
ここでは、以下のようになります。
-
IDNAME を、使用されている識別子名に置き換えます (例:
ID_WWN
)。 device system unique id を、選択した識別子の値に置き換えます (例:
0x5002538d00000000
)。devices_udev_regex
オプションで複数のデバイスに一致させるには、識別子を括弧で囲み、垂直バーで区切ります。devices_udev_regex=(ID_WWN=0x5002538d00000000)|(ID_WWN=0x1234567800000000)
-
IDNAME を、使用されている識別子名に置き換えます (例:
プロファイルを有効にします。
# tuned-adm profile my-profile
検証手順
TuneD プロファイルがアクティブで、適用されていることを確認します。
$ tuned-adm active Current active profile: my-profile
$ tuned-adm verify Verification succeeded, current system settings match the preset profile. See TuneD log file ('/var/log/tuned/tuned.log') for details.
/sys/block/device/queue/scheduler
ファイルの内容を読み取ります。# cat /sys/block/device/queue/scheduler [mq-deadline] kyber bfq none
ファイル名の device を、
sdc
などのブロックデバイス名に置き換えます。アクティブなスケジューラーは、角括弧 (
[]
) に一覧表示されます。
関連情報
第4章 tuna インターフェイスを使用したシステムの確認
tuna
ツールを使用してスケジューラーの調整可能パラメーターの調整、スレッド優先度の調整、IRQ ハンドラー、CPU コアおよびソケットの分離を行います。tuna は、チューニングタスクを実行する際の複雑性を軽減します。
tuna
ツールは、以下の操作を実行します。
- システム上の CPU の表示
- システム上で現在実行中の割り込み要求 (IRQ) を表示します。
- スレッドのポリシーおよび優先度の情報の変更
- システムの現在のポリシーと優先度を表示します。
4.1. tuna ツールのインストール
tuna
ツールは、稼働中のシステムで使用されるように設計されています。これにより、アプリケーション固有の測定ツールで、変更の直後にシステムパフォーマンスを確認および分析できます。
この手順では、tuna
ツールをインストールする方法を説明します。
手順
tuna
ツールをインストールします。# yum install tuna
検証手順
利用可能な
tuna
CLI オプションを表示します。# tuna -h
関連情報
-
tuna(8)
の man ページ
4.2. tuna ツールを使用したシステムステータスの表示
この手順では、tuna
コマンドラインインターフェイス (CLI) ツールを使用してシステムの状態を表示する方法を説明します。
前提条件
- tuna ツールがインストールされている。詳細は、tuna ツールのインストール を参照してください。
手順
現在のポリシーおよび優先度を表示するには、以下を実行します。
# tuna --show_threads thread pid SCHED_ rtpri affinity cmd 1 OTHER 0 0,1 init 2 FIFO 99 0 migration/0 3 OTHER 0 0 ksoftirqd/0 4 FIFO 99 0 watchdog/0
PID に対応する特定のスレッドまたはコマンド名と一致する場合は、次のコマンドを実行します。
# tuna --threads=pid_or_cmd_list --show_threads
pid_or_cmd_list 引数は、コンマ区切りの PID またはコマンド名パターンの一覧です。
-
tuna
CLI を使用して CPU をチューニングするには、tuna ツールを使用した CPU のチューニング を参照してください。 -
tuna
ツールを使用して IRQ をチューニングするには、tuna ツールを使用した IRQ のチューニング を参照してください。 変更した設定を保存するには、以下を実行します。
# tuna --save=filename
このコマンドは、現在実行中のカーネルスレッドのみを保存します。実行していないプロセスは保存されません。
関連情報
-
tuna(8)
の man ページ
4.3. tuna ツールを使用した CPU の調整
tuna
ツールコマンドは、個別の CPU をターゲットとして指定できます。
tuna ツールを使用すると、以下が可能になります。
CPU の分離
- 指定した CPU で実行しているすべてのタスクが、次に利用可能な CPU に移動します。CPU の分離は、全スレッドのアフィニティーマスクから削除することで利用できなくなります。
CPU の追加
- 指定された CPU でタスクを実行できるようにします。
CPU の復元
- 指定した CPU を以前の設定に戻します。
この手順では、tuna
CLI を使用して CPU を調整する方法を説明します。
前提条件
- tuna ツールがインストールされている。詳細は、tuna ツールのインストール を参照してください。
手順
コマンドの影響を受ける CPU の一覧を指定するには、次のコマンドを実行します。
# tuna --cpus=cpu_list [command]
cpu_list 引数は、コンマ区切りの CPU 番号の一覧です。例:
--cpus=0,2
.CPU リストは、--cpus="1-3"
の範囲でも指定でき、CPU 1、2、および 3 を選択します。現在の cpu_list に特定の CPU を追加するには、たとえば
--cpus=+0
を使用します。[command] を、
--isolate
に置き換えます。CPU を分離するには、以下を実行します。
# tuna --cpus=cpu_list --isolate
CPU を指定するには、以下を実行します。
# tuna --cpus=cpu_list --include
4 つ以上のプロセッサーを持つシステムを使用するには、すべての ssh スレッドを CPU 0 および 1 で実行し、CPU 2 および 3 のすべての
http
スレッドを実行する方法を表示します。# tuna --cpus=0,1 --threads=ssh\* \ --move --cpus=2,3 --threads=http\* --move
このコマンドは、以下の操作を順次実行します。
- CPU 0 および 1 を選択します。
-
ssh
で開始するスレッドをすべて選択します。 -
選択したスレッドを選択した CPU に移動します。tuna は、
ssh
で始まるスレッドのアフィニティーマスクを適切な CPU に設定します。CPU は、数字で 0 および 1 で表すことができ、16 進マスクでは 0x3 で、またはバイナリーでは 11 として表現できます。 - CPU 一覧を 2 および 3 にリセットします。
-
http
で始まるすべてのスレッドを選択します。 -
選択したスレッドを指定された CPU に移動します。tuna は、
http
で始まるスレッドのアフィニティーマスクを指定された CPU に設定します。CPU は、16 進マスクで 0xC または 1100 のバイナリーで 2 および 3 で表すこともできます。
検証手順
現在の設定を表示し、変更が想定どおりに実行されたことを確認します。
# tuna --threads=gnome-sc\* --show_threads \ --cpus=0 --move --show_threads --cpus=1 \ --move --show_threads --cpus=+0 --move --show_threads thread ctxt_switches pid SCHED_ rtpri affinity voluntary nonvoluntary cmd 3861 OTHER 0 0,1 33997 58 gnome-screensav thread ctxt_switches pid SCHED_ rtpri affinity voluntary nonvoluntary cmd 3861 OTHER 0 0 33997 58 gnome-screensav thread ctxt_switches pid SCHED_ rtpri affinity voluntary nonvoluntary cmd 3861 OTHER 0 1 33997 58 gnome-screensav thread ctxt_switches pid SCHED_ rtpri affinity voluntary nonvoluntary cmd 3861 OTHER 0 0,1 33997 58 gnome-screensav
このコマンドは、以下の操作を順次実行します。
-
gnome-sc
スレッドで始まるすべてのスレッドを選択します。 - 選択したスレッドを表示して、ユーザーがアフィニティーマスクと RT の優先度を検証できるようにします。
- CPU 0 を選択します。
-
gnome-sc
スレッドを指定の CPU 0 に移動します。 - 移動の結果を表示します。
- CPU 一覧を CPU 1 にリセットします。
-
gnome-sc
スレッドを指定した CPU (CPU 1) に移動します。 - 移動の結果を表示します。
- CPU 一覧に CPU 0 を追加します。
-
gnome-sc
スレッドを、指定した CPU、CPU 0、および 1 に移動します。 - 移動の結果を表示します。
-
関連情報
-
/proc/cpuinfo
ファイル -
tuna(8)
の man ページ
4.4. tuna ツールを使用した IRQ のチューニング
/proc/interrupts
ファイルには、IRQ ごとの割り込みの数、割り込みのタイプ、およびその IRQ にあるデバイスの名前が記録されます。
この手順では、tuna
ツールを使用して IRQ を調整する方法を説明します。
前提条件
- tuna ツールがインストールされている。詳細は、tuna ツールのインストール を参照してください。
手順
現在の IRQ とそれらのアフィニティーを表示するには、以下を実行します。
# tuna --show_irqs # users affinity 0 timer 0 1 i8042 0 7 parport0 0
コマンドの影響を受ける IRQ の一覧を指定するには、次のコマンドを実行します。
# tuna --irqs=irq_list [command]
irq_list 引数は、コンマ区切りの IRQ 番号またはユーザー名パターンの一覧です。
[コマンド] を、たとえば
--spred
に置き換えます。指定した CPU に割り込みを移動するには、以下を実行します。
# tuna --irqs=128 --show_irqs # users affinity 128 iwlwifi 0,1,2,3 # tuna --irqs=128 --cpus=3 --move
128 を irq_list 引数に置き換え、3 を cpu_list 引数に置き換えます。
cpu_list 引数は、
--cpus=0,2
などのコンマ区切り CPU 番号の一覧です。詳細は、tuna ツールを使用した CPU の調整 を参照してください。
検証手順
選択した IRQ の状態を、割り込みを指定の CPU に移動してから比較します。
# tuna --irqs=128 --show_irqs # users affinity 128 iwlwifi 3
関連情報
-
/procs/interrupts
ファイル -
tuna(8)
の man ページ
第5章 RHEL システムロールを使用したパフォーマンスの監視
システム管理者は、Ansible Automation Platform コントロールノードで metrics
RHEL システムロールを使用して、システムのパフォーマンスを監視できます。
5.1. RHEL システムロールを使用するためのコントロールノードと管理対象ノードの準備
個々の RHEL システムロールを使用してサービスおよび設定を管理するには、コントロールノードと管理ノードを準備する必要があります。
5.1.1. RHEL 8 でのコントロールノードの準備
RHEL システムロールを使用する前に、コントロールノードを設定する必要があります。次に、このシステムは Playbook に従ってインベントリーから管理対象ホストを設定します。
前提条件
- BIND 9.16 以降がインストールされている。RHEL のインストールの詳細は、標準的な RHEL 8 インストールの実行 を参照してください。
- システムがカスタマーポータルに登録されている。
-
Red Hat Enterprise Linux Server
サブスクリプションがシステムに割り当てられている。 -
カスタマーポータルアカウントで利用可能な場合は、
Ansible Automation Platform
サブスクリプションをシステムにアタッチしている。
手順
rhel-system-roles
パッケージをインストールします。[root@control-node]# yum install rhel-system-roles
このコマンドは、
ansible-core
パッケージを依存関係としてインストールします。注記RHEL 8.5 以前のバージョンでは、Ansible パッケージは、Ansible Core ではなく Ansible Engine から提供され、異なるレベルのサポートを提供していました。パッケージは RHEL 8.6 以降の Ansible 自動化コンテンツと互換性がない可能性があるため、Ansible Engine を使用しないでください。詳細は、RHEL 9 および RHEL 8.6 以降の AppStream リポジトリーに含まれる Ansible Core パッケージのサポート範囲 を参照し てください。
Playbook を管理および実行するために
ansible
という名前のユーザーを作成します。[root@control-node]# useradd ansible
新しく作成した
ansible
ユーザーに切り替えます。[root@control-node]# su - ansible
このユーザーとして残りの手順を実行します。
SSH の公開鍵と秘密鍵を作成します。
[ansible@control-node]$ ssh-keygen Generating public/private rsa key pair. Enter file in which to save the key (/home/ansible/.ssh/id_rsa): <password> ...
キーファイルの推奨されるデフォルトの場所を使用します。
- オプション: 接続を確立するたびに Ansible が SSH キーのパスワードを要求しないように、SSH エージェントを設定します。
~/.ansible.cfg
ファイルを次の内容で作成します。[defaults] inventory = /home/ansible/inventory remote_user = ansible [privilege_escalation] become = True become_method = sudo become_user = root become_ask_pass = True
注記~/.ansible.cfg
ファイルの設定は優先度が高く、グローバルな/etc/ansible/ansible.cfg
ファイルの設定をオーバーライドします。この設定により、Ansible は以下のアクションを実行します。
- 指定されたインベントリーファイルのホストを管理します。
-
Ansible は、管理対象ノードへの SSH 接続を確立するときに、
remote_user
パラメーターで設定されたアカウントを使用します。 -
Ansible は
sudo
ユーティリティーを使用して、root
ユーザーとして管理対象ノードでタスクを実行します。 - Playbook を適用するたびに、リモートユーザーの root パスワードの入力を要求します。これは、セキュリティー上の理由から推奨されます。
管理対象ホストのホスト名を一覧表示する
~/inventory
ファイルを INI または YAML 形式で作成します。また、インベントリーファイルでホストのグループを定義することもできます。たとえば、以下は、3 つのホストとUS
という名前の 1 つのホストグループを含む INI 形式のインベントリーファイルです。managed-node-01.example.com [US] managed-node-02.example.com ansible_host=192.0.2.100 managed-node-03.example.com
制御ノードはホスト名を解決できる必要があることに注意してください。DNS サーバーが特定のホスト名を解決できない場合は、ホストエントリーの横に
ansible_host
パラメーターを追加して、その IP アドレスを指定します。
次のステップ
- 管理対象ノードを準備します。詳細は、管理対象ノードの準備 を 参照してください。
5.1.2. 管理対象ノードの準備
管理ノードは、インベントリーにリストされているシステムであり、Playbook に従ってコントロールノードによって設定されます。管理ホストに Ansible をインストールする必要はありません。
前提条件
- 制御ノードを準備している。詳細は、Preparing a control node on RHEL 8 を参照してください。
コントロールノードからの SSH アクセスがある。
重要root
ユーザーとしての直接 SSH アクセスはセキュリティーリスクです。このリスクを軽減するには、このノードでローカルユーザーを作成し、管理対象ノードを準備するときにsudo
ポリシーを設定します。コントロールノードの Ansible は、ローカルユーザーアカウントを使用して管理対象ノードにログインし、root
などの別のユーザーとして Playbook を実行できます。
手順
ansible
という名前のユーザーを作成します。[root@managed-node-01]# useradd ansible
制御ノードは後でこのユーザーを使用して、このホストへの SSH 接続を確立します。
ansible
ユーザーのパスワードを設定します。[root@managed-node-01]# passwd ansible Changing password for user ansible. New password: <password> Retype new password: <password> passwd: all authentication tokens updated successfully.
Ansible が
sudo
を使用してroot
ユーザーとしてタスクを実行する場合は、このパスワードを入力する必要があります。ansible
ユーザーの SSH 公開鍵を管理対象ノードにインストールします。ansible
ユーザーとして制御ノードにログインし、SSH 公開鍵を管理対象ノードにコピーします。[ansible@control-node]$ ssh-copy-id managed-node-01.example.com /usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/home/ansible/.ssh/id_rsa.pub" The authenticity of host 'managed-node-01.example.com (192.0.2.100)' can't be established. ECDSA key fingerprint is SHA256:9bZ33GJNODK3zbNhybokN/6Mq7hu3vpBXDrCxe7NAvo.
プロンプトが表示されたら、
yes
を入力して接続します。Are you sure you want to continue connecting (yes/no/[fingerprint])? yes /usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed /usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
プロンプトが表示されたら、パスワードを入力します。
ansible@managed-node-01.example.com's password: <password> Number of key(s) added: 1 Now try logging into the machine, with: "ssh '<managed-node-01.example.com>'" and check to make sure that only the key(s) you wanted were added.
コントロールノードでコマンドをリモートで実行して、SSH 接続を確認します。
[ansible@control-node]$ ssh <managed-node-01.example.com> whoami ansible
ansible
ユーザーのsudo
設定を作成します。visudo
コマンドを使用して、/etc/sudoers.d/ansible
ファイルを作成および編集します。[root@managed-node-01]# visudo /etc/sudoers.d/ansible
通常のエディターと比べて
visudo
を使用する利点は、このユーティリティーがファイルをインストールする前に基本的な健全性チェックと解析エラーのチェックを提供することです。/etc/sudoers.d/ansible
ファイルで、要件に応じたsudoers
ポリシーを設定します。次に例を示します。ansible
ユーザーのパスワードを入力した後、このホスト上で任意のユーザーおよびグループとしてすべてのコマンドを実行する権限をansible
ユーザーに付与するには、以下を使用します。ansible ALL=(ALL) ALL
ansible
ユーザーのパスワードを入力せずに、このホスト上で任意のユーザーおよびグループとしてすべてのコマンドを実行する権限をansible
ユーザーに付与するには、以下を使用します。ansible ALL=(ALL) NOPASSWD: ALL
または、セキュリティー要件に合わせてより細かいポリシーを設定します。
sudoers
ポリシーの詳細は、sudoers (5)
man ページを参照してください。
検証
すべての管理対象ノードで、コントロールノードからコマンドを実行できることを確認します。
[ansible@control-node]$ ansible all -m ping BECOME password: <password> managed-node-01.example.com | SUCCESS => { "ansible_facts": { "discovered_interpreter_python": "/usr/bin/python3" }, "changed": false, "ping": "pong" } ...
ハードコーディングされた すべての ホストグループには、インベントリーファイルにリストされているすべてのホストが動的に含まれます。
Ansible command モジュールを使用して、管理対象ホストで
whoami
ユーティリティーを実行して、権限昇格が正しく機能していることを確認し
ます。[ansible@control-node]$ ansible managed-node-01.example.com -m command -a whoami BECOME password: <password> managed-node-01.example.com | CHANGED | rc=0 >> root
コマンドが root を返す場合は、管理対象ノードで
sudo
を正しく設定している。
関連情報
- RHEL 8 でコントロールノードの準備
-
sudoers(5)
man ページ
5.2. metrics
システムロールの概要
RHEL システムロールは、複数の RHEL システムをリモートで管理する一貫した設定インターフェイスを提供する Ansible ロールおよびモジュールの集合です。metrics
システムロールは、ローカルシステムのパフォーマンス分析サービスを設定します。これには、オプションでローカルシステムによって監視されるリモートシステムの一覧が含まれます。metrics
システムロールを使用すると、pcp
の設定とデプロイメントが Playbook によって処理されるため、pcp
を個別に設定せずに、pcp
を使用してシステムパフォーマンスを監視できます。
表5.1 metrics
システムロール変数
ロール変数 | 説明 | 使用例 |
---|---|---|
metrics_monitored_hosts |
ターゲットホストが分析するリモートホストの一覧。これらのホストにはターゲットホストにメトリックが記録されるため、各ホストの |
|
metrics_retention_days | 削除前のパフォーマンスデータの保持日数を設定します。 |
|
metrics_graph_service |
|
|
metrics_query_service |
|
|
metrics_provider |
メトリックを提供するために使用するメトリックコレクターを指定します。現在、サポートされている唯一のメトリックプロバイダーは |
|
metrics_manage_firewall |
|
|
metrics_manage_selinux |
|
|
metrics_connections
で使用されるパラメーターの詳細と、metrics
システムロールに関する追加情報は、/usr/share/ansible/roles/rhel-system-roles.metrics/README.md
ファイルを参照してください。
5.3. metrics
システムロールを使用した視覚化によるローカルシステムの監視
この手順では、metrics
RHEL システムロールを使用してローカルシステムを監視し、Grafana
でデータ可視化を同時にプロビジョニングする方法を説明します。
前提条件
- Ansible Core パッケージがコントロールマシンにインストールされている。
-
監視するマシンに
rhel-system-roles
パッケージがインストールされている。
手順
以下のコンテンツをインベントリーに追加して、
/etc/ansible/hosts
Ansible インベントリーのlocalhost
を設定します。localhost ansible_connection=local
以下の内容を含む Ansible Playbook を作成します。
--- - name: Manage metrics hosts: localhost vars: metrics_graph_service: yes metrics_manage_firewall: true metrics_manage_selinux: true roles: - rhel-system-roles.metrics
Ansible Playbook の実行:
# ansible-playbook name_of_your_playbook.yml
注記metrics_graph_service
のブール値が value="yes" に設定されているため、Grafana
は自動的にインストールされ、データソースとして追加されたpcp
でプロビジョニングされます。metrics_manage_firewall と metrics_manage_selinux はいずれも true に設定されているため、metrics ロールは firewall および selinux システムロールを使用して metrics ロールによって使用されるポートを管理します。-
マシンで収集されるメトリックを視覚化するには、Grafana Web UI へのアクセス の説明どおりに
grafana
Web インターフェイスにアクセスします。
5.4. metrics
システムロールを使用した自己監視のための個別システムフリートの設定
この手順では、metrics
システムロールを使用して、それ自体を監視するマシンフリートの設定方法を説明します。
前提条件
- Ansible Core パッケージがコントロールマシンにインストールされている。
-
Playbook の実行に使用するマシンに
rhel-system-roles
パッケージがインストールされている。 - SSH 接続が確立している。
手順
Playbook 経由で監視するマシンの名前または IP を、括弧で囲まれた識別グループ名で
/etc/ansible/hosts
Ansible インベントリーファイルに追加します。[remotes] webserver.example.com database.example.com
以下の内容を含む Ansible Playbook を作成します。
--- - hosts: remotes vars: metrics_retention_days: 0 metrics_manage_firewall: true metrics_manage_selinux: true roles: - rhel-system-roles.metrics
注記metrics_manage_firewall
とmetrics_manage_selinux
はいずれも true に設定されているため、metrics ロールはfirewall
およびselinux
ロールを使用してmetrics
ロールによって使用されるポートを管理します。Ansible Playbook の実行:
# ansible-playbook name_of_your_playbook.yml -k
リモートシステムに接続するためのパスワードを求められる -k
です。
5.5. metrics
システムロールを使用したローカルマシン経由でのマシンフリートの一元監視
この手順では、grafana
を介したデータの視覚化のプロビジョニングおよび redis
経由でのデータのクエリーをしながら、metrics
システムロールを使用して、マシンフリートを一元管理するローカルマシンの設定方法を説明します。
前提条件
- Ansible Core パッケージがコントロールマシンにインストールされている。
-
Playbook の実行に使用するマシンに
rhel-system-roles
パッケージがインストールされている。
手順
以下の内容を含む Ansible Playbook を作成します。
--- - hosts: localhost vars: metrics_graph_service: yes metrics_query_service: yes metrics_retention_days: 10 metrics_monitored_hosts: ["database.example.com", "webserver.example.com"] metrics_manage_firewall: yes metrics_manage_selinux: yes roles: - rhel-system-roles.metrics
Ansible Playbook の実行:
# ansible-playbook name_of_your_playbook.yml
注記metrics_graph_service
およびmetrics_query_service
のブール値は value="yes" に設定されているため、grafana
は、redis
にインデックス化されたpcp
データの記録のあるデータソースとして追加されたpcp
で自動的にインストールおよびプロビジョニングされます。これにより、pcp
クエリー言語をデータの複雑なクエリーに使用できます。metrics_manage_firewall
とmetrics_manage_selinux
はいずれも true に設定されているため、metrics
ロールはfirewall
およびselinux
ロールを使用してmetrics
ロールによって使用されるポートを管理します。-
マシンによって一元的に収集されるメトリックのグラフィック表示とデータのクエリーを行うには、Grafana Web UI へのアクセス で説明されているように、
grafana
Web インターフェイスにアクセスします。
5.6. metrics
システムロールを使用したシステム監視中の認証設定
PCP は、Simple Authentication Security Layer (SASL) フレームワークを介して scram-sha-256
認証メカニズムに対応します。metrics
RHEL システムロールは、scram-sha-256
認証メカニズムを使用して認証を設定する手順を自動化します。この手順では、metrics
RHEL システムロールを使用して、認証を設定する方法を説明します。
前提条件
- Ansible Core パッケージがコントロールマシンにインストールされている。
-
Playbook の実行に使用するマシンに
rhel-system-roles
パッケージがインストールされている。
手順
認証を設定する Ansible Playbook に、以下の変数を追加します。
--- vars: metrics_username: your_username metrics_password: your_password metrics_manage_firewall: true metrics_manage_selinux: true
注記metrics_manage_firewall
とmetrics_manage_selinux
はいずれも true に設定されているため、metrics
ロールはfirewall
およびselinux
ロールを使用してmetrics
ロールによって使用されるポートを管理します。Ansible Playbook の実行:
# ansible-playbook name_of_your_playbook.yml
検証手順
sasl
設定を確認します。# pminfo -f -h "pcp://ip_adress?username=your_username" disk.dev.read Password: disk.dev.read inst [0 or "sda"] value 19540
ip_adress は、ホストの IP アドレスに置き換える必要があります。
5.7. metrics
システムロールを使用した SQL サーバーのメトリクスコレクションの設定と有効化
この手順では、metrics
RHEL システムロールを使用して、ローカルシステムの pcp
を使用して Microsoft SQL Server のメトリック収集の設定と有効化を自動化する方法を説明します。
前提条件
- Ansible Core パッケージがコントロールマシンにインストールされている。
-
監視するマシンに
rhel-system-roles
パッケージがインストールされている。 - Red Hat Enterprise Linux に Microsoft SQL Server をインストールし、SQL Server への信頼できる接続を確立している。Red Hat に SQL Server をインストールしてデータベースを作成する を参照してください。
- Red Hat Enterprise Linux 用の SQL Server の Microsoft ODBC ドライバーがインストールされている。Red Hat Enterprise Server および Oracle Linux を参照してください。
手順
以下のコンテンツをインベントリーに追加して、
/etc/ansible/hosts
Ansible インベントリーのlocalhost
を設定します。localhost ansible_connection=local
以下の内容が含まれる Ansible Playbook を作成します。
--- - hosts: localhost vars: metrics_from_mssql: true metrics_manage_firewall: true metrics_manage_selinux: true roles: - role: rhel-system-roles.metrics
注記metrics_manage_firewall
とmetrics_manage_selinux
はいずれも true に設定されているため、metrics
ロールはfirewall
およびselinux
ロールを使用してmetrics
ロールによって使用されるポートを管理します。Ansible Playbook の実行:
# ansible-playbook name_of_your_playbook.yml
検証手順
pcp
コマンドを使用して、SQL Server PMDA エージェント (mssql) が読み込まれ、実行されていることを確認します。# pcp platform: Linux rhel82-2.local 4.18.0-167.el8.x86_64 #1 SMP Sun Dec 15 01:24:23 UTC 2019 x86_64 hardware: 2 cpus, 1 disk, 1 node, 2770MB RAM timezone: PDT+7 services: pmcd pmproxy pmcd: Version 5.0.2-1, 12 agents, 4 clients pmda: root pmcd proc pmproxy xfs linux nfsclient mmv kvm mssql jbd2 dm pmlogger: primary logger: /var/log/pcp/pmlogger/rhel82-2.local/20200326.16.31 pmie: primary engine: /var/log/pcp/pmie/rhel82-2.local/pmie.log
関連情報
- Microsoft SQL Server での Performance Co-Pilot の使用に関する詳細は、Red Hat Developers Blog を参照してください。
第6章 PCP の設定
Performance Co-Pilot (PCP) は、システムレベルのパフォーマンス測定を監視、視覚化、保存、および分析するためのツール、サービス、およびライブラリーのスイートです。
6.1. PCP の概要
Python、Perl、C++、および C のインターフェイスを使用したパフォーマンスメトリックを追加できます。分析ツールは、Python、C++、C のクライアント API を直接使用でき、豊富な Web アプリケーションは、JSON インターフェイスを使用して利用可能なすべてのパフォーマンスデータを調べることができます。
ライブ結果とアーカイブされたデータを比較して、データパターンを解析できます。
PCP の機能:
- 軽量の分散アーキテクチャー。複雑なシステムの集中分析に役に立ちます。
- これにより、リアルタイムデータの監視および管理が可能になります。
- これにより、履歴データのログおよび取得が可能になります。
PCP には以下のコンポーネントがあります。
-
Performance Metric Collector Daemon (
pmcd
) は、インストールされている Performance Metric Domain Agents (pmda
) からパフォーマンスデータを収集します。PMDA は、システムで個別にロードまたはアンロードでき、同じホストの PMCD によって制御されます。 -
pminfo
やpmstat
などのさまざまなクライアントツールは、同じホストまたはネットワーク上でこのデータを取得、表示、アーカイブ、処理できます。 -
pcp
パッケージは、コマンドラインツールと、基本的な機能を提供します。 -
pcp-gui
パッケージは、グラフィカルアプリケーションを提供します。yum install pcp-gui
コマンドを実行して、pcp-gui
パッケージをインストールします。詳細は、Visually tracing PCP log archives with the PCP Charts application を参照してください。
関連情報
-
pcp(1)
の man ページ -
/usr/share/doc/pcp-doc/
ディレクトリー - PCP と共に配布されるツール
- Red Hat カスタマーポータルの PCP (Performance Co-Pilot) に関するナレッジ、チュートリアル、およびホワイトペーパー
- Red Hat ナレッジベース記事 Side-by-side comparison of PCP tools with legacy tools
- PCP アップストリームのドキュメント
6.2. PCP のインストールおよび有効化
PCP の使用を開始するには、必要なパッケージをすべてインストールし、PCP 監視サービスを有効にします。
この手順では、pcp
パッケージを使用して PCP をインストールする方法を説明します。PCP のインストールを自動化するには、pcp-zeroconf
パッケージを使用してインストールします。pcp-zeroconf
を使用して PCP をインストールする方法の詳細は、Setting up PCP with pcp-zeroconf を参照してください。
手順
pcp
パッケージをインストールします。# yum install pcp
ホストマシンで
pmcd
サービスを有効にして起動します。# systemctl enable pmcd # systemctl start pmcd
検証手順
pmcd
プロセスがホストで実行されているかどうかを確認します。# pcp Performance Co-Pilot configuration on workstation: platform: Linux workstation 4.18.0-80.el8.x86_64 #1 SMP Wed Mar 13 12:02:46 UTC 2019 x86_64 hardware: 12 cpus, 2 disks, 1 node, 36023MB RAM timezone: CEST-2 services: pmcd pmcd: Version 4.3.0-1, 8 agents pmda: root pmcd proc xfs linux mmv kvm jbd2
関連情報
-
pmcd(1)
の man ページ - PCP と共に配布されるツール
6.3. 最小限の PCP 設定のデプロイメント
最小 PCP 設定は、Red Hat Enterprise Linux でパフォーマンス統計を収集します。この設定は、詳細な分析のためにデータを収集するために必要な、実稼働システムに最低限のパッケージを追加します。
作成された tar.gz
ファイルおよび pmlogger
の出力のアーカイブは、さまざまな PCP ツールを使用して解析し、その他のソースのパフォーマンス情報と比較できます。
前提条件
- PCP がインストールされている。詳細は Installing and enabling PCP を参照してください。
手順
pmlogger
設定を更新します。# pmlogconf -r /var/lib/pcp/config/pmlogger/config.default
pmcd
サービスおよびpmlogger
サービスを起動します。# systemctl start pmcd.service # systemctl start pmlogger.service
- 必要な操作を実行して、パフォーマンスデータを記録します。
pmcd
サービスおよびpmlogger
サービスを停止します。# systemctl stop pmcd.service # systemctl stop pmlogger.service
出力を保存し、ホスト名と現在の日時に基づいて名前が付けられた
tar.gz
ファイルに保存します。# cd /var/log/pcp/pmlogger/ # tar -czf $(hostname).$(date +%F-%Hh%M).pcp.tar.gz $(hostname)
このファイルを展開し、PCP ツールを使用してデータを解析します。
関連情報
-
pmlogconf(1)
、pmlogger(1)
、およびpmcd(1)
の man ページ - PCP と共に配布されるツール
- PCP で配布されるシステムサービス
6.4. PCP で配布されるシステムサービス
以下の表は、PCP で配布されるさまざまなシステムサービスのロールについて説明しています。
表6.1 PCP で配布されるシステムサービスのロール
名前 | 説明 |
| PMCD (Performance Metric Collector Daemon) |
| Performance Metrics In difference Engine |
| パフォーマンスメトリックロガー。 |
| リアルタイムおよびヒストリカルなパフォーマンスメトリクスのプロキシー、時系列クエリー、REST API サービス。 |
6.5. PCP と共に配布されるツール
以下の表は、PCP で配布される各種ツールの使用について説明しています。
表6.2 PCP で配布されるツールの使用
名前 | 説明 |
| Performance Co-Pilot インストールの現在のステータスを表示します。 |
| パフォーマンスの観点から最も重要なハードウェアリソース (CPU、メモリー、ディスク、およびネットワーク) のシステムレベルの占有を表示します。 |
| さまざまなシステムリソースの使用状況に関するシステムレベルのアクティビティーレポートを生成します。このレポートは、pmlogger または pcp-atop の-w オプションを使ってあらかじめ記録された生のログファイルから生成されます。 |
| 設定されたデバイスマッパーキャッシュターゲット (デバイスの IOP、キャッシュデバイスとメタデータデバイスの使用率、各キャッシュデバイスの読み取り/書き込みのヒット率とミス率、比率など) に関する情報を表示します。 |
|
一度に 1 台のシステムのメトリックを表示します。複数のシステムのメトリックを表示するには、 |
| システム内の空きメモリーと使用済みメモリーを報告します。 |
|
システム上で実行されているすべてのプロセスとそのコマンドライン引数を、 |
| 呼び出したプロセスが読み取りアクセスできる IPC(Inter-Process Communication) ファシリティーの情報を表示します。 |
| カーネルのメモリーアロケータからの NUMA 割り当て統計を表示します。 |
| システム上で動作している個々のタスクやプロセスに関する情報を表示します (CPU パーセンテージ、メモリーやスタックの使用率、スケジューリング、優先度など)。デフォルトでは、ローカルホストのライブデータを報告します。 |
| pmdasockets Performance Metrics Domain Agent (PMDA) が収集したソケットの統計情報を表示します。 |
| システムの稼働時間、現在ログオンしているユーザー数、過去 1 分、5 分、15 分のシステム負荷の平均値を表示します。 |
| システムパフォーマンスの概要を 5 秒ごとに表示します。プロセス、メモリー、ページング、ブロック IO、トラップ、CPU のアクティビティーに関する情報を表示します。 |
| Performance Co-Pilot の機能を介して利用可能なパフォーマンスメトリック値を描画します。 |
| PMAPI (Performance Metrics Application Programming Interface) を使用して、高水準のシステムパフォーマンスメトリックを表示します。 |
| 設定パラメーターの値を表示します。 |
| 利用可能な Performance Co-Pilot デバッグ制御フラグとその値を表示します。 |
| パフォーマンスのリグレッションを検索する際に重要と思われる変更について、指定された時間枠で、1 つまたは 2 つのアーカイブのすべてのメトリックの平均値を比較します。 |
| Performance Co-Pilot アーカイブファイルの制御、メタデータ、インデックス、および状態に関する情報を表示します。 |
| ライブまたは Performance Co-Pilot アーカイブから収集されたパフォーマンスメトリックの値を出力します。 |
| 利用可能な Performance Co-Pilot エラーコードと、それに対応するエラーメッセージを表示します。 |
| ネットワークで PCP サービスを見つけます。 |
| 一連の演算式、論理式、およびルール式を定期的に評価する推論エンジン。メトリックは、ライブシステムまたは Performance Co-Pilot アーカイブファイルのいずれかから収集されます。 |
| 設定可能な pmie 変数を表示または設定します。 |
| pmie のプライマリー以外のインスタンスを管理します。 |
| パフォーマンスメトリックに関する情報を表示します。メトリックは、ライブシステムまたは Performance Co-Pilot アーカイブファイルのいずれかから収集されます。 |
| SCSI デバイス (デフォルト) またはデバイスマッパーデバイス (-x dm オプションを使用) の I/O 統計を報告します。 |
| アクティブな pmlogger インスタンスを対話的に設定します。 |
| Performance Co-Pilot アーカイブファイルで無効なデータを特定します。 |
| pmlogger 設定ファイルを作成および変更します。 |
| pmlogger のプライマリー以外のインスタンスを管理します。 |
| Performance Co-Pilot アーカイブファイルのラベルを検証、変更、または修復します。 |
| Performance Co-Pilot アーカイブファイルに格納されたパフォーマンスメトリックに関する統計情報を計算します。 |
| パフォーマンスメトリックの可用性を決定します。 |
| 選択した、簡単にカスタマイズ可能なパフォーマンスメトリック値に関するレポート。 |
| ファイアウォールを介して Performance Co-Pilot ホストへのアクセスを許可します。 |
| システムパフォーマンスの簡単な概要を定期的に表示します。 |
| パフォーマンスメトリックの値を変更します。 |
| トレース PMDA のコマンドラインインターフェイスを提供します。 |
| パフォーマンスメトリックの現在の値を表示します。 |
6.6. PCP デプロイメントのアーキテクチャー
Performance Co-Pilot (PCP) は、PCP デプロイメントの規模に基づいて、複数のデプロイメントアーキテクチャーをサポートし、高度なセットアップを実現するための多くのオプションを提供します。
Red Hat によって設定された推奨デプロイメント、サイジング係数、および設定オプションに基づいた、利用可能なスケーリングデプロイメントセットアップバリアントには、以下が含まれます。
PCP バージョン 5.3.0 は Red Hat Enterprise Linux 8.4 および Red Hat Enterprise Linux 8 の以前のマイナーバージョンでは利用できないため、Red Hat はローカルホストおよび pmlogger のファームアーキテクチャーを推奨します。
PCP 5.3.0 以前のバージョンにおける pmproxy の既知のメモリーリークについては、Memory leaks in pmproxy in PCP を参照してください。
ローカルホスト
各サービスは監視対象のマシン上でローカルに動作します。設定を変更せずにサービスを開始した場合、これがデフォルトのデプロイメントです。この場合、個々のノードを超えたスケーリングはできません。
デフォルトでは、Redis のデプロイメント設定は、スタンドアロン、localhost となっています。しかし、Redis はオプションとして、データを複数のホストで共有する、高可用性と高スケーラビリティを備えたクラスター形態で実行することができます。また、クラウド上に Redis クラスターをデプロイしたり、クラウドベンダーが提供するマネージド Redis クラスターを利用したりすることも可能です。
Decentralized
ローカルホストと分散型のセットアップの唯一の違いは、集中型の Redis サービスです。このモデルでは、ホストは監視対象の各ホスト上で
pmlogger
サービスを実行し、ローカルのpmcd
インスタンスからメトリクスを取得します。そして、ローカルのpmproxy
サービスは、パフォーマンスメトリクスを中央の Redis インスタンスにエクスポートします。図6.1 分散型ロギング
集中型ロギング - pmlogger ファーム
監視対象ホストのリソース使用量が制限されている場合、
pmlogger
ファームというデプロイメントオプションもあります。これは集中型ロギングとも呼ばれます。この設定では、1 つのロガーホストが複数のpmlogger
プロセスを実行し、それぞれが異なるリモートpmcd
ホストからパフォーマンスメトリクスを取得するように設定されます。集中ロガーのホストはpmproxy
サービスを実行するように設定され、このサービスは、結果として生じる PCP アーカイブズのログを検出し、メトリクスデータを Redis インスタンスに読み込みます。図6.2 集中型ロギング - pmlogger ファーム
統合型 - 複数の pmlogger ファーム
大規模なデプロイメントの場合、Red Hat は複数の
pmlogger
ファームを統合させてデプロイすることを推奨します。例えば、ラックやデータセンターごとに 1 つのpmlogger
ファームをデプロイします。各pmlogger
ファームは、メトリクスを中央の Redis インスタンスに読み込みます。図6.3 統合型 - 複数の pmlogger ファーム
デフォルトでは、Redis のデプロイメント設定は、スタンドアロン、localhost となっています。しかし、Redis はオプションとして、データを複数のホストで共有する、高可用性と高スケーラビリティを備えたクラスター形態で実行することができます。また、クラウド上に Redis クラスターをデプロイしたり、クラウドベンダーが提供するマネージド Redis クラスターを利用したりすることも可能です。
関連情報
-
pcp(1)
、pmlogger(1)
、pmproxy(1)
、およびpmcd(1)
の man ページ - Recommended deployment architecture
6.7. 推奨されるデプロイメントアーキテクチャー
次の表は、監視するホストの数に応じて推奨されるデプロイメントアーキテクチャーを示しています。
表6.3 推奨されるデプロイメントアーキテクチャー
ホストの数 (N) | 1-10 | 10-100 | 100-1000 |
---|---|---|---|
| N | N | N |
| 1 から N | N/10 から N | N/100 から N |
| 1 から N | 1 から N | N/100 から N |
Redis サーバー | 1 から N | 1 から N/10 | N/100 から N/10 |
Redis クラスター | No | Maybe | Yes |
推奨されるデプロイメント設定 | ローカルホスト、分散型、または集中型のロギング | 分散型、集中型ロギング、または統合型 | 分散型または統合型 |
6.8. サイジングファクター
スケーリングに必要なサイジングファクターは以下のとおりです。
Remote system size
-
CPU、ディスク、ネットワーク・インターフェイスおよびその他のハードウェアリソースの数は、集中型ロギングホスト上の各
pmlogger
が収集するデータ量に影響します。 Logged Metrics
-
ログメトリクスの数と種類が重要なロールを果たします。具体的には、
per-process proc.*
メトリクスには、大きなディスク容量が必要です。たとえば、標準的なpcp-zeroconf
の設定で 10 秒のログ取得間隔の場合、proc メトリクスなしでは 11MB、proc メトリクスありでは 155MB と、係数は 10 倍以上になります。さらに、各メトリクスのインスタンス数、たとえば CPU、ブロックデバイス、ネットワークインターフェイスの数なども、必要なストレージ容量に影響を与えます。 Logging Interval
-
メトリクスのログを取る間隔は、ストレージの要件に影響します。各
pmlogger
インスタンスのpmlogger.log
ファイルには、毎日の PCP アーカイブファイルの予想サイズが書き込まれます。これらの値は圧縮されていない推定値です。PCP のアーカイブは約 10:1 と非常によく圧縮されるため、実際の長期的なディスク容量の要件は、特定のサイトで決定することができます。 pmlogrewrite
-
PCP をアップグレードするたびに
pmlogrewrite
ツールが実行され、旧バージョンと新バージョンの PCP でメトリクスのメタデータに変更があった場合、古いアーカイブが書き換えられます。この処理時間は、保存されているアーカイブの数に応じてリニアに変化します。
関連情報
-
pmlogrewrite(1)
およびpmlogger(1)
の man ページ
6.9. PCP スケーリングの設定オプション
スケーリングに必要な設定オプションを以下に示します。
sysctl and rlimit settings
-
アーカイブ検出を有効にすると、
pmproxy
は、監視またはログテーリングを行っているすべてのpmlogger
に対して 4 つの記述子を必要とし、さらに、サービスログとpmproxy
クライアントソケットのための追加のファイル記述子があれば、それも必要となります。各pmlogger
プロセスは、リモートのpmcd
ソケット、アーカイブファイル、サービスログなどのために約 20 個のファイル記述子を使用します。合計すると、約 200 のpmlogger
プロセスを実行しているシステムでは、デフォルトの 1024 ソフトの制限を超えてしまいます。pcp-5.3.0
以降のpmproxy
サービスでは、ソフトリミットがハードリミットに自動的に引き上げられます。以前のバージョンの PCP では、多数のpmlogger
プロセスをデプロイする場合、チューニングが必要です。これは、pmlogger
のソフトリミットまたはハードリミットを増やすことで実現できます。詳細は、How to set limits (ulimit) for services run by systemd を参照してください。 ローカルアーカイブ
-
pmlogger
サービスは、ローカルおよびリモートのpmcd
のメトリクスを/var/log/pcp/pmlogger/
ディレクトリーに保存します。ローカルシステムのロギング間隔を制御するには、/etc/pcp/pmlogger/control.d/configfile
ファイルを更新し、引数に-t X
を追加してください (Xは秒単位のロギング間隔)。どのメトリクスを記録するかを設定するには、pmlogconf /var/lib/pcp/config/pmlogger/config.clienthostname
を実行します。このコマンドは、デフォルトのメトリクスのセットを含む設定ファイルをデプロイしますが、オプションでさらにカスタマイズすることもできます。古い PCP アーカイブをいつパージするかという保存設定を行うには、/etc/sysconfig/pmlogger_timers
file and specifyPMLOGGER_DAILY_PARAMS="-E -k X"
を更新します。ここで、Xは PCP アーカイブを保持する日数です。 Redis
pmproxy
サービスは、pmlogger
からのログされたメトリクスを Redis インスタンスに送信します。設定ファイル/etc/pcp/pmproxy/pmproxy.conf
で保持設定を指定する際に使用できる 2 つのオプションを以下に示します。-
stream.expire
では、古いメトリクスを削除するまでの期間を指定します (つまり、指定した秒数の間更新されなかったメトリクス)。 -
stream.maxlen
は、ホストごとに 1 つのメトリクスの最大メトリクス値の数を指定します。この設定は、保存期間をログ間隔で割ったものでなければなりません。例えば、保存期間が 14 日、ログ間隔が 60 秒の場合は 20160 となります (60*60*24*14/60)。
-
関連情報
-
pmproxy(1)
、pmlogger(1)
、およびsysctl(8)
の man ページ
6.10. 例: 集中ロギングデプロイメントの分析
以下の結果は、集約ロギングセットアップ (pmlogger ファームデプロイメントとも呼ばれる) で集約されています。デフォルトの pcp-zeroconf 5.3.0
インストールでは、各リモートホストが、64 の CPU コア、376 GB RAM、および 1 つのディスクが接続されたサーバーで pmcd
を実行している同一のコンテナーインスタンスになります。
ロギング間隔は 10 秒で、リモートノードの proc メトリックは含まれず、メモリー値は Resident Set Size (RSS) の値を参照します。
表6.4 10 秒のロギング間隔の詳細な使用統計
ホスト数 | 10 | 50 |
---|---|---|
1 日あたりの PCP アーカイブストレージ | 91 MB | 522 MB |
| 160 MB | 580 MB |
1 日あたりの | 2 MB | 9 MB |
| 1.4 GB | 6.3 GB |
1 日あたりの Redis メモリー | 2.6 GB | 12 GB |
表6.5 60 秒のロギング間隔で、監視対象ホストに応じて使用されるリソース
ホスト数 | 10 | 50 | 100 |
---|---|---|---|
1 日あたりの PCP アーカイブストレージ | 20 MB | 120 MB | 271 MB |
| 104 MB | 524 MB | 1049 MB |
1 日あたりの | 0.38 MB | 1.75 MB | 3.48 MB |
| 2.67 GB | 5.5GB | 9 GB |
1 日あたりの Redis メモリー | 0.54 GB | 2.65 GB | 5.3 GB |
pmproxy
は Redis 要求をキューに入れ、Redis パイプラインを使用して Redis クエリーを高速化します。これにより、メモリー使用率が高くなる可能性があります。この問題をトラブルシューティングする場合は、Troubleshooting high memory usage を参照してください。
6.11. 例: 統合型セットアップデプロイメントの分析
以下の結果が、統合型セットアップ (複数の pmlogger
ファームとも呼ばれる) で確認されました。これは、3 つの集中ロギング (pmlogger
ファーム) セットアップで設定されます。各 pmlogger
ファームは 100 のリモートホスト、つまり合計 300 のホストを監視していました。
pmlogger
ファームのこのセットアップは、Redis サーバーがクラスターモードで動作していたことを除いて、60 秒のロギング間隔での
例: 集中ロギングデプロイメントの分析 で説明した設定と同じです。
表6.6 60 秒のロギング間隔で、統合型ホストに応じて使用されるリソース
1 日あたりの PCP アーカイブストレージ | pmlogger メモリー | 1 日あたりのネットワーク (In/Out) | pmproxy メモリー | 1 日あたりの Redis メモリー |
---|---|---|---|---|
277 MB | 1058 MB | 15.6 MB / 12.3 MB | 6-8 GB | 5.5 GB |
ここでは、すべての値はホストごとになります。Redis クラスターのノード間通信により、ネットワーク帯域幅が高まります。
6.12. 高メモリー使用率のトラブルシューティング
以下のシナリオでは、メモリー使用率が高くなる可能性があります。
-
pmproxy
プロセスは新しい PCP アーカイブの処理がビジーで、Redis の要求および応答を処理するための予備の CPU サイクルがありません。 - Redis ノードまたはクラスターが過負荷になり、時間が経過しても着信要求を処理できません。
pmproxy
サービスデーモンは、Redis ストリームを使用し、設定パラメーター (PCP チューニングパラメーター) をサポートします。これは、Redis のメモリー使用量および鍵の保存に影響します。/etc/pcp/pmproxy/pmproxy.conf
ファイルには、pmproxy
で利用可能な設定オプションと、関連する API が一覧表示されます。
次の手順では、メモリー使用率が高い問題をトラブルシューティングする方法について説明します。
前提条件
pcp-pmda-redis
パッケージをインストールします。# yum install pcp-pmda-redis
redis PMDA をインストールします。
# cd /var/lib/pcp/pmdas/redis && ./Install
手順
高いメモリー使用率のトラブルシューティングを行うには、次のコマンドを実行して、
inflight
列を確認します。$ pmrep :pmproxy backlog inflight reqs/s resp/s wait req err resp err changed throttled byte count count/s count/s s/s count/s count/s count/s count/s 14:59:08 0 0 N/A N/A N/A N/A N/A N/A N/A 14:59:09 0 0 2268.9 2268.9 28 0 0 2.0 4.0 14:59:10 0 0 0.0 0.0 0 0 0 0.0 0.0 14:59:11 0 0 0.0 0.0 0 0 0 0.0 0.0
この列は、Redis リクエストが転送中である数を示しています。つまり、キューに入れられているか送信されており、現時点では応答は受信されていません。
数値が高い場合は、次のいずれかの状態を示します。
-
pmproxy
プロセスは新しい PCP アーカイブの処理がビジーで、Redis の要求および応答を処理するための予備の CPU サイクルがありません。 - Redis ノードまたはクラスターが過負荷になり、時間が経過しても着信要求を処理できません。
-
メモリー使用量が多い問題のトラブルシューティングを行うには、このファームの
pmlogger
プロセスの数を減らし、別の pmlogger ファームを追加します。統合型 (複数の pmlogger ファームの設定) を使用します。Redis ノードが長時間にわたって CPU を 100% 使用している場合は、パフォーマンスが向上しているホストに移動するか、代わりにクラスター化された Redis 設定を使用します。
pmproxy.redis.*
メトリックスを表示するには、次のコマンドを使用します。$ pminfo -ftd pmproxy.redis pmproxy.redis.responses.wait [wait time for responses] Data Type: 64-bit unsigned int InDom: PM_INDOM_NULL 0xffffffff Semantics: counter Units: microsec value 546028367374 pmproxy.redis.responses.error [number of error responses] Data Type: 64-bit unsigned int InDom: PM_INDOM_NULL 0xffffffff Semantics: counter Units: count value 1164 [...] pmproxy.redis.requests.inflight.bytes [bytes allocated for inflight requests] Data Type: 64-bit int InDom: PM_INDOM_NULL 0xffffffff Semantics: discrete Units: byte value 0 pmproxy.redis.requests.inflight.total [inflight requests] Data Type: 64-bit unsigned int InDom: PM_INDOM_NULL 0xffffffff Semantics: discrete Units: count value 0 [...]
インフライトのリクエスト数を表示するには、
pmproxy.redis.requests.inflight.total
メトリックスとpmproxy.redis.requests.inflight.bytes
メトリックスを参照して、現在のすべてのインフライトの Redis リクエストで占有されているバイト数を表示します。通常、redis 要求キューは 0 ですが、大きな pmlogger ファームの使用量に基づいて構築できます。これによりスケーラビリティーが制限され、
pmproxy
クライアントのレイテンシーが高くなる可能性があります。pminfo
コマンドを実行すると、パフォーマンスメトリックスの詳細が表示されます。たとえば、redis.*
メトリックスを表示するには、次のコマンドを使用します。$ pminfo -ftd redis redis.redis_build_id [Build ID] Data Type: string InDom: 24.0 0x6000000 Semantics: discrete Units: count inst [0 or "localhost:6379"] value "87e335e57cffa755" redis.total_commands_processed [Total number of commands processed by the server] Data Type: 64-bit unsigned int InDom: 24.0 0x6000000 Semantics: counter Units: count inst [0 or "localhost:6379"] value 595627069 [...] redis.used_memory_peak [Peak memory consumed by Redis (in bytes)] Data Type: 32-bit unsigned int InDom: 24.0 0x6000000 Semantics: instant Units: count inst [0 or "localhost:6379"] value 572234920 [...]
ピークメモリー使用量を表示するには、
redis.used_memory_peak
メトリックスを参照してください。
関連情報
-
man ページの
pmdaredis(1)
、pmproxy(1)
、およびpminfo(1)
- PCP デプロイメントのアーキテクチャー
第7章 pmlogger でのパフォーマンスデータのロギング
PCP ツールを使用してパフォーマンスのメトリック値をログに記録すると、後で再生できます。これにより、遡及的なパフォーマンス解析を実行できます。
pmlogger
ツールを使用すると、以下が可能になります。
- 選択したメトリックのアーカイブログをシステムに作成する
- システムに記録されるメトリックとその頻度を指定する
7.1. pmlogconf で pmlogger 設定ファイルの変更
pmlogger
サービスの実行中、PCP はホストでメトリックのデフォルトセットをログに記録します。
pmlogconf
ユーティリティーを使用してデフォルト設定を確認します。pmlogger
設定ファイルが存在しない場合は、pmlogconf
がデフォルトのメトリック値で作成します。
前提条件
- PCP がインストールされている。詳細は Installing and enabling PCP を参照してください。
手順
pmlogger
設定ファイルを作成または変更します。# pmlogconf -r /var/lib/pcp/config/pmlogger/config.default
-
pmlogconf
プロンプトに従い、関連するパフォーマンスメトリックのグループを有効または無効にし、有効な各グループのロギング間隔を制御します。
関連情報
-
pmlogconf(1)
およびpmlogger(1)
の man ページ - PCP と共に配布されるツール
- PCP で配布されるシステムサービス
7.2. pmlogger の設定ファイルの手動編集
指定したメトリックと間隔でカスタマイズしたロギング設定を作成する場合は、pmlogger
設定ファイルを手動で編集します。デフォルトの pmlogger
設定ファイルは /var/lib/pcp/config/pmlogger/config.default
です。設定ファイルでは、プライマリーのロギングインスタンスによって記録されるメトリックを指定します。
手動の設定では、以下が可能になります。
- 自動設定の一覧に記載されていないメトリックを記録する。
- カスタムロギングの周波数を選択する。
- アプリケーションのメトリックを使用して PMDA を追加する。
前提条件
- PCP がインストールされている。詳細は Installing and enabling PCP を参照してください。
手順
/var/lib/pcp/config/pmlogger/config.default
ファイルを開いて編集し、特定のメトリックを追加します。# It is safe to make additions from here on ... # log mandatory on every 5 seconds { xfs.write xfs.write_bytes xfs.read xfs.read_bytes } log mandatory on every 10 seconds { xfs.allocs xfs.block_map xfs.transactions xfs.log } [access] disallow * : all; allow localhost : enquire;
関連情報
-
pmlogger(1)
の man ページ - PCP と共に配布されるツール
- PCP で配布されるシステムサービス
7.3. pmlogger サービスの有効化
ローカルマシンでメトリック値のログを記録するには、pmlogger
サービスを開始して有効にする必要があります。
この手順では、pmlogger
サービスを有効にする方法を説明します。
前提条件
- PCP がインストールされている。詳細は Installing and enabling PCP を参照してください。
手順
pmlogger
サービスを開始して、有効にします。# systemctl start pmlogger # systemctl enable pmlogger
検証手順
pmlogger
サービスが有効になっているかどうかを確認します。# pcp Performance Co-Pilot configuration on workstation: platform: Linux workstation 4.18.0-80.el8.x86_64 #1 SMP Wed Mar 13 12:02:46 UTC 2019 x86_64 hardware: 12 cpus, 2 disks, 1 node, 36023MB RAM timezone: CEST-2 services: pmcd pmcd: Version 4.3.0-1, 8 agents, 1 client pmda: root pmcd proc xfs linux mmv kvm jbd2 pmlogger: primary logger: /var/log/pcp/pmlogger/workstation/20190827.15.54
関連情報
-
pmlogger(1)
の man ページ - PCP と共に配布されるツール
- PCP で配布されるシステムサービス
-
/var/lib/pcp/config/pmlogger/config.default
ファイル
7.4. メトリック収集のためのクライアントシステムの設定
この手順では、中央サーバーが、PCP を実行しているクライアントからメトリックを収集できるように、クライアントシステムを設定する方法を説明します。
前提条件
- PCP がインストールされている。詳細は Installing and enabling PCP を参照してください。
手順
pcp-system-tools
パッケージをインストールします。# yum install pcp-system-tools
pmcd
の IP アドレスを設定します。# echo "-i 192.168.4.62" >>/etc/pcp/pmcd/pmcd.options
192.168.4.62 を、クライアントがリッスンする IP アドレスに置き換えます。
デフォルトでは、
pmcd
は、ローカルホストをリッスンします。パブリック
zone
を永続的に追加するように、ファイアウォールを設定します。# firewall-cmd --permanent --zone=public --add-port=44321/tcp success # firewall-cmd --reload success
SELinux ブール値を設定します。
# setsebool -P pcp_bind_all_unreserved_ports on
pmcd
サービスおよびpmlogger
サービスを有効にします。# systemctl enable pmcd pmlogger # systemctl restart pmcd pmlogger
検証手順
pmcd
が、設定した IP アドレスを正しくリッスンしているかどうかを確認します。# ss -tlp | grep 44321 LISTEN 0 5 127.0.0.1:44321 0.0.0.0:* users:(("pmcd",pid=151595,fd=6)) LISTEN 0 5 192.168.4.62:44321 0.0.0.0:* users:(("pmcd",pid=151595,fd=0)) LISTEN 0 5 [::1]:44321 [::]:* users:(("pmcd",pid=151595,fd=7))
関連情報
-
pmlogger(1)
、firewall-cmd(1)
、ss(8)
、およびsetsebool(8)
の man ページ - PCP と共に配布されるツール
- PCP で配布されるシステムサービス
-
/var/lib/pcp/config/pmlogger/config.default
ファイル
7.5. データ収集用の中央サーバーの設定
この手順では、PCP を実行しているクライアントからメトリックを収集する中央サーバーを作成する方法を説明します。
前提条件
- PCP がインストールされている。詳細は Installing and enabling PCP を参照してください。
- クライアントがメトリック収集用に設定されている。詳細は、Setting up a client system for metrics collection を参照してください。
手順
pcp-system-tools
パッケージをインストールします。# yum install pcp-system-tools
以下の内容で
/etc/pcp/pmlogger/control.d/remote
ファイルを作成してください。# DO NOT REMOVE OR EDIT THE FOLLOWING LINE $version=1.1 192.168.4.13 n n PCP_ARCHIVE_DIR/rhel7u4a -r -T24h10m -c config.rhel7u4a 192.168.4.14 n n PCP_ARCHIVE_DIR/rhel6u10a -r -T24h10m -c config.rhel6u10a 192.168.4.62 n n PCP_ARCHIVE_DIR/rhel8u1a -r -T24h10m -c config.rhel8u1a
192.168.4.13、192.168.4.14、および 192.168.4.62 を、クライアントの IP アドレスに置き換えます。
注記Red Hat Enterpirse Linux 8.0、8.1、および 8.2 では、制御ファイルでリモートホストに PCP_LOG_DIR/pmlogger/host_name 形式を使用します。
pmcd
サービスおよびpmlogger
サービスを有効にします。# systemctl enable pmcd pmlogger # systemctl restart pmcd pmlogger
検証手順
各ディレクトリーから最新のアーカイブファイルにアクセスできることを確認します。
# for i in /var/log/pcp/pmlogger/rhel*/*.0; do pmdumplog -L $i; done Log Label (Log Format Version 2) Performance metrics from host rhel6u10a.local commencing Mon Nov 25 21:55:04.851 2019 ending Mon Nov 25 22:06:04.874 2019 Archive timezone: JST-9 PID for pmlogger: 24002 Log Label (Log Format Version 2) Performance metrics from host rhel7u4a commencing Tue Nov 26 06:49:24.954 2019 ending Tue Nov 26 07:06:24.979 2019 Archive timezone: CET-1 PID for pmlogger: 10941 [..]
/var/log/pcp/pmlogger/
ディレクトリーのアーカイブファイルは、詳細な分析とグラフ作成に使用できます。
関連情報
-
pmlogger(1)
の man ページ - PCP と共に配布されるツール
- PCP で配布されるシステムサービス
-
/var/lib/pcp/config/pmlogger/config.default
ファイル
7.6. pmrep で PCP ログアーカイブの再生
メトリックデータの記録後、PCP ログアーカイブを再生できます。ログをテキストファイルにエクスポートして、スプレッドシートにインポートするには、pcp2csv
、pcp2xml
、pmrep
または pmlogsummary
などの PCP ユーティリティーを使用します。
pmrep
ツールを使用すると、以下のことが可能になります。
- ログファイルを表示する
- 選択した PCP ログアーカイブを解析し、値を ASCII テーブルにエクスポートする
- アーカイブログ全体を展開するか、コマンドラインで個別のメトリックを指定して、ログからメトリック値のみを選択する
前提条件
- PCP がインストールされている。詳細は Installing and enabling PCP を参照してください。
-
pmlogger
サービスが有効になっている。詳細は Enabling the pmlogger service を参照してください。 pcp-system-tools
パッケージをインストールします。# yum install pcp-gui
手順
メトリックのデータを表示します。
$ pmrep --start @3:00am --archive 20211128 --interval 5seconds --samples 10 --output csv disk.dev.write Time,"disk.dev.write-sda","disk.dev.write-sdb" 2021-11-28 03:00:00,, 2021-11-28 03:00:05,4.000,5.200 2021-11-28 03:00:10,1.600,7.600 2021-11-28 03:00:15,0.800,7.100 2021-11-28 03:00:20,16.600,8.400 2021-11-28 03:00:25,21.400,7.200 2021-11-28 03:00:30,21.200,6.800 2021-11-28 03:00:35,21.000,27.600 2021-11-28 03:00:40,12.400,33.800 2021-11-28 03:00:45,9.800,20.600
上記の例では、5 秒 間隔でアーカイブに収集された
disk.dev.write
メトリックスのデータをコンマ区切り値の形式で表示します。注記この例の
20211128
を、データを表示するpmlogger
アーカイブを含むファイル名に置き換えます。
関連情報
-
man ページの
pmlogger(1)
、pmrep(1)
、およびpmlogsummary(1)
- PCP と共に配布されるツール
- PCP で配布されるシステムサービス
第8章 Performance Co-Pilot によるパフォーマンスの監視
Performance Co-Pilot (PCP) は、システムレベルのパフォーマンス測定を監視、視覚化、保存、および分析するためのツール、サービス、およびライブラリーのスイートです。
システム管理者は、Red Hat Enterprise Linux 8 の PCP アプリケーションを使用して、システムのパフォーマンスを監視できます。
8.1. pmda-postfix での postfix の監視
この手順では、pmda-postfix
を使用して postfix
メールサーバーのパフォーマンスメトリックを監視する方法を説明します。これは、1 秒間に受信した電子メールの数を確認するのに役立ちます。
前提条件
- PCP がインストールされている。詳細は Installing and enabling PCP を参照してください。
-
pmlogger
サービスが有効になっている。詳細は Enabling the pmlogger service を参照してください。
手順
以下のパッケージをインストールします。
pcp-system-tools
をインストールします。# yum install pcp-system-tools
pmda-postfix
パッケージをインストールして、postfix
を監視します。# yum install pcp-pmda-postfix postfix
ロギングデーモンをインストールします。
# yum install rsyslog
テスト用にメールクライアントをインストールします。
# yum install mutt
postfix
サービスおよびrsyslog
サービスを有効にします。# systemctl enable postfix rsyslog # systemctl restart postfix rsyslog
SELinux ブール値を有効にして、
pmda-postfix
が必要なログファイルにアクセスできるようにします。# setsebool -P pcp_read_generic_logs=on
PMDA
をインストールします。# cd /var/lib/pcp/pmdas/postfix/ # ./Install Updating the Performance Metrics Name Space (PMNS) ... Terminate PMDA if already installed ... Updating the PMCD control file, and notifying PMCD ... Waiting for pmcd to terminate ... Starting pmcd ... Check postfix metrics have appeared ... 7 metrics and 58 values
検証手順
pmda-postfix
操作を確認します。echo testmail | mutt root
利用可能なメトリックを確認します。
# pminfo postfix postfix.received postfix.sent postfix.queues.incoming postfix.queues.maildrop postfix.queues.hold postfix.queues.deferred postfix.queues.active
関連情報
-
rsyslogd(8)
、postfix(1)
、およびsetsebool(8)
の man ページ - PCP と共に配布されるツール
- PCP で配布されるシステムサービス
-
/var/lib/pcp/config/pmlogger/config.default
ファイル
8.2. PCP Charts アプリケーションで PCP ログアーカイブを視覚的にトレース
メトリックデータの記録後、PCP ログアーカイブをグラフとして再生できます。メトリックは、PCP ログアーカイブのメトリックデータを履歴データのソースとして使用する代替オプションを持つ 1 台または複数のライブホストから提供されます。PCP Charts アプリケーションインターフェイスをカスタマイズしてパフォーマンスメトリックのデータを表示するには、ラインプロット、バーグラフ、または使用状況グラフを使用します。
PCP Charts アプリケーションを使用すると、以下が可能になります。
- PCP Charts アプリケーションのデータを再生し、グラフを使用して、システムのライブデータとともに遡及データを視覚化する。
- パフォーマンスメトリック値をグラフに描画する。
- 複数のチャートを同時に表示する。
前提条件
- PCP がインストールされている。詳細は Installing and enabling PCP を参照してください。
-
pmlogger
でパフォーマンスデータをログに記録している。詳細は、Logging performance data with pmlogger を参照してください。 pcp-gui
パッケージがインストールされている。# yum install pcp-gui
手順
コマンドラインで PCP Charts アプリケーションを起動します。
# pmchart
図8.1 PCP Charts アプリケーション
pmtime
サーバー設定は下部にあります。start ボタンおよび pause ボタンを使用すると、以下を制御できます。- PCP がメトリックデータをポーリングする間隔
- 履歴データのメトリックの日付および時間
- File をクリックしてから、New Chart をクリックして、ホスト名またはアドレスを指定して、ローカルマシンおよびリモートマシンの両方からメトリックを選択します。高度な設定オプションには、チャートの軸値を手動で設定する機能、およびプロットの色を手動で選択する機能が含まれます。
PCP Charts アプリケーションで作成したビューを記録します。
以下は、PCP Charts アプリケーションで作成したイメージを撮影したり、ビューを記録するためのオプションです。
- File をクリックしてから Export をクリックして、現在のビューのイメージを保存します。
- Record をクリックしてから Start をクリックし、録画を開始します。Record をクリックしてから Stop をクリックし、録画を停止します。録画の停止後、記録されたメトリックは後で表示できるようにアーカイブが作成されます。
必要に応じて、PCP Charts アプリケーションでは、ビュー と呼ばれるメインの設定ファイルによって、1 つ以上のチャートに関連付けられたメタデータを保存できます。このメタデータでは、使用されるメトリックや、チャート列など、チャート側面をすべて記述します。File をクリックしてから Save View をクリックして、カスタム view 設定を保存し、後で view 設定を読み込みます。
以下の PCP Charts アプリケーションビューの設定ファイルの例では、指定の XFS ファイルシステム
loop1
に対して読み書きされた合計バイト数を示す積み上げチャートグラフを説明します。#kmchart version 1 chart title "Filesystem Throughput /loop1" style stacking antialiasing off plot legend "Read rate" metric xfs.read_bytes instance "loop1" plot legend "Write rate" metric xfs.write_bytes instance "loop1"
関連情報
-
pmchart(1)
およびpmtime(1)
の man ページ - PCP と共に配布されるツール
8.3. PCP を使用した SQL Server からのデータの収集
Red Hat Enterprise Linux 8.2 以降では、SQL Server エージェントは Performance Co-Pilot (PCP) で利用できます。これは、データベースのパフォーマンスの問題を監視および分析するのに役立ちます。
この手順では、システムの pcp
を使用して Microsoft SQL Server のデータを収集する方法を説明します。
前提条件
- Red Hat Enterprise Linux に Microsoft SQL Server をインストールし、SQL Server への信頼できる接続を確立している。
- Red Hat Enterprise Linux 用の SQL Server の Microsoft ODBC ドライバーがインストールされている。
手順
PCP をインストールします。
# yum install pcp-zeroconf
pyodbc
ドライバーに必要なパッケージをインストールします。# yum install gcc-c++ python3-devel unixODBC-devel # yum install python3-pyodbc
mssql
エージェントをインストールします。PCP の Microsoft SQL Server ドメインエージェントをインストールします。
# yum install pcp-pmda-mssql
/etc/pcp/mssql/mssql.conf
ファイルを編集して、mssql
エージェントの SQL サーバーアカウントのユーザー名およびパスワードを設定します。設定するアカウントに、パフォーマンスデータに対するアクセス権限があることを確認します。username: user_name password: user_password
user_name を SQL Server アカウントに置き換え、user_password をこのアカウントの SQL Server ユーザーパスワードに置き換えます。
エージェントをインストールします。
# cd /var/lib/pcp/pmdas/mssql # ./Install Updating the Performance Metrics Name Space (PMNS) ... Terminate PMDA if already installed ... Updating the PMCD control file, and notifying PMCD ... Check mssql metrics have appeared ... 168 metrics and 598 values [...]
検証手順
pcp
コマンドを使用して、SQL Server PMDA (mssql
) が読み込まれて実行されていることを確認します。$ pcp Performance Co-Pilot configuration on rhel.local: platform: Linux rhel.local 4.18.0-167.el8.x86_64 #1 SMP Sun Dec 15 01:24:23 UTC 2019 x86_64 hardware: 2 cpus, 1 disk, 1 node, 2770MB RAM timezone: PDT+7 services: pmcd pmproxy pmcd: Version 5.0.2-1, 12 agents, 4 clients pmda: root pmcd proc pmproxy xfs linux nfsclient mmv kvm mssql jbd2 dm pmlogger: primary logger: /var/log/pcp/pmlogger/rhel.local/20200326.16.31 pmie: primary engine: /var/log/pcp/pmie/rhel.local/pmie.log
PCP が SQL Server から収集できるメトリックの完全な一覧を表示します。
# pminfo mssql
メトリックの一覧を表示した後は、トランザクションのレートを報告できます。たとえば、5 秒間の時間枠で、1 秒あたりの全体的なトランザクション数を報告するには、以下のコマンドを実行します。
# pmval -t 1 -T 5 mssql.databases.transactions
-
pmchart
コマンドを使用して、システムでこれらのメトリックのグラフィックチャートを表示します。詳細は、Visually tracing PCP log archives with the PCP Charts application を参照してください。
関連情報
-
pcp(1)
、pminfo(1)
、pmval(1)
、pmchart(1)
、およびpmdamssql(1)
の man ページ - Performance Co-Pilot for Microsoft SQL Server with RHEL 8.2 (Red Hat Developers Blog)
第9章 PCP を使用した XFS のパフォーマンス分析
XFS PMDA は、pcp
パッケージの一部として提供され、インストール時にデフォルトで有効になります。これは、Performance Co-Pilot (PCP) で XFS ファイルシステムのパフォーマンスメトリックデータを収集するために使用されます。
PCP を使用して、XFS ファイルシステムのパフォーマンスを分析できます。
9.1. XFS PMDA の手動インストール
XFS PMDA が pcp
設定出力に記載されていない場合は、PMDA エージェントを手動でインストールします。
この手順では、PMDA エージェントを手動でインストールする方法を説明します。
前提条件
- PCP がインストールされている。詳細は Installing and enabling PCP を参照してください。
手順
xfs ディレクトリーに移動します。
# cd /var/lib/pcp/pmdas/xfs/
XFS PMDA を手動でインストールします。
xfs]# ./Install You will need to choose an appropriate configuration for install of the “xfs” Performance Metrics Domain Agent (PMDA). collector collect performance statistics on this system monitor allow this system to monitor local and/or remote systems both collector and monitor configuration for this system Please enter c(ollector) or m(onitor) or (both) [b] Updating the Performance Metrics Name Space (PMNS) ... Terminate PMDA if already installed ... Updating the PMCD control file, and notifying PMCD ... Waiting for pmcd to terminate ... Starting pmcd ... Check xfs metrics have appeared ... 149 metrics and 149 values
collector の場合は
c
を、monitor の場合はm
を、またはこれら両方の場合はb
を入力して、PMDA ロールを選択します。PMDA インストールスクリプトから、以下の PMDA ロールのいずれかを指定するように求められます。-
collector
ロールを指定すると、現在のシステムでパフォーマンスメトリックを収集できます。 monitor
ロールを指定すると、システムがローカルシステム、リモートシステム、またはその両方を監視できるようになります。デフォルトオプションは
collector
とmonitor
の両方です。これにより、ほとんどのシナリオで XFS PMDA は適切に動作できます。
-
検証手順
pmcd
プロセスがホストで実行しており、設定一覧に XFS PMDA が有効として記載されていることを確認します。# pcp Performance Co-Pilot configuration on workstation: platform: Linux workstation 4.18.0-80.el8.x86_64 #1 SMP Wed Mar 13 12:02:46 UTC 2019 x86_64 hardware: 12 cpus, 2 disks, 1 node, 36023MB RAM timezone: CEST-2 services: pmcd pmcd: Version 4.3.0-1, 8 agents pmda: root pmcd proc xfs linux mmv kvm jbd2
関連情報
-
pmcd(1)
の man ページ - PCP と共に配布されるツール
9.2. pminfo を使用した XFS パフォーマンスメトリックの検証
PCP は XFS PMDA を有効にして、マウントされた各 XFS ファイルシステムに対して特定の XFS メトリックの報告を可能にします。これにより、特定のマウントされたファイルシステムの問題を特定して、パフォーマンスを評価することが容易になります。
pminfo
コマンドは、マウントされた各 XFS ファイルシステムの各デバイスに対する XFS メトリックを提供します。
この手順では、XFS PMDA が提供する利用可能なすべてのメトリックの一覧を表示します。
前提条件
- PCP がインストールされている。詳細は Installing and enabling PCP を参照してください。
手順
XFS PMDA が提供する利用可能なメトリックの一覧を表示します。
# pminfo xfs
個別のメトリックの情報を表示します。以下の例は、
pminfo
ツールを使用して、特定の XFS のread
メトリックおよびwrite
メトリックを検証します。xfs.write_bytes
メトリックの簡単な説明を表示します。# pminfo --oneline xfs.write_bytes xfs.write_bytes [number of bytes written in XFS file system write operations]
xfs.read_bytes
メトリックの長い説明を表示します。# pminfo --helptext xfs.read_bytes xfs.read_bytes Help: This is the number of bytes read via read(2) system calls to files in XFS file systems. It can be used in conjunction with the read_calls count to calculate the average size of the read operations to file in XFS file systems.
xfs.read_bytes
メトリックの現在のパフォーマンス値を取得します。# pminfo --fetch xfs.read_bytes xfs.read_bytes value 4891346238
pminfo
で、デバイスごとの XFS メトリックを取得します。# pminfo --fetch --oneline xfs.perdev.read xfs.perdev.write xfs.perdev.read [number of XFS file system read operations] inst [0 or "loop1"] value 0 inst [0 or "loop2"] value 0 xfs.perdev.write [number of XFS file system write operations] inst [0 or "loop1"] value 86 inst [0 or "loop2"] value 0
関連情報
-
pminfo(1)
の man ページ - XFS の PCP メトリックグループ
- XFS のデバイスごとの PCP メトリックグループ
9.3. pmstore を使用した XFS パフォーマンスメトリックのリセット
PCP を使用すると、特に特定のメトリックが、xfs.control.reset
メトリックなどの制御変数として動作する場合は、そのメトリックの値を変更できます。メトリックの値を変更するには、pmstore
ツールを使用します。
この手順では、pmstore
ツールを使用して XFS メトリックをリセットする方法を説明します。
前提条件
- PCP がインストールされている。詳細は Installing and enabling PCP を参照してください。
手順
メトリックの値を表示します。
$ pminfo -f xfs.write xfs.write value 325262
すべての XFS メトリックをリセットします。
# pmstore xfs.control.reset 1 xfs.control.reset old value=0 new value=1
検証手順
メトリックをリセットした後に情報を表示します。
$ pminfo --fetch xfs.write xfs.write value 0
関連情報
-
pmstore(1)
およびpminfo(1)
の man ページ - PCP と共に配布されるツール
- XFS の PCP メトリックグループ
9.4. XFS の PCP メトリックグループ
以下の表は、XFS で利用可能な PCP メトリックグループについて説明しています。
表9.1 XFS のメトリックグループ
メトリックグループ | 提供されたメトリック |
| 読み書き操作の数、読み書きバイト数を含む一般的な XFS メトリック。inode がフラッシュされた回数、クラッシュした回数、クラスター化に失敗した数に関するカウンターを併用。 |
| ファイルシステムのオブジェクトの割り当てに関するメトリックの範囲。これには、エクステントおよびブロックの作成/解放の数が含まれます。割り当てツリーの検索と、拡張レコードの作成と btree からの削除との比較。 |
| メトリックには、ブロックマップの読み取り/書き込みとブロックの削除の数、挿入、削除、および検索のためのエクステントリスト操作が含まれます。また、ブロックマップからの比較、検索、挿入、および削除に関する操作カウンター。 |
| 作成、エントリー削除、getdent の操作の数に対する XFS ファイルシステムのディレクトリー操作のカウンター。 |
| メタデータトランザクションの数のカウンター。これには、空のトランザクションの数と、同期および非同期のトランザクションの数のカウントが含まれます。 |
| オペレーティングシステムが、複数の結果で inode キャッシュの XFS inode を検索する回数のカウンター。このカウントキャッシュのヒット数、キャッシュミスなど。 |
| XFS ファイルシステムを介したログバッファーの書き込み数のカウンターには、ディスクに書き込まれたブロックの数が含まれます。また、ログフラッシュおよびピニングの数のメトリックです。 |
| XFS フラッシュデーモンによりフラッシュされたファイルデータのバイト数と、ディスク上の連続および非連続の領域にフラッシュされたバッファーの数のカウンター。 |
| すべての XFS ファイルシステムでの属性の取得、設定、削除、および一覧表示の操作数のカウント。 |
| XFS ファイルシステムでのクォータ操作のメトリック。これには、クォータ回収、クォータキャッシュミス、キャッシュヒット、およびクォータデータの回収の数に関するカウンターが含まれます。 |
| XFS バッファーオブジェクトに関するメトリックの範囲。カウンターには、ページ検索時に要求されたバッファーコールの数、成功したバッファーロック、待機バッファーロック、失敗したときのロック、失敗したときの再試行、バッファーヒットが含まれます。 |
| XFS btree の操作に関するメトリック。 |
| XFS 統計のメトリックカウンターをリセットするのに使用される設定メトリック。コントロールメトリックは、pmstore ツールを使用して切り替えられます。 |
9.5. XFS のデバイスごとの PCP メトリックグループ
以下の表は、XFS で利用可能なデバイスごとの PCP メトリックグループについて説明しています。
表9.2 XFS のデバイスごとの PCP メトリックグループ
メトリックグループ | 提供されたメトリック |
| 読み書き操作の数、読み書きバイト数を含む一般的な XFS メトリック。inode がフラッシュされた回数、クラッシュした回数、クラスター化に失敗した数に関するカウンターを併用。 |
| ファイルシステムのオブジェクトの割り当てに関するメトリックの範囲。これには、エクステントおよびブロックの作成/解放の数が含まれます。割り当てツリーの検索と、拡張レコードの作成と btree からの削除との比較。 |
| メトリックには、ブロックマップの読み取り/書き込みとブロックの削除の数、挿入、削除、および検索のためのエクステントリスト操作が含まれます。また、ブロックマップからの比較、検索、挿入、および削除に関する操作カウンター。 |
| 作成、エントリー削除、getdent の操作の数に対する XFS ファイルシステムのディレクトリー操作のカウンター。 |
| メタデータトランザクションの数のカウンター。これには、空のトランザクションの数と、同期および非同期のトランザクションの数のカウントが含まれます。 |
| オペレーティングシステムが、複数の結果で inode キャッシュの XFS inode を検索する回数のカウンター。このカウントキャッシュのヒット数、キャッシュミスなど。 |
| XFS ファイルシステムを介したログバッファーの書き込み数のカウンターには、ディスクに書き込まれたブロックの数が含まれます。また、ログフラッシュおよびピニングの数のメトリックです。 |
| XFS フラッシュデーモンによりフラッシュされたファイルデータのバイト数と、ディスク上の連続および非連続の領域にフラッシュされたバッファーの数のカウンター。 |
| すべての XFS ファイルシステムでの属性の取得、設定、削除、および一覧表示の操作数のカウント。 |
| XFS ファイルシステムでのクォータ操作のメトリック。これには、クォータ回収、クォータキャッシュミス、キャッシュヒット、およびクォータデータの回収の数に関するカウンターが含まれます。 |
| XFS バッファーオブジェクトに関するメトリックの範囲。カウンターには、ページ検索時に要求されたバッファーコールの数、成功したバッファーロック、待機バッファーロック、失敗したときのロック、失敗したときの再試行、バッファーヒットが含まれます。 |
| XFS btree の操作に関するメトリック。 |
第10章 PCP メトリックのグラフィカル表示の設定
pcp
、grafana
、pcp redis
、pcp bpftrace
、および pcp vector
を組み合わせて使用すると、ライブデータまたは Performance Co-Pilot (PCP) によって収集されたデータをグラフィカルに表示できます。
10.1. PCP の pcp-zeroconf での設定
この手順では、pcp-zeroconf
パッケージでシステムに PCP を設定する方法を説明します。pcp-zeroconf
パッケージがインストールされると、システムはメトリックのデフォルトセットをアーカイブファイルに記録します。
手順
pcp-zeroconf
パッケージをインストールします。# yum install pcp-zeroconf
検証手順
pmlogger
サービスがアクティブであることを確認し、メトリックのアーカイブを開始します。# pcp | grep pmlogger pmlogger: primary logger: /var/log/pcp/pmlogger/localhost.localdomain/20200401.00.12
関連情報
-
pmlogger
の man ページ - Performance Co-Pilot によるパフォーマンスの監視
10.2. grafana-server の設定
Grafana は、ブラウザーからアクセスできるグラフを生成します。grafana-server
は、Grafana ダッシュボードのバックエンドサーバーです。これは、デフォルトですべてのインターフェイスでリッスンし、Web ブラウザーからアクセスする Web サービスを提供します。grafana-pcp
プラグインは、バックエンドの pmproxy
プロトコルと対話します。
この手順では、grafana-server
を設定する方法を説明します。
前提条件
- PCP が設定されている。詳細は PCP の pcp-zeroconf での設定 を参照してください。
手順
以下のパッケージをインストールします。
# yum install grafana grafana-pcp
以下のサービスを再起動して有効にします。
# systemctl restart grafana-server # systemctl enable grafana-server
Grafana サービスへのネットワークトラフィック用にサーバーのファイアウォールを開きます。
# firewall-cmd --permanent --add-service=grafana success # firewall-cmd --reload success
検証手順
grafana-server
がリッスンし、要求に応答していることを確認します。# ss -ntlp | grep 3000 LISTEN 0 128 *:3000 *:* users:(("grafana-server",pid=19522,fd=7))
grafana-pcp
プラグインがインストールされていることを確認します。# grafana-cli plugins ls | grep performancecopilot-pcp-app performancecopilot-pcp-app @ 3.1.0
関連情報
-
pmproxy(1)
およびgrafana-server
の man ページ
10.3. Grafana Web UI へのアクセス
この手順では、Grafana Web インターフェイスにアクセスする方法を説明します。
Grafana Web インターフェイスを使用すると、以下が可能になります。
- PCP Redis、PCP bpftrace、および PCP Vector データソースを追加します。
- ダッシュボードの作成
- 有用なメトリックの概要の表示
- PCP Redis でのアラートの作成
前提条件
- PCP が設定されている。詳細は PCP の pcp-zeroconf での設定 を参照してください。
-
grafana-server
が設定されている。詳細は、grafana-server の設定 を参照してください。
手順
クライアントシステムで http://192.0.2.0:3000 リンクを使用してブラウザーを開き、ポート
3000
のgrafana-server
にアクセスします。192.0.2.0 をマシン IP に置き換えます。
最初のログインでは、Email or username と Password の両方のフィールドに admin と入力します。
Grafana は、新しいパスワード を設定してセキュアなアカウントを作成するようにプロンプトを表示します。後で設定する場合は、Skip をクリックします。
-
メニューで
Configuration アイコンにカーソルを合わせてから、Plugins をクリックします。
- プラグイン タブで、Search by name or type テキストボックスに performance co-pilot と入力し、Performance Co-Pilot (PCP) プラグインをクリックします。
- Plugins / Performance Co-Pilot ペインで、Enable をクリックします。
Grafana
アイコンをクリックします。Grafana Home ページが表示されます。
図10.1 Home Dashboard
注記画面上部の隅には同様の
アイコンがありますが、これは一般的な ダッシュボード設定 を制御します。
Grafana Home ページで、Add your first data source をクリックして PCP Redis、PCP bpftrace、および PCP Vector データソースを追加します。データソースの追加に関する詳細は、以下を参照してください。
- pcp redis データソースを追加するには、デフォルトのダッシュボードを表示し、パネルとアラートルールを作成します。詳細は、PCP Redis データソースでのパネルおよびアラートの作成 を参照してください。
- pcp bpftrace データソースを追加してデフォルトのダッシュボードを表示するには、PCP bpftrace システム分析ダッシュボードの表示 を参照してください。
- pcp vector データソースを追加するには、デフォルトのダッシュボードを表示します。Vector Checklist を表示するには、PCP Vector Checklist の表示 を参照してください。
-
オプション: メニューで、admin プロファイル
アイコンにカーソルを合わせ、Edit Profile、Change Password を含む Preferences を変更するか、Sign out します。
関連情報
-
grafana-cli
およびgrafana-server
の man ページ
10.4. PCP Redis の設定
PCP Redis データソースを使用して以下を行います。
- データアーカイブの表示
- pmseries 言語を使用したクエリー時系列
- 複数のホストにまたがるデータの分析
前提条件
- PCP が設定されている。詳細は PCP の pcp-zeroconf での設定 を参照してください。
-
grafana-server
が設定されている。詳細は、grafana-server の設定 を参照してください。
手順
redis
パッケージをインストールします。# yum install redis
以下のサービスを開始して有効にします。
# systemctl start pmproxy redis # systemctl enable pmproxy redis
-
メール転送エージェント (
sendmail
またはpostfix
など) がインストールされ、設定されている。 allow_loading_unsigned_plugins
パラメーターが、grafana.ini
ファイルの PCP Redis データベースに設定されていることを確認します。# vi /etc/grafana/grafana.ini allow_loading_unsigned_plugins = pcp-redis-datasource
grafana-server
を再起動します。# systemctl restart grafana-server
検証手順
pmproxy
およびredis
が動作していることを確認します。# pmseries disk.dev.read 2eb3e58d8f1e231361fb15cf1aa26fe534b4d9df
redis
パッケージがインストールされていない場合は、このコマンドはデータを返しません。
関連情報
-
pmseries(1)
の man ページ
10.5. PCP Redis データソースでのパネルおよびアラートの作成
PCP Redis データソースを追加した後に、ダッシュボードに有用なメトリックの概要を表示し、負荷グラフを視覚化するためのクエリーを追加して、システムに問題が発生した場合にその問題を表示する上で役立つアラートを作成できます。
前提条件
- PCP Redis が設定されている。詳細は PCP Redis の設定 を参照してください。
-
grafana-server
にアクセスできる。詳細は、Grafana Web UI へのアクセス を 参照してください。
手順
- Grafana Web UI にログインします。
- Grafana Home ページで、Add your first data source をクリックします。
- Add data source ペインで、Filter by name or type のテキストボックスに redis と入力してから PCP Redis をクリックします。
Data Sources / PCP Redis ペインで、以下を実行します。
-
URL フィールドに
http://localhost:44322
を追加し、Save & Test をクリックします。 Dashboards tab → Import → PCP Redis: Host Overview をクリックして、有用なメトリックの概要を含むダッシュボードを表示します。
図10.2 PCP Redis: ホストの概要
-
URL フィールドに
新しいパネルを追加します。
-
メニューで、
Create icon → Dashboard → Add new panel icon の順にマウスを合わせ、パネルを追加します。
-
Query タブで、選択した default オプションではなく、クエリー一覧から PCP Redis を選択し、A のテキストフィールドで
kernel.all.load
などのメトリックを入力して、カーネル負荷グラフを可視化します。 - 必要に応じて、Panel title と Description を追加し、Settings から他のオプションを更新します。
- Save をクリックして変更を適用し、ダッシュボードを保存します。Dashboard name を追加します。
Apply をクリックして変更を適用し、ダッシュボードに戻ります。
図10.3 PCP Redis クエリーパネル
-
メニューで、
アラートルールを作成します。
-
PCP Redis query panel で
Alert をクリックしてから、Create Alert をクリックします。
- Rule の Name、Evaluate query、および For フィールドを編集して、アラートの Conditions を指定します。
Save をクリックして変更を適用し、ダッシュボードを保存します。Apply をクリックして変更を適用し、ダッシュボードに戻ります。
図10.4 PCP Redis パネルでのアラートの作成
- 必要に応じて、同じパネルでスクロールダウンし、Delete アイコンをクリックして、作成したルールを削除します。
オプション: メニューで
Alerting アイコンをクリックし、作成されたアラートルールをさまざまなアラートステータスで表示したり、アラートルールを編集したり、Alert Rules タブから既存のルールを一時停止したりします。
作成したアラートルールの通知チャネルを追加して Grafana からアラート通知を受信するには、アラートの通知チャネルの追加 を参照してください。
-
PCP Redis query panel で
10.6. アラートの通知チャネルの追加
通知チャネルを追加すると、アラートルールの条件が満たされ、システムにさらなる監視が必要になると、Grafana からアラート通知を受け取ることができます。
サポートされている通知機能の一覧からいずれかのタイプを選択すると、これらのアラートを受け取ることができます。通知機能には、DingDing、Discord、Email、Google Hangouts Chat、HipChat、Kafka REST Proxy、LINE、Microsoft Teams、OpsGenie、PagerDuty、Prometheus Alertmanager、Pushover、Sensu、Slack、Telegram、Threema Gateway、VictorOps、および webhook が含まれます。
前提条件
-
grafana-server
にアクセスできる。詳細は、Grafana Web UI へのアクセス を 参照してください。 - アラートルールが作成されている。詳細は、PCP Redis データソースでのパネルおよびアラートの作成 を参照してください。
SMTP を設定し、
grafana/grafana.ini
ファイルに有効な送信者のメールアドレスを追加します。# vi /etc/grafana/grafana.ini [smtp] enabled = true from_address = abc@gmail.com
abc@gmail.com を有効なメールアドレスに置き換えます。
grafana-server
を再起動します。# systemctl restart grafana-server.service
手順
-
メニューで
Alerting icon → click Notification channels → Add channel の順でカーソルを合わせます。
Add notification channel details ペインで、以下を実行します。
- Name テキストボックスに、名前を入力します。
-
通信 Type (例: Email) を選択し、メールアドレスを入力します。区切り文字
;
を使用して複数のメールアドレスを追加できます。 - オプション: Optional Email settings および Notification settings を設定します。
- Save をクリックします。
アラートルールで通知チャネルを選択します。
-
メニューで
Alerting アイコンにマウスを合わせ、Alert rules をクリックします。
- Alert Rules タブで、作成されたアラートルールをクリックします。
- Notifications タブで Send to オプションから通知チャネル名を選択し、アラートメッセージを追加します。
- Apply をクリックします。
-
メニューで
10.7. PCP コンポーネント間の認証の設定
Simple Authentication Security Layer (SASL) フレームワークを介して PCP によってサポートされる scram-sha-256
認証メカニズムを使用して認証を設定できます。
Red Hat Enterprise Linux 8.3 以降から、PCP は scram-sha-256
認証メカニズムに対応します。
手順
scram-sha-256
認証メカニズムのsasl
フレームワークをインストールします。# yum install cyrus-sasl-scram cyrus-sasl-lib
pmcd.conf
ファイルに、サポートされている認証メカニズムとユーザーデータベースのパスを指定します。# vi /etc/sasl2/pmcd.conf mech_list: scram-sha-256 sasldb_path: /etc/pcp/passwd.db
新しいユーザーを作成します。
# useradd -r metrics
metrics をユーザー名に置き換えます。
作成したユーザーをユーザーデータベースに追加します。
# saslpasswd2 -a pmcd metrics Password: Again (for verification):
作成したユーザーを追加するには、メトリック アカウントのパスワードを入力する必要があります。
ユーザーデータベースのパーミッションを設定します。
# chown root:pcp /etc/pcp/passwd.db # chmod 640 /etc/pcp/passwd.db
pmcd
サービスを再起動します。# systemctl restart pmcd
検証手順
sasl
設定を確認します。# pminfo -f -h "pcp://127.0.0.1?username=metrics" disk.dev.read Password: disk.dev.read inst [0 or "sda"] value 19540
関連情報
-
saslauthd(8)
、pminfo(1)
、およびsha256
の man ページ - How can I setup authentication between PCP components, like PMDAs and pmcd in RHEL 8.2?
10.8. PCP bpftrace のインストール
PCP bpftrace
エージェントをインストールして、システムをイントロスペクトし、カーネルおよびユーザー空間トレースポイントからメトリックを収集します。
bpftrace
エージェントは bpftrace スクリプトを使用してメトリックを収集します。bpftrace
スクリプトは、強化された Berkeley Packet Filter (eBPF
) を使用します。
この手順では、pcp bpftrace
をインストールする方法を説明します。
前提条件
- PCP が設定されている。詳細は PCP の pcp-zeroconf での設定 を参照してください。
-
grafana-server
が設定されている。詳細は、grafana-server の設定 を参照してください。 -
scram-sha-256
認証メカニズムが設定されている。詳細は、PCP コンポーネント間の認証の設定 を参照してください。
手順
pcp-pmda-bpftrace
パッケージをインストールします。# yum install pcp-pmda-bpftrace
bpftrace.conf
ファイルを編集し、{setting-up-authentication-between-pcp-components} で作成したユーザーを追加します。# vi /var/lib/pcp/pmdas/bpftrace/bpftrace.conf [dynamic_scripts] enabled = true auth_enabled = true allowed_users = root,metrics
metrics をユーザー名に置き換えます。
bpftrace
PMDA をインストールします。# cd /var/lib/pcp/pmdas/bpftrace/ # ./Install Updating the Performance Metrics Name Space (PMNS) ... Terminate PMDA if already installed ... Updating the PMCD control file, and notifying PMCD ... Check bpftrace metrics have appeared ... 7 metrics and 6 values
pmda-bpftrace
がインストールされたため、ユーザーの認証後にのみ使用できるようになりました。詳細は PCP bpftrace システム分析ダッシュボードの表示 を参照してください。
関連情報
-
pmdabpftrace(1)
およびbpftrace
の man ページ
10.9. PCP bpftrace システム分析ダッシュボードの表示
PCP bpftrace データソースを使用すると、pmlogger
またはアーカイブからの通常のデータとして利用できないソースからのライブデータにアクセスできます。
PCP bpftrace データソースでは、ダッシュボードに有用なメトリックの概要を表示できます。
前提条件
- PCP bpftrace がインストールされている。詳細は、PCP bpftrace のインストール を参照してください。
-
grafana-server
にアクセスできる。詳細は、Grafana Web UI へのアクセス を 参照してください。
手順
- Grafana Web UI にログインします。
- Grafana Home ページで、Add your first data source をクリックします。
- Add data source ペインで、Filter by name or type テキストボックスに bpftrace と入力して、PCP bpftrace をクリックします。
Data Sources / PCP bpftrace ペインで、以下を実行します。
-
URL フィールドに
http://localhost:44322
を追加します。 - Basic Auth オプションを切り替えて、作成されたユーザーの認証情報を、User フィールドおよび Password フィールドに追加します。
Save & Test をクリックします。
図10.5 データソースへの PCP bpftrace の追加
Dashboards tab → Import → PCP bpftrace: System Analysis をクリックし、有用なメトリックの概要を含むダッシュボードを表示します。
図10.6 PCP bpftrace: システム分析
-
URL フィールドに
10.10. PCP Vector のインストール
この手順では、pcp vector
をインストールする方法を説明します。
前提条件
- PCP が設定されている。詳細は PCP の pcp-zeroconf での設定 を参照してください。
-
grafana-server
が設定されている。詳細は、grafana-server の設定 を参照してください。
手順
pcp-pmda-bcc
パッケージをインストールします。# yum install pcp-pmda-bcc
bcc
PMDA をインストールします。# cd /var/lib/pcp/pmdas/bcc # ./Install [Wed Apr 1 00:27:48] pmdabcc(22341) Info: Initializing, currently in 'notready' state. [Wed Apr 1 00:27:48] pmdabcc(22341) Info: Enabled modules: [Wed Apr 1 00:27:48] pmdabcc(22341) Info: ['biolatency', 'sysfork', [...] Updating the Performance Metrics Name Space (PMNS) ... Terminate PMDA if already installed ... Updating the PMCD control file, and notifying PMCD ... Check bcc metrics have appeared ... 1 warnings, 1 metrics and 0 values
関連情報
-
pmdabcc(1)
の man ページ
10.11. PCP Vector Checklist の表示
PCP Vector データソースはライブメトリックを表示し、pcp
メトリックを使用します。各ホストのデータを分析します。
PCP Vector データソースを追加した後に、ダッシュボードに有用なメトリックの概要を表示し、チェックリストで関連するトラブルシューティングまたは参照リンクを表示できます。
前提条件
- PCP Vector がインストールされている。詳細は PCP Vector のインストール を参照してください。
-
grafana-server
にアクセスできる。詳細は、Grafana Web UI へのアクセス を 参照してください。
手順
- Grafana Web UI にログインします。
- Grafana Home ページで、Add your first data source をクリックします。
- Add data source ペインで、Filter by name or type テキストボックスに vector と入力してから PCP Vector をクリックします。
Data Sources / PCP Vector ペインで、以下を実行します。
-
URL フィールドに
http://localhost:44322
を追加し、Save & Test をクリックします。 Dashboards tab → Import → PCP Vector: Host Overview をクリックして、有用なメトリックの概要を含むダッシュボードを表示します。
図10.7 PCP Vector: ホストの概要
-
URL フィールドに
メニューで
Performance Co-Pilot プラグインにマウスを合わせ、PCP Vector Checklist をクリックします。
PCP チェックリストで、
ヘルプまたは
警告アイコをクリックし、関連するトラブルシューティングまたは参照リンクを表示します。
図10.8 Performance Co-Pilot / PCP Vector Checklist
10.12. Grafana に関する問題のトラブルシューティング
Grafana にデータが表示されない、ダッシュボードが黒くなる、または同様の問題など、Grafana の問題のトラブルシューティングが必要になる場合があります。
手順
以下のコマンドを実行して、
pmlogger
サービスが起動していることを確認します。$ systemctl status pmlogger
以下のコマンドを実行して、ディスクにファイルが作成または変更されているかどうかを確認します。
$ ls /var/log/pcp/pmlogger/$(hostname)/ -rlt total 4024 -rw-r--r--. 1 pcp pcp 45996 Oct 13 2019 20191013.20.07.meta.xz -rw-r--r--. 1 pcp pcp 412 Oct 13 2019 20191013.20.07.index -rw-r--r--. 1 pcp pcp 32188 Oct 13 2019 20191013.20.07.0.xz -rw-r--r--. 1 pcp pcp 44756 Oct 13 2019 20191013.20.30-00.meta.xz [..]
以下のコマンドを実行して、
pmproxy
サービスが動作していることを確認します。$ systemctl status pmproxy
pmproxy
が動作していること、時系列サポートが有効になっていること、Redis への接続が確立されていることを、/var/log/pcp/pmproxy/pmproxy.log
ファイルを見て、以下のテキストが含まれていることで確認してください。pmproxy(1716) Info: Redis slots, command keys, schema version setup
ここで、1716は pmproxy の PID であり、
pmproxy
を起動するたびに異なる値になります。以下のコマンドを実行して、Redis データベースにキーが含まれているかどうかを確認します。
$ redis-cli dbsize (integer) 34837
以下のコマンドを実行して、PCP メトリクスが Redis データベースに存在し、
pmproxy
がアクセスできるかどうかを確認します。$ pmseries disk.dev.read 2eb3e58d8f1e231361fb15cf1aa26fe534b4d9df $ pmseries "disk.dev.read[count:10]" 2eb3e58d8f1e231361fb15cf1aa26fe534b4d9df [Mon Jul 26 12:21:10.085468000 2021] 117971 70e83e88d4e1857a3a31605c6d1333755f2dd17c [Mon Jul 26 12:21:00.087401000 2021] 117758 70e83e88d4e1857a3a31605c6d1333755f2dd17c [Mon Jul 26 12:20:50.085738000 2021] 116688 70e83e88d4e1857a3a31605c6d1333755f2dd17c [...]
$ redis-cli --scan --pattern "*$(pmseries 'disk.dev.read')" pcp:metric.name:series:2eb3e58d8f1e231361fb15cf1aa26fe534b4d9df pcp:values:series:2eb3e58d8f1e231361fb15cf1aa26fe534b4d9df pcp:desc:series:2eb3e58d8f1e231361fb15cf1aa26fe534b4d9df pcp:labelvalue:series:2eb3e58d8f1e231361fb15cf1aa26fe534b4d9df pcp:instances:series:2eb3e58d8f1e231361fb15cf1aa26fe534b4d9df pcp:labelflags:series:2eb3e58d8f1e231361fb15cf1aa26fe534b4d9df
以下のコマンドを実行して、Grafana のログにエラーがあるかどうかを確認します。
$ journalctl -e -u grafana-server -- Logs begin at Mon 2021-07-26 11:55:10 IST, end at Mon 2021-07-26 12:30:15 IST. -- Jul 26 11:55:17 localhost.localdomain systemd[1]: Starting Grafana instance... Jul 26 11:55:17 localhost.localdomain grafana-server[1171]: t=2021-07-26T11:55:17+0530 lvl=info msg="Starting Grafana" logger=server version=7.3.6 c> Jul 26 11:55:17 localhost.localdomain grafana-server[1171]: t=2021-07-26T11:55:17+0530 lvl=info msg="Config loaded from" logger=settings file=/usr/s> Jul 26 11:55:17 localhost.localdomain grafana-server[1171]: t=2021-07-26T11:55:17+0530 lvl=info msg="Config loaded from" logger=settings file=/etc/g> [...]
第11章 Web コンソールを使用したシステムパフォーマンスの最適化
以下では、RHEL Web コンソールでパフォーマンスプロファイルを設定し、選択したタスクに対してシステムのパフォーマンスを最適化する方法を説明します。
11.1. Web コンソールでのパフォーマンスチューニングオプション
Red Hat Enterprise Linux 8 には、以下のタスクに対してシステムを最適化する複数のパフォーマンスプロファイルが同梱されています。
- デスクトップを使用するシステム
- スループットパフォーマンス
- レイテンシーパフォーマンス
- ネットワークパフォーマンス
- 電力の低消費
- 仮想マシン
TuneD
サービスは、選択したプロファイルに一致するようにシステムオプションを最適化します。
Web コンソールでは、システムが使用するパフォーマンスプロファイルを設定できます。
関連情報
11.2. Web コンソールでのパフォーマンスプロファイルの設定
この手順では、Web コンソールを使用して、選択したタスクのシステムパフォーマンスを最適化します。
前提条件
- Web コンソールをインストールし、アクセスできることを確認します。詳細は、Web コンソールのインストール を参照してください。
手順
- RHEL Web コンソールにログインします。詳細は、Web コンソールへのログイン を参照してください。
- 概要 をクリックします。
パフォーマンスプロファイル フィールドで、現在のパフォーマンスプロファイルをクリックします。
- 必要に応じて、パフォーマンスプロファイルの変更 ダイアログボックスで、プロファイルを変更します。
プロファイルの変更 をクリックします。
検証手順
- Overview タブには、選択したパフォーマンスプロファイルが表示されます。
11.3. Web コンソールを使用したローカルシステムのパフォーマンスの監視
Red Hat Enterprise Linux の Web コンソールは、トラブルシューティングに Utilization Saturation and Errors (USE) メソッドを使用します。新しいパフォーマンスメトリックページには、データの履歴ビューが時系列に整理されており、最新のデータが上部に表示されます。
ここでは、リソースの使用状況および飽和状況のイベント、エラー、およびグラフィカル表示を表示できます。
前提条件
- RHEL 8 Web コンソールをインストールし、アクセスできる。詳細は、Web コンソールのインストール を参照してください。
パフォーマンスメトリクスの収集を可能にする
cockpit-pcp
パッケージがインストールされます。Web コンソールインターフェイスからパッケージをインストールするには、以下を行います。
- Web コンソールに管理者権限でログインする。詳細は、Web コンソールへのログイン を参照してください。
- 概要 ページで、詳細と履歴を表示 をクリックします。
- cockpit-pcp のインストール ボタンをクリックします。
- ソフトウェアのインストール ダイアログウィンドウで、インストール をクリックします。
コマンドラインインターフェイスからパッケージをインストールするには、次を使用します。
# yum install cockpit-pcp
PCP サービスが有効化されています。
# systemctl enable --now pmlogger.service pmproxy.service
手順
RHEL 8 Web コンソールにログインします。Overview ページで View details and history をクリックして、Performance Metrics を表示します。
11.4. Web コンソールと Grafana を使用して複数のシステムのパフォーマンスを監視する
Grafana を使用すると、一度に複数のシステムからデータを収集し、収集した PCP メトリックのグラフィカル表現を確認できます。Web コンソールインターフェイスで、複数のシステムのパフォーマンスメトリックの監視およびエクスポートを設定できます。
この手順では、RHEL 8 Web コンソールインターフェイスから PCP を使用してパフォーマンスメトリックのエクスポートを有効にする方法を示します。
前提条件
- Web コンソールがインストールされており、アクセス可能である。詳細は、Web コンソールのインストール を参照してください。
cockpit-pcp
パッケージをインストールします。Web コンソールインターフェイスから:
- Web コンソールに管理者権限でログインする。詳細は、Web コンソールへのログイン を参照してください。
- 概要 ページで、詳細と履歴を表示 をクリックします。
- cockpit-pcp のインストール ボタンをクリックします。
- ソフトウェアのインストール ダイアログウィンドウで、インストール をクリックします。
- ログアウトしてから再度ログインして、メトリクスの履歴を表示します。
コマンドラインインターフェイスからパッケージをインストールするには、次を使用します。
# yum install cockpit-pcp
PCP サービスを有効にします。
# systemctl enable --now pmlogger.service pmproxy.service
- Grafana ダッシュボードをセットアップします。詳細は、grafana-server の設定 を参照してください。
redis
パッケージをインストールします。# dnf install redis
または、手順の後半で Web コンソールインターフェイスからパッケージをインストールすることもできます。
手順
- 使用状況 テーブルの 概要 ページで、詳細と履歴を表示 をクリックします。
- Metrics settings ボタンをクリックします。
Export to network スライダーをアクティブな位置に移動します。
redis
サービスがインストールされていない場合は、インストールするように求められます。-
pmproxy
サービスを開くには、ドロップダウンリストからゾーンを選択し、Add pmproxy ボタンをクリックします。 - Save をクリックします。
検証
- ネットワーキング をクリックします。
-
Firewall テーブルで、
n
active zones または Edit rules and zones ボタンをクリックします。 -
選択したゾーンで
pmproxy
を検索します。
監視するすべてのシステムでこの手順を繰り返します。
第12章 ディスクスケジューラーの設定
ディスクスケジューラーは、ストレージデバイスに送信された I/O 要求を順序付けます。
スケジューラーは以下の複数の方法で設定できます。
- Setting the disk scheduler using TuneD の説明に従って、TuneD を使用してスケジューラーを設定します。
-
udev ルールを使用したディスクスケジューラーの設定 で説明されているように、
udev
を使用してスケジューラーを設定します。 - 特定ディスクに任意のスケジューラーを一時的に設定 で説明されているように、実行中のシステムのスケジューラーを一時的に変更します。
Red Hat Enterprise Linux 8 では、ブロックデバイスはマルチキュースケジューリングのみに対応します。これにより、ブロックレイヤーのパフォーマンスを高速ソリッドステートドライブ (SSD) およびマルチコアシステムで適切に拡張できます。
Red Hat Enterprise Linux 7 以前のバージョンで利用できた従来のシングルキュースケジューラーが削除されました。
12.1. 利用可能なディスクスケジューラー
Red Hat Enterprise Linux 8 では、以下のマルチキューディスクスケジューラーに対応しています。
none
- FIFO (First-in First-out) スケジューリングアルゴリズムを実装します。これにより、汎用のブロック層で単純な last-hit キャッシュを介して要求がマージされます。
mq-deadline
これにより、要求がスケジューラーに到達した時点からの要求のレイテンシーが保証されます。
mq-deadline
スケジューラーは、キュー待ちの I/O リクエストを読み取りバッチまたは書き込みバッチに分類します。そして、論理ブロックアドレス (LBA) を増大順に実行するためのスケジュール設定を行います。デフォルトでは、アプリケーションは読み取り I/O 操作でブロックする可能性の方が高いため、読み取りバッチの方が書き込みバッチより優先されます。mq-deadline
がバッチを処理すると、このプロセスは書き込み動作が待機している長さを確認して、次の読み取りバッチまたは書き込みバッチをスケジュールします。このスケジューラーはほとんどのユースケースに適していますが、必要に応じて特に書き込み動作より読み取り動作の方が頻繁に起こるユースケースに適しています。
bfq
デスクトップシステムおよび対話式のタスクを対象とします。
bfq
スケジューラーは、単一のアプリケーションがすべての帯域幅を使用しないようにします。これにより、ストレージデバイスがアイドル状態であるかのように常に応答できるようになります。デフォルトの設定では、bfq
は、最大スループットを実現するのではなく、レイテンシーを最小限に抑えることに焦点を合わせています。bfq
はcfq
コードに基づいています。固定タイムスライスについて、ディスクは各プロセスに付与されることはありませんが、セクター数を測定する budget をプロセスに割り当てます。このスケジューラーは大きなファイルをコピーする際に適しており、この場合、システムが応答しなくなることはありません。
kyber
スケジューラーは、ブロック I/O レイヤーに送信されたすべての I/O 要求のレイテンシーを計算することで、レイテンシーゴールを達成するために自身を調整します。cache-misses の場合、読み込み/同期書き込みリクエストにターゲットレイテンシーを設定できます。
このスケジューラーは、NVMe、SSD などの低レイテンシーデバイスなど、高速なデバイスに適しています。
12.2. 各種ユースケースで異なるディスクスケジューラー
システムが実行するタスクに応じて、分析タスクおよびチューニングタスクの前に、以下のディスクスケジューラーがベースラインとして推奨されます。
表12.1 各種ユースケースのディスクスケジューラー
ユースケース | ディスクスケジューラー |
---|---|
SCSI インターフェイスを備えた従来の HDD |
|
高速ストレージで高パフォーマンスの SSD または CPU がバインドされたシステム |
特にエンタープライズアプリケーションを実行する場合は |
デスクトップまたはインタラクティブなタスク |
|
仮想ゲスト |
|
12.3. デフォルトのディスクスケジューラー
ブロックデバイスは、別のスケジューラーを指定しない限り、デフォルトのディスクスケジューラーを使用します。
NVMe (Non-volatile Memory Express)
ブロックデバイスの場合、デフォルトのスケジューラーは none
であり、Red Hat ではこれを変更しないことを推奨します。
カーネルは、デバイスのタイプに基づいてデフォルトのディスクスケジューラーを選択します。自動的に選択されたスケジューラーは、通常、最適な設定です。別のスケジューラーが必要な場合は、Red Hat では、udev
ルールまたは TuneD アプリケーションを使用して設定することを推奨しています。選択したデバイスを一致させ、それらのデバイスのスケジューラーのみを切り替えます。
12.4. アクティブなディスクスケジューラーの決定
この手順では、特定のブロックデバイスで現在アクティブなディスクスケジューラーを確認します。
手順
/sys/block/device/queue/scheduler
ファイルの内容を読み取ります。# cat /sys/block/device/queue/scheduler [mq-deadline] kyber bfq none
ファイル名の device を、
sdc
などのブロックデバイス名に置き換えます。アクティブなスケジューラーは、角括弧 (
[ ]
) に一覧表示されます。
12.5. TuneD を使用したディスクスケジューラーの設定
この手順では、選択したブロックデバイスに特定のディスクスケジューラーを設定するTuneD プロファイルを作成して有効にします。この設定は、システムを再起動しても持続します。
以下のコマンドと設定で、以下の内容を置き換えます。
-
device をブロックデバイスの名前に置き換えます (例:
sdf
)。 -
selected-scheduler を、デバイスに設定するディスクスケジューラーに置き換えます (例:
bfq
)。
前提条件
-
Tuned
サービスがインストールされ、有効になっている。詳細は、TuneD のインストールと有効化 を参照してください。
手順
必要に応じて、プロファイルのベースとなる既存のTuneDプロファイルを選択します。利用可能なプロファイルの一覧は、RHEL とともに配布される TuneD プロファイル を参照してください。
現在アクティブなプロファイルを確認するには、次のコマンドを実行します。
$ tuned-adm active
TuneD プロファイルを保持する新しいディレクトリーを作成します。
# mkdir /etc/tuned/my-profile
選択したブロックデバイスのシステム固有の識別子を見つけます。
$ udevadm info --query=property --name=/dev/device | grep -E '(WWN|SERIAL)' ID_WWN=0x5002538d00000000_ ID_SERIAL=Generic-_SD_MMC_20120501030900000-0:0 ID_SERIAL_SHORT=20120501030900000
注記この例のコマンドは、指定したブロックデバイスに関連付けられた World Wide Name (WWN) またはシリアル番号として識別されるすべての値を返します。WWN を使用することが推奨されますが、WWN は特定のデバイスで常に利用できる訳ではなく、コマンド例で返される値は、デバイスのシステム固有の ID として使用することが許容されます。
/etc/tuned/my-profile/tuned.conf
設定ファイルを作成します。このファイルで、以下のオプションを設定します。必要に応じて、既存のプロファイルを追加します。
[main] include=existing-profile
WWN 識別子に一致するデバイスに対して選択したディスクスケジューラーを設定します。
[disk] devices_udev_regex=IDNAME=device system unique id elevator=selected-scheduler
ここでは、以下のようになります。
-
IDNAME を、使用されている識別子名に置き換えます (例:
ID_WWN
)。 device system unique id を、選択した識別子の値に置き換えます (例:
0x5002538d00000000
)。devices_udev_regex
オプションで複数のデバイスに一致させるには、識別子を括弧で囲み、垂直バーで区切ります。devices_udev_regex=(ID_WWN=0x5002538d00000000)|(ID_WWN=0x1234567800000000)
-
IDNAME を、使用されている識別子名に置き換えます (例:
プロファイルを有効にします。
# tuned-adm profile my-profile
検証手順
TuneD プロファイルがアクティブで、適用されていることを確認します。
$ tuned-adm active Current active profile: my-profile
$ tuned-adm verify Verification succeeded, current system settings match the preset profile. See TuneD log file ('/var/log/tuned/tuned.log') for details.
/sys/block/device/queue/scheduler
ファイルの内容を読み取ります。# cat /sys/block/device/queue/scheduler [mq-deadline] kyber bfq none
ファイル名の device を、
sdc
などのブロックデバイス名に置き換えます。アクティブなスケジューラーは、角括弧 (
[]
) に一覧表示されます。
関連情報
12.6. udev ルールを使用したディスクスケジューラーの設定
この手順では、udev
ルールを使用して、特定ブロックデバイスに、特定のディスクスケジューラーを設定します。この設定は、システムを再起動しても持続します。
以下のコマンドと設定で、以下の内容を置き換えます。
-
device をブロックデバイスの名前に置き換えます (例:
sdf
)。 -
selected-scheduler を、デバイスに設定するディスクスケジューラーに置き換えます (例:
bfq
)。
手順
ブロックデバイスのシステム固有の識別子を見つけます。
$ udevadm info --name=/dev/device | grep -E '(WWN|SERIAL)' E: ID_WWN=0x5002538d00000000 E: ID_SERIAL=Generic-_SD_MMC_20120501030900000-0:0 E: ID_SERIAL_SHORT=20120501030900000
注記この例のコマンドは、指定したブロックデバイスに関連付けられた World Wide Name (WWN) またはシリアル番号として識別されるすべての値を返します。WWN を使用することが推奨されますが、WWN は特定のデバイスで常に利用できる訳ではなく、コマンド例で返される値は、デバイスのシステム固有の ID として使用することが許容されます。
udev
ルールを設定します。以下の内容で/etc/udev/rules.d/99-scheduler.rules
ファイルを作成します。ACTION=="add|change", SUBSYSTEM=="block", ENV{IDNAME}=="device system unique id", ATTR{queue/scheduler}="selected-scheduler"
ここでは、以下のようになります。
-
IDNAME を、使用されている識別子名に置き換えます (例:
ID_WWN
)。 -
device system unique id を、選択した識別子の値に置き換えます (例:
0x5002538d00000000
)。
-
IDNAME を、使用されている識別子名に置き換えます (例:
udev
ルールを再読み込みします。# udevadm control --reload-rules
スケジューラー設定を適用します。
# udevadm trigger --type=devices --action=change
検証手順
アクティブなスケジューラーを確認します。
# cat /sys/block/device/queue/scheduler
12.7. 特定ディスクに任意のスケジューラーを一時的に設定
この手順では、特定のブロックデバイスに、特定のディスクスケジューラーを設定します。この設定は、システムを再起動すると元に戻ります。
手順
選択したスケジューラーの名前を、
/sys/block/device/queue/scheduler
ファイルに書き込みます。# echo selected-scheduler > /sys/block/device/queue/scheduler
ファイル名の device を、
sdc
などのブロックデバイス名に置き換えます。
検証手順
スケジューラーがデバイスでアクティブになっていることを確認します。
# cat /sys/block/device/queue/scheduler
第13章 Samba サーバーのパフォーマンスチューニング
特定の状況で Samba のパフォーマンスを向上させることができる設定と、パフォーマンスに悪影響を与える可能性がある設定について説明します。
このセクションの一部は、Samba Wiki に公開されているドキュメント Performance Tuning に掲載されています。ライセンスは、CC BY 4.0 にあります。著者および貢献者は、Wiki ページの history タブを参照してください。
前提条件
Samba がファイルまたはプリントサーバーとして設定されている。
Samba をサーバーとして使用 を参照してください。
13.1. SMB プロトコルバージョンの設定
新しい SMB バージョンごとに機能が追加され、プロトコルのパフォーマンスが向上します。最新の Windows および Windows Server オペレーティングシステムは、常に最新のプロトコルバージョンに対応しています。Samba がプロトコルの最新バージョンも使用している場合は、Samba に接続する Windows クライアントで、このパフォーマンス改善を活用できます。Samba では、server max protocol のデフォルト値が、対応している安定した SMB プロトコルの最新バージョンに設定されます。
常に最新の安定した SMB プロトコルバージョンを有効にするには、server max protocol
パラメーターを設定しないでください。このパラメーターを手動で設定する場合は、最新のプロトコルバージョンを有効にするために、それぞれ新しいバージョンの SMB プロトコルで設定を変更する必要があります。
次の手順では、server max protocol
パラメーターでデフォルト値を使用する方法を説明します。
手順
-
/etc/samba/smb.conf
ファイルの[global]
セクションから、server max protocol
パラメーターを削除します。 Samba 設定を再読み込みします。
# smbcontrol all reload-config
13.2. 大量のファイルを含むディレクトリーとの共有の調整
Linux は、大文字と小文字を区別するファイル名に対応しています。このため、Samba はファイルの検索時またはアクセス時に、大文字と小文字のファイル名のディレクトリーをスキャンする必要があります。小文字または大文字のいずれかでのみ新しいファイルを作成するように共有を設定すると、パフォーマンスが向上します。
前提条件
- Samba が、ファイルサーバーとして設定されている。
手順
共有の全ファイルの名前を小文字に変更します。
注記この手順の設定を使用すると、小文字以外の名前が付けられたファイルは表示されなくなります。
共有のセクションに、以下のパラメーターを設定します。
case sensitive = true default case = lower preserve case = no short preserve case = no
パラメーターの詳細は、man ページの
smb.conf(5)
を参照してください。/etc/samba/smb.conf
ファイルを検証します。# testparm
Samba 設定を再読み込みします。
# smbcontrol all reload-config
この設定が適用されと、この共有に新たに作成されるすべてのファイルの名前が小文字になります。この設定により、Samba はディレクトリーを大文字と小文字で分けたスキャンが不要になり、パフォーマンスが向上します。
13.3. パフォーマンスが低下する可能性のある設定
デフォルトでは、Red Hat Enterprise Linux のカーネルは、ネットワークパフォーマンスが高くなるように調整されています。たとえば、カーネルはバッファーサイズに自動チューニングメカニズムを使用しています。/etc/samba/smb.conf
ファイルに socket options
パラメーターを設定すると、このカーネル設定が上書きされます。その結果、このパラメーターの設定により、ほとんどの場合は、Samba ネットワークのパフォーマンスが低下します。
カーネルの最適化された設定を使用するには、/etc/samba/smb.conf
の [global]
セクションから socket options
パラメーターを削除します。
第14章 仮想マシンのパフォーマンスの最適化
仮想マシンでは、ホストと比べて、パフォーマンス低下が常に見られます。以下のセクションでは、この低下の理由を説明します。また、ハードウェアのインフラストラクチャーリソースを可能な限り効率的に使用できるように、RHEL 8 での仮想化によるパフォーマンスへの影響を最小限に抑える方法を説明します。
14.1. 仮想マシンのパフォーマンスに影響を及ぼすもの
仮想マシンは、ホストのユーザー空間プロセスとして実行します。したがって、ハイパーバイザーは、仮想マシンがホストシステムのリソースを使用できるように、ホストのシステムリソースを変換する必要があります。したがって、変換によりリソースの一部が消費されるため、仮想マシンのパフォーマンス効率は、ホストと同じにはなりません。
システムパフォーマンスにおける仮想化の影響
仮想マシンのパフォーマンス低下の理由には、以下のようなものがあります。
- 仮想 CPU (vCPU) がホスト上のスレッドとして実装され、Linux スケジューラーで処理される。
- 仮想マシンは、ホストカーネルから NUMA や Huge Page などの最適化機能を自動的に継承しない。
- ホストのディスクおよびネットワーク I/O の設定が、仮想マシンのパフォーマンスに大きく影響する可能性がある。
- ネットワークトラフィックは、一般的に、ソフトウェアベースのブリッジから仮想マシンに流れる。
- ホストデバイスとそのモデルによっては、その特定のハードウェアのエミュレーションにより、オーバーヘッドが著しくなる可能性がある。
仮想化が仮想マシンのパフォーマンスに与える影響の重大度は、次のようなさまざまな要因の影響を受けます。
- 同時に実行している仮想マシンの数
- 各仮想マシンで使用される仮想デバイスのサイズ
- 仮想マシンが使用するデバイスの種類
仮想マシンのパフォーマンス損失を減らす
RHEL 8 は、仮想化のパフォーマンスへの悪影響を減らすのに使用できる多くの機能を提供します。以下に例を示します。
-
tuned
サービス は、仮想マシンのリソースディストリビューションとパフォーマンスを自動的に最適化できる。 - ブロック I/O チューニング により、ディスクなどの仮想マシンのブロックデバイスのパフォーマンスを改善できる。
- NUMA のチューニング により、vCPU のパフォーマンスを向上させることができる。
- 仮想ネットワーク は、さまざまな方法で最適化できる。
仮想マシンのパフォーマンスのチューニングは、その他の仮想化機能に悪影響を与える可能性があります。たとえば、変更した仮想マシンの移行がより困難になります。
14.2. TuneD を使用した仮想マシンのパフォーマンスの最適化
TuneD
ユーティリティーは、CPU 集中型タスクや、ストレージネットワークスループットの応答などの特定のワークロードの特性に対して RHEL を調整するプロファイル配信メカニズムです。これにより、特定のユースケースで、パフォーマンスを強化し、電力消費を減らすように事前設定されたチューニングプロファイルを多数利用できます。これらのプロファイルを編集するか、または新規プロファイルを作成して、仮想化環境に適したパフォーマンスソリューション (仮想化環境を含む) を作成できます。
RHEL 8 を仮想化に最適化するには、次のプロファイルを使用します。
-
RHEL 8 仮想マシンの場合は、virtual-guest プロファイルを使用します。これは、一般的に適用された
throughput-performance
プロファイルをベースにしていますが、仮想メモリーのスワップは減少します。 - RHEL 8 仮想ホストの場合は、virtual-host プロファイルを使用します。これにより、ダーティーメモリーページのより集中的なライトバックが有効になり、ホストのパフォーマンスを活用できます。
前提条件
-
TuneD
サービスがインストールされており、有効になっている。
手順
特定の TuneD
プロファイルを有効にするには、以下を実行します。
使用可能な
Tuned
プロファイルを一覧表示します。# tuned-adm list Available profiles: - balanced - General non-specialized TuneD profile - desktop - Optimize for the desktop use-case [...] - virtual-guest - Optimize for running inside a virtual guest - virtual-host - Optimize for running KVM guests Current active profile: balanced
(必要に応じて) 新しい
TuneD
プロファイルを作成するか、既存のTuneD
プロファイルを編集します。詳しくは、TuneD プロファイルのカスタマイズ を参照してください。
TuneD
プロファイルをアクティベートします。# tuned-adm profile selected-profile
仮想化ホストを最適化するには、virtual-host プロファイルを使用します。
# tuned-adm profile virtual-host
RHEL ゲストオペレーティングシステムで、virtual-guest プロファイルを使用します。
# tuned-adm profile virtual-guest
14.3. 仮想マシンのメモリーの設定
仮想マシンのパフォーマンスを改善するために、追加のホスト RAM を仮想マシンに割り当てることができます。同様に、仮想マシンに割り当てるメモリー量を減らして、ホストメモリーを他の仮想マシンやタスクに割り当てることができます。
これらのアクションを実行するには、Web コンソール または コマンドラインインターフェイス を使用します。
14.3.1. Web コンソールで仮想マシンのメモリーの追加と削除
仮想マシンのパフォーマンスを向上させるか、または仮想マシンが使用するホストリソースを解放するために、Web コンソールを使用して、仮想マシンに割り当てられたメモリーの量を調整できます。
前提条件
ゲスト OS がメモリーバルーンドライバーを実行している。これを確認するには、以下を実行します。
仮想マシンの設定に
memballoon
デバイスが含まれていることを確認します。# virsh dumpxml testguest | grep memballoon <memballoon model='virtio'> </memballoon>
このコマンドで出力が表示され、モデルが
none
に設定されていない場合は、memballoon
デバイスが存在します。バルーンドライバーがゲスト OS で実行していることを確認します。
-
Windows ゲストでは、ドライバーは
virtio-win
ドライバーパッケージの一部としてインストールされます。手順は、Installing paravirtualized KVM drivers for Windows virtual machines を参照してください。 -
Linux ゲストでは、通常、このドライバーはデフォルトで含まれており、
memballoon
デバイスがあれば、アクティベートされます。
-
Windows ゲストでは、ドライバーは
- Web コンソールの VM プラグインが システムにインストールされている。
手順
任意: 最大メモリーと、仮想マシンに現在使用されている最大メモリーの情報を取得します。これは、変更のベースラインとしても、検証のためにも機能します。
# virsh dominfo testguest Max memory: 2097152 KiB Used memory: 2097152 KiB
仮想マシン インターフェイスで、情報を表示する仮想マシンを選択します。
新しいページが開き、選択した VM に関する基本情報を含む概要セクションと、VM のグラフィカルインターフェイスにアクセスするためのコンソールセクションが表示されます。
概要ペインで、
Memory
行の横にある 編集 をクリックします。メモリー調整
ダイアログが表示されます。選択した仮想マシンの仮想 CPU を設定します。
最大割り当て: 仮想マシンがそのプロセスに使用できるホストメモリーの最大量を設定します。VM の作成時に最大メモリーを指定することも、後で増やすこともできます。メモリーは、MiB または GiB の倍数で指定できます。
仮想マシンをシャットダウンしてからでないと、最大メモリー割り当てを調整できません。
現在の割り当て - 仮想マシンに割り当てる実際のメモリー量を設定します。この値は、最大割り当てより小さい値にすることができますが、上限を超えることはできません。値を調整して、仮想マシンで利用可能なメモリーをプロセス用に調整できます。メモリーは、MiB または GiB の倍数で指定できます。
この値を指定しない場合、デフォルトの割り当ては最大割り当て の値になります。
Save をクリックします。
仮想マシンのメモリー割り当てが調整されます。
14.3.2. コマンドラインインターフェイスで仮想マシンのメモリーの追加と削除
仮想マシンのパフォーマンスを改善したり、使用しているホストリソースを解放したりするために、CLI を使用して仮想マシンに割り当てられたメモリーの量を調整できます。
前提条件
ゲスト OS がメモリーバルーンドライバーを実行している。これを確認するには、以下を実行します。
仮想マシンの設定に
memballoon
デバイスが含まれていることを確認します。# virsh dumpxml testguest | grep memballoon <memballoon model='virtio'> </memballoon>
このコマンドで出力が表示され、モデルが
none
に設定されていない場合は、memballoon
デバイスが存在します。ballon ドライバーがゲスト OS で実行されていることを確認します。
-
Windows ゲストでは、ドライバーは
virtio-win
ドライバーパッケージの一部としてインストールされます。手順は、Installing paravirtualized KVM drivers for Windows virtual machines を参照してください。 -
Linux ゲストでは、通常、このドライバーはデフォルトで含まれており、
memballoon
デバイスがあれば、アクティベートされます。
-
Windows ゲストでは、ドライバーは
手順
任意: 最大メモリーと、仮想マシンに現在使用されている最大メモリーの情報を取得します。これは、変更のベースラインとしても、検証のためにも機能します。
# virsh dominfo testguest Max memory: 2097152 KiB Used memory: 2097152 KiB
仮想マシンに割り当てる最大メモリーを調整します。この値を増やすと、仮想マシンのパフォーマンスが低下する可能性が向上し、値を減らすことで、仮想マシンがホスト上にあるパフォーマンスフットプリントが低減します。この変更は、停止している仮想マシンでのみ実行できるため、実行中の仮想マシンを調整するには再起動する必要があります。
たとえば、仮想マシン testguest が使用可能な最大メモリーを 4096 MiB に変更するには、次のコマンドを実行します。
# virt-xml testguest --edit --memory memory=4096,currentMemory=4096 Domain 'testguest' defined successfully. Changes will take effect after the domain is fully powered off.
実行中の仮想マシンの最大メモリーを増やすには、仮想マシンにメモリーデバイスを割り当てます。これは、メモリーのホットプラグとも呼ばれます。詳細は、デバイスの仮想マシンへの接続 を参照してください。
警告実行中の仮想マシン (メモリーのホットアンプラグとも呼ばれる) から、メモリーデバイスを削除することはサポートされておらず、Red Hat では推奨していません。
任意: 仮想マシンが現在使用しているメモリーを最大割り当てまで調整することもできます。これにより、仮想マシンの最大割り当てを変更せずに、仮想マシンが次回の再起動までホスト上にあるメモリー負荷が調整されます。
# virsh setmem testguest --current 2048
検証
仮想マシンが使用するメモリーが更新されていることを確認します。
# virsh dominfo testguest Max memory: 4194304 KiB Used memory: 2097152 KiB
(必要に応じて) 現在の仮想マシンメモリーを調整すると、仮想マシンのメモリーバルーンの統計を取得して、そのメモリー使用量をどの程度効果的に調整するかを評価できます。
# virsh domstats --balloon testguest Domain: 'testguest' balloon.current=365624 balloon.maximum=4194304 balloon.swap_in=0 balloon.swap_out=0 balloon.major_fault=306 balloon.minor_fault=156117 balloon.unused=3834448 balloon.available=4035008 balloon.usable=3746340 balloon.last-update=1587971682 balloon.disk_caches=75444 balloon.hugetlb_pgalloc=0 balloon.hugetlb_pgfail=0 balloon.rss=1005456
14.3.3. 関連情報
14.4. 仮想マシンの I/O パフォーマンスの最適化
仮想マシンの入出力 (I/O) 機能は、仮想マシンの全体的な効率を大幅に制限する可能性があります。これに対処するために、ブロック I/O パラメーターを設定して、仮想マシンの I/O を最適化できます。
14.4.1. 仮想マシンにおけるブロック I/O のチューニング
複数のブロックデバイスが、複数の仮想マシンで使用されている場合は、I/O ウェイト を変更して特定の仮想デバイスの I/O の優先度を調整することが重要になる場合があります。
デバイスの I/O ウェイトを上げると、I/O 帯域幅の優先度が高まるため、より多くのホストリソースが提供されます。同様に、デバイスのウェイトを下げると、ホストのリソースが少なくなります。
各デバイスの ウェイト
の値は 100
から 1000
の範囲内でなければなりません。もしくは、値を 0
にすると、各デバイスの一覧からそのデバイスを削除できます。
手順
仮想マシンのブロック I/O パラメーターを表示および設定するには、以下を行います。
仮想マシンの現在の
<blkio>
パラメーターを表示します。# virsh dumpxml VM-name
<domain> [...] <blkiotune> <weight>800</weight> <device> <path>/dev/sda</path> <weight>1000</weight> </device> <device> <path>/dev/sdb</path> <weight>500</weight> </device> </blkiotune> [...] </domain>
指定したデバイスの I/O ウェイトを編集します。
# virsh blkiotune VM-name --device-weights device, I/O-weight
たとえば、以下では、liftrul 仮想マシンの /dev/sda デバイスのウェイトを 500 に変更します。
# virsh blkiotune liftbrul --device-weights /dev/sda, 500
14.4.2. 仮想マシンのディスク I/O スロットリング
複数の仮想マシンが同時に実行する場合は、過剰なディスク I/O により、システムパフォーマンスに影響が及ぶ可能性があります。KVM 仮想化のディスク I/O スロットリングでは、仮想マシンからホストマシンに送られるディスク I/O 要求に制限を設定する機能を利用できます。これにより、仮想マシンが共有リソースを過剰に使用し、その他の仮想マシンのパフォーマンスに影響を及ぼすことを防ぐことができます。
ディスク I/O スロットリングを有効にするには、仮想マシンに割り当てられた各ブロックデバイスからホストマシンに送られるディスク I/O 要求に制限を設定します。
手順
virsh domblklist
コマンドを使用して、指定された仮想マシン上のすべてのディスクデバイスの名前を一覧表示します。# virsh domblklist rollin-coal Target Source ------------------------------------------------ vda /var/lib/libvirt/images/rollin-coal.qcow2 sda - sdb /home/horridly-demanding-processes.iso
スロットルする仮想ディスクがマウントされているホストブロックデバイスを見つけます。
たとえば、前の手順の
sdb
仮想ディスクをスロットリングする場合は、以下の出力では、ディスクが/dev/nvme0n1p3
パーティションにマウントされていることを示しています。$ lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT zram0 252:0 0 4G 0 disk [SWAP] nvme0n1 259:0 0 238.5G 0 disk ├─nvme0n1p1 259:1 0 600M 0 part /boot/efi ├─nvme0n1p2 259:2 0 1G 0 part /boot └─nvme0n1p3 259:3 0 236.9G 0 part └─luks-a1123911-6f37-463c-b4eb-fxzy1ac12fea 253:0 0 236.9G 0 crypt /home
virsh blkiotune
コマンドを使用して、ブロックデバイスの I/O 制限を設定します。# virsh blkiotune VM-name --parameter device,limit
以下の例は、
rollin-coal
仮想マシン上のsdb
ディスクを毎秒 1000 の読み書き操作にスロットリングし、毎秒 50 MB の読み書きスループットにスロットリングします。# virsh blkiotune rollin-coal --device-read-iops-sec /dev/nvme0n1p3,1000 --device-write-iops-sec /dev/nvme0n1p3,1000 --device-write-bytes-sec /dev/nvme0n1p3,52428800 --device-read-bytes-sec /dev/nvme0n1p3,52428800
関連情報
- ディスク I/O スロットリングは、異なる顧客に属する仮想マシンが同じホストで実行されている場合や、異なる仮想マシンに QoS 保証が提供されている場合など、さまざまな状況で役立ちます。ディスク I/O スロットリングは、低速なディスクをシミュレートするために使用することもできます。
- I/O スロットリングは、仮想マシンに割り当てられた各ブロックデバイスに個別に適用でき、スループットおよび I/O 操作の制限に対応します。
-
Red Hat は、
virsh blkdeviotune
コマンドを使用した仮想マシンでの I/O スロットリングの設定はサポートしていません。RHEL 8 を VM ホストとして使用する場合にサポートされていない機能の詳細については、RHEL 8 仮想化でサポートされていない機能 を参照してください。
14.4.3. マルチキュー virtio-scsi の有効化
仮想マシンで virtio-scsi
ストレージデバイスを使用する場合は、マルチキュー virtio-scsi 機能により、ストレージパフォーマンスおよびスケーラビリティーが向上します。このため、各仮想 CPU (vCPU) に別のキューを持たせることが可能になります。また仮想 CPU は、その他の vCPU に影響を及ぼすことなく使用するために、割り込みできるようになります。
手順
特定の仮想マシンに対してマルチキュー virtio-scsi サポートを有効にするには、仮想マシンの XML 設定に以下を追加します。ここでの N は、vCPU キューの合計数です。
<controller type='scsi' index='0' model='virtio-scsi'> <driver queues='N' /> </controller>
14.5. 仮想マシンの CPU パフォーマンスの最適化
vCPU は、ホストマシンの物理 CPU と同様、仮想マシンのパフォーマンスにおいて極めて重要です。したがって、vCPU を最適化すると、仮想マシンのリソース効率に大きな影響を及ぼす可能性があります。vCPU を最適化するには、以下を実行します。
- 仮想マシンに割り当てられているホスト CPU の数を調整します。これは、CLI または Web コンソール を使用して実行できます。
vCPU モデルが、ホストの CPU モデルに調整されていることを確認します。たとえば、仮想マシン testguest1 を、ホストの CPU モデルを使用するように設定するには、次のコマンドを実行します。
# virt-xml testguest1 --edit --cpu host-model
- Kernel Same-page Merging (KSM) を無効にします。
ホストマシンが Non-Uniform Memory Access (NUMA) を使用する場合は、その仮想マシンに対して NUMA を設定 することもできます。これにより、ホストの CPU およびメモリープロセスが、仮想マシンの CPU およびメモリープロセスにできるだけ近くにマッピングされます。事実上、NUMA チューニングにより、仮想マシンに割り当てられたシステムメモリーへのより効率的なアクセスが可能になります。これにより、vCPU 処理の効果が改善されます。
詳細は、仮想マシンで NUMA の設定 および サンプルの vCPU パフォーマンスチューニングシナリオ を参照してください。
14.5.1. コマンドラインインターフェイスを使用した仮想 CPU の追加と削除
仮想マシンの CPU パフォーマンスを増減するには、仮想マシンに割り当てられた仮想 CPU (vCPU) を追加または削除します。
実行中の仮想マシンで実行する場合、これは vCPU ホットプラグおよびホットアンプラグとも呼ばれます。ただし、RHEL 8 では vCPU のホットアンプラグに対応しておらず、Red Hat ではその使用を強く推奨していません。
前提条件
オプション: ターゲット仮想マシン内の vCPU の現在の状態を表示します。たとえば、仮想マシン testguest 上の仮想 CPU 数を表示するには、以下を実行します。
# virsh vcpucount testguest maximum config 4 maximum live 2 current config 2 current live 1
この出力は、testguest が現在 1 vCPU を使用していることを示し、1 つ以上の vCPU をホットプラグして仮想マシンのパフォーマンスを向上できることを示しています。ただし、再起動後に使用される vCPU の testguest 数は 2 に変更され、2 以上の vCPU のホットプラグが可能になります。
手順
仮想マシンに割り当てることができる vCPU の最大数を調整します。これは、仮想マシンの次回起動時に有効になります。
たとえば、仮想マシン testguest の vCPU の最大数を 8 に増やすには、次のコマンドを実行します。
# virsh setvcpus testguest 8 --maximum --config
最大値は、CPU トポロジー、ホストハードウェア、ハイパーバイザー、およびその他の要素によって制限される可能性があることに注意してください。
仮想マシンに割り当てられている現在の仮想 CPU の数を調整し、直前のステップで設定された最大数まで調整します。以下に例を示します。
実行中の仮想マシン testguest にアタッチされている vCPU を 4 に増やすには、以下を実行します。
# virsh setvcpus testguest 4 --live
これにより、仮想マシンの次回の起動まで、仮想マシンのパフォーマンスおよび testguest のホスト負荷のフットプリントが高まります。
testguest 仮想マシンにアタッチされている vCPU の数を永続的に 1 に減らすには、次のコマンドを実行します。
# virsh setvcpus testguest 1 --config
これにより、仮想マシンの次回の起動後に、仮想マシンのパフォーマンスおよび testguest のホスト負荷のフットプリントが低下します。ただし、必要に応じて、仮想マシンに追加の vCPU をホットプラグして、一時的にパフォーマンスを向上させることができます。
検証
仮想マシンの vCPU の現在の状態に変更が反映されていることを確認します。
# virsh vcpucount testguest maximum config 8 maximum live 4 current config 1 current live 4
関連情報
14.5.2. Web コンソールで仮想 CPU の管理
RHEL 8 Web コンソールを使用して、Web コンソールが接続している仮想マシンが使用する仮想 CPU を確認し、設定できます。
前提条件
- Web コンソールの VM プラグインが システムにインストールされている。
手順
仮想マシン インターフェイスで、情報を表示する仮想マシンを選択します。
新しいページが開き、選択した VM に関する基本情報を含む概要セクションと、VM のグラフィカルインターフェイスにアクセスするためのコンソールセクションが表示されます。
概要ペインで、vCPU の数の横にある 編集 をクリックします。
vCPU の詳細ダイアログが表示されます。
選択した仮想マシンの仮想 CPU を設定します。
vCPU 数: 現在使用中の vCPU の数
注記vCPU 数は、vCPU 最大値以下にする必要があります。
- vCPU 最大値 - 仮想マシンに設定できる仮想 CPU の最大数を入力します。この値が vCPU 数 よりも大きい場合には、vCPU を追加で仮想マシンに割り当てることができます。
- ソケット - 仮想マシンに公開するソケットの数を選択します。
- ソケットごとのコア - 仮想マシンに公開する各ソケットのコア数を選択します。
コアあたりのスレッド - 仮想マシンに公開する各コアのスレッド数を選択します。
Sockets、Cores per socket、および Threads per core オプションは、仮想マシンの CPU トポロジーを調整することに注意してください。これは、vCPU のパフォーマンスにメリットがあり、ゲスト OS の特定のソフトウェアの機能に影響を与える可能性があります。デプロイメントで別の設定が必要ない場合は、デフォルト値のままにします。
Apply をクリックします。
仮想マシンに仮想 CPU が設定されます。
注記仮想 CPU 設定の変更は、仮想マシンの再起動後にのみ有効になります。
14.5.3. 仮想マシンでの NUMA の設定
以下の方法は、RHEL 8 ホストで、仮想マシンの Non-Uniform Memory Access (NUMA) 設定の設定に使用できます。
前提条件
ホストが NUMA 対応のマシンである。これを確認するには、
virsh nodeinfo
コマンドを使用して、NUMA cell(2)
の行を確認します。# virsh nodeinfo CPU model: x86_64 CPU(s): 48 CPU frequency: 1200 MHz CPU socket(s): 1 Core(s) per socket: 12 Thread(s) per core: 2 NUMA cell(s): 2 Memory size: 67012964 KiB
行の値が 2 以上であると、そのホストは NUMA に対応しています。
手順
使いやすさのため、自動化ユーティリティーとサービスを使用して、仮想マシンの NUMA を設定できます。ただし、手動で NUMA を設定すると、パフォーマンスが大幅に向上する可能性が高くなります。
自動方式
仮想マシンの NUMA ポリシーを
Preferred
に設定します。たとえば、仮想マシン testguest5 に対してこれを行うには、次のコマンドを実行します。# virt-xml testguest5 --edit --vcpus placement=auto # virt-xml testguest5 --edit --numatune mode=preferred
ホストで NUMA の自動負荷分散を有効にします。
# echo 1 > /proc/sys/kernel/numa_balancing
numad
コマンドを使用して、メモリーリソースで仮想マシンの CPU を自動的に調整します。# numad
手動方式
特定ホストの CPU、またはある範囲の CPU に特定の vCPU スレッドをピニングします。これは、NUMA 以外のホストおよび仮想マシンでも可能で、vCPU のパフォーマンスを向上させる安全な方法として推奨されています。
たとえば、次のコマンドでは、仮想マシン testguest6 の vCPU スレッドの 0 から 5 を、ホストの CPU 1、3、5、7、9、11 にそれぞれピニングします。
# virsh vcpupin testguest6 0 1 # virsh vcpupin testguest6 1 3 # virsh vcpupin testguest6 2 5 # virsh vcpupin testguest6 3 7 # virsh vcpupin testguest6 4 9 # virsh vcpupin testguest6 5 11
その後、これが成功したかどうかを確認できます。
# virsh vcpupin testguest6 VCPU CPU Affinity ---------------------- 0 1 1 3 2 5 3 7 4 9 5 11
vCPU スレッドのピニング後に、指定の仮想マシンに関連付けられた QEMU プロセススレッドを、特定ホスト CPU、またはある範囲の CPU に固定することもできます。たとえば、以下のコマンドは、testguest6 の QEMU プロセススレッドを CPU 13 および 15 にピニングし、これが成功したことを確認します。
# virsh emulatorpin testguest6 13,15 # virsh emulatorpin testguest6 emulator: CPU Affinity ---------------------------------- *: 13,15
これで、特定の仮想マシンに対して割り当てられるホストの NUMA ノードを指定することができます。これにより、仮想マシンの vCPU によるホストメモリーの使用率が向上します。たとえば、次のコマンドでは、ホスト NUMA ノード 3 ~ 5 を使用するように testguest6 を設定し、これが成功したかどうかを確認します。
# virsh numatune testguest6 --nodeset 3-5 # virsh numatune testguest6
最善のパフォーマンス結果を得るためにも、上記の手動によるチューニングメソッドをすべて使用することが推奨されます。
関連情報
- vCPU のパフォーマンスチューニングシナリオ例
-
View the current NUMA configuration of your system using the
numastat
utility
14.5.4. vCPU のパフォーマンスチューニングシナリオ例
最適な vCPU パフォーマンスを得るためにも、以下のシナリオなど、手動で vcpupin
、emulatorpin
、および numatune
設定をまとめて使用することが推奨されます。
開始シナリオ
ホストには以下のハードウェア仕様があります。
- 2 つの NUMA ノード
- 各ノードにある 3 つの CPU コア
- 各コアにある 2 スレッド
このようなマシンの
virsh nodeinfo
の出力は以下のようになります。# virsh nodeinfo CPU model: x86_64 CPU(s): 12 CPU frequency: 3661 MHz CPU socket(s): 2 Core(s) per socket: 3 Thread(s) per core: 2 NUMA cell(s): 2 Memory size: 31248692 KiB
既存の仮想マシンを変更して、8 つの vCPU を使用できるようにします。これは、1 つの NUMA ノードに収まらないことを意味します。
したがって、各 NUMA ノードに 4 つの vCPU を分散し、vCPU トポロジーをホストトポロジーに可能な限り近づけるようにする必要があります。つまり、指定の物理 CPU のシブリングスレッドとして実行される vCPU は、同じコア上のホストスレッドに固定 (ピニング) される必要があります。詳細は、以下の ソリューション を参照してください。
ソリューション
ホストトポロジーに関する情報を取得します。
# virsh capabilities
この出力には、以下のようなセクションが含まれます。
<topology> <cells num="2"> <cell id="0"> <memory unit="KiB">15624346</memory> <pages unit="KiB" size="4">3906086</pages> <pages unit="KiB" size="2048">0</pages> <pages unit="KiB" size="1048576">0</pages> <distances> <sibling id="0" value="10" /> <sibling id="1" value="21" /> </distances> <cpus num="6"> <cpu id="0" socket_id="0" core_id="0" siblings="0,3" /> <cpu id="1" socket_id="0" core_id="1" siblings="1,4" /> <cpu id="2" socket_id="0" core_id="2" siblings="2,5" /> <cpu id="3" socket_id="0" core_id="0" siblings="0,3" /> <cpu id="4" socket_id="0" core_id="1" siblings="1,4" /> <cpu id="5" socket_id="0" core_id="2" siblings="2,5" /> </cpus> </cell> <cell id="1"> <memory unit="KiB">15624346</memory> <pages unit="KiB" size="4">3906086</pages> <pages unit="KiB" size="2048">0</pages> <pages unit="KiB" size="1048576">0</pages> <distances> <sibling id="0" value="21" /> <sibling id="1" value="10" /> </distances> <cpus num="6"> <cpu id="6" socket_id="1" core_id="3" siblings="6,9" /> <cpu id="7" socket_id="1" core_id="4" siblings="7,10" /> <cpu id="8" socket_id="1" core_id="5" siblings="8,11" /> <cpu id="9" socket_id="1" core_id="3" siblings="6,9" /> <cpu id="10" socket_id="1" core_id="4" siblings="7,10" /> <cpu id="11" socket_id="1" core_id="5" siblings="8,11" /> </cpus> </cell> </cells> </topology>
- (必要に応じて) 適用可能なツールおよびユーティリティー を使用して、仮想マシンのパフォーマンスをテストします。
ホストに 1 GiB の Huge Page を設定してマウントします。
ホストのカーネルコマンドラインに次の行を追加します。
default_hugepagesz=1G hugepagesz=1G
/etc/systemd/system/hugetlb-gigantic-pages.service
ファイルを以下の内容で作成します。[Unit] Description=HugeTLB Gigantic Pages Reservation DefaultDependencies=no Before=dev-hugepages.mount ConditionPathExists=/sys/devices/system/node ConditionKernelCommandLine=hugepagesz=1G [Service] Type=oneshot RemainAfterExit=yes ExecStart=/etc/systemd/hugetlb-reserve-pages.sh [Install] WantedBy=sysinit.target
/etc/systemd/hugetlb-reserve-pages.sh
ファイルを以下の内容で作成します。#!/bin/sh nodes_path=/sys/devices/system/node/ if [ ! -d $nodes_path ]; then echo "ERROR: $nodes_path does not exist" exit 1 fi reserve_pages() { echo $1 > $nodes_path/$2/hugepages/hugepages-1048576kB/nr_hugepages } reserve_pages 4 node1 reserve_pages 4 node2
これにより、4 つの 1GiB の Huge Page が node1 から予約され、さらに別の 4 つの 1 GiB の Huge Page が node2 から予約されます。
前の手順で作成したスクリプトを実行ファイルにします。
# chmod +x /etc/systemd/hugetlb-reserve-pages.sh
システムの起動時に Huge Page 予約を有効にします。
# systemctl enable hugetlb-gigantic-pages
virsh edit
コマンドを使用して、最適化する仮想マシンの XML 設定 (この例では super-VM) を編集します。# virsh edit super-vm
次の方法で仮想マシンの XML 設定を調整します。
-
仮想マシンが 8 つの静的 vCPU を使用するように設定します。これを行うには、
<vcpu/>
要素を使用します。 トポロジーでミラーリングする、対応するホスト CPU スレッドに、各 vCPU スレッドをピニングします。これを行うには、
<cputune>
セクションの<vcpupin/>
要素を使用します。上記の
virsh 機能
ユーティリティーで示されているように、ホストの CPU スレッドは、各コアで連続的に順次付けされません。また、vCPU スレッドは、同じ NUMA ノード上のホストのコアの利用可能な最大セットに固定される必要があります。表の図については、以下の トポロジーの例 セクションを参照してください。手順 a と b の XML 設定は次のようになります。
<cputune> <vcpupin vcpu='0' cpuset='1'/> <vcpupin vcpu='1' cpuset='4'/> <vcpupin vcpu='2' cpuset='2'/> <vcpupin vcpu='3' cpuset='5'/> <vcpupin vcpu='4' cpuset='7'/> <vcpupin vcpu='5' cpuset='10'/> <vcpupin vcpu='6' cpuset='8'/> <vcpupin vcpu='7' cpuset='11'/> <emulatorpin cpuset='6,9'/> </cputune>
1 GiB の Huge Page を使用するように仮想マシンを設定します。
<memoryBacking> <hugepages> <page size='1' unit='GiB'/> </hugepages> </memoryBacking>
ホスト上で対応する NUMA ノードからメモリーを使用するように、仮想マシンの NUMA ノードを設定します。これを行うには、
<numatune/>
セクションの<memnode/>
要素を使用します。<numatune> <memory mode="preferred" nodeset="1"/> <memnode cellid="0" mode="strict" nodeset="0"/> <memnode cellid="1" mode="strict" nodeset="1"/> </numatune>
CPU モードが
host-passthrough
に設定され、CPU がパススルー
モードでキャッシュを使用していることを確認します。<cpu mode="host-passthrough"> <topology sockets="2" cores="2" threads="2"/> <cache mode="passthrough"/>
-
仮想マシンが 8 つの静的 vCPU を使用するように設定します。これを行うには、
検証
仮想マシンの XML 設定に、以下のようなセクションが含まれていることを確認します。
[...] <memoryBacking> <hugepages> <page size='1' unit='GiB'/> </hugepages> </memoryBacking> <vcpu placement='static'>8</vcpu> <cputune> <vcpupin vcpu='0' cpuset='1'/> <vcpupin vcpu='1' cpuset='4'/> <vcpupin vcpu='2' cpuset='2'/> <vcpupin vcpu='3' cpuset='5'/> <vcpupin vcpu='4' cpuset='7'/> <vcpupin vcpu='5' cpuset='10'/> <vcpupin vcpu='6' cpuset='8'/> <vcpupin vcpu='7' cpuset='11'/> <emulatorpin cpuset='6,9'/> </cputune> <numatune> <memory mode="preferred" nodeset="1"/> <memnode cellid="0" mode="strict" nodeset="0"/> <memnode cellid="1" mode="strict" nodeset="1"/> </numatune> <cpu mode="host-passthrough"> <topology sockets="2" cores="2" threads="2"/> <cache mode="passthrough"/> <numa> <cell id="0" cpus="0-3" memory="2" unit="GiB"> <distances> <sibling id="0" value="10"/> <sibling id="1" value="21"/> </distances> </cell> <cell id="1" cpus="4-7" memory="2" unit="GiB"> <distances> <sibling id="0" value="21"/> <sibling id="1" value="10"/> </distances> </cell> </numa> </cpu> </domain>
- (必要に応じて) アプリケーションツールおよびユーティリティー を使用して仮想マシンのパフォーマンスをテストし、仮想マシンの最適化への影響を評価します。
トポロジーの例
以下の表は、ピニングされる必要のある vCPU とホスト CPU 間の接続を示しています。
表14.1 ホストトポロジー
CPU スレッド
0
3
1
4
2
5
6
9
7
10
8
11
コア
0
1
2
3
4
5
ソケット
0
1
NUMA ノード
0
1
表14.2 仮想マシントポロジー
vCPU スレッド
0
1
2
3
4
5
6
7
コア
0
1
2
3
ソケット
0
1
NUMA ノード
0
1
表14.3 ホストと仮想マシントポロジーの組み合わせ
vCPU スレッド
0
1
2
3
4
5
6
7
ホストの CPU スレッド
0
3
1
4
2
5
6
9
7
10
8
11
コア
0
1
2
3
4
5
ソケット
0
1
NUMA ノード
0
1
このシナリオでは、2 つの NUMA ノードと 8 つの vCPU があります。したがって、4 つの vCPU スレッドは各ノードに固定 (ピニング) される必要があります。
また、Red Hat では、ホストシステムの操作のために、各ノードで少なくとも 1 つの CPU スレッドを使用できるようにしておくことをお勧めします。
以下の例では、NUMA ノードにはそれぞれ 3 コアで、2 個のホスト CPU スレッドがあるため、ノード 0 のセットは、以下のように変換できます。
<vcpupin vcpu='0' cpuset='1'/> <vcpupin vcpu='1' cpuset='4'/> <vcpupin vcpu='2' cpuset='2'/> <vcpupin vcpu='3' cpuset='5'/>
14.5.5. Kernel Same-page Merging の無効化
Kernel same-page merging (KSM) はメモリーの密度を向上させますが、CPU 使用率が増え、ワークロードによっては全体のパフォーマンスに悪影響を与える可能性があります。このような場合には、KSM を無効にすることで、仮想マシンのパフォーマンスを向上させることができます。
要件に応じて、KSM を 1 回のセッションだけ無効にしたり、永続的に無効にしたりできます。
手順
KSM をセッション 1 回分無効にするには、
systemctl
ユーティリティーを使用してksm
サービスおよびksmtuned
サービスを停止します。# systemctl stop ksm # systemctl stop ksmtuned
KSM を永続的に無効にするには、
systemctl
ユーティリティーを使用してksm
サービスおよびksmtuned
サービスを無効にします。# systemctl disable ksm Removed /etc/systemd/system/multi-user.target.wants/ksm.service. # systemctl disable ksmtuned Removed /etc/systemd/system/multi-user.target.wants/ksmtuned.service.
KSM を無効にする前に仮想マシン間で共有されていたメモリーページは、そのまま共有されます。共有を停止するには、以下のコマンドを使用して、システムの PageKSM
ページをすべて削除します。
# echo 2 > /sys/kernel/mm/ksm/run
KSM ページを匿名ページに置き換えると、khugepaged
カーネルサービスは仮想マシンの物理メモリーに透過的なヒュージページを再ビルドします。
14.6. 仮想マシンのネットワークパフォーマンスの最適化
仮想マシンのネットワークインターフェイスカード (NIC) の性質上、仮想マシンは、割り当てられているホストネットワークの帯域幅の一部を失います。これにより、仮想マシンの全体的なワークロード効率が削減されることがあります。以下のヒントは、仮想 NIC (vNIC) のスループットで仮想化の影響を最小限に抑えることができます。
手順
以下の方法のいずれかを使用し、仮想マシンのネットワークパフォーマンスにメリットがあるかどうかを調べます。
- vhost_net モジュールの有効化
ホストで
vhost_net
カーネル機能が有効になっていることを確認します。# lsmod | grep vhost vhost_net 32768 1 vhost 53248 1 vhost_net tap 24576 1 vhost_net tun 57344 6 vhost_net
このコマンドの出力が空白である場合は、
vhost_net
カーネルモジュールを有効にします。# modprobe vhost_net
- マルチキュー virtio-net の設定
仮想マシンに マルチキュー virtio-net 機能を設定するには、
virsh edit
コマンドを使用して、仮想マシンの XML 設定を編集します。XML で、以下を<devices>
セクションに追加し、N
を、仮想マシンの vCPU 数 (最大 16) に変更します。<interface type='network'> <source network='default'/> <model type='virtio'/> <driver name='vhost' queues='N'/> </interface>
仮想マシンが実行中の場合は、再起動して変更を適用します。
- ネットワークパケットのバッチ処理
転送パスが長い Linux の仮想マシン設定では、パケットをバッチ処理してからカーネルに送信することで、キャッシュが有効に活用される場合があります。パケットバッチ機能を設定するには、ホストで次のコマンドを実行し、tap0 を、仮想マシンが使用するネットワークインターフェイスの名前に置き換えます。
# ethtool -C tap0 rx-frames 64
- SR-IOV
- ホスト NIC が SR-IOV に対応している場合は、vNIC に SR-IOV デバイス割り当てを使用します。詳細は、SR-IOV デバイスの管理 を参照してください。
関連情報
14.7. 仮想マシンのパフォーマンス監視ツール
最も多くの仮想マシンリソースを消費するものと、仮想マシンで最適化を必要とする部分を認識するために、一般的なパフォーマンス診断ツールや仮想マシン固有のパフォーマンス診断ツールを使用できます。
デフォルトの OS パフォーマンス監視ツール
標準のパフォーマンス評価には、ホストおよびゲストのオペレーティングシステムでデフォルトで提供されるユーティリティーを使用できます。
RHEL 8 ホストで、root として
top
ユーティリティーまたは システムモニター アプリケーションを使用し、出力結果からqemu
とvirt
を見つけます。これは、仮想マシンが消費しているホストシステムのリソースのサイズを示します。-
監視ツールにおいて、
qemu
プロセスまたはvirt
プロセスのいずれかで、ホストの CPU またはメモリーの容量を大幅に消費していることが示されている場合は、perf
ユーティリティーを使用して調査を行います。詳細は以下を参照してください。 -
また、
vhost_net
スレッドプロセス (例: vhost_net-1234) が、ホストの CPU 容量を過剰に消費する際に表示される場合は、multi-queue virtio-net
などの 仮想ネットワークの最適化機能 を使用することを検討してください。
-
監視ツールにおいて、
ゲストオペレーティングシステムでは、システムで利用可能なパフォーマンスユーティリティーとアプリケーションを使用して、どのプロセスが最も多くのシステムリソースを消費するかを評価します。
-
Linux システムでは、
top
ユーティリティーを使用できます。 - Windows システムでは、Task Manager アプリケーションを使用できます。
-
Linux システムでは、
perf kvm
perf
ユーティリティーを使用して、RHEL 8 ホストのパフォーマンスに関する仮想化固有の統計を収集および分析できます。これを行うには、以下を行います。
ホストに、perf パッケージをインストールします。
# yum install perf
perf kvm stat
コマンドの 1 つを使用して、仮想化ホストの perf 統計を表示します。-
お使いのハイパーバイザーのリアルタイム監視には、
perf kvm stat live
コマンドを使用します。 -
一定期間でハイパーバイザーの perf データをログに記録するには、
perf kvm stat record
コマンドを使用してロギングを有効にします。コマンドをキャンセルまたは中断した後、データはperf.data.guest
ファイルに保存されます。これは、perf kvm stat report
コマンドを使用して分析できます。
-
お使いのハイパーバイザーのリアルタイム監視には、
VM-EXIT
イベントとそのディストリビューションのタイプについてperf
出力を分析します。たとえば、PAUSE_INSTRUCTION
イベントは頻繁に存在すべきではありませんが、以下の出力では、このイベントが頻繁に現れ、ホスト CPU が vCPU を適切に処理していないことを示しています。このようなシナリオでは、アクティブな一部の仮想マシンの電源オフ、その仮想マシンからの vCPU の削除、または vCPU のパフォーマンスの調整 を検討してください。# perf kvm stat report Analyze events for all VMs, all VCPUs: VM-EXIT Samples Samples% Time% Min Time Max Time Avg time EXTERNAL_INTERRUPT 365634 31.59% 18.04% 0.42us 58780.59us 204.08us ( +- 0.99% ) MSR_WRITE 293428 25.35% 0.13% 0.59us 17873.02us 1.80us ( +- 4.63% ) PREEMPTION_TIMER 276162 23.86% 0.23% 0.51us 21396.03us 3.38us ( +- 5.19% ) PAUSE_INSTRUCTION 189375 16.36% 11.75% 0.72us 29655.25us 256.77us ( +- 0.70% ) HLT 20440 1.77% 69.83% 0.62us 79319.41us 14134.56us ( +- 0.79% ) VMCALL 12426 1.07% 0.03% 1.02us 5416.25us 8.77us ( +- 7.36% ) EXCEPTION_NMI 27 0.00% 0.00% 0.69us 1.34us 0.98us ( +- 3.50% ) EPT_MISCONFIG 5 0.00% 0.00% 5.15us 10.85us 7.88us ( +- 11.67% ) Total Samples:1157497, Total events handled time:413728274.66us.
perf kvm stat
の出力で問題を知らせる他のイベントタイプには、以下が含まれます。-
INSN_EMULATION
- 準最適な 仮想マシンの I/O 設定 を示します。
-
perf
を使用した仮想パフォーマンスを監視する方法は、perf-kvm
man ページを参照してください。
numastat
システムの現在の NUMA 設定を表示するには、numastat
ユーティリティーを使用できます。これは numactl パッケージをインストールすることで利用できます。
以下は、4 つの実行中の仮想マシンが含まれるホストを示しています。それぞれは、複数の NUMA ノードからメモリーを取得しています。これは、vCPU のパフォーマンスに対して最適なのではなく、保証調整 です。
# numastat -c qemu-kvm
Per-node process memory usage (in MBs)
PID Node 0 Node 1 Node 2 Node 3 Node 4 Node 5 Node 6 Node 7 Total
--------------- ------ ------ ------ ------ ------ ------ ------ ------ -----
51722 (qemu-kvm) 68 16 357 6936 2 3 147 598 8128
51747 (qemu-kvm) 245 11 5 18 5172 2532 1 92 8076
53736 (qemu-kvm) 62 432 1661 506 4851 136 22 445 8116
53773 (qemu-kvm) 1393 3 1 2 12 0 0 6702 8114
--------------- ------ ------ ------ ------ ------ ------ ------ ------ -----
Total 1769 463 2024 7462 10037 2672 169 7837 32434
一方、以下では、1 つのノードで各仮想マシンに提供されているメモリーを示しています。これは、より一層効率的です。
# numastat -c qemu-kvm
Per-node process memory usage (in MBs)
PID Node 0 Node 1 Node 2 Node 3 Node 4 Node 5 Node 6 Node 7 Total
--------------- ------ ------ ------ ------ ------ ------ ------ ------ -----
51747 (qemu-kvm) 0 0 7 0 8072 0 1 0 8080
53736 (qemu-kvm) 0 0 7 0 0 0 8113 0 8120
53773 (qemu-kvm) 0 0 7 0 0 0 1 8110 8118
59065 (qemu-kvm) 0 0 8050 0 0 0 0 0 8051
--------------- ------ ------ ------ ------ ------ ------ ------ ------ -----
Total 0 0 8072 0 8072 0 8114 8110 32368
14.8. 関連情報
第15章 電源管理の重要性
コンピューターシステム全体の消費電力を削減することで、コストを削減できます。各システムコンポーネントのエネルギー消費を効果的に最適化するには、システムが実行するさまざまなタスクを検討し、各コンポーネントのパフォーマンスがそのジョブに対して正しいことを確認するように設定します。特定コンポーネントやシステム全体の消費電力を下げると、熱およびパフォーマンスが低下します。
適切な電源管理を行うと、以下のような結果になります
- サーバーやコンピューティングセンターにおける熱の削減
- 冷却、空間、ケーブル、ジェネレーター、無停電電源装置 (UPS) などの二次コストの削減
- ノートパソコンのバッテリー寿命の延長
- 二酸化炭素排出量の削減
- 政府の規制や Green IT (Energy Star など) に関する法的要件に合致する
- 新システムに関する企業ガイドラインの遵守
本セクションでは、Red Hat Enterprise Linux システムの電源管理に関する情報を説明します。
15.1. 電源管理の基本
効果的な電源管理は、以下の原則に基づいて行われます。
An idle CPU should only wake up when needed
Red Hat Enterprise Linux 6 以降では、カーネルが
tickless
を実行しています。つまり、以前の定期的なタイマー割り込みが、オンデマンド割り込みに置き換えられたことを意味します。そのため、新しいタスクが処理のキューに追加されるまで、アイドル状態の CPU はアイドル状態を維持できます。低電力状態にある CPU は、この状態を持続できます。ただし、システムに、不要なタイマーイベントを作成するアプリケーションが存在する場合は、この機能の利点が相殺される可能性があります。ボリュームの変更やマウスの動きの確認などのポーリングイベントは、このようなイベントの例です。Red Hat Enterprise Linux には、CPU 使用率に基づいてアプリケーションを識別し、監査するツールが同梱されています。詳細は、Audit and analysis overview および Tools for auditing を参照してください。
Unused hardware and devices should be disabled completely
- これは、ハードディスクなど、動作する部品があるデバイスに当てはまります。また、一部のアプリケーションでは、使用されていない有効なデバイスが "open" 状態のままにすることがあります。これが発生すると、カーネルは、そのデバイスが使用中であることを想定します。これにより、そのデバイスが省電力状態にならないようにできます。
Low activity should translate to low wattage
ただし、多くの場合、これは最新のハードウェアと、x86 以外のアーキテクチャーを含む最新のシステムの正しい BIOS 設定または UEFI に依存します。システムに最新の公式ファームウェアを使用していること、および BIOS の電源管理またはデバイス設定セクションで電源管理機能が有効になっていることを確認してください。以下のような機能を確認してください。
- ARM64 用の CPPC (Collaborative Processor Performance Controls) のサポート
- IBM Power Systems の PowerNV サポート
- SpeedStep
- PowerNow!
- Cool'n'Quiet
- ACPI (C-state)
Smart
ハードウェアでこの機能に対応し、BIOS で有効になっている場合は、Red Hat Enterprise Linux がデフォルトで使用します。
Different forms of CPU states and their effects
最新の CPU は、ACPI (Advanced Configuration and Power Interface) とともに、さまざまな電源状態を提供します。3 つの異なる状態は以下のとおりです。
- スリープ (C-state)
- 周波数と電圧 (P-state)
熱の出力 (T-states または thermal state)
最小のスリープ状態で実行している CPU は、最小のワット数を消費しますが、必要に応じてその状態からウェイクアップするのにかかる時間も大幅に長くなります。まれに、スリープ状態に切り替わるたびに CPU が即座にウェイクアップしなければならなくなることがあります。この状況は、実質的に永続的に CPU がビジー状態になり、別の状態を使用すると潜在的な省電力の一部が失われます。
A turned off machine uses the least amount of power
- 電力を節約する最善の方法の 1 つは、システムの電源を切ることです。たとえば、会社では、昼休みや帰宅時にマシンをオフにするガイドラインを使用して、Green IT を意識することに焦点をあてた企業文化を育成できます。また、複数の物理サーバーを 1 つの大きなサーバーに統合し、Red Hat Enterprise Linux に同梱される仮想化技術を使用して仮想化することもできます。
15.2. 監査および分析の概要
通常、1 つのシステムで詳細な手動の監査、分析、およびチューニングを行う場合は例外となります。これは、このようなシステム調整の最後の部分から得られる利点よりも、その実行にかかる時間とコストの方が長いためです。
ただし、すべてのシステムで同じ設定を再利用できるほぼ同一のシステムでこれらのタスクを 1 回実行することは、非常に便利です。たとえば、数千ものデスクトップシステムや、マシンがほぼ同一の HPC クラスターをデプロイメントする場合を考えてください。監査と分析を行うもう 1 つの理由は、将来のシステム動作のリグレッションまたは変更を特定できる比較の基礎を提供することです。この分析の結果は、ハードウェア、BIOS、またはソフトウェアの更新が定期的に行われ、消費電力に関する予期しない事態を回避したい場合に非常に役立ちます。通常、徹底的な監査と分析により、特定システムで実際に起こっていることをより的確に把握できます。
利用可能な最新のシステムを使用しても、消費電力に関するシステムの監査と分析は比較的困難です。ほとんどのシステムは、ソフトウェアを介して電力使用量を測定するために必要な手段を提供していません。ただし、例外があります。
- Hewlett Packard サーバーシステムの iLO 管理コンソールには、Web からアクセスできる電源管理モジュールがあります。
- IBM は、BladeCenter 電源管理モジュールで同様のソリューションを提供します。
- 一部の Dell システムでは、IT Assistant は電力監視機能も提供します。
他のベンダーは、サーバープラットフォームで同様の機能を提供する可能性が高くなりますが、すべてのベンダーで対応している唯一のソリューションは存在しません。多くの場合、消費電力を直接測定する必要があるのは、可能な限り節約を最大化するためだけです。
15.3. 監査用ツール
Red Hat Enterprise Linux 8 には、システムの監査および分析を実行できるツールが同梱されています。これらのほとんどは、検出された情報を検証する場合や、特定部品に関する詳細な情報が必要な場合に備えて、補助情報源として使用できます。
このツールの多くは、パフォーマンスの調整にも使用されます。以下に例を示します。
PowerTOP
-
これは、CPU を頻繁にウェイクアップするカーネルおよびユーザー空間アプリケーションの特定のコンポーネントを識別します。root で
powertop
コマンドを使用して PowerTop ツールを起動し、powertop --calibrate
で電力見積もりエンジンを調整します。PowerTop の詳細は、Managing power consumption with PowerTOP を参照してください。 Diskdevstat and netdevstat
これは、システムで実行しているすべてのアプリケーションのディスクアクティビティーとネットワークアクティビティーに関する詳細情報を収集する SystemTap ツールです。これらのツールによって収集された統計を使用すると、少数の大規模な操作ではなく、多くの小規模な I / O 操作で電力を浪費するアプリケーションを特定できます。root で
yum install tuned-utils-systemtap kernel-debuginfo
コマンドを使用し、diskdevstat
およびnetdevstat
をインストールします。ディスクとネットワークのアクティビティーの詳細情報を表示するには、次のコマンドを実行します。
# diskdevstat PID UID DEV WRITE_CNT WRITE_MIN WRITE_MAX WRITE_AVG READ_CNT READ_MIN READ_MAX READ_AVG COMMAND 3575 1000 dm-2 59 0.000 0.365 0.006 5 0.000 0.000 0.000 mozStorage #5 3575 1000 dm-2 7 0.000 0.000 0.000 0 0.000 0.000 0.000 localStorage DB [...] # netdevstat PID UID DEV XMIT_CNT XMIT_MIN XMIT_MAX XMIT_AVG RECV_CNT RECV_MIN RECV_MAX RECV_AVG COMMAND 3572 991 enp0s31f6 40 0.000 0.882 0.108 0 0.000 0.000 0.000 openvpn 3575 1000 enp0s31f6 27 0.000 1.363 0.160 0 0.000 0.000 0.000 Socket Thread [...]
このコマンドでは、
update_interval
、total_duration
、およびdisplay_histogram
の 3 つのパラメーターを指定できます。TuneD
-
これは、
udev
デバイスマネージャーを使用して、接続されたデバイスを監視し、システム設定の静的チューニングおよび動的チューニングの両方を有効にするプロファイルベースのシステムチューニングツールです。tuned-adm recommend
コマンドを使用すると、Red Hat が特定の製品に最も適したプロファイルを判別できます。TuneD の詳細は、Getting started with TuneD および Customizing TuneD profiles を参照してください。powertop2tuned utility
を使用して、PowerTOP
の提案からカスタムの TuneD プロファイルを作成できます。powertop2tuned
ユーティリティーの詳細は、Optimizing power consumption を参照してください。 Virtual memory statistics (vmstat)
これは、
procps-ng
パッケージにより提供されます。このツールを使用すると、プロセス、メモリー、ページング、ブロック I/O、トラップ、および CPU アクティビティーの詳細情報を表示できます。この情報を表示するには、次を使用します。
$ vmstat procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu----- r b swpd free buff cache si so bi bo in cs us sy id wa st 1 0 0 5805576 380856 4852848 0 0 119 73 814 640 2 2 96 0 0
vmstat -a
コマンドを使用すると、アクティブメモリーと非アクティブメモリーを表示できます。その他のvmstat
オプションの詳細は、man ページのvmstat
を参照してください。iostat
このツールは
sysstat
パッケージで提供されます。このツールはvmstat
と似ていますが、ブロックデバイスの I/O を監視する目的でのみ使用されます。また、より詳細な出力と統計も提供します。システム I/O を監視するには、次のコマンドを実行します。
$ iostat avg-cpu: %user %nice %system %iowait %steal %idle 2.05 0.46 1.55 0.26 0.00 95.67 Device tps kB_read/s kB_wrtn/s kB_read kB_wrtn nvme0n1 53.54 899.48 616.99 3445229 2363196 dm-0 42.84 753.72 238.71 2886921 914296 dm-1 0.03 0.60 0.00 2292 0 dm-2 24.15 143.12 379.80 548193 1454712
blktrace
これは、I/O サブシステム内で費やされた時間配分に関する詳細情報を提供します。
この情報を人間が判読できる形式で表示するには、以下のコマンドを実行します。
# blktrace -d /dev/dm-0 -o - | blkparse -i - 253,0 1 1 0.000000000 17694 Q W 76423384 + 8 [kworker/u16:1] 253,0 2 1 0.001926913 0 C W 76423384 + 8 [0] [...]
ここでは、最初の列の 253,0 は、デバイスのメジャータプルおよびマイナータプルになります。2 番目の列 (1) には、CPU に関する情報が記載されています。次に、IO プロセスを実行するプロセスのタイムスタンプと PID の列が記載されています。
6 番目の列 Q はイベントタイプを示し、7 番目の列 W は書き込み操作を示し、8 番目の列 76423384 はブロック番号であり、+ 8は要求されたブロックの数になります。
最後のフィールドの [kworker/u16:1] はプロセスの名前です。
初期設定では、プロセスが明示的に強制終了されるまで、
blktrace
は永続的に実行されます。-w
オプションを使用して、ランタイム期間を指定します。turbostat
これは、
kernel-tools
により提供されます。x86-64 プロセッサーで、プロセッサーのトポロジー、周波数、アイドル電力状態の統計、温度、および電力使用量を報告します。この概要を表示するには、次のコマンドを実行します。
# turbostat CPUID(0): GenuineIntel 0x16 CPUID levels; 0x80000008 xlevels; family:model:stepping 0x6:8e:a (6:142:10) CPUID(1): SSE3 MONITOR SMX EIST TM2 TSC MSR ACPI-TM HT TM CPUID(6): APERF, TURBO, DTS, PTM, HWP, HWPnotify, HWPwindow, HWPepp, No-HWPpkg, EPB [...]
デフォルトでは、
tervostat
は、画面全体のカウンター結果の概要を出力し、その後に 5 秒間隔でカウンター結果を出力します。-i
オプションでカウンター結果の間隔を指定します。たとえば、turbostat -i 10
を実行して、10 秒間隔で結果を出力します。Turbostat は、電力使用率またはアイドル時間に関して非効率的なサーバーを識別するのにも役立ちます。また、発生しているシステム管理割り込み (SMI) の比率を特定する場合にも便利です。また、これを使用して、電源管理の調整の効果を検証することもできます。
cpupower
IT は、プロセッサーの省電力関連機能を検証および調整するツール群です。
frequency-info
、frequency-set
、idle-info
、idle-set
、set
、info
、およびmonitor
オプションを指定してcpupower
コマンドを使用し、プロセッサー関連の値を表示および設定します。たとえば、利用可能な cpufreq ガバナーを表示するには、次のコマンドを実行します。
$ cpupower frequency-info --governors analyzing CPU 0: available cpufreq governors: performance powersave
cpupower
の詳細は、Viewing CPU related information を参照してください。GNOME Power Manager
- これは、GNOME デスクトップ環境にインストールされるデーモンです。GNOME Power Manager は、システムの電源ステータスの変更 (バッテリーから AC 電源への変更など) を通知します。また、バッテリーのステータスを報告し、バッテリー残量が少なくなると警告を表示します。
関連情報
-
man ページの
powertop(1)
、diskdevstat(8)
、netdevstat(8)
、tuned(8)
、vmstat(8)
、iostat(1)
、blktrace(8)
、blkparse(8)
、およびturbostat(8)
-
man ページの
cpupower(1)
、cpupower-set(1)
、cpupower-info(1)
、cpupower-idle(1)
、cpupower-frequency-set(1)
、cpupower-frequency-info(1)
、およびcpupower-monitor(1)
第16章 PowerTOP で電力消費の管理
システム管理者であれば、PowerTOP ツールを使用して、消費電力を解析および管理できます。
16.1. PowerTOP の目的
PowerTOP は、消費電力に関連する問題を診断し、バッテリーの寿命を延ばす方法について提案を示すプログラムです。
PowerTOP ツールは、システムの総電力使用量の想定と、各プロセス、デバイス、カーネルワーカー、タイマー、および割り込みハンドラーの個々の電力使用量の想定を示すことができます。このツールは、CPU を頻繁にウェイクアップするカーネルおよびユーザー空間アプリケーションの特定のコンポーネントを識別することもできます。
Red Hat Enterprise Linux 8 は、PowerTOP のバージョン 2.x を使用します。
16.2. PowerTOP の使用
前提条件
PowerTOP を使用できるようにするには、
powertop
パッケージがシステムにインストールされていることを確認してください。# yum install powertop
16.2.1. PowerTOP の起動
手順
PowerTOP を実行するには、次のコマンドを使用します。
# powertop
powertop
コマンドの実行時には、ラップトップはバッテリー電源で動作します。
16.2.2. PowerTOP の調整
手順
ラップトップでは、次のコマンドを実行して電力予測エンジンを調整することができます。
# powertop --calibrate
プロセス中にマシンと対話せずに、調整を終了させます。
プロセスがさまざまなテストを実行し、輝度を切り替え、デバイスのオンとオフを切り替える操作を繰り返すため、調整には時間がかかります。
調整プロセスが完了すると、PowerTOP が通常どおり起動します。データを収集するために約 1 時間実行します。
十分なデータが収集されると、出力テーブルの最初の列に電力予測マークが表示されます。
powertop --calibrate
は、ノートパソコンでのみ使用できることに注意してください。
16.2.3. 測定間隔の設定
デフォルトでは、PowerTOP は、20 秒間隔で測定します。
この測定頻度を変更する場合は、以下の手順に従います。
手順
--time
オプションを指定してpowertop
コマンドを実行します。# powertop --time=time in seconds
16.2.4. 関連情報
PowerTOP の使い方の詳細は、man ページの powertop
を参照してください。
16.3. PowerTOP の統計
PowerTOP は、実行中に、システムから統計を収集します。
PowerTOP の出力には、複数のタブがあります。
-
Overview
-
idle stats
-
Frequency stats
-
Device stats
-
Tunables
-
WakeUp
Tab
キーおよび Shift+ Tab
キーを使用して、このタブを順番に切り替えることができます。
16.3.1. Overview タブ
Overview
タブでは、ウェイクアップを最も頻繁に CPU に送信するか、最も電力を消費するコンポーネントの一覧を表示できます。プロセス、割り込み、デバイス、その他のリソースなど、Overview
タブの項目は、使用率に従って並べ替えられます。
Overview
タブで隣接する列は、以下の情報を提供します。
- Usage
- リソース使用の電力想定。
- Events/s
- 1 秒あたりウェイクアップ。1 秒あたりのウェイクアップ数は、サービスまたはデバイス、ならびにカーネルのドライバーがいかに効率的に実行しているかを示します。ウェイクアップが少ないほど、消費電力が少なくなります。コンポーネントは、電力使用率をどの程度まで最適化できるかによって順序付けられます。
- Category
- プロセス、デバイス、タイマーなどのコンポーネントの分類。
- 説明
- コンポーネントの説明。
適切に調整すると、最初の列にリストされているすべての項目に対する電力消費予測も表示されます。
これとは別に、Overview
タブには、次のようなサマリー統計の行が含まれます。
- 合計電力消費
- バッテリーの残り寿命 (該当する場合)
- 1 秒あたりの合計ウェイクアップ数、1 秒あたり GPU 操作数、および 1 秒あたりの仮想ファイルシステム操作数の概要
16.3.2. Idle stats タブ
Idle stats
タブには、すべてのプロセッサーおよびコアに対する C 状態の使用率が表示されます。Frequency stats
タブには、(該当する場合は) すべてのプロセッサーおよびコアに対する Turbo モードを含む P 状態の使用率が表示されます。C または P 状態の長さは、CPU 使用率がどの程度最適化されているかを示します。CPU の C 状態または P 状態が高いままになるほど (C4 が C3 よりも高くなるなど)、CPU 使用率がより最適化されます。システムがアイドル状態の時に、最高の C 状態または P 状態の常駐が 90% 以上になることが理想的と言えます。
16.3.3. Device stats タブ
Device stats
タブは Overview
タブと同様の情報を提供しますが、デバイス専用です。
16.3.4. Tunables タブ
Tunables
タブには、低消費電力にシステムを最適化するための、PowerTOP の推奨事項が含まれます。
up
キーおよび down
キーを使用して提案を移動し、enter
キーを使用して提案をオンまたはオフにします。
16.3.5. WakeUp タブ
WakeUp
タブには、ユーザーが必要に応じて変更できるデバイスウェイクアップ設定が表示されます。
up
キーおよび down
キーを使用して利用可能な設定を移動し、enter
キーを使用して設定を有効または無効にします。
図16.1 PowerTOP 出力

関連情報
PowerTOP の詳細は、PowerTOP のホームページ を参照してください。
16.4. Powertop で Frequency stats に値が表示されない場合がある理由
Intel P-State ドライバーを使用している場合、PowerTOP はドライバーがパッシブモードの場合にのみ Frequency Stats
タブに値を表示します。しかし、この場合でも、値が不完全な場合があります。
Intel P-State ドライバーには、全部で 3 つのモードがあります。
- ハードウェア P-State(HWP) によるアクティブモード
- HWP なしのアクティブモード
- パッシブモード
ACPI CPUfreq ドライバーに切り替えると、PowerTOP で完全な情報が表示されます。ただし、システムをデフォルト設定にしておくことをお勧めします。
どのドライバーがどのようなモードで読み込まれているかを確認するには、次のコマンドを実行します。
# cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_driver
-
intel_pstate
は、Intel P-State ドライバーが読み込まれ、アクティブモードになっている場合に返されます。 -
intel_cpufreq
は、インテル P-State ドライバーが読み込まれ、パッシブモードになっている場合に返されます。 -
ACPI CPUfreq ドライバーが読み込まれている場合は、
acpi-cpufreq
が返されます。
Intel P-State ドライバーを使用している場合は、カーネルブートコマンドラインに以下の引数を追加して、ドライバーをパッシブモードで実行するようにします。
intel_pstate=passive
Intel P-State ドライバーを無効にして、代わりに ACPI CPUfreq ドライバーを使用するには、カーネルブートコマンドラインに次の引数を追加します。
intel_pstate=disable
16.5. HTML 出力の生成
端末の powertop
の出力結果以外にも、HTML レポートを生成することもできます。
手順
--html
オプションを指定してpowertop
コマンドを実行します。# powertop --html=htmlfile.html
htmlfile.html
パラメーターを、出力ファイルに必要な名前に置き換えます。
16.6. 電力消費の最適化
電力消費を最適化するには、powertop
サービスまたは powertop2tuned
ユーティリティーを使用できます。
16.6.1. powertop サービスで消費電力の最適化
powertop
サービスを使用すると、システムの起動の Tunables
タブから、すべての PowerTOP の提案を自動的に有効にできます。
手順
powertop
サービスを有効にします。# systemctl enable powertop
16.6.2. powertop2tuned ユーティリティー
powertop2tuned
ユーティリティーを使用すると、PowerTOPの提案からカスタムTuneDプロファイルを作成できます。
デフォルトでは、powertop2tuned
は、/etc/tuned/
ディレクトリーにプロファイルを作成し、現在選択している TuneD プロファイルを基にしてカスタムプロファイルを作成します。安全上の理由から、すべての PowerTOP チューニングは最初に新しいプロファイルで無効になっています。
チューニングを有効にするには、以下を行います。
-
/etc/tuned/profile_name/tuned.conf
ファイルでコメントを解除します。 --enable
オプションまたは-e
オプションを使用して、PowerTOP により提案されたチューニングのほとんどを可能にする新しいプロファイルを生成します。USB 自動サスペンドなど、既知の問題のある特定のチューニングはデフォルトで無効になっているため、手動でコメントを解除する必要があります。
16.6.3. powertop2tuned ユーティリティーで電力消費の最適化
前提条件
powertop2tuned
ユーティリティーがシステムにインストールされている場合は、次のコマンドを実行します。# yum install tuned-utils
手順
カスタムプロファイルを作成するには、次のコマンドを使用します。
# powertop2tuned new_profile_name
新しいプロファイルをアクティベートします。
# tuned-adm profile new_profile_name
関連情報
powertop2tuned
に対応しているオプションの完全リストを表示するには、以下を使用します。$ powertop2tuned --help
16.6.4. powertop.service と powertop2tuned の比較
以下の理由により、powertop2tuned
を使用した電力消費の最適化は、powertop.service
よりも推奨されます。
-
powertop2tuned
ユーティリティーは、PowerTOP を TuneD に統合したものです。これにより、両方のツールの利点を活かすことができます。 -
powertop2tuned
ユーティリティーを使用すると、有効になっているチューニングをきめ細かく制御できます。 -
powertop2tuned
を使用すると、潜在的に危険なチューニングは自動的に有効になりません。 -
powertop2tuned
を使用すると、再起動せずにロールバックを行うことができます。
第17章 CPU 周波数を調整してエネルギー消費を最適化
必要な CPUfreq ガバナーをセットアップした後、利用可能な cpupower
コマンドを使用して、システムの CPU 速度を要件に応じて設定すると、システムの電力消費を最適化できます。
17.1. 対応している cpupower ツールコマンド
cpupower
ツールは、プロセッサーの省電力関連機能を調べ、調整するツールの集合です。
cpupower
ツールは、以下のコマンドに対応します。
idle-info
-
cpupower idle-info
コマンドを使用して、CPU アイドルドライバーで利用可能なアイドル状態と、そのほかの統計情報を表示します。詳細は、CPU Idle States を参照してください。 idle-set
-
cpupower idle-set
コマンドを root で実行して、CPU アイドル状態を有効または無効にします。特定の CPU アイドル状態を-d
を使用して無効にし、-e
を使用して有効にします。 frequency-info
-
cpupower frequency-info
コマンドを使用して、現在のcpufreq
ドライバーと、利用可能なcpufreq
ガバナーを表示します。詳細は、CPUfreq drivers、Core CPUfreq Governors、および Intel P-state CPUfreq governors を参照してください。 frequency-set
-
root で
cpupower frequency-set
コマンドを使用し、cpufreq
とガバナーを設定します。詳細は、Setting up CPUfreq governor を参照してください。 set
root で
cpupower set
コマンドを実行して、プロセッサーの省電力ポリシーを設定します。--perf-bias
オプションを使用すると、対応している Intel プロセッサーでソフトウェアを有効にして、最適なパフォーマンスと省電力のバランスを判断できます。割り当てる値は0
から15
まであり、0
はパフォーマンスを最適化し、15
は電力効率を最適化します。デフォルトでは、--perf-bias
はすべてのコアに適用されます。個々のコアにのみ適用するには、--cpu cpulist
を追加します。info
cpupower set
コマンドで有効にしたプロセッサー電源関連の設定およびハードウェア設定を表示します。たとえば、--perf-bias
を5
として割り当てるとします。# cpupower set --perf-bias 5 # cpupower info analyzing CPU 0: perf-bias: 5
monitor
cpupower monitor
コマンドを使用して、アイドル状態の統計情報と、CPU 要求を表示します。# cpupower monitor | Nehalem || Mperf ||Idle_Stats CPU| C3 | C6 | PC3 | PC6 || C0 | Cx | Freq || POLL | C1 | C1E | C3 | C6 | C7s | C8 | C9 | C10 0| 1.95| 55.12| 0.00| 0.00|| 4.21| 95.79| 3875|| 0.00| 0.68| 2.07| 3.39| 88.77| 0.00| 0.00| 0.00| 0.00 [...]
-l
オプションを使用すると、システムで利用可能なモニターの一覧を表示し、-m
オプションを使用して、特定のモニターに関する情報を表示することができます。たとえば、Mperf
モニターに関連する情報を監視する場合は、root でcpupower monitor -m Mperf
コマンドを実行します。
関連情報
-
man ページの
cpupower(1)
、cpupower-idle-info(1)
、cpupower-idle-set(1)
、cpupower-frequency-set(1)
、cpupower-frequency-info(1)
、cpupower-set(1)
、cpupower-info(1)
、およびcpupower-monitor(1)
17.2. CPU アイドル状態
x86 アーキテクチャーを備えた CPU は、CPU の一部が非アクティブ化されている、または C-state と呼ばれるパフォーマンスの低い設定を使用しているなど、さまざまな状態をサポートしています。
この状態では、使用されていない CPU を部分的に非アクティブにすることで、電力を節約できます。ガバナーを必要とし、望ましくない電源やパフォーマンスの問題を回避するように設定される P-state とは異なり、C -state を設定する必要はありません。C-state には C0 から順に番号が付けられ、番号が大きいほど CPU 機能が低下し、省電力が大きくなります。指定された数の C-state はプロセッサー間でほぼ同じですが、状態の特定の機能セットの詳細はプロセッサーファミリーごとに異なります。C-states 0-3 は、以下のように定義されます。
C0
- この状態では、CPU は動作しており、アイドル状態ではありません。
C1, Halt
- この状態では、プロセッサーは命令を実行していませんが、通常は低消費電力状態ではありません。CPU は事実上遅延なしで処理を継続できます。C-state を提供するすべてのプロセッサーが、この状態に対応する必要があります。Pentium 4 プロセッサーは、C1E と呼ばれる拡張された C1 状態に対応しています。これは、低消費電力を実現する状態です。
C2, Stop-Clock
- この状態では、クロックはこのプロセッサーでフリーズしますが、レジスターとキャッシュの完全な状態を保持するため、クロックを再起動するとすぐに処理を再開できます。この状態はオプションになります。
C3, Sleep
- この状態では、プロセッサーはスリープ状態になり、キャッシュを最新の状態に保つ必要はありません。このため、この状態からのウェイクアップには、C2 状態からのウェイクアップよりもはるかに時間がかかります。この状態はオプションになります。
以下のコマンドを使用すると、CPUidle ドライバーで利用可能なアイドル状態と、その他の統計を表示できます。
$ cpupower idle-info CPUidle governor: menu analyzing CPU 0: Number of idle states: 9 Available idle states: POLL C1 C1E C3 C6 C7s C8 C9 C10 [...]
"Nehalem" マイクロアーキテクチャーを持つ Intel CPU は、C6 状態を特徴とします。これにより、CPU の電圧供給をゼロに減らすことができますが、通常は、消費電力を 80% から 90% まで減らします。Red Hat Enterprise Linux 8 のカーネルには、この新しい C-state の最適化が含まれます。
関連情報
-
man ページの
cpupower(1)
およびcpupower-idle(1)
17.3. CPUfreq の概要
システムの消費電力と熱出力を低減する最も効果的な方法の 1 つが CPUfreq です。これは、Red Hat Enterprise Linux 8 の x86 アーキテクチャーおよび ARM64 アーキテクチャーで対応しています。CPUfreq は CPU 速度スケーリングとも呼ばれ、Linux カーネルのインフラストラクチャーで、電力を節約するために CPU 周波数をスケーリングできます。
CPU スケーリングは、Advanced Configuration and Power Interface (ACPI) イベントに応じて、またはユーザー空間プログラムにより手動でシステムの負荷に応じて自動的に行われるため、プロセッサーのクロック速度を即座に調整できます。これにより、システムは減速したクロック速度で実行でき、電力を節約できます。周波数のシフトに関するルール (クロック速度の高速化または低速化、および周波数のシフト) は、CPUfreq ガバナーで定義されています。
root で cpupower frequency-info
コマンドを使用すると、cpufreq
の情報を表示できます。
17.3.1. CPUfreq ドライバー
root で cpupower frequency-info --driver
コマンドを使用すると、現在の CPUfreq ドライバーを表示できます。
使用可能な CPUfreq 用のドライバーは、以下の 2 つです。
ACPI CPUfreq
- Advanced Configuration and Power Interface (ACPI) の CPUfreq ドライバーは、ACPI を介して特定の CPU の周波数を制御するカーネルドライバーです。これにより、カーネルとハードウェア間の通信が保証されます。
Intel P-state
Red Hat Enterprise Linux 8 では、Intel P-state ドライバーに対応しています。このドライバーは、Intel Xeon E シリーズアーキテクチャーまたは新しいアーキテクチャーに基づくプロセッサーで、P-state 選択を制御するインターフェイスを提供します。
現在、Intel P-state は、対応している CPU にデフォルトで使用されています。
intel_pstate=disable
コマンドをカーネルコマンドラインに追加すると、ACPI CPUfreq の使用に切り替えることができます。Intel P-state は、
setpolicy()
コールバックを実装します。ドライバーは、cpufreq
コアから要求されたポリシーに基づいて、使用する P-state を決定します。プロセッサーが次の P-state を内部で選択できる場合、ドライバーはこの責任をプロセッサーにオフロードします。そうでない場合は、次の P-state を選択するアルゴリズムがドライバーに実装されます。Intel P-state は、P-state の選択を制御する独自の
sysfs
ファイルを提供します。これらのファイルは、/sys/devices/system/cpu/intel_pstate/
ディレクトリーにあります。ファイルに加えた変更は、すべての CPU に適用されます。このディレクトリーには、P-state パラメーターの設定に使用される以下のファイルが含まれます。
-
max_perf_pct
は、ドライバーによって要求される最大 P-state を制限します。これは、使用可能なパフォーマンスのパーセンテージで表されます。利用可能な P-state パフォーマンスは、no_turbo
設定により削減できます。 -
min_perf_pct
は、ドライバーによって要求される最小の P-state を制限します。これは、最大のno-turbo
パフォーマンスレベルのパーセンテージで表されます。 -
no_turbo
は、ドライバーを、ターボ周波数レンジの下にある P-state を選択するように制限します。 -
turbo_pct
は、対応しているハードウェアのパフォーマンス合計のうち、ターボ領域にあるものの割合を表示します。この数字は、turbo
が無効になっているかどうかに関係ありません。 -
num_pstates
は、ハードウェアで対応している P-state の数を表示します。この数は、ターボが無効になっているかどうかに関係ありません。
-
関連情報
-
man ページの
cpupower-frequency-info(1)
17.3.2. コア CPUfreq ガバナー
CPUfreq ガバナーは、システム CPU の電源特性を定義します。これは、CPU パフォーマンスに影響を及ぼします。各ガバナーには、ワークロードに関する固有の動作、目的、および適合性があります。cpupower frequency-info --governor
コマンドを root で実行すると、利用可能な CPUfreq ガバナーを表示できます。
Red Hat Enterprise Linux 8 には、複数のコア CPUfreq ガバナーが同梱されています。
cpufreq_performance
- CPU は、可能な限り最も高いクロック周波数を使用するように強制されています。この周波数は静的に設定され、変更されません。このため、この特定のガバナーでは省電力の利点はありません。これは、ワークロードが重い時間帯にのみ適しており、CPU がめったにアイドル状態にならないか、またはまったくアイドル状態にならない時間帯にのみ適しています。
cpufreq_powersave
-
CPU は、可能な限り最低のクロック周波数を使用するように強制されています。この周波数は静的に設定され、変更されません。このガバナーを使用すると、最大限の電力を削減できますが、CPU パフォーマンスは低くなります。ただし、原則として、全負荷時の低速 CPU は、負荷がかかっていない高速 CPU よりも多くの電力を消費するため、"powersave" という用語は誤解を招く場合があります。したがって、予想される低アクティビティー時に
powersave
ガバナーを使用するように CPU を設定することが推奨されますが、その間に予想外の高負荷が発生すると、システムが実際により多くの電力を消費する可能性があります。powersave ガバナーは、省電力というよりも CPU の速度リミッターです。これは、システムや、過熱が問題になる可能性がある環境で最も役立ちます。 cpufreq_ondemand
-
これは動的ガバナーで、システムの負荷が高い場合には CPU を有効にして最大クロック周波数を実現し、システムがアイドル状態の場合には最小クロック周波数を実現できます。これにより、システムはシステム負荷に応じて消費電力を調整できますが、周波数切り替えの間の待ち時間はかかります。このため、システムがアイドル状態と高負荷のワークロードを頻繁に切り替える場合、レイテンシーは、
ondemand
ガバナーが提供するパフォーマンスや省電力の利点を相殺することができます。ほとんどのシステムでは、ondemand
ガバナーにより、放熱、電力消耗、性能、および管理可能性について最適な妥協点を見つけることができます。システムが 1 日の特定の時間にのみビジー状態の場合、ondemand
ガバナーは、それ以上の介入なしに、負荷に応じて最大周波数と最小周波数を自動的に切り替えます。 cpufreq_userspace
-
これにより、ユーザー空間プログラムや root で実行しているプロセスが、周波数を設定できます。すべてのガバナーの中で、
userspace
は最もカスタマイズ可能で、設定方法に応じて、システムのパフォーマンスと消費の最適なバランスを実現できます。 cpufreq_conservative
-
ondemand
ガバナーと同様に、conservative
ガバナーも用途に合わせてクロック周波数を調整します。ただし、conservative
ガバナーは、周波数を徐々に切り替えます。つまり、conservative
ガバナーは、単に最大/最小を選択するのではなく、負荷に対して最善と思われるクロック周波数に調整されます。これにより、消費電力を大幅に節約できる可能性がありますが、ondemand
ガバナーよりもはるかに長い遅延が発生します。
cron
ジョブを使用して、ガバナーを有効にできます。これにより、指定した時間帯に特定のガバナーを自動的に設定できます。このため、勤務時間後など、アイドル時間帯には低周波ガバナーを指定し、作業負荷が高い時間帯には高周波ガバナーに戻すことができます。
指定したガバナーを有効にする手順については、Setting up CPUfreq governor を参照してください。
17.3.3. Intel P-state の CPUfreq ガバナー
デフォルトで、Intel P-state ドライバーは、CPU が HWP に対応しているかどうかに応じて、Hardware p-state (HWP) の有無にかかわらずアクティブモードで動作します。
cpupower frequency-info --governor
コマンドを root で実行すると、利用可能な CPUfreq ガバナーを表示できます。
performance
および powersave
Intel P-state CPUfreq ガバナーの機能は、同じ名前のコア CPUfreq ガバナーと比較されます。
Intel P-state ドライバーは、以下の 3 つの異なるモードで動作できます。
Active mode with hardware-managed P-states
HWP でアクティブモードが使用されている場合、Intel P-state ドライバーは、P-state 選択を実行するように CPU に指示します。ドライバーは、周波数のヒントを提供できます。ただし、最終的な選択は CPU の内部ロジックによって異なります。HWP でアクティブモードにすると、Intel P-state ドライバーにより、2 つの P-state 選択アルゴリズムが提供されます。
-
performance
:performance
ガバナーを使用すると、ドライバーは内部 CPU ロジックにパフォーマンス指向になるように指示します。P-state の範囲は、ドライバーが使用できる範囲の上限に制限されます。 -
powersave
:powersave
ガバナーを使用すると、ドライバーは、内部 CPU ロジックに省電力指向になるように指示します。
-
Active mode without hardware-managed P-states
HWP を使用しないアクティブモードの場合、Intel P-state ドライバーは次の 2 つの P-state 選択アルゴリズムを提供します。
-
performance
:performance
ガバナーを使用すると、ドライバーは使用できる最大の P-state を選択します。 -
powersave
:powersave
ガバナーを使用すると、ドライバーは、現在の CPU 使用率に比例する P-state を選択します。この動作は、ondemand
CPUfreq コアガバナーに似ています。
-
パッシブモード
-
passive
モードを使用すると、Intel P-state ドライバーは、従来の CPUfreq スケーリングドライバーと同じように機能します。利用可能なすべての汎用 CPUFreq コアガバナーを使用できます。
17.3.4. CPUfreq ガバナーの設定
すべての CPUfreq ドライバーは kernel-tools
パッケージに組み込まれ、自動的に選択されます。CPUfreq を設定するには、ガバナーを選択する必要があります。
前提条件
cpupower
を使用するには、kernel-tools
をインストールします。# yum install kernel-tools
手順
特定の CPU で使用できるガバナーを表示します。
# cpupower frequency-info --governors analyzing CPU 0: available cpufreq governors: performance powersave
すべての CPU で、ガバナーのいずれかを有効にします。
# cpupower frequency-set --governor performance
必要に応じて、
performance
ガバナーを、cpufreq
ガバナー名に置き換えます。特定のコアでガバナーのみを有効にするには、CPU 番号の範囲またはコンマ区切りのリストで
-c
を使用します。たとえば、CPU 1-3 および 5 のuserspace
ガバナーを有効にするには、次のコマンドを使用します。# cpupower -c 1-3,5 frequency-set --governor cpufreq_userspace
kernel-tools
がインストールされていない場合は、/sys/devices/system/cpu/cpuid/cpufreq/
ディレクトリーに CPUfreq 設定が表示されます。設定および値は、この調整可能パラメーターに書き込むことで変更できます。たとえば、最小クロック速度の cpu0 から 360MHz を設定するには、次のコマンドを使用します。
# echo 360000 > /sys/devices/system/cpu/cpu0/cpufreq/scaling_min_freq
検証
ガバナーが有効になっていることを確認します。
# cpupower frequency-info analyzing CPU 0: driver: intel_pstate CPUs which run at the same hardware frequency: 0 CPUs which need to have their frequency coordinated by software: 0 maximum transition latency: Cannot determine or is not supported. hardware limits: 400 MHz - 4.20 GHz available cpufreq governors: performance powersave current policy: frequency should be within 400 MHz and 4.20 GHz. The governor "performance" may decide which speed to use within this range. current CPU frequency: Unable to call hardware current CPU frequency: 3.88 GHz (asserted by call to kernel) boost state support: Supported: yes Active: yes
現行ポリシーでは、直近で有効になった
cpufreq
ガバナーが表示されます。この場合、performance
になります。
関連情報
-
man ページの
cpupower-frequency-info(1)
およびcpupower-frequency-set(1)
第18章 perf の使用
システム管理者は、perf
ツールを使用して、システムのパフォーマンスデータを収集および分析できます。
18.1. perf の概要
perf
ユーザー空間ツールは、カーネルベースのサブシステム Performance Counters for Linux (PCL) とインターフェイスします。perf
は、PMU (Performance Monitoring Unit) を使用してさまざまなハードウェアおよびソフトウェアイベントを測定、記録、監視する強力なツールです。perf
は tracepoint、kprobes、および uprobes にも対応しています。
18.2. perf のインストール
この手順では、perf
ユーザー空間ツールをインストールします。
手順
perf
ツールをインストールします。# yum install perf
18.3. 一般的な perf コマンド
perf stat
- このコマンドは、実行された命令や消費したクロックサイクルなど、一般的なパフォーマンスイベントに関する全体的な統計を提供します。オプションを指定すると、デフォルトの測定イベント以外のイベントを選択できます。
perf record
-
このコマンドは、パフォーマンスデータをファイル
perf.data
に記録します。このファイルは後でperf report
コマンドを使用して分析できます。 perf report
-
このコマンドは、
perf record
で作成されたperf.data
ファイルからパフォーマンスデータを読み取り、表示します。 perf list
- このコマンドは、特定のマシンで利用可能なイベントを一覧表示します。これらのイベントは、パフォーマンス監視ハードウェアや、システムのソフトウェア設定によって異なります。
perf top
-
このコマンドは、
top
ユーティリティーと同様の機能を実行します。リアルタイムでパフォーマンスカウンタープロファイルを生成および表示します。 perf trace
-
このコマンドは、
strace
ツールと同様の機能を実行します。指定されたスレッドまたはプロセスによって使用されるシステムコールとそのアプリケーションが受信するすべてのシグナルを監視します。 perf help
-
このコマンドは、
perf
コマンドの一覧を表示します。
関連情報
-
サブコマンドに
--help
オプションを追加すると、man ページが表示されます。
第19章 perf top を使用した、リアルタイムでの CPU 使用率のプロファイリング
perf top
コマンドを使用して、さまざまな機能の CPU 使用率をリアルタイムで測定できます。
前提条件
-
perf のインストール で説明されているように、
perf
ユーザー領域ツールがインストールされている。
19.1. perf top の目的
perf top
コマンドは、top
ユーティリティーと同様に、リアルタイムシステムのプロファイリングおよび機能に使用されます。ただし、top
ユーティリティーは、通常、指定のプロセスまたはスレッドが使用している CPU 時間を示しており、perf top
は各関数が使用する CPU 時間を表示します。デフォルトの状態では、perf top
はユーザー空間とカーネル空間のすべての CPU で使用される関数について通知します。perf top
を使用するには、root アクセスが必要です。
19.2. perf top を使った CPU 使用率のプロファイリング
この手順では、perf top
をアクティブにし、CPU 使用率をリアルタイムでプロファイルします。
前提条件
-
perf のインストール で説明されているように、
perf
ユーザー領域ツールがインストールされている。 - root アクセスがある。
手順
perf top
モニターリングインターフェイスを起動します。# perf top
監視インターフェイスは、以下のようになります。
Samples: 8K of event 'cycles', 2000 Hz, Event count (approx.): 4579432780 lost: 0/0 drop: 0/0 Overhead Shared Object Symbol 2.20% [kernel] [k] do_syscall_64 2.17% [kernel] [k] module_get_kallsym 1.49% [kernel] [k] copy_user_enhanced_fast_string 1.37% libpthread-2.29.so [.] pthread_mutex_lock 1.31% [unknown] [.] 0000000000000000 1.07% [kernel] [k] psi_task_change 1.04% [kernel] [k] switch_mm_irqs_off 0.94% [kernel] [k] fget 0.74% [kernel] [k] entry_SYSCALL_64 0.69% [kernel] [k] syscall_return_via_sysret 0.69% libxul.so [.] 0x000000000113f9b0 0.67% [kernel] [k] kallsyms_expand_symbol.constprop.0 0.65% firefox [.] moz_xmalloc 0.65% libpthread-2.29.so [.] __pthread_mutex_unlock_usercnt 0.60% firefox [.] free 0.60% libxul.so [.] 0x000000000241d1cd 0.60% [kernel] [k] do_sys_poll 0.58% [kernel] [k] menu_select 0.56% [kernel] [k] _raw_spin_lock_irqsave 0.55% perf [.] 0x00000000002ae0f3
この例では、カーネル機能の
do_syscall_64
が最も多くの CPU 時間を使用しています。
関連情報
-
man ページの
perf-top(1)
19.3. perf top 出力の解釈
perf top
監視インターフェイスでは、データが以下のようなさまざまな列で表示されます。
- Overhead 列
- 指定された関数が使用している CPU のパーセントを表示します。
- 共有オブジェクトのコラム
- 機能を使用しているプログラムまたはライブラリー名を表示します。
- Symbol 列
-
関数名またはシンボルを表示します。カーネル空間で実行される関数は
[k]
によって識別され、ユーザースペースで実行される関数は[.]
によって識別されます。
19.4. perf が一部の関数名を raw 関数アドレスとして表示する理由
カーネル関数の場合は、perf
が /proc/kallsyms
ファイルからの情報を使用して、サンプルをそれぞれの関数名またはシンボルにマッピングします。ただし、ユーザー空間で実行される関数については、バイナリーがストライピングされるので、raw 機能のアドレスが表示される可能性があります。
実行ファイルの debuginfo
パッケージがインストールされているか、または実行ファイルがローカルで開発したアプリケーションである場合は、アプリケーションがデバッグ情報 (GCC の -g
オプション) を有効にしてコンパイルされ、このような状況で関数名またはシンボルが表示される必要があります。
実行ファイルに関連付けられた debuginfo
をインストールした後に、perf record
コマンドを再実行する必要はありません。単に perf report
を再実行してください。
関連情報
19.5. デバッグおよびソースのリポジトリーの有効化
Red Hat Enterprise Linux の標準インストールでは、デバッグリポジトリーおよびソースリポジトリーが有効になっていません。このリポジトリーには、システムコンポーネントのデバッグとパフォーマンスの測定に必要な情報が含まれます。
手順
ソースおよびデバッグの情報パッケージチャンネルを有効にします。
# subscription-manager repos --enable rhel-8-for-$(uname -i)-baseos-debug-rpms # subscription-manager repos --enable rhel-8-for-$(uname -i)-baseos-source-rpms # subscription-manager repos --enable rhel-8-for-$(uname -i)-appstream-debug-rpms # subscription-manager repos --enable rhel-8-for-$(uname -i)-appstream-source-rpms
$(uname -i)
の部分は、システムのアーキテクチャーで一致する値に自動的に置き換えられます。アーキテクチャー名 値 64 ビット Intel および AMD
x86_64
64 ビット ARM
aarch64
IBM POWER
ppc64le
64 ビット IBM Z
s390x
19.6. GDB を使用したアプリケーションまたはライブラリーの debuginfo パッケージの取得
デバッグ情報は、コードをデバッグするために必要です。パッケージからインストールされるコードの場合、GNU デバッガー (GDB) は足りないデバッグ情報を自動的に認識し、パッケージ名を解決し、パッケージの取得方法に関する具体的なアドバイスを提供します。
前提条件
- デバッグするアプリケーションまたはライブラリーがシステムにインストールされている。
-
GDB と
debuginfo-install
ツールがシステムにインストールされている。詳細は アプリケーションをデバッグするための設定 を参照してください。 -
debuginfo
およびdebugsource
パッケージを提供するリポジトリーを設定し、システムで有効にしている。詳細は、デバッグおよびソースリポジトリーの有効化 を参照してください。
手順
デバッグするアプリケーションまたはライブラリーに割り当てられた GDB を起動します。GDB は、足りないデバッグ情報を自動的に認識し、実行するコマンドを提案します。
$ gdb -q /bin/ls Reading symbols from /bin/ls...Reading symbols from .gnu_debugdata for /usr/bin/ls...(no debugging symbols found)...done. (no debugging symbols found)...done. Missing separate debuginfos, use: dnf debuginfo-install coreutils-8.30-6.el8.x86_64 (gdb)
GDB を終了します。q と入力して、Enter で確認します。
(gdb) q
GDB が提案するコマンドを実行して、必要な
debuginfo
パッケージをインストールします。# dnf debuginfo-install coreutils-8.30-6.el8.x86_64
dnf
パッケージ管理ツールは、変更の概要を提供し、確認を求め、確認後に必要なファイルをすべてダウンロードしてインストールします。-
GDB が
debuginfo
パッケージを提案できない場合は、手動でのアプリケーションまたはライブラリーの debuginfo パッケージの取得 で説明されている手順に従います。
関連情報
第20章 perf stat を使用したプロセス実行中のイベントのカウント
perf stat
コマンドを使用すると、プロセスの実行中にハードウェアおよびソフトウェアのイベントをカウントできます。
前提条件
-
perf のインストール で説明されているように、
perf
ユーザー領域ツールがインストールされている。
20.1. perf stat の目的
perf stat
コマンドは指定されたコマンドを実行し、コマンドの実行中にハードウェアおよびソフトウェアのイベントの発生回数を維持し、これらのカウントの統計を生成します。イベントを指定しないと、perf stat
は共通のハードウェアおよびソフトウェアのイベントセットをカウントします。
20.2. perf stat を使用したイベントのカウント
perf stat
を使用すると、コマンドの実行中に発生したハードウェアおよびソフトウェアのイベントをカウントし、これらのカウントの統計を生成できます。デフォルトでは、perf stat
はスレッドごとのモードで動作します。
前提条件
-
perf のインストール で説明されているように、
perf
ユーザー領域ツールがインストールされている。
手順
イベントをカウントします。
root アクセスなしで
perf stat
コマンドを実行すると、ユーザー空間で発生したイベントのみをカウントします。$ perf stat ls
例20.1 perf stat の出力が root アクセスなしで実行
Desktop Documents Downloads Music Pictures Public Templates Videos Performance counter stats for 'ls': 1.28 msec task-clock:u # 0.165 CPUs utilized 0 context-switches:u # 0.000 M/sec 0 cpu-migrations:u # 0.000 K/sec 104 page-faults:u # 0.081 M/sec 1,054,302 cycles:u # 0.823 GHz 1,136,989 instructions:u # 1.08 insn per cycle 228,531 branches:u # 178.447 M/sec 11,331 branch-misses:u # 4.96% of all branches 0.007754312 seconds time elapsed 0.000000000 seconds user 0.007717000 seconds sys
以前の例で分かるように、
perf stat
を root アクセスなしで実行すると、イベント名の後に:u
が付けられ、これらのイベントがユーザー空間でのみカウントされていることが分かります。ユーザー空間およびカーネルスペースの両方のイベントをカウントするには、
perf stat
の実行時に root アクセスが必要になります。# perf stat ls
例20.2 root アクセスで実行された perf stat の出力
Desktop Documents Downloads Music Pictures Public Templates Videos Performance counter stats for 'ls': 3.09 msec task-clock # 0.119 CPUs utilized 18 context-switches # 0.006 M/sec 3 cpu-migrations # 0.969 K/sec 108 page-faults # 0.035 M/sec 6,576,004 cycles # 2.125 GHz 5,694,223 instructions # 0.87 insn per cycle 1,092,372 branches # 352.960 M/sec 31,515 branch-misses # 2.89% of all branches 0.026020043 seconds time elapsed 0.000000000 seconds user 0.014061000 seconds sys
デフォルトでは、
perf stat
はスレッドごとのモードで動作します。CPU 全体のイベントカウントに変更するには、-a
オプションをperf stat
に渡します。CPU 全体のイベントをカウントするには、root アクセスが必要です。# perf stat -a ls
関連情報
-
man ページの
perf-stat(1)
20.3. perf stat 出力の解釈
perf stat
は指定されたコマンドを実行し、コマンドの実行中にイベントの発生をカウントし、これらのカウントの統計を 3 列で表示します。
- 指定されたイベントでカウントされた発生数
- カウントされたイベントの名前。
関連するメトリクスが利用可能な場合、右側のコラムのハッシュ記号 (
#
) の後に比率またはパーセンテージが表示されます。たとえば、デフォルトモードで実行している場合、
perf stat
はサイクルと命令の両方をカウントします。したがって、右端のコラムのサイクルごとの命令を計算して表示します。デフォルトでは両方のイベントがカウントされるため、分岐ミスに関して同様の動作がすべてのブランチのパーセントとして表示されます。
20.4. 実行中のプロセスに perf stat を割り当てる
perf stat
を実行中のプロセスに割り当てることができます。これにより、コマンドの実行中に、指定したプロセスでのみ発生するイベントをカウントするように perf stat
に指示します。
前提条件
-
perf のインストール で説明されているように、
perf
ユーザー領域ツールがインストールされている。
手順
perf stat
を実行中のプロセスに割り当てます。$ perf stat -p ID1,ID2 sleep seconds
前の例では、ID が
ID1
andID2
のプロセス内のイベントを、sleep
コマンドで指定したseconds
の秒数だけカウントします。
関連情報
-
man ページの
perf-stat(1)
第21章 perf によるパフォーマンスプロファイルの記録および分析
perf
ツールを使用すると、パフォーマンスデータを記録し、後で分析することができます。
前提条件
-
perf のインストール で説明されているように、
perf
ユーザー領域ツールがインストールされている。
21.1. perf record の目的
perf record
コマンドはパフォーマンスデータのサンプルを収集し、perf.data
ファイルに保存して、他の perf
コマンドで読み込み、視覚化できるようにします。perf.data
は現在のディレクトリーに生成され、後で別のマシンからアクセスできます。
perf record
を記録するコマンドを指定しないと、Ctrl+C
を押して手動でプロセスを停止するまで記録されます。-p
オプションに続いてプロセス ID を 1 つ以上渡すと、perf record
を特定のプロセスに割り当てることができます。root アクセスなしで perf record
レコードを実行できますが、実行するとユーザー領域のパフォーマンスデータのサンプルのみとなります。デフォルトモードでは、perf record
レコードは CPU サイクルをサンプルイベントとして使用し、継承モードが有効な状態でスレッドごとのモードで動作します。
21.2. root アクセスなしのパフォーマンスプロファイルの記録
root アクセスなしで perf record
を使用すると、ユーザー空間のみのパフォーマンスデータのサンプリングおよび記録を行うことができます。
前提条件
-
perf のインストール で説明されているように、
perf
ユーザー領域ツールがインストールされている。
手順
パフォーマンスデータのサンプルと記録:
$ perf record command
command
を、サンプルデータを作成するコマンドに置き換えます。コマンドを指定しないと、Ctrl+C を押して手動で停止するまでperf record
がデータのサンプリングを行います。
関連情報
-
man ページの
perf-record(1)
21.3. root アクセスによるパフォーマンスプロファイルの記録
root アクセスで perf record
を使用して、ユーザー空間とカーネル空間の両方でパフォーマンスデータをサンプリングおよび記録できます。
前提条件
-
perf のインストール で説明されているように、
perf
ユーザー領域ツールがインストールされている。 - root アクセスがある。
手順
パフォーマンスデータのサンプルと記録:
# perf record command
command
を、サンプルデータを作成するコマンドに置き換えます。コマンドを指定しないと、Ctrl+C を押して手動で停止するまでperf record
がデータのサンプリングを行います。
関連情報
-
man ページの
perf-record(1)
21.4. CPU ごとのモードでのパフォーマンスプロファイルの記録
CPU ごとのモードで perf record
を使用すると、監視対象の CPU のすべてのスレッドにわたって、ユーザー空間とカーネル空間の両方で同時にパフォーマンスデータをサンプリングして記録できます。デフォルトでは、CPU ごとのモードはすべてのオンライン CPU を監視します。
前提条件
-
perf のインストール で説明されているように、
perf
ユーザー領域ツールがインストールされている。
手順
パフォーマンスデータのサンプルと記録:
# perf record -a command
command
を、サンプルデータを作成するコマンドに置き換えます。コマンドを指定しないと、Ctrl+C を押して手動で停止するまでperf record
がデータのサンプリングを行います。
関連情報
-
man ページの
perf-record(1)
21.5. perf レコードで呼び出し先のデータを取得する
perf record
ツールを設定して、どの関数がパフォーマンスプロファイル内の他の関数を呼び出しているかを記録することができます。これは、複数のプロセスが同じ関数を呼び出す場合にボトルネックを特定するのに役立ちます。
前提条件
-
perf のインストール で説明されているように、
perf
ユーザー領域ツールがインストールされている。
手順
--call-graph
オプションを使用して、パフォーマンスデータのサンプルと記録を行います。$ perf record --call-graph method command
-
command
を、サンプルデータを作成するコマンドに置き換えます。コマンドを指定しないと、Ctrl+C を押して手動で停止するまでperf record
がデータのサンプリングを行います。 method を、以下のアンワインドメソッドのいずれかに置き換えます。
fp
-
フレームポインターメソッドを使用します。GCC オプション
--fomit-frame-pointer
でビルドされたバイナリーの場合など、コンパイラーの最適化により、スタックをアンワインドできない可能性があります。 dwarf
- DWARF 呼び出し情報を使用してスタックのアンワインドを行います。
lbr
- Intel プロセッサーで最後のブランチレコードハードウェアを使用します。
-
関連情報
-
man ページの
perf-record(1)
21.6. perf レポートを使用した perf.data の分析
perf report
を使用して perf.data
ファイルを表示し、分析できます。
前提条件
-
perf のインストール で説明されているように、
perf
ユーザー領域ツールがインストールされている。 -
現行ディレクトリーに
perf.data
ファイルがある。 -
perf.data
ファイルが root アクセスで作成された場合は、root アクセスでperf report
を実行する必要もあります。
手順
詳細な分析のために
perf.data
ファイルの内容を表示します。# perf report
このコマンドは、以下のような出力を表示します。
Samples: 2K of event 'cycles', Event count (approx.): 235462960 Overhead Command Shared Object Symbol 2.36% kswapd0 [kernel.kallsyms] [k] page_vma_mapped_walk 2.13% sssd_kcm libc-2.28.so [.] memset_avx2_erms 2.13% perf [kernel.kallsyms] [k] smp_call_function_single 1.53% gnome-shell libc-2.28.so [.] strcmp_avx2 1.17% gnome-shell libglib-2.0.so.0.5600.4 [.] g_hash_table_lookup 0.93% Xorg libc-2.28.so [.] memmove_avx_unaligned_erms 0.89% gnome-shell libgobject-2.0.so.0.5600.4 [.] g_object_unref 0.87% kswapd0 [kernel.kallsyms] [k] page_referenced_one 0.86% gnome-shell libc-2.28.so [.] memmove_avx_unaligned_erms 0.83% Xorg [kernel.kallsyms] [k] alloc_vmap_area 0.63% gnome-shell libglib-2.0.so.0.5600.4 [.] g_slice_alloc 0.53% gnome-shell libgirepository-1.0.so.1.0.0 [.] g_base_info_unref 0.53% gnome-shell ld-2.28.so [.] _dl_find_dso_for_object 0.49% kswapd0 [kernel.kallsyms] [k] vma_interval_tree_iter_next 0.48% gnome-shell libpthread-2.28.so [.] pthread_getspecific 0.47% gnome-shell libgirepository-1.0.so.1.0.0 [.] 0x0000000000013b1d 0.45% gnome-shell libglib-2.0.so.0.5600.4 [.] g_slice_free1 0.45% gnome-shell libgobject-2.0.so.0.5600.4 [.] g_type_check_instance_is_fundamentally_a 0.44% gnome-shell libc-2.28.so [.] malloc 0.41% swapper [kernel.kallsyms] [k] apic_timer_interrupt 0.40% gnome-shell ld-2.28.so [.] _dl_lookup_symbol_x 0.39% kswapd0 [kernel.kallsyms] [k] raw_callee_save___pv_queued_spin_unlock
関連情報
-
man ページの
perf-report(1)
21.7. perf report 出力の解釈
perf report
コマンドを実行して表示されるテーブルは、データを複数のコラムに分類します。
- Overhead 列
- その特定の関数で収集されたサンプル全体の割合を示します。
- Command 列
- サンプルが収集されたプロセスを通知します。
- Shared Object 列
- サンプルの送信元である ELF イメージの名前を表示します (サンプルがカーネルからのものである場合に [kernel.kallsyms] という名前が使用されます)。
- Symbol 列
- 関数名またはシンボルを表示します。
デフォルトモードでは、関数は、オーバーヘッドの最も高いものが最初に表示される順に降順でソートされます。
21.8. 別のデバイスで読み取り可能な perf.data ファイルの生成
perf
ツールを使用してパフォーマンスデータを perf.data
ファイルに記録し、異なるデバイスで分析することができます。
前提条件
-
perf のインストール で説明されているように、
perf
ユーザー領域ツールがインストールされている。 -
カーネル
debuginfo
パッケージがインストールされている。詳細は GDB を使用したアプリケーションまたはライブラリーの debuginfo パッケージの取得 を参照してください。
手順
さらに調査する予定のパフォーマンスデータを取得します。
# perf record -a --call-graph fp sleep seconds
この例では、
sleep
コマンドの使用によって指定される秒
数でシステム全体のperf.data
を生成します。また、フレームポインターの方法を使用して呼び出しグラフデータを取得します。記録されたデータのデバッグシンボルを含むアーカイブファイルを生成します。
# perf archive
検証手順
アーカイブファイルが現在のアクティブなディレクトリーで生成されたことを確認します。
# ls perf.data*
出力には、
perf.data
で始まる現在のディレクトリーのすべてのファイルが表示されます。アーカイブファイルの名前は以下のいずれかになります。perf.data.tar.gz
または
perf.data.tar.bz2
21.9. 別のデバイスで作成された perf.data ファイルの分析
perf
ツールを使用して、別のデバイスで生成された perf.data
ファイルを分析することができます。
前提条件
-
perf のインストール で説明されているように、
perf
ユーザー領域ツールがインストールされている。 -
使用中の現在のデバイスに、別のデバイスで生成された
perf.data
ファイルと関連アーカイブファイルが存在する。
手順
-
perf.data
ファイルとアーカイブファイルの両方を現在のアクティブなディレクトリーにコピーします。 アーカイブファイルを
~/.debug
に展開します。# mkdir -p ~/.debug # tar xf perf.data.tar.bz2 -C ~/.debug
注記アーカイブファイルの名前は
perf.data.tar.gz
でも構いません。perf.data
ファイルを開いて詳細な分析を行います。# perf report
21.10. perf が一部の関数名を raw 関数アドレスとして表示する理由
カーネル関数の場合は、perf
が /proc/kallsyms
ファイルからの情報を使用して、サンプルをそれぞれの関数名またはシンボルにマッピングします。ただし、ユーザー空間で実行される関数については、バイナリーがストライピングされるので、raw 機能のアドレスが表示される可能性があります。
実行ファイルの debuginfo
パッケージがインストールされているか、または実行ファイルがローカルで開発したアプリケーションである場合は、アプリケーションがデバッグ情報 (GCC の -g
オプション) を有効にしてコンパイルされ、このような状況で関数名またはシンボルが表示される必要があります。
実行ファイルに関連付けられた debuginfo
をインストールした後に、perf record
コマンドを再実行する必要はありません。単に perf report
を再実行してください。
関連情報
21.11. デバッグおよびソースのリポジトリーの有効化
Red Hat Enterprise Linux の標準インストールでは、デバッグリポジトリーおよびソースリポジトリーが有効になっていません。このリポジトリーには、システムコンポーネントのデバッグとパフォーマンスの測定に必要な情報が含まれます。
手順
ソースおよびデバッグの情報パッケージチャンネルを有効にします。
# subscription-manager repos --enable rhel-8-for-$(uname -i)-baseos-debug-rpms # subscription-manager repos --enable rhel-8-for-$(uname -i)-baseos-source-rpms # subscription-manager repos --enable rhel-8-for-$(uname -i)-appstream-debug-rpms # subscription-manager repos --enable rhel-8-for-$(uname -i)-appstream-source-rpms
$(uname -i)
の部分は、システムのアーキテクチャーで一致する値に自動的に置き換えられます。アーキテクチャー名 値 64 ビット Intel および AMD
x86_64
64 ビット ARM
aarch64
IBM POWER
ppc64le
64 ビット IBM Z
s390x
21.12. GDB を使用したアプリケーションまたはライブラリーの debuginfo パッケージの取得
デバッグ情報は、コードをデバッグするために必要です。パッケージからインストールされるコードの場合、GNU デバッガー (GDB) は足りないデバッグ情報を自動的に認識し、パッケージ名を解決し、パッケージの取得方法に関する具体的なアドバイスを提供します。
前提条件
- デバッグするアプリケーションまたはライブラリーがシステムにインストールされている。
-
GDB と
debuginfo-install
ツールがシステムにインストールされている。詳細は アプリケーションをデバッグするための設定 を参照してください。 -
debuginfo
およびdebugsource
パッケージを提供するリポジトリーを設定し、システムで有効にしている。詳細は、デバッグおよびソースリポジトリーの有効化 を参照してください。
手順
デバッグするアプリケーションまたはライブラリーに割り当てられた GDB を起動します。GDB は、足りないデバッグ情報を自動的に認識し、実行するコマンドを提案します。
$ gdb -q /bin/ls Reading symbols from /bin/ls...Reading symbols from .gnu_debugdata for /usr/bin/ls...(no debugging symbols found)...done. (no debugging symbols found)...done. Missing separate debuginfos, use: dnf debuginfo-install coreutils-8.30-6.el8.x86_64 (gdb)
GDB を終了します。q と入力して、Enter で確認します。
(gdb) q
GDB が提案するコマンドを実行して、必要な
debuginfo
パッケージをインストールします。# dnf debuginfo-install coreutils-8.30-6.el8.x86_64
dnf
パッケージ管理ツールは、変更の概要を提供し、確認を求め、確認後に必要なファイルをすべてダウンロードしてインストールします。-
GDB が
debuginfo
パッケージを提案できない場合は、手動でのアプリケーションまたはライブラリーの debuginfo パッケージの取得 で説明されている手順に従います。
関連情報
第22章 perf を使用したビジーな CPU の調査
システムでパフォーマンスの問題を調査する際には、perf
ツールを使用して最もビジー状態の CPU を特定し、監視することで、作業に集中することができます。
22.1. perf stat でカウントされた CPU イベントの表示
perf stat
を使用すると、CPU カウントアグリゲーションを無効にすることで、どの CPU イベントがカウントされたかを表示できます。この機能を使用するには、-a
フラグを使用してシステム全体のモードでイベントをカウントする必要があります。
前提条件
-
perf のインストール で説明されているように、
perf
ユーザー領域ツールがインストールされている。
手順
CPU カウントアグリゲーションが無効になっているイベントをカウントします。
# perf stat -a -A sleep seconds
この例では、
CPU0
以降の各 CPU に対してsleep
コマンドを使用し、一定時間 (秒
単位) に記録された一般的なハードウェアおよびソフトウェアイベントのデフォルトセット数が表示されます。そのため、cycle などのイベントを指定すると便利です。# perf stat -a -A -e cycles sleep seconds
22.2. perf レポートを使用して実行した CPU サンプルの表示
perf record
コマンドはパフォーマンスデータをサンプルし、このデータを perf.data
ファイルに保存します。このファイルは perf report
コマンドで読み取ることができます。perf record
コマンドは、どの CPU サンプルが発生したかを常に記録します。perf report
を設定して、この情報を表示することができます。
前提条件
-
perf のインストール で説明されているように、
perf
ユーザー領域ツールがインストールされている。 -
現行ディレクトリーに
perf record
でperf.data
ファイルが作成されている。perf.data
ファイルが root アクセスで作成された場合は、root アクセスでperf report
を実行する必要もあります。
手順
CPU でソートしながら、詳細な分析のために
perf.data
ファイルの内容を表示します。# perf report --sort cpu
CPU およびコマンドでソートすると、CPU 時間が費やされている場所に関する詳細情報を表示できます。
# perf report --sort cpu,comm
この例では、すべての監視 CPU からのコマンドを、オーバーヘッド使用量の降順で合計オーバーヘッドで一覧表示し、コマンドが実行された CPU を特定します。
22.3. perf top を使用したプロファイリング中の特定の CPU の表示
perf top
を設定して、システムのリアルタイムプロファイリング中に特定の CPU および相対使用率を表示できます。
前提条件
-
perf のインストール で説明されているように、
perf
ユーザー領域ツールがインストールされている。
手順
CPU でソートしながら
perf top
インターフェイスを起動します。# perf top --sort cpu
この例では、CPU とその各オーバーヘッドを、オーバーヘッド使用量の降順にリアルタイムで一覧表示します。
CPU およびコマンドでソートして、CPU 時間が費やされている場所の詳細を確認できます。
# perf top --sort cpu,comm
この例では、オーバーヘッド使用量の降順で合計オーバーヘッドでコマンドを一覧表示し、そのコマンドがリアルタイムに実行された CPU を特定します。
22.4. perf レコードと perf レポートを使用した特定 CPU の監視
perf record
は、対象の特定の CPU のみのサンプルを設定し、詳細な分析のために perf report
で生成された perf.data
ファイルを分析できます。
前提条件
-
perf のインストール で説明されているように、
perf
ユーザー領域ツールがインストールされている。
手順
perf.data
ファイルを生成して、特定の CPU のパフォーマンスデータをサンプルし、記録します。CPU のコンマ区切りリストを使用します。
# perf record -C 0,1 sleep seconds
上記の例は、
sleep
コマンドの使用によって決定される秒
数で CPU 0 と 1 にデータをサンプルし、記録します。さまざまな CPU を使用:
# perf record -C 0-2 sleep seconds
上記の例は、
sleep
コマンドの使用によって決定される秒
数で、CPU 0 から 2 までのすべての CPU にデータをサンプルし、記録します。
詳細な分析のために
perf.data
ファイルの内容を表示します。# perf report
この例では、
perf.data
の内容を表示します。複数の CPU を監視しており、どの CPU データがサンプルされたかを把握する場合は、perf report を使用した CPU サンプルの表示 を参照してください。
第23章 perf でアプリケーションパフォーマンスの監視
perf
ツールを使用して、アプリケーションのパフォーマンスを監視および分析できます。
23.1. 実行中のプロセスに perf レコードを割り当てる
実行中のプロセスに perf レコード
をアタッチできます。これにより、perf record
が、指定されたプロセスでパフォーマンスデータのサンプルデータと記録のみを行うように指示されます。
前提条件
-
perf のインストール で説明されているように、
perf
ユーザー領域ツールがインストールされている。
手順
実行中のプロセスに
perf レコード
をアタッチします。$ perf record -p ID1,ID2 sleep seconds
上記の例では、
sleep
コマンドを使用して、プロセス ID のID1
とID2
のプロセスのパフォーマンスデータを秒
数でサンプルし、記録します。perf
を設定して、イベントを特定のスレッドに記録することもできます。$ perf record -t ID1,ID2 sleep seconds
注記-t
フラグを使用し、スレッド ID をログに記録する場合、perf
はデフォルトで継承を無効にします。--inherit
オプションを追加して継承を有効にできます。
23.2. perf レコードで呼び出し先のデータを取得する
perf record
ツールを設定して、どの関数がパフォーマンスプロファイル内の他の関数を呼び出しているかを記録することができます。これは、複数のプロセスが同じ関数を呼び出す場合にボトルネックを特定するのに役立ちます。
前提条件
-
perf のインストール で説明されているように、
perf
ユーザー領域ツールがインストールされている。
手順
--call-graph
オプションを使用して、パフォーマンスデータのサンプルと記録を行います。$ perf record --call-graph method command
-
command
を、サンプルデータを作成するコマンドに置き換えます。コマンドを指定しないと、Ctrl+C を押して手動で停止するまでperf record
がデータのサンプリングを行います。 method を、以下のアンワインドメソッドのいずれかに置き換えます。
fp
-
フレームポインターメソッドを使用します。GCC オプション
--fomit-frame-pointer
でビルドされたバイナリーの場合など、コンパイラーの最適化により、スタックをアンワインドできない可能性があります。 dwarf
- DWARF 呼び出し情報を使用してスタックのアンワインドを行います。
lbr
- Intel プロセッサーで最後のブランチレコードハードウェアを使用します。
-
関連情報
-
man ページの
perf-record(1)
23.3. perf レポートを使用した perf.data の分析
perf report
を使用して perf.data
ファイルを表示し、分析できます。
前提条件
-
perf のインストール で説明されているように、
perf
ユーザー領域ツールがインストールされている。 -
現行ディレクトリーに
perf.data
ファイルがある。 -
perf.data
ファイルが root アクセスで作成された場合は、root アクセスでperf report
を実行する必要もあります。
手順
詳細な分析のために
perf.data
ファイルの内容を表示します。# perf report
このコマンドは、以下のような出力を表示します。
Samples: 2K of event 'cycles', Event count (approx.): 235462960 Overhead Command Shared Object Symbol 2.36% kswapd0 [kernel.kallsyms] [k] page_vma_mapped_walk 2.13% sssd_kcm libc-2.28.so [.] memset_avx2_erms 2.13% perf [kernel.kallsyms] [k] smp_call_function_single 1.53% gnome-shell libc-2.28.so [.] strcmp_avx2 1.17% gnome-shell libglib-2.0.so.0.5600.4 [.] g_hash_table_lookup 0.93% Xorg libc-2.28.so [.] memmove_avx_unaligned_erms 0.89% gnome-shell libgobject-2.0.so.0.5600.4 [.] g_object_unref 0.87% kswapd0 [kernel.kallsyms] [k] page_referenced_one 0.86% gnome-shell libc-2.28.so [.] memmove_avx_unaligned_erms 0.83% Xorg [kernel.kallsyms] [k] alloc_vmap_area 0.63% gnome-shell libglib-2.0.so.0.5600.4 [.] g_slice_alloc 0.53% gnome-shell libgirepository-1.0.so.1.0.0 [.] g_base_info_unref 0.53% gnome-shell ld-2.28.so [.] _dl_find_dso_for_object 0.49% kswapd0 [kernel.kallsyms] [k] vma_interval_tree_iter_next 0.48% gnome-shell libpthread-2.28.so [.] pthread_getspecific 0.47% gnome-shell libgirepository-1.0.so.1.0.0 [.] 0x0000000000013b1d 0.45% gnome-shell libglib-2.0.so.0.5600.4 [.] g_slice_free1 0.45% gnome-shell libgobject-2.0.so.0.5600.4 [.] g_type_check_instance_is_fundamentally_a 0.44% gnome-shell libc-2.28.so [.] malloc 0.41% swapper [kernel.kallsyms] [k] apic_timer_interrupt 0.40% gnome-shell ld-2.28.so [.] _dl_lookup_symbol_x 0.39% kswapd0 [kernel.kallsyms] [k] raw_callee_save___pv_queued_spin_unlock
関連情報
-
man ページの
perf-report(1)
第24章 perf を使用した uprobe の作成
24.1. perf を使用した関数レベルでのプローブの作成
perf
ツールを使用すると、プロセスまたはアプリケーション内の任意の点に動的なトレースポイントを作成できます。その後、このトレースポイントを perf stat
や perf record
などの他の perf
ツールと併用すると、プロセスやアプリケーションの動作をよりよく理解できるようになります。
前提条件
-
perf のインストール で説明されているように、
perf
ユーザー領域ツールがインストールされている。
手順
プロセスまたはアプリケーション内の対象の場所で、監視対象のプロセスまたはアプリケーションに uprobe を作成します。
# perf probe -x /path/to/executable -a function Added new event: probe_executable:function (on function in /path/to/executable) You can now use it in all perf tools, such as: perf record -e probe_executable:function -aR sleep 1
関連情報
-
man ページの
perf-probe
- perf によるパフォーマンスプロファイルの記録および分析
- perf stat を使用したプロセス実行中のイベントのカウント
24.2. perf を使用した関数内の行でのアップローブの作成
その後、このトレースポイントを perf stat
や perf record
などの他の perf
ツールと併用すると、プロセスやアプリケーションの動作をよりよく理解できるようになります。
前提条件
-
perf のインストール で説明されているように、
perf
ユーザー領域ツールがインストールされている。 実行ファイルのデバッグシンボルを取得している。
# objdump -t ./your_executable | head
注記これを行うには、実行ファイルの
debuginfo
パッケージをインストールする必要があります。または、実行ファイルがローカルで開発したアプリケーションの場合は、デバッグ情報 (GCC の-g
オプション) を使用してアプリケーションをコンパイルする必要があります。
手順
プローブを配置できる関数行を表示します。
$ perf probe -x ./your_executable -L main
このコマンドの出力は、以下のようになります。
<main@/home/user/my_executable:0> 0 int main(int argc, const char **argv) 1 { int err; const char *cmd; char sbuf[STRERR_BUFSIZE]; /* libsubcmd init */ 7 exec_cmd_init("perf", PREFIX, PERF_EXEC_PATH, EXEC_PATH_ENVIRONMENT); 8 pager_init(PERF_PAGER_ENVIRONMENT);
目的の関数行の uprobe を作成します。
# perf probe -x ./my_executable main:8 Added new event: probe_my_executable:main_L8 (on main:8 in /home/user/my_executable) You can now use it in all perf tools, such as: perf record -e probe_my_executable:main_L8 -aR sleep 1
24.3. uprobe に記録されたデータのスクリプト出力を実行する
uprobe を使用して収集したデータを分析する一般的な方法は、perf script
コマンドを使用して perf.data
ファイルを読み込み、記録されたワークロードの詳細なトレースを表示することです。
perf スクリプトの出力例では、* my_prog * と呼ばれるプログラムの関数 isprime() に uprobe が追加されます。a は、uprobe に追加された関数の引数です。または、a を、uprobe を追加するコードスコープで表示される任意の変数にすることもできます。
# perf script my_prog 1367 [007] 10802159.906593: probe_my_prog:isprime: (400551) a=2 my_prog 1367 [007] 10802159.906623: probe_my_prog:isprime: (400551) a=3 my_prog 1367 [007] 10802159.906625: probe_my_prog:isprime: (400551) a=4 my_prog 1367 [007] 10802159.906627: probe_my_prog:isprime: (400551) a=5 my_prog 1367 [007] 10802159.906629: probe_my_prog:isprime: (400551) a=6 my_prog 1367 [007] 10802159.906631: probe_my_prog:isprime: (400551) a=7 my_prog 1367 [007] 10802159.906633: probe_my_prog:isprime: (400551) a=13 my_prog 1367 [007] 10802159.906635: probe_my_prog:isprime: (400551) a=17 my_prog 1367 [007] 10802159.906637: probe_my_prog:isprime: (400551) a=19
第25章 perf mem によるメモリーアクセスのプロファイリング
perf mem
コマンドを使用して、システム上でメモリーアクセスのサンプリングを行うことができます。
25.1. perf mem の目的
perf
ツールの mem
サブコマンドは、メモリーアクセスのサンプリング (読み込みおよ格納) を可能にします。perf mem
コマンドは、メモリーのレイテンシーに関する情報、メモリーアクセスの種類、キャッシュヒットおよびミスを引き起こした機能、データシンボルの記録、これらのヒットおよびミスが発生するメモリーの場所に関する情報を提供します。
25.2. perf mem によるメモリーアクセスのサンプリング
この手順では、perf mem
コマンドを使用して、システム上でメモリーアクセスのサンプリングを行う方法を説明します。このコマンドは、perf record
および perf report
と同じオプションと、mem
サブコマンドに制限される一部のオプションをすべて取ります。記録されたデータは、後で分析するために、現在のディレクトリーの perf.data
ファイルに保存されます。
前提条件
-
perf のインストール で説明されているように、
perf
ユーザー領域ツールがインストールされている。
手順
メモリーアクセスの例:
# perf mem record -a sleep seconds
この例では、
sleep
コマンドで指示されるように、秒単位の期間にわたる、すべての CPU でのメモリーアクセスを例に挙げています。sleep
コマンドは、メモリーアクセスデータをサンプルしたいコマンドに置き換えることができます。デフォルトでは、perf mem
は、メモリーロードおよびストアの両方をサンプルします。-t
オプションを使用して、perf mem
とrecord
間に load または store のいずれかを指定します。ロードすると、メモリー階層レベルに関する情報、TLB メモリーアクセス、バススヌーピング、およびメモリーロックがキャプチャーされます。分析用に
perf.data
ファイルを開きます。# perf mem report
上記のコマンド例を使用すると、以下のような出力になります。
Available samples 35k cpu/mem-loads,ldlat=30/P 54k cpu/mem-stores/P
cpu/mem-loads,ldlat=30/P
の行は、メモリーロードで収集されるデータを示し、cpu/mem-stores/P
の行はメモリーストアで収集されるデータを示します。対象のカテゴリーを強調表示し、Enter を押してデータを表示します。Samples: 35K of event 'cpu/mem-loads,ldlat=30/P', Event count (approx.): 4067062 Overhead Samples Local Weight Memory access Symbol Shared Object Data Symbol Data Object Snoop TLB access Locked 0.07% 29 98 L1 or L1 hit [.] 0x000000000000a255 libspeexdsp.so.1.5.0 [.] 0x00007f697a3cd0f0 anon None L1 or L2 hit No 0.06% 26 97 L1 or L1 hit [.] 0x000000000000a255 libspeexdsp.so.1.5.0 [.] 0x00007f697a3cd0f0 anon None L1 or L2 hit No 0.06% 25 96 L1 or L1 hit [.] 0x000000000000a255 libspeexdsp.so.1.5.0 [.] 0x00007f697a3cd0f0 anon None L1 or L2 hit No 0.06% 1 2325 Uncached or N/A hit [k] pci_azx_readl [kernel.kallsyms] [k] 0xffffb092c06e9084 [kernel.kallsyms] None L1 or L2 hit No 0.06% 1 2247 Uncached or N/A hit [k] pci_azx_readl [kernel.kallsyms] [k] 0xffffb092c06e8164 [kernel.kallsyms] None L1 or L2 hit No 0.05% 1 2166 L1 or L1 hit [.] 0x00000000038140d6 libxul.so [.] 0x00007ffd7b84b4a8 [stack] None L1 or L2 hit No 0.05% 1 2117 Uncached or N/A hit [k] check_for_unclaimed_mmio [kernel.kallsyms] [k] 0xffffb092c1842300 [kernel.kallsyms] None L1 or L2 hit No 0.05% 22 95 L1 or L1 hit [.] 0x000000000000a255 libspeexdsp.so.1.5.0 [.] 0x00007f697a3cd0f0 anon None L1 or L2 hit No 0.05% 1 1898 L1 or L1 hit [.] 0x0000000002a30e07 libxul.so [.] 0x00007f610422e0e0 anon None L1 or L2 hit No 0.05% 1 1878 Uncached or N/A hit [k] pci_azx_readl [kernel.kallsyms] [k] 0xffffb092c06e8164 [kernel.kallsyms] None L2 miss No 0.04% 18 94 L1 or L1 hit [.] 0x000000000000a255 libspeexdsp.so.1.5.0 [.] 0x00007f697a3cd0f0 anon None L1 or L2 hit No 0.04% 1 1593 Local RAM or RAM hit [.] 0x00000000026f907d libxul.so [.] 0x00007f3336d50a80 anon Hit L2 miss No 0.03% 1 1399 L1 or L1 hit [.] 0x00000000037cb5f1 libxul.so [.] 0x00007fbe81ef5d78 libxul.so None L1 or L2 hit No 0.03% 1 1229 LFB or LFB hit [.] 0x0000000002962aad libxul.so [.] 0x00007fb6f1be2b28 anon None L2 miss No 0.03% 1 1202 LFB or LFB hit [.] __pthread_mutex_lock libpthread-2.29.so [.] 0x00007fb75583ef20 anon None L1 or L2 hit No 0.03% 1 1193 Uncached or N/A hit [k] pci_azx_readl [kernel.kallsyms] [k] 0xffffb092c06e9164 [kernel.kallsyms] None L2 miss No 0.03% 1 1191 L1 or L1 hit [k] azx_get_delay_from_lpib [kernel.kallsyms] [k] 0xffffb092ca7efcf0 [kernel.kallsyms] None L1 or L2 hit No
データを表示するときに、結果をソートして、対象の異なる側面を調査できます。たとえば、サンプリング期間中に発生したメモリーアクセスの種類ごとに、主な原因となるオーバーヘッドの降順で、メモリー負荷でデータを分類するには、以下を行います。
# perf mem -t load report --sort=mem
たとえば、以下のような出力になります。
Samples: 35K of event 'cpu/mem-loads,ldlat=30/P', Event count (approx.): 40670 Overhead Samples Memory access 31.53% 9725 LFB or LFB hit 29.70% 12201 L1 or L1 hit 23.03% 9725 L3 or L3 hit 12.91% 2316 Local RAM or RAM hit 2.37% 743 L2 or L2 hit 0.34% 9 Uncached or N/A hit 0.10% 69 I/O or N/A hit 0.02% 825 L3 miss
関連情報
-
man ページの
perf-mem(1)
25.3. perf nen 出力の解釈
修飾子を指定せずに perf mem report
コマンドを実行すると表示される表では、データを複数のコラムに分類します。
- Overhead 列
- その特定の機能で収集された全体のサンプルのパーセンテージを示します。
- Samples 列
- その行でアカウントを指定したサンプル数を表示します。
- Local Weight の列
- プロセッサーのコアサイクルでアクセスレイテンシーを表示します。
- Memory Access の列
- 発生したメモリーアクセスのタイプを表示します。
- Symbol 列
- 関数名またはシンボルを表示します。
- Shared Object 列
- サンプルの送信元である ELF イメージの名前を表示します (サンプルがカーネルからのものである場合に [kernel.kallsyms] という名前が使用されます)。
- Data Symbol の列
- 行がターゲットとしていたメモリーの場所のアドレスを表示します。
多くの場合、アクセスされるメモリーまたはスタックメモリーの動的割り当てにより、Data Symbol の列は raw アドレスを表示します。
- Snoop の列
- バストランザクションを表示します。
- TLB アクセスの列
- TLB メモリーアクセスを表示します。
- Locked の列
- 関数がメモリーがロックされたか否かを示します。
デフォルトモードでは、関数は、オーバーヘッドの最も高いものが最初に表示される順に降順でソートされます。
第26章 偽共有の検出
偽共有は、対称型マルチプロセッシング (SMP) システムのプロセッサーコアが、プロセッサー間で共有されていない他のデータアイテムにアクセスするために、他のプロセッサーによって使用されている同じキャッシュラインのデータアイテムを変更すると発生します。
この初期修正では、キャッシュラインを使用する他のプロセッサーがコピーを無効にし、変更されたデータアイテムの更新バージョンをプロセッサーが必要としないにもかかわらず、または必然的にアクセスできる場合でも、更新されたコピーを要求する必要があります。
perf c2c
コマンドを使用して、偽共有を検出できます。
26.1. perf c2c の目的
perf
ツールの c2c
サブコマンドは、Shared Data Cache-to-Cache (C2C) 分析を有効にします。perf c2c
コマンドを使用して、キャッシュライン競合を検査し、true と false の両方の共有を検出できます。
キャッシュラインの競合は、対称型マルチプロセッシング (SMP) システムのプロセッサーコアが、他のプロセッサーによって使用されている同じキャッシュラインにあるデータオブジェクトを修正すると発生します。このキャッシュラインを使用する他のプロセッサーはすべて、コピーを無効にして更新されたものを要求します。これにより、パフォーマンスが低下する可能性があります。
perf c2c
コマンドは、以下の情報を提供します。
- 競合が検出されたキャッシュライン
- データの読み取りおよび書き込みのプロセス
- 競合の原因となった命令
- 競合に関連する NUMA (Non-Uniform Memory Access) ノード
26.2. perf c2c でキャッシュライン競合の検出
perf c2c
コマンドを使用して、システム内のキャッシュライン競合を検出します。
perf c2c
コマンドは、perf record
と同じオプションと、c2c
サブコマンドに排他的なオプションに対応します。記録されたデータは、後で分析するために、現在のディレクトリーの perf.data
ファイルに保存されます。
前提条件
-
perf
ユーザー空間ツールがインストールされている。詳細は perf のインストール を参照してください。
手順
perf c2c
を使用してキャッシュラインの競合を検出します。# perf c2c record -a sleep seconds
この例では、
sleep
コマンドによって指示される期間 (seconds
) に対し、すべての CPU でキャッシュライン競合データをサンプルおよび記録します。sleep
コマンドは、キャッシュライン競合データを収集するコマンドに置き換えることができます。
関連情報
-
perf-c2c(1)
の man ページ
26.3. perf c2c レコードで記録された perf.data ファイルの可視化
この手順では、perf c2c
コマンドを使用して記録された perf.data
ファイルを視覚化する方法を説明します。
前提条件
-
perf
ユーザー空間ツールがインストールされている。詳細は、perf のインストール を参照してください。 -
perf c2c
コマンドを使用して記録されたperf.data
ファイルは、現在のディレクトリーで利用できます。詳細は、perf c2c でキャッシュライン競合の検出 を参照してください。
手順
perf.data
ファイルを開いて詳細な分析を行います。# perf c2c report --stdio
このコマンドは、
perf.data
ファイルを端末内の複数のグラフに可視化します。================================================= Trace Event Information ================================================= Total records : 329219 Locked Load/Store Operations : 14654 Load Operations : 69679 Loads - uncacheable : 0 Loads - IO : 0 Loads - Miss : 3972 Loads - no mapping : 0 Load Fill Buffer Hit : 11958 Load L1D hit : 17235 Load L2D hit : 21 Load LLC hit : 14219 Load Local HITM : 3402 Load Remote HITM : 12757 Load Remote HIT : 5295 Load Local DRAM : 976 Load Remote DRAM : 3246 Load MESI State Exclusive : 4222 Load MESI State Shared : 0 Load LLC Misses : 22274 LLC Misses to Local DRAM : 4.4% LLC Misses to Remote DRAM : 14.6% LLC Misses to Remote cache (HIT) : 23.8% LLC Misses to Remote cache (HITM) : 57.3% Store Operations : 259539 Store - uncacheable : 0 Store - no mapping : 11 Store L1D Hit : 256696 Store L1D Miss : 2832 No Page Map Rejects : 2376 Unable to parse data source : 1 ================================================= Global Shared Cache Line Event Information ================================================= Total Shared Cache Lines : 55 Load HITs on shared lines : 55454 Fill Buffer Hits on shared lines : 10635 L1D hits on shared lines : 16415 L2D hits on shared lines : 0 LLC hits on shared lines : 8501 Locked Access on shared lines : 14351 Store HITs on shared lines : 109953 Store L1D hits on shared lines : 109449 Total Merged records : 126112 ================================================= c2c details ================================================= Events : cpu/mem-loads,ldlat=30/P : cpu/mem-stores/P Cachelines sort on : Remote HITMs Cacheline data groupping : offset,pid,iaddr ================================================= Shared Data Cache Line Table ================================================= # # Total Rmt ----- LLC Load Hitm ----- ---- Store Reference ---- --- Load Dram ---- LLC Total ----- Core Load Hit ----- -- LLC Load Hit -- # Index Cacheline records Hitm Total Lcl Rmt Total L1Hit L1Miss Lcl Rmt Ld Miss Loads FB L1 L2 Llc Rmt # ..... .................. ....... ....... ....... ....... ....... ....... ....... ....... ........ ........ ....... ....... ....... ....... ....... ........ ........ # 0 0x602180 149904 77.09% 12103 2269 9834 109504 109036 468 727 2657 13747 40400 5355 16154 0 2875 529 1 0x602100 12128 22.20% 3951 1119 2832 0 0 0 65 200 3749 12128 5096 108 0 2056 652 2 0xffff883ffb6a7e80 260 0.09% 15 3 12 161 161 0 1 1 15 99 25 50 0 6 1 3 0xffffffff81aec000 157 0.07% 9 0 9 1 0 1 0 7 20 156 50 59 0 27 4 4 0xffffffff81e3f540 179 0.06% 9 1 8 117 97 20 0 10 25 62 11 1 0 24 7 ================================================= Shared Cache Line Distribution Pareto ================================================= # # ----- HITM ----- -- Store Refs -- Data address ---------- cycles ---------- cpu Shared # Num Rmt Lcl L1 Hit L1 Miss Offset Pid Code address rmt hitm lcl hitm load cnt Symbol Object Source:Line Node{cpu list} # ..... ....... ....... ....... ....... .................. ....... .................. ........ ........ ........ ........ ................... .................... ........................... .... # ------------------------------------------------------------- 0 9834 2269 109036 468 0x602180 ------------------------------------------------------------- 65.51% 55.88% 75.20% 0.00% 0x0 14604 0x400b4f 27161 26039 26017 9 [.] read_write_func no_false_sharing.exe false_sharing_example.c:144 0{0-1,4} 1{24-25,120} 2{48,54} 3{169} 0.41% 0.35% 0.00% 0.00% 0x0 14604 0x400b56 18088 12601 26671 9 [.] read_write_func no_false_sharing.exe false_sharing_example.c:145 0{0-1,4} 1{24-25,120} 2{48,54} 3{169} 0.00% 0.00% 24.80% 100.00% 0x0 14604 0x400b61 0 0 0 9 [.] read_write_func no_false_sharing.exe false_sharing_example.c:145 0{0-1,4} 1{24-25,120} 2{48,54} 3{169} 7.50% 9.92% 0.00% 0.00% 0x20 14604 0x400ba7 2470 1729 1897 2 [.] read_write_func no_false_sharing.exe false_sharing_example.c:154 1{122} 2{144} 17.61% 20.89% 0.00% 0.00% 0x28 14604 0x400bc1 2294 1575 1649 2 [.] read_write_func no_false_sharing.exe false_sharing_example.c:158 2{53} 3{170} 8.97% 12.96% 0.00% 0.00% 0x30 14604 0x400bdb 2325 1897 1828 2 [.] read_write_func no_false_sharing.exe false_sharing_example.c:162 0{96} 3{171} ------------------------------------------------------------- 1 2832 1119 0 0 0x602100 ------------------------------------------------------------- 29.13% 36.19% 0.00% 0.00% 0x20 14604 0x400bb3 1964 1230 1788 2 [.] read_write_func no_false_sharing.exe false_sharing_example.c:155 1{122} 2{144} 43.68% 34.41% 0.00% 0.00% 0x28 14604 0x400bcd 2274 1566 1793 2 [.] read_write_func no_false_sharing.exe false_sharing_example.c:159 2{53} 3{170} 27.19% 29.40% 0.00% 0.00% 0x30 14604 0x400be7 2045 1247 2011 2 [.] read_write_func no_false_sharing.exe false_sharing_example.c:163 0{96} 3{171}
26.4. perf c2c 出力の解釈
perf c2c report --stdio
コマンドを実行して表示される視覚化は、データを複数のテーブルに分類します。
Trace Events Information
-
この表は、
perf c2c record
コマンドで収集された負荷およびストアサンプルの大まかな概要を示しています。 Global Shared Cache Line Event Information
- この表は、共有キャッシュラインに関する統計を提供します。
c2c Details
-
この表は、サンプルされたイベントと、
perf c2c report
データを視覚化で編成する方法についての情報を提供します。 Shared Data Cache Line Table
- この表は、デフォルトでキャッシュラインごとに検出されるリモート Hitm の量によって、偽共有が検出され、降順に並び替えられるホットテストキャッシュラインの 1 行の概要を提供します。
Shared Cache Line Distribution Pareto
以下の表には、競合が発生している各キャッシュラインに関するさまざまな情報が記載されています。
-
キャッシュラインは NUM 列で番号
0
から始まる番号です。 - 各キャッシュラインの仮想アドレスは Data address Offset の列に含まれます。また、その後に異なるアクセスが発生したキャッシュラインにオフセットが続きます。
- Pid 列にはプロセス ID が含まれます。
- Code Address 列には、インストラクションポインターコードアドレスが含まれます。
- cycles ラベル下の列には、平均負荷のレイテンシーが表示されます。
- cpu cnt 列には、生成された CPU の各種サンプルの数を表示します (特定の場所でインデックス化したデータを待つさまざまな CPU の数)。
- Symbol 列には関数名またはシンボルが表示されます。
-
Shared Object 列は、サンプルの送信元である ELF イメージの名前を表示します (サンプルがカーネルからの場合は [
kernel.kallsyms
] という名前が使用されます)。 - Source:Line 列には、ソースファイルと行番号が表示されます。
- Node{cpu list} 列には、各ノードに対して、どの特定の CPU サンプルが生成されたかが表示されます。
-
キャッシュラインは NUM 列で番号
26.5. perf c2c を使用した偽共有の検出
この手順では、perf c2c
コマンドを使用して偽共有を検出する方法を説明します。
前提条件
-
perf
ユーザー空間ツールがインストールされている。詳細は perf のインストール を参照してください。 -
perf c2c
コマンドを使用して記録されたperf.data
ファイルは、現在のディレクトリーで利用できます。詳細は、perf c2c でキャッシュライン競合の検出 を参照してください。
手順
perf.data
ファイルを開いて詳細な分析を行います。# perf c2c report --stdio
これにより、端末で
perf.data
ファイルが開きます。Trace Event Information テーブルで、LLC Misses to Remote Cache (HITM)の値が含まれる行を見つけます。
LLC Misses to Remote Cache (HITM) の行の値コラムの割合は、変更したキャッシュラインの NUMA ノード全体で発生していた LLC ミスの割合を表し、偽共有が発生したことを示す主要な指標です。
================================================= Trace Event Information ================================================= Total records : 329219 Locked Load/Store Operations : 14654 Load Operations : 69679 Loads - uncacheable : 0 Loads - IO : 0 Loads - Miss : 3972 Loads - no mapping : 0 Load Fill Buffer Hit : 11958 Load L1D hit : 17235 Load L2D hit : 21 Load LLC hit : 14219 Load Local HITM : 3402 Load Remote HITM : 12757 Load Remote HIT : 5295 Load Local DRAM : 976 Load Remote DRAM : 3246 Load MESI State Exclusive : 4222 Load MESI State Shared : 0 Load LLC Misses : 22274 LLC Misses to Local DRAM : 4.4% LLC Misses to Remote DRAM : 14.6% LLC Misses to Remote cache (HIT) : 23.8% LLC Misses to Remote cache (HITM) : 57.3% Store Operations : 259539 Store - uncacheable : 0 Store - no mapping : 11 Store L1D Hit : 256696 Store L1D Miss : 2832 No Page Map Rejects : 2376 Unable to parse data source : 1
Shared Data Cache Line Table の LLC Load Hitm フィールドの Rmt 列を確認します。
================================================= Shared Data Cache Line Table ================================================= # # Total Rmt ----- LLC Load Hitm ----- ---- Store Reference ---- --- Load Dram ---- LLC Total ----- Core Load Hit ----- -- LLC Load Hit -- # Index Cacheline records Hitm Total Lcl Rmt Total L1Hit L1Miss Lcl Rmt Ld Miss Loads FB L1 L2 Llc Rmt # ..... .................. ....... ....... ....... ....... ....... ....... ....... ....... ........ ........ ....... ....... ....... ....... ....... ........ ........ # 0 0x602180 149904 77.09% 12103 2269 9834 109504 109036 468 727 2657 13747 40400 5355 16154 0 2875 529 1 0x602100 12128 22.20% 3951 1119 2832 0 0 0 65 200 3749 12128 5096 108 0 2056 652 2 0xffff883ffb6a7e80 260 0.09% 15 3 12 161 161 0 1 1 15 99 25 50 0 6 1 3 0xffffffff81aec000 157 0.07% 9 0 9 1 0 1 0 7 20 156 50 59 0 27 4 4 0xffffffff81e3f540 179 0.06% 9 1 8 117 97 20 0 10 25 62 11 1 0 24 7
この表は、キャッシュ行ごとに検出されるリモート Hitm の量によって降順で並び替えられます。LLC Load Hitm セクションの Rmt 列の数値が大きい場合は、偽共有を示しており、偽共有アクティビティーをデバッグするには、それが発生したキャッシュラインをさらに検査する必要があります。
第27章 flamegraphs の使用
システム管理者は、flamegraphs
を使用して、perf
ツールで記録されたシステムパフォーマンスデータの視覚化を作成できます。ソフトウェア開発者は、flamegraphs
を使用して、perf
ツールで記録されたアプリケーションパフォーマンスデータの視覚化を作成できます。
スタックトレースのサンプリングは、perf
ツールを使用して CPU パフォーマンスをプロファイリングするための一般的な方法です。ただし、perf
を使用したプロファイリングスタックトレースの結果は、極めて詳細にわたるので、分析の工数がかなりかかる可能性があります。flamegraphs
は、perf
で記録されたデータから作成された視覚化で、より早く、簡単にホットコードパスを特定できるようにします。
27.1. flamegraphs のインストール
flamegraphs
の使用を開始するには、必要なパッケージをインストールします。
手順
flamegraphs
パッケージをインストールします。# yum install js-d3-flame-graph
27.2. システム全体でのフレームグラフの作成
この手順では、flamegraphs
を使用して、システム全体で記録されたパフォーマンスデータを視覚化する方法を説明します。
前提条件
-
flamegraphs
が、flamegraphs のインストール の説明どおりにインストールされている。 -
perf
ツールが perf のインストール の説明どおりにインストールされている。
手順
データを記録し、視覚化を作成します。
# perf script flamegraph -a -F 99 sleep 60
このコマンドは、
sleep
コマンドを使用して調整されるように、60 秒にわたりシステム全体でパフォーマンスデータをサンプルおよび記録し、現在のアクティブなディレクトリーにflamegraph.html
として保存される視覚化を構築します。このコマンドは、デフォルトで呼び出しグラフデータをサンプルし、perf
ツールと同じ引数を取ります。この例では、以下のようになります。-a
- システム全体でデータを記録するように調整します。
-F
- 1 秒あたりのサンプリング頻度を設定します。
検証手順
分析するには、生成された視覚化を表示します。
# xdg-open flamegraph.html
このコマンドにより、デフォルトのブラウザーで視覚化が開きます。
27.3. 特定プロセスにおけるフレームグラフの作成
flamegraphs
を使用して、特定の実行中のプロセスで記録されたパフォーマンスデータを視覚化できます。
前提条件
-
flamegraphs
が、flamegraphs のインストール の説明どおりにインストールされている。 -
perf
ツールが