システムの状態とパフォーマンスの監視と管理
システムのスループット、レイテンシー、および電力消費の最適化
概要
Red Hat ドキュメントへのフィードバック (英語のみ) リンクのコピーリンクがクリップボードにコピーされました!
Red Hat ドキュメントに関するご意見やご感想をお寄せください。また、改善点があればお知らせください。
Jira からのフィードバック送信 (アカウントが必要)
- Jira の Web サイトにログインします。
- 上部のナビゲーションバーで Create をクリックします。
- Summary フィールドにわかりやすいタイトルを入力します。
- Description フィールドに、ドキュメントの改善に関するご意見を記入してください。ドキュメントの該当部分へのリンクも追加してください。
- ダイアログの下部にある Create をクリックします。
第1章 パフォーマンス監視オプションの概要 リンクのコピーリンクがクリップボードにコピーされました!
Red Hat Enterprise Linux システムのパフォーマンスを監視および最適化するには、次のツールを使用できます。
- Performance Co-Pilot (pcp) は、システムレベルのパフォーマンス測定を監視、視覚化、保存、分析するためのツール群です。リアルタイムデータの監視と管理、および履歴データのロギングと取得が可能になります。
RHEL は、ランレベル 5 以外のシステムを監視するためのコマンドラインツールをいくつか備えています。組み込みのコマンドラインツールは次のとおりです。
procps-ngパッケージは次のユーティリティーを提供します。-
topユーティリティーは、実行中のシステム内のプロセスを動的に表示します。システムの概要や Linux カーネルが現在管理しているタスクのリストなど、さまざまな情報が表示されます。 -
psユーティリティーは、選択したアクティブなプロセスグループのスナップショットを取得します。デフォルトでは、検査されるグループは、現在のユーザーが所有し、psコマンドが実行されるターミナルに関連付けられているプロセスに制限されます。 -
仮想メモリー統計 (
vmstat) ユーティリティーは、システム内のプロセス、メモリー、ページング、ブロック入出力、割り込み、CPU アクティビティーの即時レポートを提供します。
-
-
sysstatパッケージは、現在の日付のシステムアクティビティーに関する情報を収集して報告するシステムアクティビティーレポーター (sar) ユーティリティーを提供します。
-
perfは、ハードウェアパフォーマンスカウンターとカーネルトレースポイントを使用して、システム上の他のコマンドやアプリケーションの影響を追跡します。 -
bcc-toolsは、Berkeley Packet Filter (BPF) Compiler Collection (BCC) をベースに構築されたパフォーマンス分析ユーティリティー群です。カーネルアクティビティーを監視する 100 を超える Extended BPF (eBPF) スクリプトを提供します。各ツールの詳細は、ツールの使用方法と、ツールが実行する機能を説明する man ページを参照してください。 -
kernel-toolsパッケージは、Intel 64 プロセッサーのプロセッサートポロジー、周波数、アイドル電力状態の統計情報、温度、電力使用量を報告するturbostatユーティリティーを提供します。 -
sysstatパッケージは、システムの I/O デバイスの負荷を監視および報告するiostatユーティリティーを提供します。これは、物理ディスク間の I/O 負荷を分散する方法を管理者が決定する際に役立ちます。 -
irqbalanceユーティリティーは、ハードウェア割り込みをプロセッサー全体に分散して、システムパフォーマンスを向上させます。 -
numactlパッケージは、numastatユーティリティーを提供します。デフォルトでは、numastatは、カーネルメモリーアロケーターからの Non-Uniform Memory Access (NUMA) ヒットおよびミスに関するシステム統計情報をノードごとに表示します。numa_hit値が高く、numa_miss値が低い場合、パフォーマンスが最適であると言えます。 -
numadは NUMA アフィニティーの自動管理デーモンです。NUMA リソースの割り当て、管理、システムのパフォーマンスを動的に改善するシステム内の NUMA トポロジーとリソースの使用状況を監視します。 -
SystemTapは、カーネルとユーザー空間用のプログラム可能なトレース/プローブ/デバッグシステムであり、多くの簡単なスクリプトが含まれています。 -
valgrindは、計装されていないユーザー空間プログラムを監視下で実行し、メモリーのエラー、割り当ての統計情報、同時実行の違反を検出します。 -
intel-cmt-catパッケージは、最新の Intel プロセッサー上の CPU キャッシュとメモリー帯域幅を監視および制御するためのpqosユーティリティーを提供します。
第2章 TuneD によるシステムパフォーマンスの最適化 リンクのコピーリンクがクリップボードにコピーされました!
TuneD は、定義済みまたはカスタムのプロファイルを使用してシステムのパフォーマンスと電力消費を最適化するように設計されたシステムチューニングサービスです。高スループット、低レイテンシー、省電力など、さまざまなワークロードに適した定義済みプロファイルが含まれています。
2.1. RHEL とともに配布される TuneD プロファイル リンクのコピーリンクがクリップボードにコピーされました!
インストール中に、TuneD はシステムタイプに基づき最適なプロファイルを自動的に選択します。たとえば、コンピュートノードには throughput-performance が選択され、仮想マシンには virtual-guest が選択され、一般的なシステムには balanced が選択され、環境に最適なパフォーマンスが確保されます。プロファイルは主に次の 2 つのカテゴリーに分けられます。
- パフォーマンスへの影響を最小限に抑えながら消費電力を削減する省電力プロファイル
- システムリソースを最適化して速度と応答性を向上させるパフォーマンス強化プロファイル
以下は、システム負荷に基づき選択できる、RHEL で配布されるプロファイルのリストです。
balanced- パフォーマンスと電力消費のバランスをとるための、デフォルトの省電力プロファイルです。可能な限り、自動スケーリングと自動チューニングを使用します。
powersave最大限の省電力パフォーマンスを実現するプロファイルであり、パフォーマンスを調整して実際の電力消費を最小限に抑えることができます。USB 自動サスペンド、Wi-Fi 省電力、SATA ホストアダプターのアグレッシブリンク電源管理 (ALPM) の省電力を有効にし、ウェイクアップレートが低いシステムのマルチコア省電力をスケジューリングし、
ondemandガバナーをアクティブ化します。さらに、AC97 音声省電力と、システムに応じて HDA-Intel 省電力 (10 秒のタイムアウト) が有効になります。KMS が有効なサポート対象の Radeon グラフィックカードがシステムに搭載されている場合、このプロファイルによってシステムが自動省電力に設定されます。このプロファイルは、energy_performance_preference属性をpowersaveまたはpower energy設定に変更します。また、scaling_governorポリシー属性をondemandまたはpowersaveCPU ガバナーのいずれかに変更します。注記場合によっては、powersave よりも balanced プロファイルの方が効率的です。ビデオトランスコーディングなどのタスクでは、フルパワーで実行するとジョブがより速く完了し、マシンは効率的な省電力モードに早いタイミングで切り替わることができます。マシンのスロットルを調整すると、タスク中の電力は抑制されますが、タスクの継続時間が長くなり、全体的なエネルギー使用量が増加する可能性があります。したがって、balanced プロファイルを選択する方が適切な場合がよくあります。
throughput-performance-
高スループットに最適化されたサーバープロファイル。省電力メカニズムを無効にし、ディスクとネットワーク IO のスループットパフォーマンスを高める
sysctl設定を有効にします。 accelerator-performance-
throughput-performanceプロファイルと同じチューニングが含まれるプロファイル。さらに、CPU を低い C 状態にロックし、レイテンシーが 100us 未満になるようにします。これにより、GPU などの特定のアクセラレーターのパフォーマンスが向上します。 latency-performance-
低レイテンシーに最適化され、省電力メカニズムを無効にし、レイテンシーを改善する
sysctl設定を有効にするサーバープロファイル。CPU ガバナーは performance に設定され、CPU は低い C 状態にロックされます (PM QoS を使用)。 network-latency-
低レイテンシーネットワークチューニング向けプロファイル。これは
latency-performanceプロファイルに基づいています。さらに、transparent huge page と NUMA バランシングを無効にし、他のネットワーク関連の sysctl パラメーターをいくつか調整します。 hpc-compute-
高パフォーマンスコンピューティング向けに最適化されたプロファイル。これは
latency-performanceプロファイルに基づいています。 network-throughput-
スループットネットワークチューニング向けプロファイル。これは
throughput-performanceプロファイルに基づいています。また、カーネルネットワークバッファーが増加されます。 virtual-guest-
throughput-performanceプロファイルに基づく Red Hat Enterprise 仮想マシンおよび VMWare ゲスト向けプロファイル。仮想メモリーのスワップの減少や、ディスクの readahead 値の増加などが行われます。ディスクバリアは無効になりません。 virtual-host-
throughput-performanceプロファイルに基づいて仮想ホスト用に設計されたプロファイル。他のタスクの中でも特に、仮想メモリーのスワップを減らし、ディスクの先読み値を増やし、ダーティーページの書き戻しに対してより積極的な値を有効にします。 oracle-
throughput-performanceプロファイルに基づいて Oracle データベースの負荷に最適化されたプロファイル。さらに、transparent huge page を無効にし、他のパフォーマンス関連のカーネルパラメーターを変更します。このプロファイルは、tuned-profiles-oracle パッケージで利用できます。 desktop-
balancedプロファイルに基づく、デスクトップに最適化されたプロファイル。対話型アプリケーションの応答を向上させるスケジューラーオートグループが有効になります。 optimize-serial-consoleprintk 値を減らすことで、シリアルコンソールへの I/O アクティビティーを調整するプロファイル。これにより、シリアルコンソールの応答性が向上します。このプロファイルは、他のプロファイルのオーバーレイとして使用することが意図されています。以下に例を示します。
# tuned-adm profile throughput-performance optimize-serial-consolemssql-
Microsoft SQL Server に提供されるプロファイル。これは
throughput-performanceプロファイルに基づいています。 intel-sstユーザー定義の Intel Speed Select Technology 設定で最適化されたプロファイル。このプロファイルは、他のプロファイルのオーバーレイとして使用することが意図されています。以下に例を示します。
# tuned-adm profile cpu-partitioning intel-sstawsAWS EC2 インスタンスに最適化されたプロファイル。これは
throughput-performanceプロファイルに基づいています。これらのプロファイルの詳細は、システム上の
tuned-profilesman ページを参照してください。
2.2. RHEL とともに配布されるリアルタイムの TuneD プロファイル リンクのコピーリンクがクリップボードにコピーされました!
RHEL には、リアルタイムカーネルを実行するシステム専用のプロファイルがいくつか付属しています。特殊なカーネルビルドなしでは、システムはリアルタイムになりません。RHEL では、追加のリポジトリーでこのプロファイルを利用できます。
realtime-
ベアメタルのリアルタイムシステムで使用します。これは、RT または NFV リポジトリーから入手できる
tuned-profiles-realtimeパッケージによって提供されます。 realtime-virtual-host-
リアルタイムに設定された仮想ホストで使用します。NFV リポジトリーから利用できる
tuned-profiles-nfv-hostパッケージにより提供されます。 realtime-virtual-guest-
リアルタイムに設定された仮想化ゲストで使用します。NFV リポジトリーから利用できる
tuned-profiles-nfv-guestパッケージにより提供されます。
2.3. TuneD のインストールと有効化 リンクのコピーリンクがクリップボードにコピーされました!
システム管理者は、TuneD デーモンを使用して、さまざまなユースケースに合わせてシステムのパフォーマンスプロファイルを最適化できます。使用を開始するには、TuneD をインストールして有効にする必要があります。
インストール後、/usr/lib/tuned/profiles ディレクトリーにディストリビューション固有のプロファイルが保存されます。各プロファイルは独自のサブディレクトリーに保存されます。プロファイルには、tuned.conf という名前のプロファイル設定ファイルと、オプションでヘルパースクリプトなどのその他のファイルが含まれます。プロファイルをカスタマイズする場合は、カスタムプロファイルに関連するファイルが格納されている /etc/tuned/profiles にプロファイルディレクトリーをコピーします。同じ名前のプロファイルが存在する場合は、/etc/tuned/profiles にあるカスタムプロファイルが優先されます。
前提条件
- 管理者権限がある。
手順
TuneD パッケージをインストールします。
# dnf install tunedTuneD サービスを有効にして起動します。
# systemctl enable --now tunedオプション: リアルタイムシステム用の TuneD プロファイルをインストールします。
リアルタイムシステム用の TuneD プロファイルの場合は、
rhel-10リポジトリーを有効にします。# subscription-manager repos --enable=rhel-10-for-x86_64-nfv-beta-rpms # dnf install tuned-profiles-realtime tuned-profiles-nfv
検証
プロファイルがアクティブで、適用されていることを確認します。
$ tuned-adm active Current active profile: throughput-performance $ tuned-adm verify Verification succeeded, current system settings match the preset profile. See tuned log file ('/var/log/tuned/tuned.log') for details.
2.4. TuneD プロファイルの管理 リンクのコピーリンクがクリップボードにコピーされました!
使用可能なプロファイルのリスト表示、特定のプロファイルの設定、必要に応じた TuneD の無効化など、Red Hat Enterprise Linux システムで TuneD プロファイルを管理できます。プロファイルを適切に管理すると、低レイテンシーのアプリケーションに対して cpu-partitioning プロファイルを使用するなど、特定のワークロードのシステムパフォーマンスが最適化されます。
前提条件
- TuneD をインストールして有効化した。
- 管理者権限がある。
手順
利用可能な定義済みの TuneD プロファイルをすべてリスト表示します。
$ tuned-adm listオプション: 次のコマンドを使用して、TuneD がシステムに最適なプロファイルを推奨するようにします。
# tuned-adm recommend throughput-performanceプロファイルをアクティブ化します。
# tuned-adm profile selected-profileまたは、複数のプロファイルを組み合わせてアクティブ化することもできます。
# tuned-adm profile selected-profile1 selected-profile2使用しているシステムで現在アクティブになっている TuneD プロファイルを表示します。
# tuned-adm active Current active profile: selected-profileすべてのチューニングを一時的に無効にします。
# tuned-adm off The tunings are applied again after the TuneD service restarts.オプション: TuneD サービスを完全に停止して無効にします。
# systemctl disable --now tuned
2.5. プロファイルの継承とプロファイルカスタマイズ変数 リンクのコピーリンクがクリップボードにコピーされました!
TuneD は、新しいプロファイルの作成や既存のプロファイルの変更を効率よく実行するために、プロファイルの継承、変数の使用、およびビルトイン関数をサポートしています。
プリインストールされたプロファイルとカスタムプロファイルは次のディレクトリーにあります。
-
プリインストールされたプロファイル:
/usr/lib/tuned/profiles/に配置されています カスタムプロファイル:
/etc/tuned/profiles/に作成されます- プロファイルの継承
TuneD プロファイルは、[main] セクションの include オプションを使用して他のプロファイルから設定を継承できます。プロファイルの継承とは、子プロファイルが親からすべての設定を継承し、そのうえでカスタム要件に基づき新しいパラメーターをオーバーライドまたは追加できることを意味します。たとえば、balanced プロファイルに基づき、balanced プロファイルで元々設定されている medium_power ではなく min_power に ALPM を追加で設定するプロファイルを作成するには、次のコマンドを使用します。
[main] include=balanced [scsi_host] alpm=min_power- プロファイルをカスタマイズする際の変数の使用
プロファイルをカスタマイズする際に変数を定義できます。変数を使用することで繰り返しの定義を減らすことができ、設定が簡素化されます。プロファイルに
[variables]セクションを作成し、以下を使用することで独自の変数を定義できます。[variables] variable_name=valueプロファイル内の変数の値を展開するには、以下を使用します。
${variable_name}変数を別のファイルに保存し、変数ファイルにファイルパスを追加することで、プロファイルのカスタマイズ時にこれらの変数を使用することもできます。たとえば、別のファイルの変数を考慮する場合は、設定ファイルに次の行を追加できます。
tuned.conf: [variables] include=/etc/tuned/my-variables.conf [bootloader] cmdline=isolcpus=${isolated_cores}my-variable.conf ファイルには、次のように
isolated_cores=1,2が追加されます。
my-variable.conf: isolated_cores=1,2
2.6. プロファイルのカスタマイズに使用するビルトイン関数 リンクのコピーリンクがクリップボードにコピーされました!
TuneD プロファイルのビルトイン関数を使用すると、プロファイルがアクティブ化されたときに実行時に動的に展開できます。TuneD 変数とビルトイン関数を組み合わせて使用することで、プロファイル内の値を動的に変更および処理できます。さらに、カスタム Python 関数をプラグインとして作成および統合することで、カスタム関数を使用して TuneD を拡張できます。
- ビルトイン関数を起動するための構文
${f:function_name:argument_1:argument_2}プロファイルと tuned.conf ファイルが配置されているディレクトリーパスを取得するには、次の構文を必要とする
PROFILE_DIR変数を使用します。${i:PROFILE_DIR}- ビルトイン関数を使用して CPU コアを分離する例
[variables] non_isolated_cores=0,3-5 [bootloader] cmdline=isolcpus=${f:cpulist_invert:${non_isolated_cores}}この例では、
${non_isolated_cores}変数は0,3-5に展開されます。cpulist_invert関数は CPU リストを反転します。6 つの CPU を搭載したシステムでは、0,3-5が1,2に反転され、カーネルはisolcpus=1,2オプションで起動します。
| 関数名 | 説明 |
|---|---|
| assertion | 2 つの引数を比較します。一致しない場合、関数は最初の引数からテキストをログに記録し、プロファイルの読み込みを中止します。 |
| assertion_non_equal | 2 つの引数を比較します。2 つの引数が一致する場合、関数は最初の引数からテキストをログに記録し、プロファイルの読み込みを中止します。 |
| calc_isolated_cores | 分離されたコアを計算して返します。引数は、ハウスキーピング用に予約するソケットあたりのコア数を指定します。指定しない場合は、ソケットごとに 1 つのコアがハウスキーピング用に予約され、残りは分離されます。 |
| check_net_queue_count | ユーザーがネットデバイスのキューの数を指定したかどうかを確認します。指定していない場合、ハウスキーピング CPU の数が返されます。 |
| cpuinfo_check | /proc/cpuinfo に対して正規表現をチェックします。次の形式の引数を受け入れます: REGEX1、STR1、REGEX2、STR2、…[, STR_FALLBACK]。REGEX1 が /proc/cpuinfo 内の何かと一致する場合、それは STR1 に展開されます。REGEX2 が一致する場合、それは STR2 に展開されます。最初の一致で停止します。一致する正規表現がない場合は、STR_FALLBACK に展開されます。フォールバックが指定されていない場合は、空の文字列に展開されます。 |
| cpulist2devs | CPU リストをデバイス文字列に変換します。 |
| cpulist2hex | CPU リストを 16 進数の CPU マスクに変換します。 |
| cpulist2hex_invert | CPU リストを 16 進数の CPU マスクに変換し、反転します。 |
| cpulist_invert | 補完するために CPU のリストを反転します。たとえば、4 つの CPU (0-3) を搭載したシステムでは、リスト 0,2,3 の反転は 1 になります。 |
| cpulist_online | リストからの CPU がオンラインかどうかをチェックします。オンライン CPU のみを含むリストを返します。 |
| cpulist_pack | CPU リストを、1,2,3,5 の形式で 1-3,5 に圧縮します。 |
| cpulist_present | リストに CPU が存在するかどうかを確認します。存在する CPU のみを含むリストを返します。 |
| cpulist_unpack | 1-3,4 形式の CPU リストを、1,2,3,4 に展開します。 |
| exec | プロセスを実行し、その出力を返します。 |
| hex2cpulist | 16 進数の CPU マスクを CPU リストに変換します。 |
| intel_recommended_pstate |
プロセッサーコード名をチェックし、推奨される |
| iscpu_check |
|
| package2cpus | パッケージ (ソケット) の CPU デバイスリストを提供します。 |
| package2uncores | パッケージ (ソケット) の非コアデバイスリストを提供します。 |
| regex_search_ternary |
正規表現を使用した三項演算子。STR1、REGEX、STR2、STR3 の形式の引数を受け取ります。REGEX が STR1 と一致する場合 ( |
| log | 引数の連結を展開し、結果をログに記録します。デバッグに役立ちます。 |
| kb2s | KB をディスクセクターに変換します。 |
| s2kb | ディスクセクターを KB に変換します。 |
| strip | 渡されたすべての引数から文字列を作成し、最初と最後の空白の両方を削除します。 |
| virt_check | TuneD が仮想マシンまたはベアメタルのどちらで実行しているかを確認します。仮想マシン内では、この関数が最初の引数を返します。ベアメタルでは、この関数は、エラーが発生した場合でも 2 番目の引数を返します。 |
2.7. TuneD プラグイン リンクのコピーリンクがクリップボードにコピーされました!
TuneD プロファイルはプラグインを使用して、システム上のさまざまなデバイスを監視または最適化します。TuneD では、以下の 2 つのタイプのプラグインを使用します。
- 監視プラグイン
- CPU 負荷、ディスク I/O、ネットワークトラフィックなどのシステムデータを収集するために使用されます。監視プラグインの出力は、動的チューニング向けチューニングプラグインによって使用できます。監視プラグインは、有効ないずれかのチューニングプラグインでメトリックが必要な場合に必ず自動的にインスタンス化されます。利用可能な監視プラグインは次のとおりです。
disk- デバイスおよび測定間隔ごとのディスク負荷 (IO 操作の数) を取得します。
net- ネットワークカードおよび測定間隔ごとのネットワーク負荷 (転送済みパケットの数) を取得します。
load- CPU および測定間隔ごとの CPU 負荷を取得します。
- チューニングプラグイン
- 各チューニングプラグインにより、個別サブシステムがチューニングされ、TuneD プロファイルから入力される複数のパラメーターが取得されます。各サブシステムには、チューニングプラグインの個別インスタンスで処理される複数のデバイス (複数の CPU やネットワークカードなど) を含めることができます。また、個別デバイスの特定の設定もサポートされます。利用可能なチューニングプラグインは次のとおりです。
acpi-
ACPI ドライバーを設定します。ACPI プラットフォームプロファイル
sysfs属性を設定するには、platform_profileオプションを使用します。これは、他のドライバー用の汎用的なpower/performance設定 API です。複数のプロファイルを|で区切って指定できます。利用可能な最初のプロファイルが選択されます。 audio-
音声コーデックの autosuspend タイムアウトを、timeout オプションで指定した値に設定します。現在、
snd_hda_intelコーデックおよびsnd_ac97_codecコーデックに対応しています。値が 0 の場合は、autosuspend が無効になります。また、ブール値オプション reset_controller をtrueに設定することにより、コントローラーを強制的にリセットすることもできます。 bootloader-
カーネルコマンドラインにオプションを追加します。このプラグインは GRUB ブートローダーのみをサポートします。GRUB 設定ファイルのカスタマイズされた非標準の場所は、
grub2_cfg_fileオプションで指定できます。そのカーネルオプションは、現在の GRUB 設定とそのテンプレートに追加されます。カーネルオプションを有効にするには、システムを再起動する必要があります。 cpu- CPU ガバナーを governor オプションで指定された値に設定し、CPU 負荷に応じて電源管理サービス品質 (PM QoS) CPU ダイレクトメモリーアクセス (DMA) のレイテンシーを動的に変更することで、CPU ガバナーと電源設定を管理します。
disk-
apm、scheduler_quantum、readahead、readahead_multiply、spindownなどのディスク設定を管理します。 eeepc_she- CPU の負荷に応じて、フロントサイドバス (FSB) の速度を動的に設定します。
irq-
個々の割り込み要求 (IRQ) をデバイスとして処理し、それぞれ異なるデバイスまたは IRQ をアドレス指定する複数のプラグインインスタンスを定義できます。プラグインで使用されるデバイス名は
irq<n>です。この場合の<n>は IRQ 番号です。特殊デバイスDEFAULTは、すべての非アクティブな IRQ に適用される/proc/irq/default_smp_affinityに書き込まれる値を制御します。 irqbalance-
irqbalanceの設定を管理します。プラグインは、/etc/sysconfig/irqbalanceで IRQ のバランスを再調整する場合にスキップする必要がある CPU を設定します。その後、以前実行されていた場合にのみ irqbalance を再起動します。 modules-
カスタムカーネルモジュールオプションを適用します。カーネルモジュールにパラメーターを設定して
/etc/modprobe.d/tuned.confファイルを作成できます。構文はmodule=option1=value1 option2=value2…を使用し、この場合のmoduleはモジュール名、optionx=valuexは存在する可能性のあるモジュールオプションです。 mounts- マウントされたファイルシステムのバリアを有効または無効にします。
net- ethtool ユーティリティーと同じ構文を使用して、Wake-on-LAN とインターフェイス速度を設定します。インターフェイスの使用状況に応じて、インターフェイス速度も動的に変更します。
rtentsk- 静的キーの有効化または無効化によって発生するプロセッサー間の割り込みを回避します。オプションはありません。これを追加すると、TuneD はタイムスタンプを有効にした状態でソケットを開放したまま維持するため、静的キーも有効な状態が維持されます。
selinux-
SELinux オプションを調整します。アクセスの許可または拒否など、SELinux の決定がキャッシュされます。このキャッシュは、アクセスベクトルキャッシュ (AVC) として知られています。このように結果がキャッシュされると、確認が必要な量が減るため、SELinux ポリシーのパフォーマンスが向上します。
avc_cache_thresholdオプションを使用すると、AVC エントリーの最大数を調整できます。 systemd-
systemd オプションを調整します。
cpu_affinityオプションを使用すると、/etc/systemd/system.confで CPUAffinity を設定できます。これにより、サービスマネージャーの CPU アフィニティーと、フォークされたすべてのプロセスのデフォルトの CPU アフィニティーが設定されます。コンマ区切りの CPU リストを追加します。必要に応じて、CPU 範囲をマイナス記号 (-) で指定します。 scsi_host-
SCSI ホスト設定を調整します (例:
ALPM)。 scheduler- スケジューリングの優先度、CPU コア分離、プロセスアフィニティー、スレッドアフィニティー、および IRQ アフィニティーを調整するためのさまざまなオプションを提供します。
script- プロファイルのロード時またはアンロード時に、外部スクリプトまたはバイナリーを実行します。
service- プラグインオプションで指定されたさまざまな sysvinit、sysv-rc、openrc、systemd サービスを処理します。サポートされているサービス処理コマンドは、start、stop、enable、disable です。
sysctl-
カーネルパラメーターを変更します。このプラグインは、TuneD で使用可能な他のプラグインでカバーされていないシステム設定を変更する場合にのみ使用してください。構文は、name=value です。この場合の name は、
sysctlユーティリティーが指定した名前と同じです。 sysfs-
プラグインオプションで指定したさまざまな
sysfs設定を設定します。構文は name=value です。この場合の name は、使用するsysfsパスです。 usb-
USB 自動サスペンドのタイムアウトを調整します。値が
0の場合は、autosuspend が無効になります。 uncore-
最大および最小のアンコア周波数を制限します。
max_freq_khzオプションとmin_freq_khzオプションは、Intel アンコア周波数ドライバーによって公開されるsysfsファイルに対応します。値は kHz 単位、または設定可能な範囲のパーセンテージで指定できます。 video-
ビデオカードのさまざまな省電力レベルを設定します。現在、
Radeonカードにのみ対応しています。powersaveレベルは、radeon_powersaveオプションを使用して指定できます。サポートされている値は、default、auto、low、mid、high、dynpm、dpm-battery、dpm-balanced、dpm-perfomance です。 vm-
transparent huge page を有効または無効にします。transparent_hugepages オプションの有効な値は、
always, never, madviseです。
2.8. 新規 TuneD プロファイルの作成 リンクのコピーリンクがクリップボードにコピーされました!
新しい TuneD プロファイルを作成して、パフォーマンス最適化の要件をカスタマイズできます。
前提条件
- TuneD サービスが実行されている。詳細は、TuneD のインストールと有効化 を参照してください。
手順
/etc/tuned/profiles ディレクトリーで、作成するプロファイルと同じ名前の新しいディレクトリー作成します。
# mkdir /etc/tuned/profiles/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-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.
2.9. 既存の TuneD プロファイルの変更 リンクのコピーリンクがクリップボードにコピーされました!
カスタム要件に合わせて既存プロファイルのパラメーターを変更できます。既存の TuneD プロファイルに基づいて変更した子プロファイルを作成できます。
前提条件
- TuneD サービスが実行されている。詳細は、TuneD のインストールと有効化 を参照してください。
手順
/etc/tuned/profilesディレクトリーで、作成するプロファイルと同じ名前の新しいディレクトリー作成します。# mkdir /etc/tuned/profiles/modified-profile新しいディレクトリーに、ファイル
tuned.confを作成し、以下のように [main] セクションを設定します。[main] include=parent-profileparent-profile を、変更するプロファイルの名前に置き換えます (例:
throughput-performance)。プロファイルの変更を含めます。たとえば、
throughput-performanceプロファイルの swappiness を低減するには、次のコマンドを使用して、vm.swappinessの値をデフォルトの10ではなく5に変更します。[main] include=throughput-performance [sysctl] vm.swappiness=5プロファイルをアクティブ化します。
# tuned-adm profile modified-profile
検証
プロファイルがアクティブになり、適用されていることを確認します。
$ tuned-adm active Current active profile: modified-profile $ tuned-adm verify Verification succeeded, current system settings match the preset profile. See tuned log file ('/var/log/tuned/tuned.log') for details.
2.10. TuneD の no-daemon モードを有効にする リンクのコピーリンクがクリップボードにコピーされました!
TuneD は、常駐メモリーを必要としない no-daemon モードで実行できます。このモードでは、TuneD が設定を適用し、終了します。ただし、このモードでは、D-Bus サポート、ホットプラグサポート、設定のロールバック機能など、特定の機能が無効になることに注意してください。
前提条件
- システム設定を変更するためのルート権限または適切な権限を持っている。
手順
次の変更を加えて
/etc/tuned/tuned-main.confファイルを編集します。sudo vi /etc/tuned/tuned-main.conf daemon = 0- ファイルを保存してから閉じます。
tuned サービスを再起動するか、プロファイルを再適用または切り替えます。
# systemctl restart tuned # tuned-adm profile <tuned_profile>tuned のステータスを確認します。
# tuned-adm active It seems that tuned daemon is not running, preset profile is not activated. Preset profile: <tuned_profile>
第3章 ディスクスケジューラーの設定 リンクのコピーリンクがクリップボードにコピーされました!
ディスクスケジューラーは、ストレージデバイスに送信された I/O 要求を順序付けます。スケジューラーは以下の複数の方法で設定できます。
- TuneD を使用したディスクスケジューラーの設定 の説明に従って、TuneD を使用してスケジューラーを設定します。
-
udevルールを使用したディスクスケジューラーの設定 の説明に従って、udevを使用してスケジューラーを設定します。 - 特定のディスクのスケジューラーを一時的に設定する の説明に従って、実行中のシステムのスケジューラーを一時的に変更します。
Red Hat Enterprise Linux では、ブロックデバイスはマルチキュースケジューリングのみをサポートします。これにより、ブロックレイヤーのパフォーマンスを高速ソリッドステートドライブ (SSD) およびマルチコアシステムで適切に拡張できます。
3.1. 利用可能なディスクスケジューラー リンクのコピーリンクがクリップボードにコピーされました!
Red Hat Enterprise Linux では、次のマルチキューディスクスケジューラーがサポートされています。
none- FIFO (First-in First-out) スケジューリングアルゴリズムを実装します。これにより、汎用のブロック層で単純な last-hit キャッシュを介して要求がマージされます。
mq-deadlineリクエストがスケジューラーに到達した時点から、リクエストに対して保証されたレイテンシーを提供するよう試みます。mq-deadline スケジューラーは、キューに追加された I/O リクエストを読み取りまたは書き込みバッチに分類し、論理ブロックアドレス指定 (LBA) の昇順で実行するようにスケジュールします。デフォルトでは、アプリケーションは読み取り I/O 操作でブロックする可能性の方が高いため、読み取りバッチの方が書き込みバッチより優先されます。mq-deadline はバッチを 1 つ処理した後、書き込み操作にどれくらいの期間プロセッサー時間が割り当てられていないかを確認し、次の読み取りまたは書き込みバッチを適切にスケジュールします。
このスケジューラーはほとんどのユースケースに適していますが、必要に応じて特に書き込み動作より読み取り動作の方が頻繁に起こるユースケースに適しています。
bfqデスクトップシステムおよび対話式のタスクを対象とします。
bfqスケジューラーは、単一のアプリケーションがすべての帯域幅を使用しないようにします。これにより、ストレージデバイスがアイドル状態であるかのように常に応答できるようになります。デフォルトの設定では、bfqは、最大スループットを実現するのではなく、レイテンシーを最小限に抑えることに焦点を合わせています。bfqはcfqコードに基づいています。一定のタイムスライスごとにディスクを各プロセスに付与するのではなく、セクター数単位で測定されたバジェットをプロセスに割り当てます。このスケジューラーは大きなファイルをコピーする際に適しており、この場合、システムが応答しなくなることはありません。kyber- スケジューラーは、ブロック I/O レイヤーに送信されたすべての I/O 要求のレイテンシーを計算することで、レイテンシーゴールを達成するために自身を調整します。cache-misses の場合、読み込み/同期書き込みリクエストにターゲットレイテンシーを設定できます。このスケジューラーは、NVMe、SSD などの低レイテンシーデバイスなど、高速なデバイスに適しています。
- デフォルトのディスクスケジューラー
- ブロックデバイスは、別のスケジューラーを指定しない限り、デフォルトのディスクスケジューラーを使用します。
特に Non-Volatile Memory Express (NVMe) ブロックデバイスの場合、デフォルトのスケジューラーは none であり、Red Hat はこれを変更しないことを推奨しています。
カーネルは、デバイスのタイプに基づいてデフォルトのディスクスケジューラーを選択します。自動的に選択されたスケジューラーは、通常、最適な設定です。別のスケジューラーが必要な場合は、udev ルールまたは TuneD アプリケーションを使用して設定してください。選択したデバイスを一致させ、それらのデバイスのスケジューラーのみを切り替えます。
3.2. 各種ユースケースで異なるディスクスケジューラー リンクのコピーリンクがクリップボードにコピーされました!
分析およびチューニング作業の前に、システムで実行されるタスクに応じて、次のディスクスケジューラーをベースラインとして使用してください。
| ユースケース | ディスクスケジューラー |
|---|---|
| SCSI インターフェイスを備えた従来の HDD |
|
| 高速ストレージで高パフォーマンスの SSD または CPU がバインドされたシステム |
特にエンタープライズアプリケーションを実行する場合は |
| デスクトップまたはインタラクティブなタスク |
|
| 仮想ゲスト |
|
3.3. アクティブなディスクスケジューラーの確認 リンクのコピーリンクがクリップボードにコピーされました!
特定のブロックデバイスで現在アクティブなディスクスケジューラーを表示できます。
手順
/sys/block/device/queue/schedulerファイルの内容を読み取ります。# cat /sys/block/device/queue/scheduler [mq-deadline] kyber bfq noneファイル名の device は、ブロックデバイス名に置き換えます (例:
sdc)。アクティブなスケジューラーは、角括弧 ([ ]) にリスト表示されます。
3.4. TuneD を使用したディスクスケジューラーの設定 リンクのコピーリンクがクリップボードにコピーされました!
選択したブロックデバイスに特定のディスクスケジューラーを設定する TuneD プロファイルを作成して有効にできます。この設定は、システムを再起動しても持続します。以下のコマンドと設定では、次の部分を置き換えてください。
-
device をブロックデバイスの名前に置き換えます (例:
sdf)。 - selected-scheduler を、デバイスに設定するディスクスケジューラーに置き換えます (例: bfq)。
前提条件
- TuneD サービスがインストールされ、有効になっている。詳細は、TuneD のインストールと有効化 を参照してください。
手順
- オプション: プロファイルのベースとなる既存の TuneD プロファイルを選択します。利用可能なプロファイルのリストは、RHEL とともに配布される TuneD プロファイル を参照してください。
現在アクティブなプロファイルを確認するには、次のコマンドを実行します。
# tuned-adm activeTuneD プロファイルを保存する新しいディレクトリーを作成します。
# mkdir /etc/tuned/<new-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)
プロファイルを有効にします。
# tuned-adm profile <new-profile>
検証
TuneD プロファイルがアクティブで、適用されていることを確認します。
$ tuned-adm active Current active profile: <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)。アクティブなスケジューラーは、角括弧 (
[]) にリスト表示されます。
3.5. 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
3.6. 特定のディスクのスケジューラーを一時的に設定する リンクのコピーリンクがクリップボードにコピーされました!
特定のブロックデバイスに対して特定のディスクスケジューラーを設定できます。この設定は、システムを再起動すると元に戻ります。
手順
選択したスケジューラーの名前を
/sys/block/device/queue/schedulerファイルに書き込みます。# echo selected-scheduler > /sys/block/device/queue/schedulerファイル名の device は、ブロックデバイス名に置き換えます (例: sdc)。
検証
スケジューラーがデバイスでアクティブになっていることを確認します。
# cat /sys/block/device/queue/scheduler
第4章 PCP の設定 リンクのコピーリンクがクリップボードにコピーされました!
Performance Co-Pilot (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-system-toolsパッケージは、コマンドラインツールとコア機能を提供します。 -
pcp-guiパッケージは、グラフィカルアプリケーション pmchart を提供します。 -
grafana-pcpパッケージは、Grafana を使用した強力な Web ベースの視覚化機能とアラート機能を提供します。
4.1. PCP のインストールおよび有効化 リンクのコピーリンクがクリップボードにコピーされました!
必要なパッケージをインストールし、PCP 監視サービスを有効にして使用を開始します。pcp-zeroconf パッケージを使用して PCP のインストールを自動化することもできます。pcp-zeroconf を使用して PCP をインストールする方法の詳細は、pcp-zeroconf を使用した PCP の設定 を参照してください。
手順
pcp パッケージをインストールします。
# dnf install pcpホストマシンで pmcd サービスを有効にして起動します。
# systemctl enable pmcd # systemctl start pmcd
検証
PMCD プロセスがホストで実行されているかどうかを確認します。
# pcp Performance Co-Pilot configuration on arm10.local: platform: Linux arm10.local 6.12.0-55.13.1.el10_0.aarch64 #1 SMP PREEMPT_DYNAMIC Mon May 19 07:29:57 UTC 2025 aarch64 hardware: 4 cpus, 1 disk, 1 node, 3579MB RAM timezone: JST-9 services: pmcd pmcd: Version 6.3.7-1, 12 agents, 6 clients pmda: root pmcd proc pmproxy xfs linux nfsclient mmv kvm jbd2 dm openmetrics
4.2. 最小限の PCP 設定のデプロイメント リンクのコピーリンクがクリップボードにコピーされました!
最小 PCP 設定では、Red Hat Enterprise Linux でのパフォーマンスの統計情報が収集されます。この設定は、詳細な分析のためにデータを収集するために必要な、実稼働システムに最低限のパッケージを追加します。作成された tar.gz ファイルおよび pmlogger の出力のアーカイブは、さまざまな PCP ツールを使用して解析し、その他のソースのパフォーマンス情報と比較できます。
前提条件
- PCP がインストールされている。詳細は PCP のインストールおよび有効化 を参照してください。
手順
pmlogger 設定を更新します。
# pmlogconf -r /var/lib/pcp/config/pmlogger/config.defaultpmcd サービスおよび pmlogger サービスを起動します。
# systemctl start pmcd.service # systemctl start pmlogger.service- 必要な操作を実行して、パフォーマンスデータを記録します。
出力を保存し、ホスト名と現在の日時に基づいて名前が付けられた tar.gz ファイルに保存します。
# cd /var/log/pcp/pmlogger/ # tar -czf $(hostname).$(date +%F-%Hh%M).pcp.tar.gz $(hostname)- このファイルを展開し、PCP ツールを使用してデータを分析します。
4.3. PCP で配布されるシステムサービスおよびツール リンクのコピーリンクがクリップボードにコピーされました!
基本パッケージ pcp には、システムサービスと基本ツールが含まれます。pcp-system-tools、pcp-gui、pcp-devel パッケージで提供される追加ツールをインストールできます。
PCP で配布されるシステムサービスのロール
pmcd- Performance Metric Collector Daemon。
pmie- Performance Metrics Inference Engine
pmlogger- パフォーマンスメトリックロガー。
pmproxy- リアルタイムおよびヒストリカルなパフォーマンスメトリックのプロキシー、時系列クエリー、REST API サービス。
基本 PCP パッケージで配布されるツール
+ pcp:: Performance Co-Pilot インストールの現在のステータスを表示します。
pcp-check-
pmcd、pmlogger、pmproxy、PMDA などのコアコンポーネントとオプションコンポーネントをアクティブ化または非アクティブ化します。 pcp-vmstat- システムパフォーマンスの概要を 5 秒ごとに表示します。プロセス、メモリー、ページング、ブロック IO、トラップ、CPU のアクティビティーに関する情報を表示します。
pmconfig- 設定パラメーターの値を表示します。
pmdiff- パフォーマンスのリグレッションを検索する際に重要と思われる変更について、指定された時間枠で、1 つまたは 2 つのアーカイブのすべてのメトリックの平均値を比較します。
pmdumplog- Performance Co-Pilot アーカイブファイルの制御、メタデータ、インデックス、および状態に関する情報を表示します。
pmfind- ネットワークで PCP サービスを見つけます。
pmie- 一連の演算式、論理式、およびルール式を定期的に評価する推論エンジン。メトリックは、ライブシステムまたは Performance Co-Pilot アーカイブファイルのいずれかから収集されます。
pmieconf- 設定可能な pmie 変数を表示または設定します。
pmiectl- pmie のプライマリー以外のインスタンスを管理します。
pminfo- パフォーマンスメトリックに関する情報を表示します。メトリックは、ライブシステムまたは Performance Co-Pilot アーカイブファイルのいずれかから収集されます。
pmlc- アクティブな pmlogger インスタンスを対話的に設定します。
pmlogcheck- Performance Co-Pilot アーカイブファイルで無効なデータを特定します。
pmlogconf- pmlogger 設定ファイルを作成および変更します。
pmlogctl- pmlogger のプライマリー以外のインスタンスを管理します。
pmloglabel- Performance Co-Pilot アーカイブファイルのラベルを検証、変更、または修復します。
pmlogsummary- Performance Co-Pilot アーカイブファイルに格納されたパフォーマンスメトリックに関する統計情報を計算します。
pmprobe- パフォーマンスメトリックの可用性を決定します。
pmsocks- ファイアウォール経由でホストされる Performance Co-Pilot へのアクセスを許可します。
pmstat- システムパフォーマンスの簡単な概要を定期的に表示します。
pmstore- パフォーマンスメトリックの値を変更します。
pmseries- PCP の機能と Valkey などの分散キー値データストアを使用する、高速でスケーラブルな時系列クエリー。
pmtrace- トレース PMDA のコマンドラインインターフェイスを提供します。
pmval- パフォーマンスメトリクスの現在の値を更新して表示します。
別途インストールする pcp-system-tools パッケージで配布されるツール
pcp-atop- パフォーマンスの観点から最も重要なハードウェアリソース (CPU、メモリー、ディスク、およびネットワーク) のシステムレベルの占有を表示します。
pcp-atopsar- さまざまなシステムリソースの使用状況に関するシステムレベルのアクティビティーレポートを生成します。このレポートは、pmlogger または pcp-atop の -w オプションを使用してあらかじめ記録された生のログファイルから生成されます。
pcp-dmcache- 設定されたデバイスマッパーキャッシュターゲット (デバイスの IOP、キャッシュデバイスとメタデータデバイスの使用率、各キャッシュデバイスの読み取り/書き込みのヒット率とミス率、比率など) に関する情報を表示します。
pcp-dstat- 一度に 1 台のシステムのメトリックを表示します。複数のシステムのメトリックを表示するには、--host オプションを使用します。
pcp-free- システム内の空きメモリーと使用済みメモリーを報告します。
pcp-htop- システム上で実行されているすべてのプロセスとそのコマンドライン引数を、top コマンドと同様の形式で表示しますが、縦横にスクロールしたり、マウスで操作したりすることができます。また、プロセスをツリー形式で表示したり、複数のプロセスを選択して一度に処理することもできます。
pcp-ipcs- 呼び出しプロセスが読み取りアクセスできる inter-process communication (IPC) ファシリティーの情報を表示します。
pcp-mpstat- CPU および割り込み関連の統計情報を報告します。
pcp-numastat- カーネルのメモリーアロケータからの NUMA 割り当て統計を表示します。
pcp-pidstat- システム上で動作している個々のタスクやプロセスに関する情報を表示します (CPU パーセンテージ、メモリーやスタックの使用率、スケジューリング、優先度など)。デフォルトでは、ローカルホストのライブデータを報告します。
pcp-shping- pmdashping Performance Metrics Domain Agent (PMDA) がエクスポートした shell-ping サービスメトリクスをサンプリングして報告します。
pcp-ss- pmdasockets PMDA が収集したソケットの統計情報を表示します。
pcp-tapestat- テープデバイスの I/O 統計情報を報告します。
pcp-uptime- システムの稼働時間、現在ログオンしているユーザー数、過去 1 分、5 分、15 分のシステム負荷の平均値を表示します。
pcp-verify- Performance Co-Pilot コレクターのインストールのさまざまな側面を検査し、特定の動作モードに対して正しく設定されているかを報告します。
pcp-iostat- SCSI デバイス (デフォルト) またはデバイスマッパーデバイス (-x デバイスマッパーオプションを使用) の I/O 統計情報を報告します。
pmrep- 選択した、簡単にカスタマイズ可能なパフォーマンスメトリック値に関するレポート。
別途インストールする pcp-gui パッケージで配布されるツール
pmchart- PCP の機能を介して利用可能なパフォーマンスメトリック値を描画します。
pmdumptext- ライブまたは PCP アーカイブから収集されたパフォーマンスメトリックの値を出力します。
別途インストールする pcp-devel パッケージで配布されるツール
pmclient- PMAPI (Performance Metrics Application Programming Interface) を使用して、高水準のシステムパフォーマンスメトリックを表示します。
pmdbg- 利用可能な Performance Co-Pilot デバッグ制御フラグとその値を表示します。
pmerr- 利用可能な Performance Co-Pilot エラーコードと、それに対応するエラーメッセージを表示します。
pcp-xsos- PCP アーカイブまたはそのシステムのライブメトリクス値から取得した単一のサンプルを使用して、システムの迅速な概要レポートを提供します。
別パッケージとして配布されるその他のツール
pcp-geolocate- コレクターシステムの地理ラベルを検出します。
pcp2openmetrics- PCP から Open Metrics 形式へのカスタマイズ可能なパフォーマンスメトリクスエクスポーターツール。コマンドライン引数または設定ファイルを使用して、エクスポート用に、ライブまたはアーカイブされたシステムとアプリケーションなど、使用可能な任意のパフォーマンスメトリクスを選択できます。
4.4. PCP デプロイメントのアーキテクチャー リンクのコピーリンクがクリップボードにコピーされました!
PCP は、PCP デプロイメントの規模に基づき、複数のデプロイメントアーキテクチャーをサポートし、高度なセットアップを実現するための多くのオプションを提供します。利用可能なスケーリングデプロイメントセットアップバリアント (サイジング係数と設定オプションによって決定) は次のとおりです。
- Localhost
- 各サービスは監視対象のマシン上でローカルに動作します。設定を変更せずにサービスを開始すると、ローカルホストにデフォルトのスタンドアロンデプロイメントが行われます。このセットアップでは、単一のノードを超えるスケーリングはサポートされません。ただし、Valkey は、データが複数のホスト間で共有される、可用性が高くスケーラブルなクラスターモードで実行することもできます。また、クラウドに Valkey クラスターをデプロイしたり、クラウドプロバイダーからマネージド Valkey クラスターを使用したりすることもできます。
- Decentralized
- ローカルホストと分散型のセットアップの唯一の違いは、集中型の Valkey サービスです。このモデルでは、ホストは監視対象の各ホスト上で pmlogger サービスを実行し、ローカルの pmcd インスタンスからメトリクスを取得します。その後、ローカルの pmproxy サービスは、パフォーマンスメトリクスを中央の Valkey インスタンスにエクスポートします。
図4.1 分散型ロギング
- 集中型ロギング - pmlogger ファーム
- 監視対象ホストのリソース使用量が制限されている場合、pmlogger ファームというデプロイメントオプションもあります。これは集中型ロギングとも呼ばれます。この設定では、1 つのロガーホストが複数の pmlogger プロセスを実行し、それぞれが異なるリモート pmcd ホストからパフォーマンスメトリクスを取得するように設定されます。集中ロガーのホストは pmproxy サービスを実行するように設定され、このサービスは、結果として生じる PCP アーカイブズのログを検出し、メトリクスデータを Valkey インスタンスに読み込みます。
図4.2 集中型ロギング - pmlogger ファーム
- 統合型 - 複数の pmlogger ファーム
- 大規模なデプロイメントの場合は、複数の pmlogger ファームをフェデレーション方式でデプロイします。例えば、ラックやデータセンターごとに 1 つの pmlogger ファームをデプロイします。各 pmlogger ファームは、メトリックを中央の Valkey インスタンスに読み込みます。
図4.3 統合型 - 複数の pmlogger ファーム
デフォルトでは、Valkey のデプロイメント設定は、スタンドアロン、localhost となっています。しかし、Valkey はオプションとして、データを複数のホストで共有する、高可用性と高スケーラビリティを備えたクラスター形態で実行できます。また、クラウド上に Valkey クラスターをデプロイしたり、クラウドベンダーが提供するマネージド Valkey クラスターを利用したりすることも可能です。
4.5. PCP ロギングのスケーリングに影響を与える要因 リンクのコピーリンクがクリップボードにコピーされました!
Performance Co-Pilot (PCP) ロギングに影響を与える主な要因は、ハードウェアリソース、ログに記録されたメトリクス、ロギング間隔、およびアップグレード後のアーカイブ管理です。
- Remote system size
-
リモートシステムのハードウェア設定 (CPU、ディスク、ネットワークインターフェイスの数など) は、集中型のロギングホスト上の各
pmloggerインスタンスが収集するデータの量に直接影響します。 - ログに記録されるメトリクス
-
ログに記録されるメトリクスの数と種類は、ストレージ要件に大きな影響を与えます。特に、
per-process proc.*メトリクスは大量のディスク領域を必要とします。たとえば、標準の pcp-zeroconf セットアップと 10 秒のロギング間隔の場合、proc メトリクスがなければ 11 MB ですが、proc メトリクスを有効にすると 155 MB に増加します (10 倍の差)。さらに、各メトリックのインスタンス数 (たとえば CPU、ブロックデバイス、ネットワークインターフェイスの数など) も、必要なストレージ容量に影響を与えます。 - ロギング間隔
-
ストレージ使用量は、メトリクスロギングの頻度により異なります。各
pmloggerインスタンスの予想される毎日の PCP アーカイブファイルサイズは、pmlogger.logファイルに記録されます。これらの推定値は圧縮されていないデータを表していますが、PCP アーカイブは通常 10:1 の圧縮率になるため、長期的なディスク容量要件はそれに応じて計算できます。 - pmlogrewrite によるアーカイブ更新の管理
- PCP をアップグレードするたびに、バージョン間でメトリクスメタデータの変更が検出されると、pmlogrewrite ツールは既存のアーカイブを更新します。このプロセスに必要な時間は、保存されているアーカイブの数に比例して増加します。
第5章 pmda-openmetrics の設定 リンクのコピーリンクがクリップボードにコピーされました!
Performance Co-Pilot (PCP) は、システムパフォーマンスを監視および管理するための柔軟で拡張可能なシステムです。これには、Performance Metric Domain Agents (PMDA) と呼ばれるビルトインエージェントがいくつか含まれています。PMDA は、PostgreSQL、Apache HTTPD、KVM 仮想マシンなどの一般的に使用されるアプリケーションやサービスからメトリクスを収集します。
5.1. pmda-openmetrics の概要 リンクのコピーリンクがクリップボードにコピーされました!
Red Hat リポジトリーにすぐに使用できる PMDA が存在しないカスタムアプリケーションやあまり一般的ではないアプリケーションを実行できます。このようなシナリオでは、pmda-openmetrics エージェントがギャップを埋めるのに役立ちます。pmda-openmetrics PMDA は、OpenMetrics-style 形式のテキストファイルを PCP 互換メトリクスに変換して、任意のアプリケーションのパフォーマンスメトリクスを公開します。OpenMetrics は、Prometheus やその他の監視ツールで広く使用されている形式であり、容易に統合できます。
pmda-openmetrics を実行すると、次のタスクを実行できます。
- 既存の PMDA でカバーされていないカスタムアプリケーションを監視します。
-
既存の OpenMetrics または
Prometheus-exportedメトリクスを PCP フレームワークに統合します。 - 診断またはデモンストレーションのために、クイックモデルまたはテストメトリクスを作成します。
5.2. pmda-openmetrics のインストールと設定 リンクのコピーリンクがクリップボードにコピーされました!
使用を開始する前に、pmda-openmetrics をインストールして設定する必要があります。次の例は、pmda-openmetrics を使用して、テキストファイルから単一の数値を PCP メトリクスとして公開する方法を示しています。
前提条件
-
PCP がインストールされており、
pmcdが実行されている。詳細は、pcp-zeroconf を使用した PCP の設定 を参照してください。
手順
pmda-openmetricsPMDA をインストールします。# dnf -y install pcp-pmda-openmetrics # cd /var/lib/pcp/pmdas/openmetrics/ # ./Installサンプルの OpenMetrics ファイルを作成します。
# echo 'var1 {var2="var3"} 42' > /tmp/example.txtexample.txt を目的のファイル名に置き換えます。
ファイルが正しく作成されていることを確認します。
# cat /tmp/example.txtメトリクスファイルパスを OpenMetrics エージェントに登録します。
# echo "file:///tmp/example.txt" > /etc/pcp/openmetrics/example.url設定が正しく作成されていることを確認します。
# cat /etc/pcp/openmetrics/example.url必要なシンボリックリンクを作成するために
systemd-tmpfilesを設定します。# echo 'L+ /var/lib/pcp/pmdas/openmetrics/config.d/example.url - - - - ../../../../../../etc/pcp/openmetrics/example.url' \ > /usr/lib/tmpfiles.d/pcp-pmda-openmetrics-cust.confシンボリックリンクが正しく設定されていることを確認します。
# cat /usr/lib/tmpfiles.d/pcp-pmda-openmetrics-cust.conftmpfiles 設定を適用してシンボリックリンクを作成します。
# systemd-tmpfiles --create --remove /usr/lib/tmpfiles.d/pcp-pmda-openmetrics-cust.confシンボリックリンクが正しく作成されていることを確認します。
# ls -al /var/lib/pcp/pmdas/openmetrics/config.d/メトリクスが正しく報告されていることを確認します。
# pminfo -f openmetrics.example.var1 inst [0 or "0 var2:var3"] value 42
検証
-
pcpを実行し、openmetricsがリストされていることを確認します。 -
systemd-analyze cat-config tmpfiles.dを実行し、出力にexample.urlが表示されることを確認します。 -
pminfoを使用して、メトリクスが存在することと、その値を確認します。
第6章 pmlogger でのパフォーマンスデータのロギング リンクのコピーリンクがクリップボードにコピーされました!
PCP ツールを使用してパフォーマンスのメトリック値をログに記録すると、後で再生できます。これにより、遡及的なパフォーマンス解析を実行できます。pmlogger ツールを使用すると、以下が可能になります。
- 選択したメトリックのアーカイブログをシステムに作成する
- システムに記録されるメトリックとその頻度を指定する
6.1. pmlogconf で pmlogger 設定ファイルの変更 リンクのコピーリンクがクリップボードにコピーされました!
pmlogger サービスの実行中、PCP はホストでメトリックのデフォルトセットをログに記録します。pmlogconf ユーティリティーを使用してデフォルト設定を確認します。pmlogger 設定ファイルが存在しない場合は、pmlogconf がデフォルトのメトリック値で作成します。
前提条件
- PCP がインストールされている。詳細は PCP のインストールおよび有効化 を参照してください。
手順
pmlogger設定ファイルを作成または変更します。# pmlogconf -r /var/lib/pcp/config/pmlogger/config.defaultpmlogconf のプロンプトに従って、関連するパフォーマンスメトリクスのグループを有効または無効にし、有効になっている各グループのロギング間隔を制御します。以下に例を示します。
# pmlogconf -r /var/lib/pcp/config/pmlogger/config.default Group: per logical block device activity Log this group? [y] Logging interval? [default]
6.2. pmlogger を手動で設定する リンクのコピーリンクがクリップボードにコピーされました!
指定したメトリックと間隔でカスタマイズしたロギング設定を作成する場合は、pmlogger 設定ファイルを手動で編集します。デフォルトの pmlogger 設定ファイルは /var/lib/pcp/config/pmlogger/config.default です。設定ファイルでは、プライマリーのロギングインスタンスによって記録されるメトリックを指定します。
手動の設定では、以下が可能になります。
- 自動設定のリストに記載されていないメトリックを記録する。
- カスタムロギングの周波数を選択する。
- アプリケーションのメトリックを使用して PMDA を追加する。
前提条件
- PCP がインストールされている。詳細は 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;
6.3. pmlogger サービスの有効化 リンクのコピーリンクがクリップボードにコピーされました!
ローカルマシンでメトリック値のログを記録するには、pmlogger サービスを開始して有効にする必要があります。
前提条件
- PCP がインストールされている。詳細は PCP のインストールおよび有効化 を参照してください。
手順
pmloggerサービスを開始して、有効にします。# systemctl start pmlogger # systemctl enable pmlogger
検証
pmloggerサービスが有効になっていることを確認します。# pcp platform: Linux arm10.local 6.12.0-55.13.1.el10_0.aarch64 #1 SMP PREEMPT_DYNAMIC Mon May 19 07:29:57 UTC 2025 aarch64 hardware: 4 cpus, 1 disk, 1 node, 3579MB RAM timezone: JST-9 services: pmcd pmcd: Version 6.3.7-1, 12 agents, 6 clients pmda: root pmcd proc pmproxy xfs linux nfsclient mmv kvm jbd2 dm openmetrics pmlogger: primary logger: /var/log/pcp/pmlogger/arm10.local/20250529.15.49 pmie: primary engine: /var/log/pcp/pmie/arm10.local/pmie.log詳細は、
/var/lib/pcp/config/pmlogger/config.defaultファイルを参照してください。
6.4. メトリクス収集のためのクライアントシステムの設定 リンクのコピーリンクがクリップボードにコピーされました!
セントラルサーバーが PCP を実行しているクライアントからパフォーマンスメトリクスを収集できるようにクライアントシステムを設定できます。
前提条件
- PCP がインストールされている。詳細は PCP のインストールおよび有効化 を参照してください。
手順
pcp-system-toolsパッケージをインストールします。# dnf install pcp-system-toolspmcd の IP アドレスを設定します。
# echo "-i 192.168.4.62" >>/etc/pcp/pmcd/pmcd.options192.168.4.62 を、クライアントがリッスンする IP アドレスに置き換えます。デフォルトでは、
pmcdは、ローカルホストをリッスンします。パブリック zone を永続的に追加するように、ファイアウォールを設定します。
# firewall-cmd --permanent --zone=public --add-port=44321/tcp success # firewall-cmd --reload successSELinux ブール値を設定します。
# setsebool -P pcp_bind_all_unreserved_ports onpmcdサービスおよび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))
6.5. データ収集用の中央サーバーの設定 リンクのコピーリンクがクリップボードにコピーされました!
PCP を実行しているクライアントからメトリクスを収集するためのセントラルサーバーを作成できます。
前提条件
- PCP がインストールされている。詳細は PCP のインストールおよび有効化 を参照してください。
- クライアントがメトリック収集用に設定されている。詳細は、メトリクス収集のためのクライアントシステムの設定 を参照してください。
手順
pcp-system-toolsパッケージをインストールします。# dnf 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.rhel8u1a192.168.4.13、192.168.4.14、および 192.168.4.62 を、クライアントの IP アドレスに置き換えます。
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/ディレクトリーのアーカイブファイルは、詳細な分析とグラフ作成に使用できます。
6.6. systemd ユニットと pmlogger リンクのコピーリンクがクリップボードにコピーされました!
pmlogger サービスを、それ自体を監視する単一のホストとして、または複数のリモートホストからメトリクスを収集する単一のホストを含む pmlogger ファームとしてデプロイすると、関連する systemd サービスとタイマーユニットがいくつか自動的にデプロイされます。これらのサービスとタイマーは、pmlogger インスタンスが実行していることを確認するための定期的なチェックを提供し、不足しているインスタンスを再起動し、ファイル圧縮などのアーカイブ管理を実行します。通常は pmlogger によってデプロイされるチェックおよびハウスキーピングサービスは次のとおりです。
- pmlogger_daily.service
-
デフォルトでは、毎日、深夜直後に実行され、1 つ以上の PCP アーカイブセットを集約、圧縮、およびローテートします。また、制限 (デフォルトでは 2 週間) よりも古いアーカイブも削除されます。
pmlogger.serviceユニットに必要なpmlogger_daily.timerユニットによってトリガーされます。 - pmlogger_check
-
pmloggerインスタンスが実行中であるかどうかを 30 分ごとにチェックします。不足しているインスタンスを再起動し、必要な圧縮タスクを実行します。pmlogger.serviceユニットに必要なpmlogger_check.timerユニットによってトリガーされます。 - pmlogger_farm_check
-
設定されたすべての
pmloggerインスタンスのステータスを確認します。不足しているインスタンスを再起動します。すべての非プライマリーインスタンスをpmlogger_farmサービスに移行します。pmlogger_farm_check.timerによってトリガーされます。これは、pmlogger_farm.serviceユニットによって必要とされ、pmlogger_farm.service ユニット自体はpmlogger.service ユニットによって必要とされます。
これらのサービスは一連の肯定的な依存関係を通じて管理されます。つまり、プライマリー pmlogger インスタンスをアクティブ化すると、すべて有効になります。pmlogger_daily.service はデフォルトで無効になっていますが、pmlogger.service との依存関係によって pmlogger_daily.timer がアクティブになると、pmlogger_daily.service の実行がトリガーされることに注意してください。
pmlogger_daily は、マージ前にアーカイブを自動的に書き換えるために pmlogrewrite とも統合されています。これにより、実稼働環境や PMDA が変化する中でもメタデータの一貫性を確保できます。たとえば、ログ記録間隔中に監視対象ホストの 1 台で pmcd が更新されると、ホスト上の一部のメトリクスのセマンティクスが更新され、新しいアーカイブがそのホストから以前に記録されたアーカイブと互換性がなくなる可能性があります。詳細は、システム上の pmlogrewrite(1) man ページを参照してください。
6.7. pmlogger によってトリガーされる systemd サービスの管理 リンクのコピーリンクがクリップボードにコピーされました!
制御ファイルを使用して、pmlogger インスタンスによって収集されたデータの自動カスタムアーカイブ管理システムを作成できます。
プライマリー pmlogger インスタンスは、接続先の pmcd と同じホストで実行している必要があります。プライマリーインスタンスは必要ありません。また、1 つのセントラルホストが、リモートホストで実行されている pmcd インスタンスに接続された複数の pmlogger インスタンスでデータを収集している場合は、設定でプライマリーインスタンスが必要ない場合もあります。
手順
次のいずれかを行います。
-
プライマリー pmlogger インスタンスの場合は、
/etc/pcp/pmlogger/control.d/localを使用します。 リモートホストの場合は、
/etc/pcp/pmlogger/control.d/remoteを使用します。remote を希望のファイル名に置き換えます。
ファイルには、ログに記録するホストごとに 1 行が含まれている必要があります。自動的に作成されるプライマリーロガーインスタンスのデフォルトの形式は次のようになります。
# === LOGGER CONTROL SPECIFICATIONS === # #Host P? S? directory args # local primary logger LOCALHOSTNAME y n PCP_ARCHIVE_DIR/LOCALHOSTNAME -r -T24h10m -c config.default -v 100Mbフィールドの詳細は次のとおりです。
- Host
- ログに記録するホストの名前。
- P?
-
“Primary?" の略です。このフィールドは、ホストがプライマリーロガーインスタンスである (y) か、そうでない (n) かを示します。設定内のすべてのファイルにわたってプライマリーロガーは 1 つだけ存在でき、接続先の
pmcdと同じホスト上で実行している必要があります。 - S?
-
"Socks?" の略です。このフィールドは、このロガーインスタンスがファイアウォール経由で
pmcdに接続するためにSOCKSプロトコルを使用する必要がある (y) か、必要ない (n) かを示します。 - directory
- この行に関連付けられたすべてのアーカイブがこのディレクトリーに作成されます。
- args
-
pmloggerに渡される引数。argsフィールドのデフォルト値は次のとおりです。 - -r
- アーカイブのサイズと増加率を報告します。
- T24h10m
-
各日のログ記録を終了するタイミングを指定します。これは通常、
pmlogger_daily.serviceが実行する時間です。デフォルト値の24h10mは、ログ記録が開始してから遅くとも 24 時間 10 分後に終了することを示します。 - -c config.default
- 使用する設定ファイルを指定します。これは基本的に、記録するメトリクスを定義します。
- -v 100Mb
-
1 つのデータボリュームがいっぱいになり、別のボリュームが作成されるサイズを指定します。新しいアーカイブに切り替わった後、以前に記録されたものは
pmlogger_dailyまたはpmlogger_checkのいずれかによって圧縮されます。
-
プライマリー pmlogger インスタンスの場合は、
6.8. pmrep で PCP ログアーカイブの再生 リンクのコピーリンクがクリップボードにコピーされました!
メトリックデータの記録後、PCP ログアーカイブを再生できます。ログをテキストファイルにエクスポートして、スプレッドシートにインポートするには、pcp2csv、pcp2xml、pmrep または pmlogsummary などの PCP ユーティリティーを使用します。pmrep ツールを使用すると、以下が可能になります。
- ログファイルを表示する。
- 選択した PCP ログアーカイブを解析し、値を ASCII テーブルにエクスポートする。
- アーカイブログ全体を展開するか、コマンドラインで個々のメトリクスを指定してログから一部のメトリクス値のみを展開する。
前提条件
- PCP がインストールされている。詳細は PCP のインストールおよび有効化 を参照してください。
-
pmloggerサービスが有効になっている。詳細は、pmlogger サービスの有効化 を参照してください。 pcp-guiパッケージをインストールした。# dnf 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メトリクスのデータを、comma-separated-value形式で表示します。この例の 20211128 を、データを表示するpmloggerアーカイブを含むファイル名に置き換えます。
第7章 Performance Co-Pilot によるパフォーマンスの監視 リンクのコピーリンクがクリップボードにコピーされました!
Performance Co-Pilot (PCP) は、システムレベルのパフォーマンス測定を監視、視覚化、保存、および分析するためのツール、サービス、およびライブラリーのスイートです。システム管理者は、Red Hat Enterprise Linux の PCP を使用してシステムのパフォーマンスを監視できます。
7.1. pmda-postfix での postfix の監視 リンクのコピーリンクがクリップボードにコピーされました!
pmda-postfix を使用して、postfix メールサーバーのパフォーマンスメトリクスを監視できます。これは、1 秒間に受信した電子メールの数を確認するのに役立ちます。
前提条件
- PCP がインストールされている。詳細は PCP のインストールおよび有効化 を参照してください。
-
pmloggerサービスが有効になっている。詳細は、pmlogger サービスの有効化 を参照してください。
手順
以下のパッケージをインストールします。
pcp-system-toolsをインストールします。# dnf install pcp-system-toolspmda-postfixパッケージをインストールして、postfix を監視します。# dnf install pcp-pmda-postfix postfixloggingデーモンをインストールします。# dnf install rsyslogテスト用にメールクライアントをインストールします。
# dnf install mutt
postfixサービスおよびrsyslogサービスを有効にします。# systemctl enable postfix rsyslog # systemctl restart postfix rsyslogSELinux ブール値を有効にして、
pmda-postfixが必要なログファイルにアクセスできるようにします。# setsebool -P pcp_read_generic_logs=onPMDA をインストールします。
# 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 Verify the available metrics: # pminfo postfix postfix.received postfix.sent postfix.queues.incoming postfix.queues.maildrop postfix.queues.hold postfix.queues.deferred postfix.queues.active
7.2. PCP Charts アプリケーションを使用した PCP ログアーカイブの視覚的なトレース リンクのコピーリンクがクリップボードにコピーされました!
メトリックデータの記録後、PCP ログアーカイブをグラフとして再生できます。メトリックは、PCP ログアーカイブのメトリックデータを履歴データのソースとして使用する代替オプションを持つ 1 台または複数のライブホストから提供されます。PCP Charts アプリケーションインターフェイスをカスタマイズしてパフォーマンスメトリックのデータを表示するには、ラインプロット、バーグラフ、または使用状況グラフを使用します。
PCP Charts アプリケーションを使用すると、以下が可能になります。
- PCP Charts アプリケーションのデータを再生し、グラフを使用して、システムのライブデータとともに遡及データを視覚化する。
- パフォーマンスメトリック値をグラフに描画する。
- 複数のチャートを同時に表示する。
前提条件
- PCP がインストールされている。詳細は PCP のインストールおよび有効化 を参照してください。
-
pmloggerでパフォーマンスデータをログに記録している。詳細は、pmlogger でのパフォーマンスデータのロギング を参照してください。 pcp-guiパッケージをインストールした。# dnf install pcp-gui
手順
コマンドラインで PCP Charts アプリケーションを起動します。
# pmchartpmtimeサーバー設定は下部にあります。start ボタンと pause ボタンで以下を制御できます。- PCP がメトリックデータをポーリングする間隔
- 履歴データのメトリックの日付および時間
- File をクリックしてから、New Chart をクリックして、ホスト名またはアドレスを指定して、ローカルマシンおよびリモートマシンの両方からメトリックを選択します。高度な設定オプションには、チャートの軸値を手動で設定する機能、およびプロットの色を手動で選択する機能が含まれます。
PCP Charts アプリケーションで作成したビューを記録します。
以下は、PCP Charts アプリケーションで作成したイメージを撮影したり、ビューを記録するためのオプションです。
- File をクリックしてから Export をクリックして、現在のビューのイメージを保存します。
- Record をクリックしてから Start をクリックし、録画を開始します。
- Record をクリックしてから Stop をクリックし、録画を停止します。録画の停止後、記録されたメトリックは後で表示できるようにアーカイブが作成されます。
- 必要に応じて、PCP Charts アプリケーションでは、ビューと呼ばれるメインの設定ファイルによって、1 つ以上のチャートに関連付けられたメタデータを保存できます。このメタデータでは、使用されるメトリックや、チャート列など、チャート側面をすべて記述します。
オプション: File をクリックし、Save View をクリックしてカスタムビュー設定を保存し、後でビュー設定を読み込みます。
以下の PCP Charts アプリケーションビューの設定ファイルの例では、指定の XFS ファイルシステム
loop1に対して読み書きされた合計バイト数を示す積み上げチャートグラフを説明します。# pmchart 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
7.3. PCP を使用した SQL Server からのデータの収集 リンクのコピーリンクがクリップボードにコピーされました!
PCP の SQL Server エージェントは、データベースのパフォーマンス問題を監視および分析するために役立ちます。システム上の PCP を介して Microsoft SQL Server のデータを収集できます。
前提条件
-
Red Hat Enterprise Linux に Microsoft SQL Server をインストールし、SQL Server への
trusted接続を確立している。 - Red Hat Enterprise Linux 用の SQL Server の Microsoft ODBC ドライバーがインストールされている。
手順
PCP をインストールします。
# dnf install pcp-zeroconfpyodbcドライバーに必要なパッケージをインストールします。# dnf install gcc-c++ python3-devel unixODBC-devel # dnf install python3-pyodbcmssqlエージェントをインストールします。PCP の Microsoft SQL Server ドメインエージェントをインストールします。
# dnf install pcp-pmda-mssql/etc/pcp/mssql/mssql.confファイルを編集して、mssql エージェントの SQL サーバーアカウントのユーザー名およびパスワードを設定します。設定するアカウントに、パフォーマンスデータに対するアクセス権限があることを確認します。username: user_name password: user_passworduser_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.logPCP が SQL Server から収集できるメトリックの完全なリストを表示します。
# pminfo mssqlメトリックのリストを表示した後は、トランザクションのレートを報告できます。たとえば、5 秒間の時間枠で、1 秒あたりの全体的なトランザクション数を報告するには、以下のコマンドを実行します。
# pmval -t 1 -T 5 mssql.databases.transactions-
pmchart コマンドを使用して、システムでこれらのメトリックのグラフィックチャートを表示します。詳細は、PCP Charts アプリケーションを使用した PCP ログアーカイブの視覚的なトレース およびシステム上の
pcp(1)、pminfo(1)、pmval(1)、pmchart(1)、およびpmdamssql(1)man ページを参照してください。
第8章 PCP メトリックのグラフィカル表示の設定 リンクのコピーリンクがクリップボードにコピーされました!
pcp、grafana、valkey、pcp bpftrace、pcp vector を組み合わせて使用すると、ライブデータまたは PCP によって収集されたデータがグラフィカルに表現されます。
8.1. pcp-zeroconf を使用した PCP の設定 リンクのコピーリンクがクリップボードにコピーされました!
pcp-zeroconf パッケージを使用してシステムに PCP を設定できます。pcp-zeroconf パッケージがインストールされると、システムはメトリックのデフォルトセットをアーカイブファイルに記録します。
手順
pcp-zeroconf パッケージをインストールします。
# dnf install pcp-zeroconf
検証
pmlogger サービスがアクティブであることを確認し、メトリックのアーカイブを開始します。
# pcp | grep pmlogger pmlogger: primary logger: /var/log/pcp/pmlogger/localhost.localdomain/20200401.00.12
8.2. grafana-server の設定 リンクのコピーリンクがクリップボードにコピーされました!
Grafana は、ブラウザーからアクセスできるグラフを生成します。grafana-server は、Grafana ダッシュボードのバックエンドサーバーです。これは、デフォルトですべてのインターフェイスでリッスンし、Web ブラウザーからアクセスする Web サービスを提供します。grafana-pcp プラグインは、バックエンドの pmproxy デーモンと対話します。
前提条件
- PCP が設定されている。詳細は、pcp-zeroconf を使用した PCP の設定 を参照してください。
手順
以下のパッケージをインストールします。
# dnf install grafana grafana-pcpgrafana-serverを再起動して有効にします。# systemctl restart grafana-server # systemctl enable grafana-serverGrafana サービスへのネットワークトラフィック用にサーバーのファイアウォールを開きます。
# 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 @ 5.2.2
8.3. valkey の設定 リンクのコピーリンクがクリップボードにコピーされました!
Valkey データソースを使用すると、以下が可能になります。
- データアーカイブの表示
- pmseries 言語を使用したクエリー時系列
- 複数のホストにまたがるデータの分析
前提条件
- PCP が設定されている。詳細は、pcp-zeroconf を使用した PCP の設定 を参照してください。
-
grafana-serverが設定されている。詳細は、grafana-server の設定 を参照してください。 -
メール転送エージェント (例:
postfix) がインストールおよび設定されている。
手順
valkeyパッケージをインストールします。# dnf install valkeypmproxyおよびvalkeyサービスを起動して有効にします。# systemctl start pmproxy valkey # systemctl enable pmproxy valkeygrafana-serverを再起動します。# systemctl restart grafana-server
検証
pmproxyとvalkeyが動作していることを確認します。# pmseries disk.dev.read 2eb3e58d8f1e231361fb15cf1aa26fe534b4d9dfvalkey パッケージがインストールされていない場合は、このコマンドはデータを返しません。
詳細は、システム上の
pmseries(1)man ページを参照してください。
8.4. Grafana Web UI へのアクセス リンクのコピーリンクがクリップボードにコピーされました!
Grafana Web インターフェイスにアクセスできます。Grafana Web インターフェイスを使用すると、以下が可能になります。
- Valkey、PCP bpftrace、PCP Vector データソースを追加する
- ダッシュボードを作成する
- 有用なメトリックの概要の表示
- Valkey でアラートを作成する
前提条件
- PCP が設定されている。詳細は、pcp-zeroconf を使用した PCP の設定 を参照してください。
-
grafana-serverが設定されている。詳細は、grafana-server の設定 を参照してください。
手順
クライアントシステムで http://192.0.2.0:3000 リンクを使用してブラウザーを開き、ポート 3000 の
grafana-serverにアクセスします。リモートマシンから Grafana Web UI にアクセスする場合は 192.0.2.0 を自分のマシンの IP に置き換え、ローカルで Web UI にアクセスする場合は localhost に置き換えます。
- 初回ログイン時は、Email または username、および username の 2 つのフィールドに admin と入力します。
- Grafana は、新しいパスワード を設定してセキュアなアカウントを作成するようにプロンプトを表示します。後で設定する場合は、Skip をクリックします。
- 左上のハンバーガーアイコン (☰) から、Administration > Plugins をクリックします。
- プラグイン タブで、Search by name or type テキストボックスに performance co-pilot と入力し、Performance Co-Pilot (PCP) プラグインをクリックします。
- Plugins / Performance Co-Pilot ペインで、Enable をクリックします。
Grafana アイコンをクリックします。Grafana Home ページ が表示されます。
図8.1 Home ダッシュボード
注記画面上部の隅には同様の Settings アイコンがありますが、これは一般的な ダッシュボード設定 を制御します。
Grafana Home ページで、Add your first data source をクリックして Valkey、PCP bpftrace、PCP Vector データソースを追加します。
- PCP valkey データソースを追加するには、デフォルトのダッシュボードを表示し、パネルとアラートルールを作成します。詳細は、PCP valkey データソースでのパネルおよびアラートの作成 を参照してください。
- pcp bpftrace データソースを追加してデフォルトのダッシュボードを表示するには、PCP bpftrace システム分析ダッシュボードの表示 を参照してください。
- pcp vector データソースを追加するには、デフォルトのダッシュボードを表示します。Vector Checklist を表示するには、PCP Vector Checklist の表示 を参照してください。
オプション: メニューから、admin プロファイルアイコンにカーソルを合わせ、Edit Profile、Change Password などの Preferences を変更するか、Sign out を選択します。
詳細は、システム上の
grafana-cliおよびgrafana-serverman ページを参照してください。
8.5. Valkey と PCP のセキュアな接続の設定 リンクのコピーリンクがクリップボードにコピーされました!
Performance Co-Pilot (PCP)、Grafana、Valkey の間でセキュアな接続を確立できます。これらのコンポーネント間にセキュアな接続を確立すると、収集および監視対象のデータへの、権限のない第三者によるアクセスや変更を防ぐことができます。
前提条件
- PCP がインストールされている。詳細は PCP のインストールおよび有効化 を参照してください。
- Grafana サーバーが設定されている。詳細は、grafana-server の設定 を参照してください。
- Valkey がインストールされている。詳細は、Valkey の設定 を参照してください。
-
クライアントの秘密鍵が
/etc/valkey/client.keyファイルに保存されている。別のパスを使用する場合は、この手順の該当するステップのパスを変更してください。秘密鍵および証明書署名要求 (CSR) を作成する方法と、認証局 (CA) からの証明書を要求する方法は、CA のドキュメントを参照してください。 -
TLS クライアント証明書が
/etc/valkey/client.crtファイルに保存されている。別のパスを使用する場合は、この手順の該当するステップのパスを変更してください。 -
TLS サーバー鍵が
/etc/valkey/valkey.keyファイルに保存されている。別のパスを使用する場合は、この手順の該当するステップのパスを変更してください。 -
TLS サーバー証明書が
/etc/valkey/valkey.crtファイルに保存されている。別のパスを使用する場合は、この手順の該当するステップのパスを変更してください。 -
CA 証明書が
/etc/valkey/ca.crtファイルに保存されている。別のパスを使用する場合は、この手順の該当するステップのパスを変更してください。 -
pmproxyデーモンの場合、サーバーの秘密鍵は/etc/pcp/tls/server.keyファイルに保存されます。別のパスを使用する場合は、この手順の該当するステップのパスを変更してください。
手順
root ユーザーとして
/etc/valkey/valkey.confファイルを開き、次のプロパティーを反映するように TLS/SSL オプションを調整します。port 0 tls-port 6379 tls-cert-file /etc/valkey/valkey.crt tls-key-file /etc/valkey/valkey.key tls-client-key-file /etc/valkey/client.key tls-client-cert-file /etc/valkey/client.crt tls-ca-cert-file /etc/valkey/ca.crtvalkey が TLS 証明書にアクセスできることを確認します。
# su valkey -s /bin/bash -c \ 'ls -1 /etc/valkey/ca.crt /etc/valkey/valkey.key /etc/valkey/valkey.crt' /etc/valkey/ca.crt /etc/valkey/valkey.crt /etc/valkey/valkey.keyvalkey サーバーを再起動して、設定の変更を適用します。
# systemctl restart valkey
検証
TLS 設定が機能していることを確認します。
# valkey-cli --tls --cert /etc/valkey/client.crt \ --key /etc/valkey/client.key \ --cacert /etc/valkey/ca.crt <<< "PING" PONG Unsuccessful TLS configuration might result in the following error message: Could not negotiate a TLS connection: Invalid CA Certificate File/Directory
8.6. PCP Valkey データソースでのパネルとアラートの作成 リンクのコピーリンクがクリップボードにコピーされました!
PCP Valkey データソースを追加した後に、ダッシュボードに有用なメトリックの概要を表示し、負荷グラフを視覚化するためのクエリーを追加して、システムに問題が発生した場合にその問題を表示する上で役立つアラートを作成できます。
前提条件
- Valkey を設定した。詳細は、Valkey の設定 を参照してください。
-
grafana-serverにアクセスできる。詳細は、Grafana Web UI へのアクセス を参照してください。
手順
- Grafana Web UI にログインします。
- Grafana Home ページで、Add your first data source をクリックします。
- Add data source ペインで、Filter by name or type テキストボックスに valkey と入力し、Valkey をクリックします。
Data Sources / Valkey ペインで、次の操作を実行します。
- URL フィールドに http://localhost:44322 を追加し、Save & Test をクリックします。
Dashboards タブ > Import > Valkey: Host Overview をクリックすると、有用なメトリクスの概要が含まれるダッシュボードが表示されます。
図8.2 Valkey: ホストの概要
新しいパネルを追加します。
- メニューで、Create アイコン > Dashboard > Add new panel の順にカーソルを合わせ、パネルを追加します。
-
Query タブで、選択した default オプションではなく、クエリーリストから Valkey を選択し、A のテキストフィールドで
kernel.all.loadなどのメトリクスを入力して、カーネル負荷グラフを表示します。 - 必要に応じて、Panel title と Description を追加し、Settings から他のオプションを更新します。
- Save をクリックして変更を適用し、ダッシュボードを保存します。Dashboard name を追加します。
Apply をクリックして変更を適用し、ダッシュボードに戻ります。
図8.3 Valkey クエリーパネル
アラートルールを作成します。
- Valkey クエリーパネルで、Alert をクリックし、Create Alert をクリックします。
- Rule の Name、Evaluate query、および For フィールドを編集して、アラートの Conditions を指定します。
Save をクリックして変更を適用し、ダッシュボードを保存します。Apply をクリックして変更を適用し、ダッシュボードに戻ります。
図8.4 Valkey パネルでアラートを作成する
- 必要に応じて、同じパネルでスクロールダウンし、Delete アイコンをクリックして作成したルールを削除します。
- オプション: メニューで Alerting アイコンをクリックし、作成されたアラートルールをさまざまなアラートステータスで表示したり、アラートルールを編集したり、Alert Rules タブから既存のルールを一時停止したりできます。作成したアラートルールに通知チャネルを追加して Grafana からアラート通知を受信するには、アラートの通知チャネルの追加 を参照してください。
8.7. アラートの通知チャネルの追加 リンクのコピーリンクがクリップボードにコピーされました!
通知チャネルを追加すると、アラートルールの条件が満たされ、システムのさらなる監視が必要になったときに、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 valkey データソースでのパネルとアラートの作成 を参照してください。
SMTP を設定し、
grafana/grafana.iniファイルに有効な送信者のメールアドレスを追加します。# vi /etc/grafana/grafana.ini [smtp] enabled = true from_address = abc@gmail.comabc@gmail.com を有効なメールアドレスに置き換えます。
grafana-server を再起動します。
# systemctl restart grafana-server.service
手順
- メニューから、Alerting アイコンにカーソルを合わせ、Notification channels > Add channel をクリックします。
Add notification channel details ペインで、以下を実行します。
- Name テキストボックスに名前を入力します。
-
通信 Type (例: Email) を選択し、メールアドレスを入力します。区切り文字
;を使用して複数のメールアドレスを追加できます。 - オプション: Configure Optional Email と Notification を設定します。
- Save をクリックします。
アラートルールで通知チャネルを選択します。
- メニューから、Alerting アイコンにカーソルを合わせ、Alert rules をクリックします。
- Alert Rules タブで、作成されたアラートルールをクリックします。
- Notifications タブで Send to オプションから通知チャネル名を選択し、アラートメッセージを追加します。
- Apply をクリックします。
8.8. PCP コンポーネント間の認証の設定 リンクのコピーリンクがクリップボードにコピーされました!
Simple Authentication Security Layer (SASL) フレームワークを介して PCP によってサポートされる scram-sha-256 認証メカニズムを使用して認証を設定できます。
手順
scram-sha-256認証メカニズムの SASL フレームワークをインストールします。# dnf install cyrus-sasl-scram cyrus-sasl-libpmcd.confファイルに、サポートされている認証メカニズムとユーザーデータベースのパスを指定します。# vi /etc/sasl2/pmcd.conf mech_list: scram-sha-256 sasldb_path: /etc/pcp/passwd.db新しいユーザーを作成します。
# useradd -r metricsmetrics をユーザー名に置き換えます。
作成したユーザーをユーザーデータベースに追加します。
# saslpasswd2 -a pmcd metrics Password: Again (for verification):作成したユーザーを追加するには、metrics アカウントのパスワードを入力する必要があります。
ユーザーデータベースのパーミッションを設定します。
# chown root:pcp /etc/pcp/passwd.db # chmod 640 /etc/pcp/passwd.dbpmcd サービスを再起動します。
# 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
8.9. PCP bpftrace のインストール リンクのコピーリンクがクリップボードにコピーされました!
PCP bpftrace エージェントをインストールして、システムをイントロスペクトし、カーネルおよびユーザー空間トレースポイントからメトリクスを収集できます。bpftrace エージェントは bpftrace スクリプトを使用してメトリクスを収集します。bpftrace スクリプトは、強化された Berkeley Packet Filter (eBPF) を使用します。
前提条件
- PCP が設定されている。詳細は、pcp-zeroconf を使用した PCP の設定 を参照してください。
-
grafana-serverが設定されている。詳細は、grafana-server の設定 を参照してください。 -
scram-sha-256認証メカニズムが設定されている。詳細は、PCP コンポーネント間の認証の設定 を参照してください。
手順
pcp-pmda-bpftraceパッケージをインストールします。# dnf install pcp-pmda-bpftracebpftrace.conf ファイルを編集し、「PCP コンポーネント間の認証の設定」で作成したユーザーを追加します。
# vi /var/lib/pcp/pmdas/bpftrace/bpftrace.conf [dynamic_scripts] enabled = true auth_enabled = true allowed_users = root,metricsmetrics をユーザー名に置き換えます。
bpftracePMDA をインストールします。# 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 valuespmda-bpftraceがインストールされたため、ユーザーの認証後にのみ使用できるようになりました。詳細は PCP bpftrace システム分析ダッシュボードの表示 を参照してください。
8.10. PCP bpftrace システム分析ダッシュボードの表示 リンクのコピーリンクがクリップボードにコピーされました!
PCP bpftrace データソースを使用すると、pmlogger またはアーカイブからの通常のデータとして利用できないソースからのライブデータにアクセスできます。PCP bpftrace データソースでは、ダッシュボードに有用なメトリックの概要を表示できます。
前提条件
-
PCP
bpftraceがインストールされている。詳細は、PCP bpftrace のインストール を参照してください。 -
grafana-serverが設定されている。詳細は、grafana-server の設定 を参照してください。
手順
- 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 をクリックします。
図8.5 データソースへの PCP bpftrace の追加
Dashboards タブ > Import > PCP bpftrace: System Analysis をクリックし、有用なメトリクスの概要を含むダッシュボードを表示します。
図8.6 PCP bpftrace: システム分析
8.11. PCP Vector のインストール リンクのコピーリンクがクリップボードにコピーされました!
使用を開始する前に、pcp vector をインストールする必要があります。
前提条件
- PCP が設定されている。詳細は、pcp-zeroconf を使用した PCP の設定 を参照してください。
-
grafana-serverが設定されている。詳細は、grafana-server の設定 を参照してください。
手順
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
8.12. 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 タブ > Import * PCP Vector: Host Overview をクリックして、有用なメトリックの概要を含むダッシュボードを表示します。
図8.7 PCP Vector: ホストの概要
メニューで Performance Co-Pilot プラグインにカーソルを合わせ、PCP Vector チェックリストをクリックします。
PCP チェックリストで、ヘルプまたは警告アイコをクリックし、関連するトラブルシューティングまたは参照リンクを表示します。
図8.8 Performance Co-Pilot / PCP Vector チェックリスト
8.13. Grafana のヒートマップの使用 リンクのコピーリンクがクリップボードにコピーされました!
Grafana のヒートマップを使用すると、経時的なデータのヒストグラムを表示し、データの傾向とパターンを特定し、時間の経過に伴う変化を確認できます。ヒートマップ内の各列は単一のヒストグラムを表します。それぞれのセルの色は、そのヒストグラム内における特定の値の観測密度を表します。
前提条件
- Valkey を設定した。詳細は、Valkey の設定 を参照してください。
-
grafana-serverにアクセスできる。詳細は、Grafana Web UI へのアクセス を参照してください。 - PCP valkey データソースを設定した。詳細は、PCP Valkey データソースでのパネルとアラートの作成 を参照してください。
手順
- Dashboards tab タブにカーソルを合わせて、+ New dashboard をクリックします。
- Add panel メニューで、Add a new panel をクリックします。
Query タブで以下を実行します。
- 選択中のデフォルトオプションの代わりに、クエリーリストから Valkey を選択します。
-
A のテキストフィールドに、カーネル負荷グラフを可視化するためのメトリクス (例:
kernel.all.load) を入力します。
- 可視化ドロップダウンメニュー (デフォルトで Time series に設定されています) をクリックし、Heatmap をクリックします。
- オプション: Panel Options ドロップダウンメニューで、Panel Title と Description を追加します。
Heatmap ドロップダウンメニューの Calculate from data 設定で、Yes をクリックします。
図8.9 ヒートマップ
- オプション: Colors ドロップダウンメニューで、Scheme をデフォルトの Orange から変更し、ステップ数 (色の濃淡) を選択します。
オプション: Tooltip ドロップダウンメニューの Show histogram (Y Axis) 設定で、トグルをクリックすると、ヒートマップ内のセルの上にカーソルを置いたときに、特定のヒストグラム内でのセルの位置が表示されます。以下に例を示します。
8.14. Grafana の SELinux ブール値の管理 リンクのコピーリンクがクリップボードにコピーされました!
grafana-selinux サブパッケージには、外部サービスへの Grafana のアクセスを制御するいくつかの SELinux ブール値が含まれています。これらのブール値はデフォルトではオフになっています。これらの値はシステム要件に応じて on または off に切り替えることができます。
前提条件
-
grafana-selinuxサブパッケージがインストールされている。 - root 権限がある。
手順
Grafana 関連の SELinux ブール値をすべて表示します。
# semanage boolean -l | grep grafanaSELinux ブール値を有効にします。
# setsebool [-P] <boolean_name> on- <boolean_name> は、有効にする SELinux ブール値の名前に置き換えます。
- -P オプションを使用すると、システムの再起動後も変更が維持されます。
オプション: SELinux オプションをオフにします。
# setsebool [-P] <boolean_name> off
8.15. 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/var/log/pcp/pmproxy/pmproxy.logファイルを表示して、pmproxyが実行されていること、時系列サポートが有効になっていること、valkey への接続が確立されていることを確認し、次のテキストが含まれていることを確認します。pmproxy(1716) Info: valkey slots, command keys, schema version setup Here, 1716 is the PID of pmproxy, which will be different for every invocation of pmproxy. Verify if the valkey database contains any keys by executing the following command: $ valkey-cli dbsize (integer) 34837以下のコマンドを実行して、PCP メトリクスが valkey データベースに存在し、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 [...] $ valkey-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> [...]
第9章 PowerTOP を使用した電力消費の管理 リンクのコピーリンクがクリップボードにコピーされました!
コンピューターシステム全体の消費電力を削減することで、コストを削減できます。各システムコンポーネントのエネルギー消費を効果的に最適化するには、システムが実行するさまざまなタスクを検討し、各コンポーネントのパフォーマンスがそのジョブに対して正しいことを確認するように設定します。特定コンポーネントやシステム全体の消費電力を下げると、熱およびパフォーマンスが低下します。
電源管理を適切に行うと、次の結果が得られます。
- サーバーやコンピューティングセンターにおける熱の削減
- 冷却、空間、ケーブル、発電機、無停電電源装置 (UPS) などの二次コストの削減
- ノートパソコンのバッテリー寿命の延長
- 二酸化炭素排出量の削減
- Energy Star など、グリーン IT に関する政府の規制や法的要件への対応
- 新システムに関する企業ガイドラインの遵守
9.1. 電源管理の基本 リンクのコピーリンクがクリップボードにコピーされました!
効果的な電源管理は、以下の原則に基づいて行われます。
- アイドル状態の CPU は必要なときだけ起動する
Red Hat Enterprise Linux 6 以降、カーネルはティックレスで実行されます。つまり、以前の定期的なタイマー割り込みが、オンデマンド割り込みに置き換えられました。そのため、新しいタスクが処理のキューに追加されるまで、アイドル状態の CPU はアイドル状態を維持できます。低電力状態にある CPU は、この状態を持続できます。ただし、システムに、不要なタイマーイベントを作成するアプリケーションが存在する場合は、この機能の利点が相殺される可能性があります。ボリュームの変更やマウスの動きの確認などのポーリングイベントは、このようなイベントの例です。
Red Hat Enterprise Linux には、CPU 使用率に基づいてアプリケーションを特定および監査するためのツールが含まれています。詳細は、監査と分析の概要 および 監査ツール を参照してください。
- 使用されていないハードウェアとデバイスは完全に無効にする
- これは、ハードディスクなどの可動部品を持つデバイスに当てはまります。さらに、アプリケーションにより、使用されていないが有効なデバイスが "オープン" なままになることがあります。このような状況が発生すると、カーネルがデバイスが使用中であると想定し、デバイスが省電力状態に移行できなくなる可能性があります。
- 負荷が低いときは消費電力を抑える
- 電力効率は、特に x86 以外のアーキテクチャーでは、最新のハードウェアと適切な BIOS または UEFI 設定に依存することがよくあります。システムで最新の公式ファームウェアが実行されていること、および BIOS またはデバイス設定で電源管理機能が有効になっていることを確認してください。
以下のような機能を確認してください。
- ARM64 用の CPPC (Collaborative Processor Performance Controls) のサポート
- IBM Power Systems の PowerNV サポート
- 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 がビジー状態になり、別の状態を使用すると潜在的な省電力の一部が失われます。
- 電源を切ったマシンは電力使用量が最も少ない
- 電力を節約する最善の方法の 1 つは、システムの電源を切ることです。たとえば、会社では、昼休みや帰宅時にマシンをオフにするガイドラインを使用して、"green IT" を意識することに焦点をあてた企業文化を育成できます。また、複数の物理サーバーを 1 台の大きなサーバーに統合し、Red Hat Enterprise Linux に付属する仮想化テクノロジーを使用して仮想化することもできます。
9.2. 監査と分析の概要 リンクのコピーリンクがクリップボードにコピーされました!
通常、1 つのシステムで詳細な手動の監査、分析、およびチューニングを行う場合は例外となります。これは、このようなシステム調整の最後の部分から得られる利点よりも、その実行にかかる時間とコストの方が長いためです。ただし、すべてのシステムで同じ設定を再利用できるほぼ同一のシステムでこれらのタスクを 1 回実行することは、非常に便利です。たとえば、数千ものデスクトップシステムや、マシンがほぼ同一の HPC クラスターをデプロイメントする場合を考えてください。
監査と分析を行うもう 1 つの理由は、将来のシステム動作のリグレッションや変化を特定するための比較基準を提供することです。この分析の結果は、ハードウェア、BIOS、またはソフトウェアの更新が定期的に行われ、消費電力に関する予期しない事態を回避したい場合に非常に役立ちます。通常、徹底的な監査と分析により、特定システムで実際に起こっていることをより的確に把握できます。
利用可能な最新のシステムを使用しても、消費電力に関するシステムの監査と分析は比較的困難です。ほとんどのシステムでは、ソフトウェアを使用して電力使用量を測定するのに必要な手段が提供されていません。ただし、例外があります。
- Hewlett Packard サーバーシステムの iLO 管理コンソールには、Web からアクセスできる電源管理モジュールがあります。
- IBM は、BladeCenter 電源管理モジュールで同様のソリューションを提供します。
- 一部の Dell システムでは、IT Assistant が電源監視機能を提供します。
他のベンダーも自社のサーバープラットフォームで同様の機能を提供している可能性がありますが、すべてのベンダーでサポートされている単一のソリューションは存在しません。
9.3. 監査用ツール リンクのコピーリンクがクリップボードにコピーされました!
Red Hat Enterprise Linux は、システム監査および分析のためのツールを備えています。ほとんどのツールは、すでに発見した事柄を確認する場合や、特定の部分についてより詳細な情報が必要な場合に、補足的な情報源として使用できます。これらのツールの多くはパフォーマンスチューニングに使用されます。ツールには次のものがあります。
- PowerTOP
-
PowerTOP は、CPU を頻繁にウェイクアップするカーネルおよびユーザー空間アプリケーションの特定のコンポーネントを特定します。Intel CPU の Intel Hardware P-State (HWP) は、CPU 周波数と電圧を調整して、電力効率とパフォーマンスを調整します。PowerTOP ツールを起動するには、root として
powertopコマンドを使用します。電力推定エンジンをキャリブレーションするには、powertop --calibrateを使用します。 diskdevstatとnetdevstatこれらは、システム上で実行されているすべてのアプリケーションのディスクおよびネットワークアクティビティーに関する詳細情報を収集する SystemTap ツールです。これらのツールによって収集された統計を使用すると、少数の大規模な操作ではなく、多くの小規模な I / O 操作で電力を浪費するアプリケーションを特定できます。
dnf install tuned-utils-systemtap kernel-debuginfoコマンドを root として使用して、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 の詳細は、TuneD によるシステムパフォーマンスの最適化 を参照してください。powertop2tunedユーティリティーを使用すると、PowerTOP の提案に基づくカスタム TuneD プロファイルを作成できます。powertop2tunedユーティリティーの詳細は、電力消費の最適化 を参照してください。 - 仮想メモリー統計 (
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 0vmstat -aコマンドを使用して、アクティブなメモリーと非アクティブなメモリーを表示します。iostatsysstatパッケージによって提供されるこのツールは、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 1454712blktraceI/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 プロセスを発行したプロセスのtimestampsと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 [...]デフォルトでは、
turbostatは、画面全体のカウンター結果の概要を出力し、その後に 5 秒間隔でカウンター結果を出力します。-iオプションでカウンター結果の出力間隔を指定します。たとえば、代わりに10秒ごとに結果を出力するには、turbostat-i 10を実行します。turbostatは、電力使用量やアイドル時間の点で非効率なサーバーを特定するのにも役立ちます。また、発生しているシステム管理割り込み (SMI) の比率を特定する場合にも便利です。また、これを使用して、電源管理の調整の効果を検証することもできます。cpupowercpupowerパッケージには、プロセッサーの省電力関連機能を調査および調整するためのツール群が含まれています。cpupowerコマンドに、frequency-info、frequency-set、idle-info、idle-set、set、info、および monitor オプションを付けて使用すると、プロセッサー関連の値を表示および設定できます。たとえば、利用可能な
cpufreqガバナーを表示するには、次のコマンドを使用します。$ cpupower frequency-info --governors analyzing CPU 0: available cpufreq governors: performance powersave- GNOME Power Manager
- これは、GNOME デスクトップ環境にインストールされるデーモンです。GNOME Power Manager は、バッテリーから AC 電源への変更など、システムの電源状態の変化を通知します。また、バッテリーのステータスを報告し、バッテリー残量が少なくなると警告を表示します。
pmda-denki-
pmda-denkiは電力消費を監視します。これは Performance Co-Pilot スイートの一部であり、経時的な消費量を監視および視覚化するのに役立ちます。詳細は、pmda-denki を使用した RHEL システムの電力消費の制御 を参照してください。
9.4. PowerTOP の目的 リンクのコピーリンクがクリップボードにコピーされました!
PowerTOP は、電力消費に関連する問題を診断し、バッテリー寿命を延ばす方法を提案するプログラムです。PowerTOP ツールは、システム全体の電力使用量の推定値と、各プロセス、デバイス、カーネルワーカー、タイマー、割り込みハンドラーの各電力使用量の推定値を提供できます。このツールは、CPU を頻繁にウェイクアップするカーネルおよびユーザー空間アプリケーションの特定のコンポーネントを識別することもできます。Red Hat Enterprise Linux は PowerTOP バージョン 2.x を使用します。
9.5. PowerTOP のインストール リンクのコピーリンクがクリップボードにコピーされました!
PowerTop をインストールして使用を開始し、電力消費に関連する問題を診断できます。
手順
ターミナルを開いて次のように入力します。
# dnf install powertop
9.6. PowerTOP の起動 リンクのコピーリンクがクリップボードにコピーされました!
システムにインストールしたら、PowerTop の使用を開始できます。
前提条件
- ラップトップをバッテリー電源で稼働させている。
手順
PowerTOP を実行するには、次のコマンドを使用します。
# powertop
9.7. PowerTOP のキャリブレーション リンクのコピーリンクがクリップボードにコピーされました!
PowerTOP のキャリブレーションプロセスを使用すると、ラップトップの電力消費測定の精度を向上させることができます。
手順
ラップトップでは、次のコマンドを実行して電力推定エンジンをキャリブレーションできます。
# powertop --calibrateプロセス中にマシンを操作せずに、キャリブレーションを完了させます。キャリブレーションには時間がかかります。このプロセスでは、さまざまなテストが実行されて、輝度が周期的に変更され、デバイスのオン/オフが切り替えられるためです。キャリブレーションプロセスが完了すると、PowerTOP が通常どおり起動します。データを収集するために約 1 時間実行します。
十分なデータが収集されると、出力テーブルの最初の列に電力予測マークが表示されます。
9.8. 測定間隔の設定 リンクのコピーリンクがクリップボードにコピーされました!
デフォルトでは、PowerTOP は 20 秒間隔で測定を行います。ただし、この測定頻度は要件に応じて変更できます。
手順
測定頻度を変更するには、
--timeオプションを指定してpowertopコマンドを実行します。# powertop --time=<time_in_seconds>
9.9. CPU 周波数ドライバーとモードの制御 リンクのコピーリンクがクリップボードにコピーされました!
Intel P-State ドライバーの使用中は、ドライバーがパッシブモードの場合にのみ、PowerTOP は Frequency Stats タブに値を表示します。しかし、その場合も、値が不完全なことがあります。Intel P-State ドライバーには全部で次の 3 つのモードがあります。
- Hardware P-States (HWP) を使用したアクティブモード
- HWP を使用しないアクティブモード
- パッシブモード
ACPI CPUfreq ドライバーに切り替えると、PowerTOP で完全な情報が表示されます。ただし、システムをデフォルト設定にしておくことを推奨します。
手順
どのドライバーがどのモードでロードされているかを表示します。
# cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_driver- Intel P-State ドライバーがロードされ、アクティブモードになっている場合は intel_pstate が返されます。
- Intel P-State ドライバーがロードされ、パッシブモードになっている場合は、intel_cpufreq が返されます。
- ACPI CPUfreq ドライバーがロードされている場合は、acpi-cpufreq が返されます。
Intel P-State ドライバーの使用中に、以下を実行します。
ドライバーをパッシブモードで強制的に実行するには、カーネルブートコマンドラインに次の引数を追加します。
intel_pstate=passiveIntel P-State ドライバーを無効にして ACPI CPUfreq ドライバーを使用するには、カーネルブートコマンドラインに次の引数を追加します。
intel_pstate=disable
9.10. HTML 出力の生成 リンクのコピーリンクがクリップボードにコピーされました!
ターミナルで、powertop の出力とは別に HTML レポートを生成することもできます。
手順
--htmlオプションを指定してpowertopコマンドを実行します。# powertop --html=<htmlfile.html><htmlfile.html> パラメーターは、必要な出力ファイル名に置き換えます。
9.11. 電力消費の最適化 リンクのコピーリンクがクリップボードにコピーされました!
電力消費を最適化するには、powertop サービスまたは powertop2tuned ユーティリティーのいずれかを使用できます。
9.11.1. powertop サービスで消費電力の最適化 リンクのコピーリンクがクリップボードにコピーされました!
powertop サービスを使用すると、ブート時の Tunables タブから PowerTOP のすべての提案を自動的に有効にできます。
手順
powertopサービスを有効にします。# systemctl enable powertop
9.11.2. powertop2tuned ユーティリティー リンクのコピーリンクがクリップボードにコピーされました!
powertop2tuned ユーティリティーを使用して、PowerTOP の提案からカスタムの TuneD プロファイルを作成します。デフォルトでは、powertop2tuned は /etc/tuned/ ディレクトリーにプロファイルを作成し、現在選択されている TuneD プロファイルに基づいてカスタムプロファイルを作成します。安全上の理由から、新しいプロファイルでは、すべての PowerTOP チューニングが最初は無効になっています。/etc/tuned/profiles/profile_name/tuned.conf ファイルでコメントを解除することで、チューニングを有効にできます。
PowerTOP によって提案されるチューニングのほとんどを有効にする新しいプロファイルを生成するには、--enable または -e オプションを使用します。USB の autosuspend など、問題が発生する可能性のある一部のチューニングは、デフォルトで無効になっており、手動でコメントを解除する必要があります。
9.11.3. powertop2tuned ユーティリティーで電力消費の最適化 リンクのコピーリンクがクリップボードにコピーされました!
powertop2tuned ユーティリティーを使用すると、システムの電力消費を最適化するのに役立つカスタムの TuneD プロファイルを生成できます。
前提条件
powertop2tunedユーティリティーがシステムにインストールされている。# dnf install tuned-utils
手順
カスタムプロファイルを作成するには、次のコマンドを使用します。
# powertop2tuned <new_profile_name>新しいプロファイルをアクティベートします。
# tuned-adm profile <new_profile_name>
9.11.4. powertop2tuned と powertop.service の使用量の比較 リンクのコピーリンクがクリップボードにコピーされました!
次の理由により、powertop.service よりも powertop2tuned を使用して電力消費を最適化することを推奨します。
-
powertop2tunedユーティリティーは、PowerTOP を TuneD に統合したものです。これにより、両方のツールの利点を活かすことができます。 -
powertop2tunedユーティリティーを使用すると、有効になっているチューニングをきめ細かく制御できます。 -
powertop2tunedでは、潜在的に危険なチューニングが自動的に有効になりません。 -
powertop2tunedを使用すると、再起動せずにロールバックを行うことができます。
第10章 perf の使用 リンクのコピーリンクがクリップボードにコピーされました!
システム管理者は、perf ツールを使用して、システムのパフォーマンスデータを収集および分析できます。perf ユーザー空間ツールは、カーネルベースのサブシステムである Performance Counters for Linux (PCL) と連携します。perf は、Performance Monitoring Unit (PMU) を使用して、さまざまなハードウェアおよびソフトウェアイベントを測定、記録、監視するツールです。perf は、tracepoints、kprobes、uprobes もサポートしています。
10.1. perf のインストール リンクのコピーリンクがクリップボードにコピーされました!
perf ツールの使用を開始するには、perf ユーザー空間ツールをインストールする必要があります。
手順
perf ツールをインストールします。
# dnf install perf
10.2. 一般的な perf コマンド リンクのコピーリンクがクリップボードにコピーされました!
次の一般的な 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コマンドの全リストを表示します。
第11章 perf top を使用した、リアルタイムでの CPU 使用率のプロファイリング リンクのコピーリンクがクリップボードにコピーされました!
perf top コマンドを使用すると、さまざまな関数の CPU 使用率をリアルタイムで測定できます。
11.1. perf top の目的 リンクのコピーリンクがクリップボードにコピーされました!
perf top コマンドは、リアルタイムのシステムプロファイリングに使用され、top ユーティリティーと同様に機能します。ただし、top ユーティリティーは通常、特定のプロセスまたはスレッドが使用している CPU 時間を表示しますが、perf top は各関数が使用している CPU 時間を表示します。デフォルト状態では、perf top は、ユーザー空間とカーネル空間のすべての CPU で使用されている関数を通知します。perf top を使用するには、root アクセス権が必要です。
11.2. perf top を使用した CPU 使用率のプロファイリング リンクのコピーリンクがクリップボードにコピーされました!
perf top を使用すると、リアルタイムの CPU 使用率を監視し、最も処理時間を消費している関数を特定できます。
前提条件
-
perfユーザー空間ツールがインストールされている。詳細は、perf のインストール を参照してください。 - root アクセス権がある。
手順
perf top の監視インターフェイスを起動します。
# perf top The monitoring interface looks similar to the following: 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 時間を使用しています。
11.3. perf の出力とシンボル解決について リンクのコピーリンクがクリップボードにコピーされました!
perf top の監視インターフェイスは、CPU 使用率と関数のアクティビティーをリアルタイムで表示します。出力を理解することで、パフォーマンスのボトルネックを特定し、システムの動作を最適化することができます。
- perf top の出力の主な列
- インターフェイスには次のいくつかの列が表示されます。
- Overhead
-
特定の関数によって消費された CPU 時間の割合を表示します。これは、最も
resource-intensiveな (多くのリソースを消費する) 操作を特定するのに役立ちます。 - Shared Object
- 関数が存在するプログラムまたはライブラリーの名前を示します。
- Symbol
関数またはシンボルの名前を表示します。
- カーネル空間で実行される関数には [k] のマークが付きます。
- ユーザー空間で実行される関数には [.] のマークが付きます。
- perf の出力でシンボルが解決されない原因
カーネル関数は、
perfは/proc/kallsymsファイルの情報を使用して、サンプルをそれぞれの関数名またはシンボルにマッピングします。ただし、ユーザー空間で実行される関数は、バイナリーから一部の情報が取り除かれているため、生の関数アドレスが表示される場合があります。この情報は、対応する debuginfo パッケージをインストールするか、
gccの-gオプションを使用するなどしてデバッグを有効にしてアプリケーションをコンパイルすることによって含めることができます。必要なデバッグ情報が利用可能になると、perfはレポート作成時に、サンプリングされたアドレスを人間が判読できる関数名に正確にマッピングできるようになります。注記デバッグ情報を利用可能にした後、
perf recordコマンドを再実行する必要はありません。perf reportコマンドを再度実行すれば、解決されたシンボルが反映されます。
11.4. デバッグおよびソースリポジトリーの有効化 リンクのコピーリンクがクリップボードにコピーされました!
Red Hat Enterprise Linux の標準インストールでは、デバッグリポジトリーとソースリポジトリーは有効になりません。このリポジトリーには、システムコンポーネントのデバッグとパフォーマンスの測定に必要な情報が含まれます。
手順
ソースおよびデバッグの情報パッケージチャンネルを有効にします。
# subscription-manager repos --enable rhel-10-for-$(uname -m)-baseos-debug-rpms # subscription-manager repos --enable rhel-10-for-$(uname -m)-baseos-source-rpms # subscription-manager repos --enable rhel-10-for-$(uname -m)-appstream-debug-rpms # subscription-manager repos --enable rhel-10-for-$(uname -m)-appstream-source-rpms$(uname -m)の部分は、システムのアーキテクチャーに一致する値に自動的に置き換えられます。
| アーキテクチャー名 | 値 |
| 64 ビット Intel および AMD | x86_64 |
| 64 ビット ARM | aarch64 |
| IBM POWER | ppc64le |
| 64 ビット IBM Z | s390x |
11.5. 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-9.5-6.el10.x86_64 (gdb)GDB を終了するには、q と入力して Enter で確定します。
(gdb) qGDB が提案するコマンドを実行して、必要な
debuginfoパッケージをインストールします。# dnf debuginfo-install coreutils-9.5-6.el10.x86_64dnf パッケージ管理ツールにより、変更の概要が表示され、確認を求められます。確認すると、必要なファイルがすべてダウンロードされてインストールされます。GDB が
debuginfoパッケージを提案できない場合は、手動でのアプリケーションまたはライブラリーのdebuginfoパッケージの取得 で説明されている手順に従ってください。
第12章 perf stat を使用したプロセス実行中のイベントのカウント リンクのコピーリンクがクリップボードにコピーされました!
perf stat コマンドを使用すると、プロセス実行中のハードウェアイベントとソフトウェアイベントをカウントできます。
12.1. perf stat の目的 リンクのコピーリンクがクリップボードにコピーされました!
perf stat コマンドは、指定されたコマンドを実行し、コマンドの実行中に発生したハードウェアおよびソフトウェアイベントの発生回数を記録し、これらの回数の統計情報を生成します。イベントを指定しないと、perf stat は共通のハードウェアおよびソフトウェアのイベントセットをカウントします。
12.2. perf stat を使用したイベントのカウント リンクのコピーリンクがクリップボードにコピーされました!
perf stat を使用すると、コマンドの実行中に発生したハードウェアおよびソフトウェアのイベントをカウントし、これらのカウントの統計を生成できます。デフォルトでは、perf stat はスレッドごとのモードで動作します。
前提条件
-
perf のインストール で説明されているように、
perfユーザー空間ツールがインストールされている。 - ユーザー空間とカーネル空間の両方のイベントをカウントするための root アクセス権がある。
手順
イベントをカウントします。
root アクセス権なしで
perf statコマンドを実行すると、ユーザー空間で発生するイベントのみがカウントされます。$ perf stat ls 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 ls 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
12.3. perf stat 出力の解釈 リンクのコピーリンクがクリップボードにコピーされました!
perf stat は指定されたコマンドを実行し、コマンドの実行中にイベントの発生をカウントし、これらのカウントの統計を 3 列で表示します。
- カウントされた特定のイベントの発生回数。
- カウントされたイベントの名前。
-
関連するメトリクスが利用可能な場合は、右端の列でハッシュ記号 (
#) の後に比率またはパーセンテージが表示されます。たとえば、デフォルトモードで実行した場合、perf statはサイクルと命令の両方をカウントするため、サイクルあたりの命令数を計算して右端の列に表示します。分岐ミスに関しても同様の動作が見られます。デフォルトで両方のイベントがカウントされるため、全分岐数に対する分岐ミスの割合が表示されます。
12.4. 実行中のプロセスに perf stat を割り当てる リンクのコピーリンクがクリップボードにコピーされました!
perf stat を実行中のプロセスに割り当てることができます。これにより、コマンドの実行中に、指定したプロセス内でのみイベントの発生をカウントするように perf stat に指示できます。
前提条件
-
perf のインストール で説明されているように、
perfユーザー空間ツールがインストールされている。
手順
perf statを実行中のプロセスに割り当てます。$ perf stat -p ID1,ID2 sleep seconds上記の例では、
sleepコマンドを使用して指定したseconds秒間、ID がID1およびID2のプロセス内のイベントをカウントします。
第13章 perf によるパフォーマンスプロファイルの記録および分析 リンクのコピーリンクがクリップボードにコピーされました!
perf ツールを使用すると、パフォーマンスデータを記録し、後で分析することができます。
13.1. perf record の目的 リンクのコピーリンクがクリップボードにコピーされました!
perf record コマンドはパフォーマンスデータをサンプリングし、perf.data ファイルに保存します。その後、他の perf コマンドを使用してデータを読み取って視覚化できます。perf.data はカレントディレクトリーに生成され、後で別のマシンからアクセスできるようになります。perf record -a を実行すると、システム全体をプロファイリングできます。これを実行すると、Ctrl+C を押すまで、または特定のコマンドが実行されている間、パフォーマンスデータが記録されます。同様に、perf record ./your_app を実行するか、perf record -p PID を使用してすでに実行中のアプリケーション/プロセスに接続することで、1 つのアプリケーション/プロセスをプロファイリングできます。
13.2. パフォーマンスプロファイルの記録 リンクのコピーリンクがクリップボードにコピーされました!
perf record を使用すると、パフォーマンスデータをサンプリングして記録できます。取得されるデータのレベルはアクセスレベルによって異なります。
-
root アクセス権なし:
perf recordはユーザー空間でのみデータを収集します。 -
root アクセス権あり:
perf recordはユーザー空間とカーネル空間の両方でデータを収集します。
前提条件
-
perfユーザー空間ツールがインストールされている。詳細は、perf のインストール を参照してください。 - ユーザー空間およびカーネル空間のデータを収集する場合、root アクセス権がある。
手順
次のいずれかを行います。
ユーザー空間のパフォーマンスデータをサンプリングして記録するには、次のコマンドを実行します。
$ perf record commandカーネル空間のパフォーマンスデータをサンプリングして記録するには、次のコマンドを実行します (root または sudo アクセス権を使用)。
# perf record commandcommand は、プロファイリングする実際のコマンドに置き換えます。コマンドを指定しない場合は、Ctrl+C を押して手動で停止するまで、
perf recordによってデータがサンプリングされます。
13.3. CPU ごとのモードでのパフォーマンスプロファイルの記録 リンクのコピーリンクがクリップボードにコピーされました!
perf record を CPU ごとのモードで使用すると、監視対象の CPU 上の全スレッドを対象に、ユーザー空間とカーネル空間の両方で同時にパフォーマンスデータをサンプリングして記録できます。デフォルトでは、CPU ごとのモードはすべてのオンライン CPU を監視します。
前提条件
-
perfユーザー空間ツールがインストールされている。詳細は、perf のインストール を参照してください。
手順
パフォーマンスデータのサンプルと記録:
# perf record -a commandcommand は、データのサンプリングを実行するコマンドに置き換えます。コマンドを指定しない場合は、Ctrl+C を押して手動で停止するまで、
perf recordによってデータがサンプリングされます。
13.4. perf record を使用したコールグラフデータの取得 リンクのコピーリンクがクリップボードにコピーされました!
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 プロセッサーで最後のブランチレコードハードウェアを使用します。
-
command は、データのサンプリングを実行するコマンドに置き換えます。コマンドを指定しない場合は、Ctrl+C を押して手動で停止するまで、
13.5. perf report を使用した perf.data の分析 リンクのコピーリンクがクリップボードにコピーされました!
perf report を使用して、perf.data ファイルのデータを表示および分析できます。
前提条件
-
perfユーザー空間ツールがインストールされている。詳細は、perf のインストール を参照してください。 -
カレントディレクトリーに
perf.dataファイルがある。 -
perf.dataファイルが root アクセス権で作成されている場合は、perf report も root アクセス権で実行する必要があります。
手順
詳細な分析のために、perf.data ファイルの内容を表示します。
# perf report This command displays output similar to the following: 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詳細は、システム上の
perf-record(1)man ページを参照してください。
13.6. 実行中のプロセスに perf レコードを割り当てる リンクのコピーリンクがクリップボードにコピーされました!
実行中のプロセスに perf レコードを割り当てることができます。これにより、指定されたプロセスのパフォーマンスデータのみをサンプリングして記録するように perf record に指示します。
前提条件
-
perfユーザー空間ツールがインストールされている。詳細は、perf のインストール を参照してください。
手順
実行中のプロセスに
perf recordを割り当てます。$ perf record -p ID1,ID2 sleep secondsこのコマンドにより、sleep コマンドで指定した
seconds数間、プロセス ID がID1およびID2のプロセスのパフォーマンスデータをサンプリングして記録します。perfを設定して、イベントを特定のスレッドに記録することもできます。$ perf record -t ID1,ID2 sleep seconds注記-tフラグを使用し、スレッド ID をログに記録する場合、perfはデフォルトで継承を無効にします。--inheritオプションを追加して継承を有効にできます。
13.7. perf report 出力の解釈 リンクのコピーリンクがクリップボードにコピーされました!
perf report コマンドを実行すると表示されるテーブルでは、データが次の複数の列に分類されます。
- Overhead
- その特定の関数で収集されたサンプル全体の割合を示します。
- コマンド
- サンプルが収集されたプロセスを通知します。
- Shared Object
- サンプルの送信元である ELF イメージの名前を表示します (サンプルがカーネルからのものである場合に [kernel.kallsyms] という名前が使用されます)。
- Symbol
- 関数名またはシンボルを表示します。デフォルトモードでは、関数は、オーバーヘッドの最も高いものが最初に表示される順に降順でソートされます。
13.8. 別のデバイスで読み取り可能な perf.data ファイルの生成 リンクのコピーリンクがクリップボードにコピーされました!
perf ツールを使用してパフォーマンスデータを perf.data ファイルに記録し、異なるデバイスで分析することができます。
前提条件
-
perfユーザー空間ツールがインストールされている。詳細は、perf のインストール を参照してください。 -
カーネル
debuginfoパッケージがインストールされている。詳細は、GDB を使用したアプリケーションまたはライブラリーの debuginfo パッケージの取得 を参照してください。
手順
さらに調査する予定のパフォーマンスデータを取得します。
# perf record -a --call-graph fp sleep <seconds>この例では、sleep コマンドで指定した seconds 秒間、システム全体の
perf.dataを生成します。また、フレームポインターメソッドを使用してコールグラフデータを取得します。記録されたデータのデバッグシンボルを含むアーカイブファイルを生成します。
# perf archive
検証
アーカイブファイルが現在のアクティブなディレクトリーで生成されたことを確認します。
# ls perf.data*出力には、
perf.dataで始まる現在のディレクトリーのすべてのファイルが表示されます。アーカイブファイルの名前は、perf.data.tar.gzまたはperf.data.tar.bz2のいずれかになります。
13.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
第14章 perf を使用したビジーな CPU の調査 リンクのコピーリンクがクリップボードにコピーされました!
システムでパフォーマンスの問題を調査する際には、perf ツールを使用して最もビジー状態の CPU を特定し、監視することで、作業に集中することができます。
14.1. perf stat でカウントした CPU イベントの表示 リンクのコピーリンクがクリップボードにコピーされました!
CPU カウントの集約を無効にすると、perf stat を使用して、どの CPU イベントがカウントされたかを表示できます。この機能を使用するには、-a フラグを使用してシステム全体モードでイベントをカウントする必要があります。
前提条件
-
perfユーザー空間ツールがインストールされている。詳細は、perf のインストール を参照してください。
手順
CPU カウントアグリゲーションが無効になっているイベントをカウントします。
# perf stat -a -A sleep secondsこのコマンドは、sleep コマンドで指定した seconds 秒間に記録された一般的なハードウェアイベントとソフトウェアイベントのデフォルトセットの数を、CPU ごとに CPU0 から昇順で表示します。そのため、cycles などのイベントを指定すると便利な場合があります。
# perf stat -a -A -e cycles sleep seconds
14.2. perf report で取得した CPU サンプルの表示 リンクのコピーリンクがクリップボードにコピーされました!
perf record コマンドはパフォーマンスデータをサンプリングし、perf.data ファイルに保存します。このファイルは、perf report コマンドを使用して読み取ることができます。perf record コマンドは、各サンプルが取得された CPU も記録します。この情報を表示するには、perf report コマンドを適切に設定してください。
前提条件
-
perfユーザー空間ツールがインストールされている。詳細は、perf のインストール を参照してください。 -
カレントディレクトリーに、perf record で作成した
perf.dataファイルがある。perf.dataファイルが root アクセス権で作成されている場合は、perf report も root アクセス権で実行する必要があります。
手順
CPU でソートしながら、詳細な分析のために
perf.dataファイルの内容を表示します。# perf report --sort cpuCPU およびコマンドでソートすると、CPU 時間が費やされている場所に関する詳細情報を表示できます。
# perf report --sort cpu,commこの例では、監視対象の全 CPU からのコマンドを、オーバーヘッド使用量の降順で合計オーバーヘッド別にリスト表示し、コマンドが実行された CPU を特定します。
14.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 をリアルタイムで特定します。
14.4. perf record と perf report を使用した特定の CPU の監視 リンクのコピーリンクがクリップボードにコピーされました!
perf ツールを使用して、特定の CPU からパフォーマンスデータをサンプリングし、その結果を分析して CPU 固有の動作やボトルネックを特定できます。
前提条件
-
perfユーザー空間ツールがインストールされている。詳細は、perf のインストール を参照してください。
手順
特定の CPU のパフォーマンスデータを記録します。
特定の CPU をターゲットにするには、
perf recordで-Cオプションを使用します。次の例は、個々の CPU または範囲を指定する方法を示しています。選択した CPU (コンマ区切り) からデータをサンプリングするには、次のコマンドを実行します。
# perf record -C 0,1 sleep <seconds>このコマンドは、指定した秒数にわたって CPU
0と1からパフォーマンスデータをサンプリングして記録します。CPU の範囲からデータをサンプリングするには、次のコマンドを実行します。
# perf record -C 0-2 sleep <seconds>このコマンドは、指定した期間にわたって CPU
0、1、および2からパフォーマンスデータをサンプリングして記録します。
記録されたパフォーマンスデータを分析します。
perf reportコマンドを使用して、perf.dataファイルを読み取って分析します。# perf reportこのコマンドは、
perf.dataファイルの内容を表示します。注記各サンプルがどの CPU で記録されたかを確認するには、「perf report を使用してサンプルがどの CPU で取得されたかを表示する」を参照してください。
第15章 perf を使用した uprobes の作成 リンクのコピーリンクがクリップボードにコピーされました!
uprobes (ユーザー空間プローブ) は、ソースコードの変更や再コンパイルを必要とせずに、実行時にユーザー空間アプリケーション内の特定のポイントを監視する動的な計装メカニズムです。
uprobes が役立つ主なユースケースは 2 つあります。
- デバッグとパフォーマンス分析
-
uprobesはウォッチポイントと同様に機能します。アプリケーション内の特定の場所に挿入して、そのコードパスが実行される頻度をカウントできます。さらに、コールスタックや変数値などの豊富なコンテキストを取得できるため、パフォーマンスのボトルネックの特定やバグの追跡に役立ちます。 - イベントベースのデータ収集
-
uprobesは、循環バッファーなどのメカニズムに対する切り替えイベントとして機能し、ユーザー空間での実行トリガーに基づいてデータが記録またはフラッシュされるタイミングを制御するのに役立ちます。
uprobes は perf とシームレスに統合するため、既存の uprobes を使用することも、新しい uprobes を作成することもできます。このような柔軟性を (kprobes による) カーネル空間の計装と併せて利用することで、ユーザー空間の動作を、効果的かつ非侵入的な方法で観測およびプロファイリングすることが可能になります。
15.1. perf を使用して関数レベルで uprobes を作成する リンクのコピーリンクがクリップボードにコピーされました!
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
15.2. perf を使用して関数内の行に uprobes を作成する リンクのコピーリンクがクリップボードにコピーされました!
トレースポイントを perf stat や perf record などの他の perf ツールと組み合わせて使用すると、プロセスまたはアプリケーションの動作をより深く理解できます。
前提条件
-
perfユーザー空間ツールがインストールされている。詳細は、perf のインストール を参照してください。 実行可能ファイルのデバッグシンボルを取得した。
# objdump -t ./your_executable | head注記これを行うには、実行ファイルの
debuginfoパッケージをインストールする必要があります。または、実行ファイルがローカルで開発したアプリケーションの場合は、デバッグ情報 (GCC の-gオプション) を使用してアプリケーションをコンパイルする必要があります。
手順
uprobeを配置できる関数の行を表示します。$ 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
15.3. uprobes で記録されたデータの perf script の出力 リンクのコピーリンクがクリップボードにコピーされました!
uprobes で収集されたデータを分析する一般的な方法は、perf script コマンドを実行することです。このコマンドは、perf.data ファイルを読み取り、記録されたワークロードの詳細なトレースを表示します。
- perf script の出力例
-
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
-
第16章 perf mem によるメモリーアクセスのプロファイリング リンクのコピーリンクがクリップボードにコピーされました!
perf mem コマンドを使用して、システム上でメモリーアクセスのサンプリングを行うことができます。perf ツールの mem サブコマンドは、メモリーアクセスのサンプリング (読み込みおよ格納) を可能にします。perf mem コマンドは、メモリーのレイテンシー、メモリーアクセスの種類、キャッシュヒットとミスを引き起こす関数に関する情報を提供します。また、データシンボルを記録することで、これらのヒットとミスが発生するメモリーの場所に関する情報も提供します。
16.1. perf mem によるメモリーアクセスのサンプリング リンクのコピーリンクがクリップボードにコピーされました!
perf mem コマンドを使用して、システム上でメモリーアクセスのサンプリングを行うことができます。このコマンドは、perf record および perf report と同じオプションに加えて、mem サブコマンド専用のいくつかのオプションを受け付けます。記録されたデータは、後で分析するために、現在のディレクトリーの perf.data ファイルに保存されます。
前提条件
-
perfユーザー空間ツールがインストールされている。詳細は、perf のインストール を参照してください。
手順
メモリーアクセスをサンプリングします。
# perf mem record -a sleep <seconds>このコマンドは、
sleepコマンドで指定した<seconds>秒間、すべての CPU のメモリーアクセスをサンプリングします。sleepコマンドは、メモリーアクセスデータをサンプルしたいコマンドに置き換えることができます。デフォルトでは、perf memは、メモリーロードおよびストアの両方をサンプルします。-tオプションを使用し、perf memとrecordの間にloadまたはstoreのいずれかを指定することにより、メモリー操作を 1 つだけ選択できます。ロードすると、メモリー階層レベルに関する情報、TLB メモリーアクセス、バススヌーピング、およびメモリーロックがキャプチャーされます。分析用に
perf.dataファイルを開きます。# perf mem report上記のコマンド例を使用すると、以下のような出力になります。
Available samples 35k cpu/mem-loads,ldlat=30/P 54k cpu/mem-stores/Pcpu/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
16.2. perf mem 出力の解釈 リンクのコピーリンクがクリップボードにコピーされました!
修飾子なしで perf mem report コマンドを実行すると、データが複数の列に分類されます。
- Overhead
- 特定の関数で収集された全体のサンプルの割合を示します。
- Samples
- その行でアカウントを指定したサンプル数を表示します。
- Local Weight
- プロセッサーのコアサイクルでアクセスレイテンシーを表示します。
- Memory Access
- 発生したメモリーアクセスのタイプを表示します。
- Symbol
- 関数名またはシンボルを表示します。
- Shared Object
-
サンプルの取得元である ELF イメージの名前を表示します (サンプルがカーネルから取得される場合は、
[kernel.kallsyms]という名前が使用されます)。 - Data Symbol
行がターゲットとしていたメモリーの場所のアドレスを表示します。
重要Data Symbol列には、メモリーの動的割り当てや、スタックメモリーへのアクセスが原因で、生のアドレスが表示される場合があります。- Snoop
- バストランザクションを表示します。
- TLB Access
- TLB メモリーアクセスを表示します。
- Locked
- 関数がメモリーがロックされたか否かを示します。デフォルトモードでは、関数は、オーバーヘッドの最も高いものが最初に表示される順に降順でソートされます。
第17章 偽共有の検出 リンクのコピーリンクがクリップボードにコピーされました!
偽共有は、対称型マルチプロセッシング (SMP) システムにおいて、あるプロセッサーコアが特定のキャッシュライン上のデータ項目を変更した際に、他のプロセッサーが、プロセッサー間では共有されていない別のデータ項目にアクセスするために、そのキャッシュラインを使用している場合に発生します。
この最初のデータ変更により、そのキャッシュラインを使用している他のプロセッサーは、変更されたデータ項目の更新版を必要としていなかったり、アクセス権すら持っていないにもかかわらず、自身のコピーを無効化し、更新版を要求せざるを得なくなります。
perf c2c コマンドを使用して、偽共有を検出できます。
17.1. perf c2c の目的 リンクのコピーリンクがクリップボードにコピーされました!
perf ツールの c2c サブコマンドは、Shared Data Cache-to-Cache (C2C) 分析を有効にします。perf c2c コマンドを使用して、キャッシュライン競合を検査し、true と false の両方の共有を検出できます。
キャッシュラインの競合は、対称型マルチプロセッシング (SMP) システムのプロセッサーコアが、他のプロセッサーによって使用されている同じキャッシュラインにあるデータオブジェクトを修正すると発生します。このキャッシュラインを使用する他のプロセッサーはすべて、コピーを無効にして更新されたものを要求します。これにより、パフォーマンスが低下する可能性があります。
perf c2c コマンドは、以下の情報を提供します。
- 競合が検出されたキャッシュライン
- データの読み取りおよび書き込みのプロセス
- 競合の原因となった命令
- 競合に関連する NUMA (Non-Uniform Memory Access) ノード
17.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コマンドは、キャッシュライン競合データを収集するコマンドに置き換えることができます。
17.3. perf c2c record で記録した 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 grouping : 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}
17.4. perf c2c 出力の解釈 リンクのコピーリンクがクリップボードにコピーされました!
perf c2c report --stdio コマンドを実行して表示される視覚化は、データを複数のテーブルに分類します。
- Trace Events Information
-
perf c2c recordコマンドによって収集されたすべての負荷およびストアサンプルの概要を示します。 - Global Shared Cache Line Event Information
- 共有キャッシュラインの統計情報を示します。
c2cDetails-
サンプリングされたイベントと、視覚表示内で
perf c2c reportのデータがどのように編成されているかに関する情報を示します。 - Shared Data Cache Line Table
- 偽共有が検出された最もアクセスの多いキャッシュラインに関する 1 行の概要を示します。デフォルトでは、キャッシュラインごとに検出されたリモート Hitm の量が多い順に並べ替えられます。
- 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 列で番号
17.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 : 1Shared 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 列の数値が大きい場合は、偽共有を示しており、偽共有アクティビティーをデバッグするには、それが発生したキャッシュラインをさらに検査する必要があります。
第18章 flamegraphs の使用 リンクのコピーリンクがクリップボードにコピーされました!
システム管理者は、flamegraphs を使用して、perf ツールで記録されたシステムパフォーマンスデータの視覚化を作成できます。ソフトウェア開発者は、flamegraphs を使用して、perf ツールで記録されたアプリケーションパフォーマンスデータの視覚化を作成できます。スタックトレースのサンプリングは、perf ツールを使用して CPU パフォーマンスをプロファイリングするための一般的な方法です。ただし、perf を使用したプロファイリングスタックトレースの結果は、極めて詳細にわたるので、分析の工数がかなりかかる可能性があります。flamegraphs は、perf で記録されたデータから作成された視覚化で、より早く、簡単にホットコードパスを特定できるようにします。
18.1. flamegraphs のインストール リンクのコピーリンクがクリップボードにコピーされました!
flamegraphs の使用を開始するには、必要なパッケージをインストールする必要があります。
手順
flamegraphs パッケージをインストールします。
# dnf install js-d3-flame-graph
18.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このコマンドにより、デフォルトのブラウザーで視覚化が開きます。
18.3. 特定プロセスにおけるフレームグラフの作成 リンクのコピーリンクがクリップボードにコピーされました!
flamegraphs を使用して、特定の実行中のプロセスで記録されたパフォーマンスデータを視覚化できます。
前提条件
-
flamegraphsが flamegraphs のインストール の説明どおりにインストールされている。 -
perfツールが perf のインストール の説明どおりにインストールされている。
手順
データを記録し、視覚化を作成します。
# perf script flamegraph -a -F 99 -p ID1,ID2 sleep 60このコマンドは、
sleepコマンドで指定されているように、プロセス ID がID1およびID2のプロセスのパフォーマンスデータを60秒間サンプリングして記録し、現在のアクティブディレクトリーにflamegraph.htmlとして保存される視覚化を作成します。このコマンドは、デフォルトでコールグラフデータをサンプリングし、perfツールと同じ引数を取ります。この例では、次の引数が指定されています。- -a
- システム全体でデータを記録するように調整します。
- -F
- 1 秒あたりのサンプリング頻度を設定します。
- -p
- 特定のプロセス ID をシュミュレートし、データをサンプリングして記録します。
検証
分析するには、生成された視覚化を表示します。
# xdg-open flamegraph.htmlこのコマンドにより、デフォルトのブラウザーで視覚化が開きます。
18.4. flamegraphs の解釈 リンクのコピーリンクがクリップボードにコピーされました!
flamegraph 内の各ボックスは、スタック内の異なる機能を表します。y-axis はスタックの深さを示しています。各スタックの一番上のボックスは、実際に CPU 上で実行されていた関数です。その下にあるものは、すべてその関数の呼び出し元です。x-axis は、サンプリングされたコールグラフデータの母集団を示します。
特定の行にあるスタックの子要素は、x-axis に沿って、各関数のサンプル数が多い順に表示されます。x-axis は時間の経過を表すものではありません。ボックスが広いほど、データがサンプリングされていたときに、CPU 上または CPU 上の一部での頻度が高いことを意味します。
手順
これまで表示されていなかった関数の名前を表示し、データをさらに調査するには、フレームグラフ内のボックスをクリックして、その箇所のスタックを拡大します。
フレームグラフのデフォルトの表示に戻るには、Reset Zoom をクリックします。
重要フレームグラフでは、ユーザー空間関数を表すボックスに
Unknownと表示されることがあります。これは関数のバイナリーから一部の情報が取り除かれているためです。実行可能ファイルのdebuginfoパッケージがインストールされている必要があります。また、実行可能ファイルがローカルで開発したアプリケーションである場合は、アプリケーションをデバッグ情報を付きでコンパイルする必要があります。このような場合に関数名またはシンボルを表示するには、GCC の-gオプションを使用してください。
第19章 perf 循環バッファーを使用したパフォーマンスのボトルネックとなっているプロセスの監視 リンクのコピーリンクがクリップボードにコピーされました!
システムで実行されている特定のプロセスまたはアプリケーションの一部のパフォーマンスのボトルネックを監視するために、perf ツールを使用してデータのイベント固有のスナップショットを取得する循環バッファーを作成できます。このような場合には、perf は、指定されたイベントが検出されると、後で分析するために perf.data ファイルにデータのみを書き込みます。
19.1. perf を使用した循環バッファーおよびイベント固有のスナップショット リンクのコピーリンクがクリップボードにコピーされました!
perf を使用してプロセスやアプリケーションのパフォーマンス問題を調査する際、注目している特定のイベントが発生する前の何時間にもわたってデータを記録することは、リソースの面で現実的でなかったり、調査方法として適切でなかったりする場合があります。このような場合は、perf record を使用して、特定のイベントの後にスナップショットを取得するカスタムの循環バッファーを作成できます。
--overwrite オプションを指定すると、perf record はすべてのデータを上書き可能な循環バッファーに保存します。バッファーがいっぱいになると、perf record は最も古いレコードを自動的に上書きします。そのため、上書きされたレコードが perf.data ファイルに書き込まれることはありません。
--overwrite および --switch-output-event オプションを一緒に使用すると、--switch-output-event トリガーイベントが検出されるまでデータを継続的に記録およびダンプする循環バッファーが設定されます。トリガーイベントは、ユーザーにとって重要なイベントが発生したことを perf record に通知し、循環バッファー内のデータを perf.data ファイルに書き込みます。これにより、ユーザーにとって重要な特定のデータが収集されると同時に、不要なデータを perf.data ファイルに書き込まないことで、実行中の perf プロセスのオーバーヘッドが削減されます。
19.2. perf 循環バッファーを使用してパフォーマンスのボトルネックを監視するための特定のデータを収集する リンクのコピーリンクがクリップボードにコピーされました!
perf ツールを使用すると、循環バッファーを作成できます。循環バッファーは、ユーザーにとって重要なデータのみを収集するために指定したイベントによってトリガーされます。イベント固有のデータを収集する循環バッファーを作成するには、perf に --overwrite および --switch-output-event オプションを使用します。
前提条件
-
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
手順
uprobeをトリガーイベントとして循環バッファーを作成します。# perf record --overwrite -e cycles --switch-output-event probe_executable:function ./executable [ perf record: dump data: Woken up 1 times ] [ perf record: Dump perf.data.2021021012231959 ] [ perf record: dump data: Woken up 1 times ] [ perf record: Dump perf.data.2021021012232008 ] ^C[ perf record: dump data: Woken up 1 times ] [ perf record: Dump perf.data.2021021012232082 ] [ perf record: Captured and wrote 5.621 MB perf.data.<timestamp> ]このコマンドは、実行可能ファイルを起動し、
--switch-output-eventオプションの後に指定されたトリガーイベントであるuprobeをperfが検出するまで、-eオプションの後に指定された CPU サイクルを収集します。この時点で、perfは循環バッファーにあるすべてのデータのスナップショットを取得し、タイムスタンプで識別される一意のperf.dataファイルに保存します。この例では、合計 2 つのスナップショットが生成されました。最後のperf.dataファイルは、Ctrl+C を押して強制的に生成したものです。
第20章 perf を再起動せずに perf コレクターを使用してトレースポイントを管理する方法 リンクのコピーリンクがクリップボードにコピーされました!
コントロールパイプインターフェイスを使用して、実行中の perf コレクターで異なるトレースポイントを有効化および無効化することで、perf を停止または再起動せずに、収集するデータを動的に調整できます。これにより、プロセスの停止または再起動中に記録されたはずのパフォーマンスデータが失われることはありません。
20.1. perf を停止または再起動せずに、実行中の perf コレクターにトレースポイントを追加する リンクのコピーリンクがクリップボードにコピーされました!
制御パイプインターフェイスを使用して実行中の perf コレクターにトレースポイントを追加し、記録するデータを調整します。perf を停止する必要がないため、パフォーマンスデータが失われません。
前提条件
-
perfユーザー空間ツールがインストールされている。詳細は、perf のインストール を参照してください。
手順
制御パイプインターフェイスを設定します。
# mkfifo control ack perf.pipeコントロールファイル設定と、有効にするイベントで
perf recordを実行します。# perf record --control=fifo:control,ack -D -1 --no-buffering -e 'sched:*' -o - > perf.pipeこの例では、
-eオプションの後に'sched:*'を宣言すると、スケジューラーイベントでperf recordが開始されます。2 つ目の端末で、制御パイプの読み取り側を起動します。
# cat perf.pipe | perf --no-pager script -i -コントロールパイプの読み取り側を起動すると、最初の端末で以下のメッセージがトリガーされます。
Events disabled3 番目のターミナルで、制御ファイルを使用してトレースポイントを有効にします。
# echo 'enable sched:sched_process_fork' > controlこのコマンドは
perfをトリガーし、宣言されたイベントについて制御ファイル内の現在のイベントリストをスキャンします。イベントが存在する場合は、トレースポイントが有効になり、次のメッセージが最初の端末に表示されます。event sched:sched_process_fork enabledトレースポイントを有効にすると、2 番目のターミナルにトレースポイントを検出した perf からの出力が表示されます。
bash 33349 [034] 149587.674295: sched:sched_process_fork: comm=bash pid=33349 child_comm=bash child_pid=34056
20.2. perf を停止または再起動せずに、実行中の perf コレクターからトレースポイントを削除する リンクのコピーリンクがクリップボードにコピーされました!
制御パイプインターフェイスを使用して実行中の perf コレクターからトレースポイントを削除し、収集するデータの範囲を縮小します。perf を停止する必要がないため、パフォーマンスデータが失われません。
前提条件
-
perfユーザー空間ツールがインストールされている。詳細は、perf のインストール を参照してください。 -
制御パイプインターフェイスを使用して、実行中の
perfコレクターにトレースポイントを追加しました。詳細は、perf を停止または再起動せずに、実行中の perf コレクターにトレースポイントを追加する を参照してください。
手順
トレースポイントを削除します。
# echo 'disable sched:sched_process_fork' > controlこの例では、以前にスケジューラーイベントをコントロールファイルに読み込み、トレースポイント
sched:sched_process_forkを有効にしていることを前提としています。このコマンドは
perfをトリガーし、宣言されたイベントについて制御ファイル内の現在のイベントリストをスキャンします。イベントが存在する場合は、トレースポイントが無効になり、制御パイプの設定に使用する端末に以下のメッセージが表示されます。# event sched:sched_process_fork disabled
第21章 Web コンソールを使用したシステムパフォーマンスの最適化 リンクのコピーリンクがクリップボードにコピーされました!
以下では、RHEL Web コンソールでパフォーマンスプロファイルを設定し、選択したタスクに対してシステムのパフォーマンスを最適化できます。
21.1. Web コンソールでのパフォーマンスチューニングオプション リンクのコピーリンクがクリップボードにコピーされました!
Red Hat Enterprise Linux は、以下のシステムを最適化するためのパフォーマンスプロファイルを提供します。
- デスクトップを使用するシステム
- スループットパフォーマンス
- レイテンシーパフォーマンス
- ネットワークパフォーマンス
- 低消費電力
- 仮想マシン
TuneD サービスは、選択したプロファイルに一致するようにシステムオプションを最適化します。Web コンソールでは、システムのパフォーマンスプロファイルを設定できます。
21.2. Web コンソールでのパフォーマンスプロファイルの設定 リンクのコピーリンクがクリップボードにコピーされました!
実行するタスクに応じて、Web コンソールを使用して適切なパフォーマンスプロファイルを設定することでシステムパフォーマンスを最適化できます。
前提条件
RHEL 10 Web コンソールがインストールされている。
手順は、Web コンソールのインストールおよび有効化 を参照してください。
手順
- RHEL 10 Web コンソールにログインします。
- Overview をクリックします。
Configuration セクションで、現在のパフォーマンスプロファイルをクリックします。
- Change performance profile ダイアログボックスで、必要なプロファイルを設定します。
- Change profile をクリックします。
21.3. Web コンソールを使用したローカルシステムのパフォーマンスの監視 リンクのコピーリンクがクリップボードにコピーされました!
RHEL Web コンソールは、トラブルシューティングに Utilization Saturation および Errors (USE) メソッドを使用します。新しいパフォーマンスメトリックページには、データの履歴ビューが時系列に整理されており、最新のデータが上部に表示されます。Metrics and history ページでは、イベント、エラー、リソースの使用率と飽和状態のグラフィカル表示を表示できます。
前提条件
RHEL 10 Web コンソールがインストールされている。
手順は、Web コンソールのインストールおよび有効化 を参照してください。
-
cockpit-pcpパッケージがインストールされている。 -
Performance Co-Pilot (PCP) サービス
pmlogger.serviceとpmproxy.serviceが有効になっていて実行されている。
手順
- RHEL 10 Web コンソールにログインします。
- Overview をクリックします。
Usage セクションで、View metrics and history をクリックします。
Metrics and history セクションが開きます。現在のシステム設定と使用状況: ユーザーが指定した時間間隔で、グラフ形式のパフォーマンスメトリクスが表示されます。
21.4. Web コンソールと Grafana を使用して複数のシステムのパフォーマンスを監視する リンクのコピーリンクがクリップボードにコピーされました!
Grafana を使用すると、一度に複数のシステムからデータを収集し、収集した Performance Co-Pilot (PCP) メトリックのグラフィカル表現を確認できます。Web コンソールインターフェイスで、複数のシステムのパフォーマンスメトリックの監視およびエクスポートを設定できます。
前提条件
RHEL 10 Web コンソールがインストールされている。
手順は、Web コンソールのインストールおよび有効化 を参照してください。
-
cockpit-pcpパッケージがインストールされている。 -
Performance Co-Pilot (PCP) サービス
pmlogger.serviceとpmproxy.serviceが有効になっていて実行されている。 - Grafana ダッシュボードが設定されている。詳細は、grafana-server の設定 を参照してください。
valkeyパッケージがインストールされている。または、手順の後半で Web コンソールインターフェイスからパッケージをインストールすることもできます。
手順
- RHEL 10 Web コンソールにログインします。
- Overview ページで、Usage テーブルの View metrics and history をクリックします。
- Metrics settings ボタンをクリックします。
Export to network スライダーをアクティブな位置に移動します。
valkeyパッケージがインストールされていない場合は、Web コンソールでインストールするように求められます。-
pmproxyサービスを開くには、ドロップダウンリストからゾーンを選択し、Add pmproxy ボタンをクリックします。 - Save をクリックします。
検証
- Networking をクリックします。
- Firewall テーブルで、Edit rules and zones ボタンをクリックします。
選択したゾーンで
pmproxyを検索します。重要パフォーマンスを監視するすべてのシステムでこの手順を繰り返してください。
第22章 BPF Compiler Collection を使用したシステムパフォーマンスの分析 リンクのコピーリンクがクリップボードにコピーされました!
BPF Compiler Collection (BCC) は、Berkeley Packet Filter (BPF) の機能を組み合わせてシステムパフォーマンスを分析します。BPF を使用すると、カーネル内でカスタムプログラムを安全に実行して、パフォーマンス監視、トレース、およびデバッグ用のシステムイベントとデータにアクセスできます。BCC は、ユーザーがシステムから重要な詳細情報を抽出するための BPF プログラムの開発とデプロイを、ツールとライブラリーを使用して簡素化します。
22.1. bcc-tools パッケージのインストール リンクのコピーリンクがクリップボードにコピーされました!
BPF Compiler Collection (BCC) ライブラリーと関連ツールを取得するには、bcc-tools パッケージをインストールします。
手順
bcc-tools をインストールします。
# dnf install bcc-toolsBCC ツールは、
/usr/share/bcc/tools/ディレクトリーにインストールされます。
検証
インストールされたツールを調べます。
# ls -l /usr/share/bcc/tools/インストールされているツールのリストが表示されます。リスト内の
docディレクトリーには、各ツールのドキュメントがあります。
22.2. execsnoop を使用したシステムプロセスの調査 リンクのコピーリンクがクリップボードにコピーされました!
BCC スイートの execsnoop ツールは、新しいプロセス実行イベントをリアルタイムで取得して表示します。これは、システム上で実行されているコマンドやバイナリーを監視し、デバッグ、監査、セキュリティー監視を行うのに役立ちます。
手順
1 つのターミナルで
execsnoopプログラムを実行します。# /usr/share/bcc/tools/execsnooplsコマンドの短期的なプロセスを作成するために、別のターミナルで次のように入力します。$ ls /usr/share/bcc/tools/doc/execsnoopを実行している端末に、次のような出力が表示されます。PCOMM PID PPID RET ARGS ls 8382 8287 0 /usr/bin/ls --color=auto /usr/share/bcc/tools/doc/execsnoopプログラムは、システムリソースを消費する新しいプロセスごとに 1 つの行を出力します。また、lsなどの非常に短期間に実行されるプログラムのプロセスを検出します。なお、ほとんどの監視ツールはそれらを登録しません。execsnoop出力には以下のフィールドが表示されます。- PCOMM
-
親プロセス名。(
ls) - PID
- プロセス ID。(8382)
- PPID
- 親プロセス ID。(8287)
- RET
- 新しいプロセスにプログラムコードをロードする exec() システムコールの戻り値 (0)。
- ARGS
引数を使用して起動したプログラムの場所。
詳細は、システム上の
/usr/share/bcc/tools/doc/execsnoop_example.txtファイルとexec(3)man ページを参照してください。
22.3. opensnoop を使用してコマンドによって開かれたファイルを追跡する リンクのコピーリンクがクリップボードにコピーされました!
BCC (BPF Compiler Collection) の opensnoop ツールを使用すると、特定のコマンドによるファイルアクセスをリアルタイムで監視および記録できます。これは、アプリケーションの実行時の動作をデバッグ、監査、または理解するのに役立ちます。
手順
1 つのターミナルで
opensnoopプログラムを実行し、unameコマンドのプロセスによってのみ開かれたファイルを出力します。# /usr/share/bcc/tools/opensnoop -n uname別のターミナルで、特定のファイルを開くコマンドを入力します。
$ uname The terminal running opensnoop shows the output similar to the following: PID COMM FD ERR PATH 8596 uname 3 0 /etc/ld.so.cache 8596 uname 3 0 /lib64/libc.so.6 8596 uname 3 0 /usr/lib/locale/locale-archive ...opensnoopプログラムは、システム全体のopen()システムコールを監視し、その過程でunameが開こうとしたファイルごとに行を出力します。opensnoopの出力には次のフィールドが表示されます。- PID
- プロセス ID。(8596)
- COMM
-
プロセス名。(
uname) - FD
- ファイル記述子 - 開いているファイルを参照するために open() が返す値。(3)
- ERR
- すべてのエラー。
- PATH
open()が開こうとしたファイルの場所。コマンドが存在しないファイルを読み取ろうとすると、FD 列に
-1が返され、ERR 列に関連するエラーに対応する値が出力されます。opensnoopを使用すると、正常に動作しないアプリケーションを特定できます。詳細は、システム上の/usr/share/bcc/tools/doc/opensnoop_example.txtファイルとopen(2)man ページを参照してください。
22.4. biotop を使用して、ディスク上で I/O 操作を実行している上位のプロセスを監視する リンクのコピーリンクがクリップボードにコピーされました!
biotop ツールは、最も多くのディスク I/O アクティビティーを生成するプロセスをリアルタイムで表示します。このユーティリティーは、ディスクの読み取りや書き込みを頻繁に行うアプリケーションを特定できるため、パフォーマンスの監視やトラブルシューティングに役立ちます。
手順
1 つのターミナルで、引数として 30 を指定して
biotopプログラムを実行し、30 秒のサマリーを生成します。# /usr/share/bcc/tools/biotop 30引数を指定しない場合、出力画面がデフォルトで 1 秒ごとに更新されます。
別のターミナルで、次のコマンドを入力して、ローカルハードディスクデバイスからコンテンツを読み取り、出力を
/dev/zeroファイルに書き込みます。# dd if=/dev/vda of=/dev/zeroこのステップでは、
biotopの機能がわかるように、特定の I/O トラフィックを生成します。biotopを実行しているターミナルには、次のような出力が表示されます。PID COMM D MAJ MIN DISK I/O Kbytes AVGms 9568 dd R 252 0 vda 16294 14440636.0 3.69 48 kswapd0 W 252 0 vda 1763 120696.0 1.65 7571 gnome-shell R 252 0 vda 834 83612.0 0.33 1891 gnome-shell R 252 0 vda 1379 19792.0 0.15 7515 Xorg R 252 0 vda 280 9940.0 0.28 7579 llvmpipe-1 R 252 0 vda 228 6928.0 0.19 9515 gnome-control-c R 252 0 vda 62 6444.0 0.43 8112 gnome-terminal- R 252 0 vda 67 2572.0 1.54 7807 gnome-software R 252 0 vda 31 2336.0 0.73 9578 awk R 252 0 vda 17 2228.0 0.66 7578 llvmpipe-0 R 252 0 vda 156 2204.0 0.07 9581 pgrep R 252 0 vda 58 1748.0 0.42 7531 InputThread R 252 0 vda 30 1200.0 0.48 7504 gdbus R 252 0 vda 3 1164.0 0.30 1983 llvmpipe-1 R 252 0 vda 39 724.0 0.08 1982 llvmpipe-0 R 252 0 vda 36 652.0 0.06 ...biotop出力には、以下のフィールドが表示されます。- PID
- プロセス ID。(9568)
- COMM
-
プロセス名。(
dd) - DISK
- 読み取り操作を実行するディスク。(vda)
- I/O
- 実行された読み取り操作の数。(16294)
- Kbytes
- 読み取り操作によって読み取られたキロバイト数。(14,440,636)
- AVGms
読み取り操作の平均 I/O 時間。(3.69)
詳細は、システム上の
/usr/share/bcc/tools/doc/biotop_example.txtファイルとdd(1)man ページを参照してください。
22.5. xfsslower を使用して予想以上に遅いファイルシステム操作を明らかにする リンクのコピーリンクがクリップボードにコピーされました!
xfsslower は、XFS ファイルシステムによる読み取り、書き込み、オープン、または同期 (fsync) 操作の実行に費された時間を測定します。引数 1 を指定すると、1 ミリ秒よりも遅い操作のみが表示されます。
手順
1 つのターミナルで
xfsslowerプログラムを実行します。# /usr/share/bcc/tools/xfsslower 1引数を指定しない場合、
xfsslowerはデフォルトで 10 ミリ秒より遅い操作を表示します。別のターミナルで、vim エディターでテキストファイルを作成するコマンドを入力して、XFS ファイルシステムとのやり取りを開始します。
$ vim text The terminal running xfsslower shows something similar upon saving the file from the previous step: TIME COMM PID T BYTES OFF_KB LAT(ms) FILENAME 13:07:14 b'bash' 4754 R 256 0 7.11 b'vim' 13:07:14 b'vim' 4754 R 832 0 4.03 b'libgpm.so.2.1.0' 13:07:14 b'vim' 4754 R 32 20 1.04 b'libgpm.so.2.1.0' 13:07:14 b'vim' 4754 R 1982 0 2.30 b'vimrc' 13:07:14 b'vim' 4754 R 1393 0 2.52 b'getscriptPlugin.vim' 13:07:45 b'vim' 4754 S 0 0 6.71 b'text' 13:07:45 b'pool' 2588 R 16 0 5.58 b'text’ ...各行は、特定のしきい値よりも時間がかかったファイルシステム内の操作を表しています。
xfsslowerは、操作に想定以上に時間がかかるなど、ファイルシステムで発生し得る問題を検出します。xfsslowerの出力には次のフィールドが表示されます。- COMM
-
プロセス名。(
b’bash') - T
操作の種類。(
R)- Read
- Write
- Open
- Sync
- OFF_KB
- ファイルオフセット (KB)。(0)
- FILENAME
読み取り、書き込み、または同期されるファイル。
詳細は、システム上の
/usr/share/bcc/tools/doc/xfsslower_example.txtファイルとfsync(2)man ページを参照してください。
第23章 CPU 使用率を最適化するためのオペレーティングシステムの設定 リンクのコピーリンクがクリップボードにコピーされました!
ワークロード全体で CPU 使用率を最適化するように、オペレーティングシステムを設定できます。
23.1. プロセッサーの問題を監視および診断するためのツール リンクのコピーリンクがクリップボードにコピーされました!
以下は、プロセッサー関連のパフォーマンス問題を監視および診断するために Red Hat Enterprise Linux で使用できるツールです。
-
numactlユーティリティーは、プロセッサーとメモリーのアフィニティーを管理するためのさまざまなオプションを提供します。numactlパッケージには、カーネルでサポートされている NUMA ポリシーへのシンプルなプログラミングインターフェイスを提供するlibnumaライブラリーが含まれています。このパッケージは、numactlアプリケーションよりもきめ細かいチューニングに使用できます。 -
numadは NUMA アフィニティーの自動管理デーモンです。システム内の NUMA トポロジーとリソース使用状況を監視し、NUMA リソースの割り当てと管理を動的に改善します。 -
numastatツールは、オペレーティングシステムとそのプロセスに関する NUMA ノードごとのメモリー統計情報を表示し、プロセスのメモリーがシステム全体に分散されているか、特定のノードに集中しているかを管理者に示します。このツールは、numactlパッケージで提供されます。 pqosユーティリティーはintel-cmt-catパッケージで利用できます。最新の Intel プロセッサーで CPU キャッシュとメモリー帯域幅を監視します。以下の種類の情報を監視します。- サイクルあたりの命令数 (IPC)
- ラストレベルキャッシュのミス (MISSES) 回数
- 特定の CPU で実行されるプログラムが LLC 内で占めるキロバイト単位のサイズ
- ローカルメモリーへの帯域幅 (MBL)
- リモートメモリーへの帯域幅 (MBR)
/proc/interruptsファイルには、次の種類の情報が表示されます。- 割り込み要求 (IRQ) の数
- システム内の各プロセッサーによって処理された同様の割り込み要求の数
- 送信された割り込みの種類
- リストされた割り込み要求に応答するデバイスのコンマ区切りリスト
-
tasksetツールは、util-linuxパッケージで提供されます。これを使用すると、管理者は実行中のプロセスのプロセッサーアフィニティーを取得および設定したり、指定したプロセッサーアフィニティーでプロセスを起動したりできます。 -
turbostatツールは、指定した間隔でカウンターの結果を出力し、過剰な電力使用量、ディープスリープ状態に入れない、システム管理割り込み (SMI) が不必要に作成されるなど、サーバーでの予期しない動作を特定するのに役立ちます。 -
X86_energy_perf_policyツールを使用すると、パフォーマンスと電力消費効率の相対的な重要性を定義できます。この情報は、パフォーマンスと電力消費効率の間でトレードオフするオプションを選択すると、この機能をサポートするプロセッサーに影響を与えるために使用できます。
23.2. システムトポロジーの種類 リンクのコピーリンクがクリップボードにコピーされました!
現代のコンピューティングにおいて、単一の CPU という考え方は誤解を招くものです。現代のほとんどのシステムは、複数のプロセッサーを搭載しているためです。システムのトポロジーとは、これらのプロセッサーを相互に、また他のシステムリソースにどのように接続するかという接続形態のことです。これは、システムとアプリケーションのパフォーマンス、およびシステムのチューニングに関する考慮事項に影響を及ぼす可能性があります。
現代のコンピューティングで使用されるトポロジーの主なタイプを以下に示します。
- Symmetric Multi-Processor (SMP) トポロジー
- SMP トポロジーにより、すべてのプロセッサーが同時にメモリーにアクセスできるようになります。ただし、共有および同等のメモリーアクセスは、本質的にすべての CPU からのメモリーアクセスをシリアライズするため、SMP システムのスケーリング制約が一般的に許容できないものとして表示されます。このため、最近のサーバーシステムはすべて NUMA マシンです。
- Non-Uniform Memory Access (NUMA) トポロジー
NUMA トポロジーは、SMP トポロジーよりも最近開発されました。NUMA システムでは、複数のプロセッサーが 1 つのソケット上で物理的にグループ化されます。各ソケットには専用のメモリー領域があります。そのソケット上のプロセッサーはこのメモリーにローカルにアクセスできます。ソケット、そのメモリー、および関連するプロセッサーを合わせたものが、ノードと呼ばれます。同じノード上のプロセッサーは、そのノードのメモリーバンクには高速でアクセスできますが、他のノードのメモリーバンクへのアクセスはより低速になります。
そのため、ローカル以外のメモリーにアクセスするとパフォーマンスが低下します。したがって、NUMA トポロジーを使用するシステム上のパフォーマンスに敏感なアプリケーションは、アプリケーションを実行するプロセッサーと同じノードにあるメモリーにアクセスする必要があり、可能な限りリモートメモリーにアクセスしないようにしてください。
パフォーマンスに敏感するマルチスレッドアプリケーションは、特定のプロセッサーではなく特定の NUMA ノードで実行されるように設定することで、メリットが得られます。これが適切なかどうかは、システムやアプリケーションの要件によって異なります。
- 複数のアプリケーションスレッドが同じキャッシュされたデータにアクセスする場合、同じプロセッサーでこれらのスレッドを実行するように設定することが適切な場合があります。
-
異なるデータにアクセスしてキャッシュする複数のスレッドが同じプロセッサー上で実行される場合、各スレッドが前のスレッドによってアクセスされたキャッシュデータを追い出す可能性があります。これは、各スレッドがキャッシュを '失い'、メモリーからデータをフェッチし、これをキャッシュで置き換えていることを意味します。
perfツールを使用して、過剰な数のキャッシュミスをチェックします。
23.3. システムトポロジーの表示 リンクのコピーリンクがクリップボードにコピーされました!
いくつかのコマンドを使用することで、システムのトポロジーを理解できます。
手順
システムトポロジーの概要を表示するには、以下のコマンドを実行します。
$ numactl --hardware available: 4 nodes (0-3) node 0 cpus: 0 4 8 12 16 20 24 28 32 36 node 0 size: 65415 MB node 0 free: 43971 MB [...]CPU 数、スレッド数、コア数、ソケット数、NUMA ノード数などの CPU アーキテクチャーに関する情報を収集するには、以下を実行します。
$ lscpu Architecture: x86_64 CPU op-mode(s): 32-bit, 64-bit Byte Order: Little Endian CPU(s): 40 On-line CPU(s) list: 0-39 Thread(s) per core: 1 Core(s) per socket: 10 Socket(s): 4 NUMA node(s): 4 Vendor ID: GenuineIntel CPU family: 6 Model: 47 Model name: Intel(R) Xeon(R) CPU E7- 4870 @ 2.40GHz Stepping: 2 CPU MHz: 2394.204 BogoMIPS: 4787.85 Virtualization: VT-x L1d cache: 32K L1i cache: 32K L2 cache: 256K L3 cache: 30720K NUMA node0 CPU(s): 0,4,8,12,16,20,24,28,32,36 NUMA node1 CPU(s): 2,6,10,14,18,22,26,30,34,38 NUMA node2 CPU(s): 1,5,9,13,17,21,25,29,33,37 NUMA node3 CPU(s): 3,7,11,15,19,23,27,31,35,39システムのグラフィカル表現を表示するには、以下のコマンドを実行します。
# dnf install hwloc-gui # lstopo
詳細なテキスト出力を表示するには、次のコマンドを実行します。
# dnf install hwloc # lstopo-no-graphics Machine (15GB) Package L#0 + L3 L#0 (8192KB) L2 L#0 (256KB) + L1d L#0 (32KB) + L1i L#0 (32KB) + Core L#0 PU L#0 (P#0) PU L#1 (P#4) HostBridge L#0 PCI 8086:5917 GPU L#0 "renderD128" GPU L#1 "controlD64" GPU L#2 "card0" PCIBridge PCI 8086:24fd Net L#3 "wlp61s0" PCIBridge PCI 8086:f1a6 PCI 8086:15d7 Net L#4 "enp0s31f6"
23.4. カーネルティック時間の設定 リンクのコピーリンクがクリップボードにコピーされました!
デフォルトでは、Red Hat Enterprise Linux はティックレスカーネルを使用します。ティックレスカーネルはアイドル状態の CPU に割り込みを行わないため、電力使用量が削減され、新しいプロセッサーがディープスリープ状態を利用できるようになります。Red Hat Enterprise Linux には動的ティックレスオプションもあります。これは、ハイパフォーマンスコンピューティングやリアルタイムコンピューティングなど、レイテンシーの影響を受けやすいワークロードに役立ちます。デフォルトでは、動的ティックレスオプションは無効になっています。TuneD プロファイルの cpu-partitioning を使用すると、isolated_cores として指定されたコアに対して動的ティックレスオプションを有効にできます。
手順
特定のコアで動的なティックレス動作を有効にするには、
nohz_fullパラメーターを使用して、カーネルコマンドラインでこれらのコアを指定します。たとえば、16 コアのシステムでは、nohz_full=1-15カーネルオプションを有効にします。# grubby --update-kernel=ALL --args="nohz_full=1-15"これにより、コア 1 から 15 までの動的なティックレス動作が有効になり、すべての時間管理が未指定のコアのみに移動します (コア 0)。
システムが起動したら、
rcuスレッドをレイテンシーを区別しないコア (この場合は core 0) に手動で移動します。# for i in pgrep rcu[^c] ; do taskset -pc 0 $i ; done-
オプション: カーネルコマンドラインで
isolcpusパラメーターを使用して、特定のコアをユーザー空間タスクから分離します。 オプション: カーネルのライトバック
bdi-flushスレッドの CPU アフィニティーをハウスキーピングコアに設定します。echo 1 > /sys/bus/workqueue/devices/writeback/cpumask
検証
システムを再起動したら、
dynticksが有効になっていることを確認します。# journalctl -xe | grep dynticks Mar 15 18:34:54 rhel-server kernel: NO_HZ: Full dynticks CPUs: 1-15.動的ティックレス設定が正しく機能していることを確認します。
# perf stat -C 1 -e irq_vectors:local_timer_entry taskset -c 1 sleep 3このコマンドは、CPU 1 に 3 秒間スリープするように指示しながら、CPU 1 のティックを測定します。デフォルトのカーネルタイマーの設定では、通常の CPU で 3100 ティックが表示されます。
# perf stat -C 0 -e irq_vectors:local_timer_entry taskset -c 0 sleep 3 Performance counter stats for 'CPU(s) 0': 3,107 irq_vectors:local_timer_entry 3.001342790 seconds time elapsed動的ティックレスカーネルを設定すると、代わりに 4 ティックが表示されるはずです。
# perf stat -C 1 -e irq_vectors:local_timer_entry taskset -c 1 sleep 3 Performance counter stats for 'CPU(s) 1': 4 irq_vectors:local_timer_entry 3.001544078 seconds time elapsed
23.5. 割り込み要求の概要 リンクのコピーリンクがクリップボードにコピーされました!
割り込み要求 (IRQ) は、ハードウェアからプロセッサーに送信される、即時の対応を要求するシグナルです。システム内の各デバイスには 1 つ以上の IRQ 番号が割り当てられます。これにより固有の割り込みを送信できるようになります。割り込みが有効な場合、プロセッサーは割り込み要求を受信すると、割り込み要求に対応するために、現在のアプリケーションスレッドの実行を直ちに一時停止します。
割り込みにより通常の動作が停止するため、割り込み頻度が高いとシステムパフォーマンスが著しく低下する可能性があります。割り込みアフィニティーを設定するか、優先度の低い割り込みを一括して送信する (複数の割り込みをまとめる) ことによって、割り込みにかかる時間を短縮できます。
割り込み要求には、smp_affinity という関連するアフィニティープロパティーがあります。これは、割り込み要求を処理するプロセッサーを定義するものです。アプリケーションのパフォーマンスを向上させ、特定の割り込みスレッドとアプリケーションスレッドがキャッシュラインを共有できるように、次の改善策を実施できます。
- 割り込みアフィニティーを割り当てる。
- 同じプロセッサーまたは同じコア上のプロセッサーへのプロセスアフィニティー。
割り込みステアリングに対応するシステムでは、割り込み要求の smp_affinity プロパティーを変更するとハードウェアが設定され、カーネルを介入することなくハードウェアレベルで特定のプロセッサーに割り込みを処理させる決定が行われるようになります。
23.6. 割り込みの手動分散 リンクのコピーリンクがクリップボードにコピーされました!
BIOS が NUMA トポロジーをエクスポートする場合、irqbalance サービスは、サービスを要求するハードウェアに対してローカルとなるノードで割り込み要求を自動的に処理できます。
手順
- 設定する割り込み要求に対応するデバイスを確認します。
プラットフォームのハードウェア仕様を見つけます。システムのチップセットが割り込みの分散に対応しているかどうかを確認します。
- チップセットが分散をサポートしている場合は、次の手順に従って割り込みの配信を設定できます。また、チップセットが割り込みの分散に使用するアルゴリズムを確認してください。BIOS によっては割り込み配信を設定するオプションがあります。
- チップセットが分散をサポートしていない場合は、チップセットは常にすべての割り込みを単一の静的 CPU にルーティングします。使用される CPU を設定することはできません。
システムでどの Advanced Programmable Interrupt Controller (APIC) モードが使用されているかを確認します。
$ journalctl --dmesg | grep APIC- システムで flat 以外のモードが使用されている場合は、Setting APIC routing to physical flat のような行が表示されます。
-
このようなメッセージが表示されない場合は、システムが
flatモードを使用します。 システムが
x2apicモードを使用する場合は、ブートローダー設定のカーネルコマンドラインにnox2apicオプションを追加してこれを無効にできます。非物理フラットモード (flat) だけが、複数の CPU への割り込み分散をサポートしています。このモードは、CPU が 8 個以下のシステムでのみ使用できます。
-
smp_affinityマスクを計算します。smp_affinityマスクの計算方法の詳細は、smp_affinityマスクの設定 を参照してください。
23.7. smp_affinity マスクの設定 リンクのコピーリンクがクリップボードにコピーされました!
smp_affinity の値は、システム内のすべてのプロセッサーを表す 16 進数のビットマスクとして保存されます。各ビットは異なる CPU を設定します。最も大きなビットは CPU 0 です。マスクのデフォルト値は f で、割り込み要求をシステム内のどのプロセッサーでも処理できることを意味します。この値を 1 に設定すると、割り込み要求を処理できるのがプロセッサー 0 だけになります。
手順
バイナリーで、割り込みを処理する CPU に値
1を使用します。たとえば、CPU0と CPU7が割り込みを処理するように設定するには、バイナリーコードとして0000000010000001を使用します。Expand 表23.1 CPU のバイナリービット CPU
15
14
13
12
11
10
9
8
7
6
5
4
3
2
1
0
バイナリー
0
0
0
0
0
0
0
0
1
0
0
0
0
0
0
1
バイナリーコードを 16 進数に変換します。
たとえば、Python を使用してバイナリーコードを変換するには、次のコマンドを実行します。
>>> hex(int('0000000010000001', 2)) '0x81'プロセッサーが 32 個を超えるシステムでは、32 ビットグループごとに
smp_affinity値を区切る必要があります。たとえば、64 プロセッサーシステムの最初の 32 プロセッサーのみが割り込み要求を処理できるようにするには、0xffffffff,00000000を使用します。特定の割り込み要求の割り込みアフィニティー値は、関連付けられた
/proc/irq/irq_number/smp_affinityファイルに保存されます。このファイルでsmp_affinityマスクを設定します。# echo mask > /proc/irq/irq_number/smp_affinity
第24章 tuna インターフェイスを使用したシステムの確認 リンクのコピーリンクがクリップボードにコピーされました!
tuna ツールは、チューニングタスクを実行する際の複雑さを軽減します。tuna を使用すると、スケジューラーの調整可能なパラメーターを調整したり、スレッドの優先度や IRQ ハンドラーを調整したり、CPU コアとソケットを分離したりできます。tuna を使用すると、次の操作を実行できます。
- システム上の CPU の表示
- 現在システム上で実行されている割り込み要求 (IRQ) のリスト表示
- スレッドに関するポリシーおよび優先度の情報の変更
- システムの現在のポリシーと優先度の表示
24.1. tuna ツールのインストール リンクのコピーリンクがクリップボードにコピーされました!
tuna ツールは、稼働中のシステムで使用されるように設計されています。アプリケーション固有の測定ツールにより、変更後すぐにシステムパフォーマンスの分析を開始できます。
手順
tunaツールをインストールします。# dnf install tuna
検証
利用可能な tuna
CLIオプションを表示します。# tuna -h詳細は、システム上の
tuna(8)man ページを参照してください。
24.2. tuna ツールを使用したシステムの状態の表示 リンクのコピーリンクがクリップボードにコピーされました!
tuna コマンドラインインターフェイス (CLI) ツールを使用して、システムの状態を表示できます。
前提条件
-
tunaツールがインストールされている。詳細は、Tuna ツールのインストール を参照してください。
手順
現在のポリシーおよび優先度を表示します。
# tuna show_threads 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 show_threads -t pid_or_cmd_listpid_or_cmd_list 引数は、コンマ区切りの PID またはコマンド名パターンのリストです。
状況に応じて、次のいずれかの操作を実行します。
- tuna CLI を使用して CPU をチューニングするには、tuna ツールを使用した CPU のチューニング の手順を完了します。
- tuna ツールを使用して IRQ をチューニングするには、tuna ツールを使用した IRQ のチューニング の手順を完了します。
変更した設定を保存します。
# tuna save filenameこのコマンドは、現在実行中のカーネルスレッドのみを保存します。実行していないプロセスは保存されません。
24.3. tuna ツールを使用した CPU のチューニング リンクのコピーリンクがクリップボードにコピーされました!
tuna コマンドは個々の CPU を管理できます。tuna ツールを使用すると、次のアクションを実行できます。
- Isolate CPUs
- 指定した CPU で実行しているすべてのタスクが、次に利用可能な CPU に移動します。CPU を分離すると、すべてのスレッドのアフィニティーマスクから CPU が削除され、CPU が利用できなくなります。
- Include CPUs
- 指定された CPU でタスクを実行できるようにします。
- Restore CPUs
- 指定した CPU を以前の設定に戻します。
前提条件
-
tunaツールがインストールされている。詳細は、tuna ツールのインストール を参照してください。
手順
現在実行中のすべてのプロセスをリスト表示します。
# ps ax | awk 'BEGIN { ORS="," }{ print $1 }' PID,1,2,3,4,5,6,8,10,11,12,13,14,15,16,17,19tunaインターフェイスでスレッドリストを表示します。# tuna show_threads -t 'thread_list from above cmd'状況に応じて、このコマンドを使用して、後述するいずれかの操作を実行してプロセスの CPU アフィニティーを管理します。
# tuna [command] --cpus cpu_list-
cpu_list 引数は、コンマ区切りの CPU 番号のリストです (例:
--cpus 0,2)。 -
現在の cpu_list に特定の CPU を追加するには、たとえば
--cpus +0を使用します。
-
cpu_list 引数は、コンマ区切りの CPU 番号のリストです (例:
状況に応じて、次のいずれかの操作を実行します。
CPU を分離するには、次のように入力します。
# tuna isolate --cpus cpu_listCPU を含めるには、次のように入力します。
# tuna include --cpus cpu_list
4 つ以上のプロセッサーを搭載したシステムを使用する場合は、すべての
sshスレッドを CPU0と1で実行し、すべてのhttpスレッドを CPU2と3で実行します。# tuna move --cpus 0,1 -t ssh*# tuna move --cpus 2,3 -t http\*
検証
現在の設定を表示して、適用された変更を確認します。
# tuna show_threads -t ssh* pid SCHED_ rtpri affinity voluntary nonvoluntary cmd 855 OTHER 0 0,1 23 15 sshd# tuna show_threads -t http\* pid SCHED_ rtpri affinity voluntary nonvoluntary cmd 855 OTHER 0 2,3 23 15 http詳細は、システム上の
/proc/cpuinfoファイルとtuna(8)man ページを参照してください。
24.4. tuna ツールを使用した IRQ のチューニング リンクのコピーリンクがクリップボードにコピーされました!
/proc/interrupts ファイルには、IRQ ごとの割り込みの数、割り込みのタイプ、およびその IRQ にあるデバイスの名前が記録されます。
前提条件
-
tunaツールがインストールされている。詳細は、tuna ツールのインストール を参照してください。
手順
現在の IRQ とそれらのアフィニティーを表示します。
# tuna show_irqs # users affinity 0 timer 0 1 i8042 0 7 parport0 0コマンドの影響を受ける IRQ のリストを指定します。
# tuna <command> --irqs irq_list --cpus cpu_list- irq_list 引数は、コンマ区切りの IRQ 番号またはユーザー名パターンのリストです。
-
<command>は、たとえば--spreadに置き換えます。
指定した CPU に割り込みを移動します。
# tuna show_irqs --irqs <128> users affinity 128 iwlwifi 0,1,2,3 # tuna move --irqs 128 --cpus 3-
irq_list 引数を 128 に置き換え、cpu_list 引数を
3に置き換えます。 -
cpu_list 引数は、コンマ区切りの CPU 番号のリストです (例:
--cpus 0,2)。詳細は、tuna ツールを使用した CPU のチューニング を参照してください。
-
irq_list 引数を 128 に置き換え、cpu_list 引数を
検証
選択した IRQ の状態を、割り込みを指定の CPU に移動してから比較します。
# tuna show_irqs --irqs 128 users affinity 128 iwlwifi 3詳細は、システム上の
/proc/interruptsファイルとtuna(8)man ページを参照してください。
第25章 メモリーアクセスを最適化するためのオペレーティングシステムの設定 リンクのコピーリンクがクリップボードにコピーされました!
RHEL に含まれるツールを使用して、ワークロード全体のメモリーアクセスを最適化するようにオペレーティングシステムを設定できます。
25.1. システムメモリーの問題を監視および診断するツール リンクのコピーリンクがクリップボードにコピーされました!
Red Hat Enterprise Linux では、システムパフォーマンスを監視し、システムメモリーに関連するパフォーマンスの問題を診断するために、次のツールを使用できます。
-
procps-ngパッケージに含まれるvmstatツールは、システムのプロセス、メモリー、ページング、ブロック I/O、トラップ、ディスク、CPU アクティビティーのレポートを表示します。マシンが最後にオンになった時点から、または前回のレポート以降に発生したこれらのイベントの平均値を表示する即時レポートを生成します。 valgrindフレームワークは、ユーザー空間バイナリーへの計装を提供します。このフレームワークには、プログラムのパフォーマンスのプロファイリングと分析に使用できる次のようなツールが多数含まれています。memcheckツールはvalgrindのデフォルトツールです。次のような、検出や診断が難しいさまざまなメモリーエラーを検出して報告します。- 無効なメモリーアクセス
- 未定義または初期化されていない値の使用
- 誤って解放されたヒープメモリー
- ポインターの重複 (バッファーの重複)
メモリーリーク
注記Memcheckはこれらのエラーを報告することしかできず、エラーの発生を防ぐことはできません。ただし、memcheckは、エラーが発生した場合すぐにエラーメッセージを記録します。
-
cachegrindツールは、アプリケーションがシステムのキャッシュ階層および分岐予測器とどのようにやりとりするかをシミュレートします。アプリケーションの実行期間中の統計情報を収集し、コンソールに概要を表示します。 massifツールは、指定されたアプリケーションによって使用されるヒープ領域を測定します。測定対象は、有用な領域および会計、調整用に割り当てられている追加領域の両方になります詳細は、システム上の
/usr/share/doc/valgrind-version/valgrind_manual.pdfファイルとvmstat(8)およびvalgrind(1)man ページを参照してください。
25.2. システムメモリーの概要 リンクのコピーリンクがクリップボードにコピーされました!
Linux カーネルは、システムメモリー (RAM) 内のリソースの使用率を最大化するように設計されています。このような設計上の特性により、またワークロードのメモリー要件に応じて、システムメモリーの一部がワークロードのためにカーネル内で使用され、メモリーのわずかな部分だけが空き状態のままになります。この空きメモリーは、特別なシステム割り当てやその他の低優先度または高優先度のシステムサービス用に予約されています。システムメモリーの残りの部分はワークロード専用であり、次の 2 つのカテゴリーに分けられます。
- ファイルメモリー
このカテゴリーに追加されたページは、永続ストレージのファイルの一部を表します。このページは、ページキャッシュからのものであり、アプリケーションのアドレス空間にマッピングされたり、マッピング解除されたりします。アプリケーションでは、
mmapシステムコールを使用してファイルをアプリケーションのアドレス空間にマッピングしたり、バッファー付き I/O 読み取りまたは書き込みシステムコールを使用してファイルを操作したりすることができます。バッファー付き I/O システムコールや、ページを直接マッピングするアプリケーションは、マッピングされていないページを再利用できます。その結果、カーネルは、同じページセットに対して負荷の高い I/O 操作が再発行されるのを避けるために、特にシステムがメモリーを大量に消費するタスクを実行していないときに、これらのページをキャッシュに保存します。
- 匿名メモリー
- このカテゴリーのページは、動的に割り当てられたプロセスで使用されているか、永続ストレージのファイルに関連しません。この一連のページは、アプリケーションスタックやヒープ領域など、各タスクのメモリー内制御構造をバックアップします。
25.3. 仮想メモリーパラメーター リンクのコピーリンクがクリップボードにコピーされました!
仮想メモリーのパラメーターは、/proc/sys/vm ディレクトリーにリスト表示されます。利用可能な仮想メモリーパラメーターを以下に示します。
vm.dirty_ratio- パーセンテージの値。変更された合計システムメモリーの割合がこの値に達すると、システムがディスクへの変更の書き込みを開始します。デフォルト値は 20 パーセントです。
vm.dirty_background_ratio- パーセンテージの値。システムメモリー合計の割合がこの値を超えると、システムはバックグラウンドでディスクへの変更の書き込みを開始します。デフォルト値は 10 パーセントです。
vm.overcommit_memory- 大量メモリーの要求を許可するか拒否するか決定する条件を定義します。デフォルト値は 0 です。デフォルトでは、カーネルは仮想メモリー割り当て要求が現在のメモリー量 (合計 + スワップ) に収まるかどうかを確認し、大きな要求のみを拒否します。要求が大きくないと判断された場合、仮想メモリーの割り当てが許可され、メモリーのオーバーコミットが発生する可能性があります。
overcommit_memoryパラメーターの値の設定- このパラメーターを 1 に設定すると、カーネルはメモリーのオーバーコミット処理を実行しません。これにより、メモリーがオーバーロードする可能性が向上しますが、メモリー集中型タスクのパフォーマンスが向上します。
-
このパラメーターを 2 に設定すると、カーネルは、使用可能なスワップ領域の合計と
overcommit_ratioで指定された物理 RAM の割合を足した値以上のメモリー要求を拒否します。この設定により、メモリーのオーバーコミットのリスクが軽減されます。この設定は、スワップパーティションが物理メモリーよりも大きいシステムでのみ使用してください。
vm.overcommit_ratio-
overcommit_memoryが 2 に設定されている場合に考慮される物理 RAM のパーセンテージを指定します。デフォルト値は 50 です。 vm.max_map_count- プロセスが使用可能なメモリーマップ領域の最大数を定義します。デフォルト値は 65530 です。アプリケーションに十分なメモリーマップ領域が必要な場合は、この値を増やします。
vm.min_free_kbytes-
予約済み空きページプールのサイズを設定します。また、Linux カーネルのページ回収アルゴリズムの動作を制御する
min_page、low_page、およびhigh_pageしきい値も設定します。さらに、システム全体で維持する空きメモリーの最小キロバイト数を指定します。これにより、低位の各メモリーゾーンに対して特定の値が計算されます。それぞれのゾーンには、そのサイズに比例した数の予約済み空きページが割り当てられます。 vm.min_free_kbytesパラメーターの値の設定- このパラメーターの値を増やすと、アプリケーションのワーキングセットで使用可能なメモリーが実質的に減少します。したがって、この設定は、ドライバーのバッファーをアトミックなコンテキストで割り当てる必要がある、カーネル主導のワークロードにのみ使用してください。
パラメーターの値を下げると、システムでメモリーが不足した場合に、カーネルがシステム要求の処理をレンダリングできなくなる可能性があります。
警告極端な値は、システムのパフォーマンスに悪影響を与えます。
vm.min_free_kbytesが非常に低い値に設定すると、システムのメモリーを効果的に回収できなくなります。これにより、システムがクラッシュし、サービス割り込みやその他のカーネルサービスに失敗する可能性があります。ただし、vm.min_free_kbytesを設定すると、システムの回収アクティビティーが大幅に増大し、誤ったダイレクト回収状態により割り当てレイテンシーが発生します。これにより、システムが直ちにメモリー不足状態になる可能性があります。vm.min_free_kbytes パラメーターは、min_pagesという名前のページ回収ウォーターマークも設定します。このウォーターマークは、ページの回収アルゴリズムを管理する他の 2 つのメモリー基準 (low_pages、およびhigh_pages) を決定する要素として使用されます。/proc/PID/oom_adjシステムのメモリーが不足し、panic_on_oomパラメーターが 0 に設定されている場合、oom_killer関数が、システムが回復するまで、最も高いoom_scoreを持つプロセスからプロセスを強制終了します。oom_adjパラメーターは、プロセスのoom_scoreを決定します。このパラメーターはプロセス識別子ごとに設定されます。値が -17 の場合、そのプロセスのoom_killerが無効になります。その他の有効な値は -16 から 15 までの値です。注記調整したプロセスによって作成されたプロセスは、そのプロセスの
oom_scoreを継承します。
vm.swappiness- swappiness 値 (0 から 200 までの範囲) は、システムが匿名メモリープールまたはページキャッシュメモリープールからのメモリー回収を優先する度合いを制御します。
- swappiness パラメーターの値の設定
- 値を高くすると、ファイルマップ主導のワークロードが優先される一方で、あまり活発にアクセスされないプロセスの RAM の匿名マップメモリーがスワップアウトされます。これは、ストレージ内のファイルなどのデータをメモリー上に常駐させることに依存するファイルサーバーやストリーミングアプリケーションで、サービス要求の I/O レイテンシーを削減するのに役立ちます。
値を小さくすると、匿名マップ主導のワークロードが優先される一方で、ページキャッシュ (ファイルマップメモリー) が回収されます。この設定は、ファイルシステム情報に大きく依存しないアプリケーション、数学的アプリケーションや数値計算アプリケーションなどの動的に割り当てられたメモリーやプライベートメモリーを大幅に使用するアプリケーション、QEMU のような一部のハードウェア仮想化スーパーバイザーにおいて有用です。
vm.swappinessパラメーターのデフォルト値は 60 です。警告vm.swappinessを 0 に設定すると、匿名メモリーをディスクにスワップアウトすることが積極的に回避されます。そのため、メモリーまたは I/O を多用するワークロードの実行中にoom_killer関数がプロセスを強制終了する可能性が高まります。
25.4. ファイルシステムパラメーター リンクのコピーリンクがクリップボードにコピーされました!
ファイルシステムパラメーターは、/proc/sys/fs ディレクトリーにリスト表示されます。利用可能なファイルシステムパラメーターを以下に示します。
aio-max-nr- すべてのアクティブな非同期入出力コンテキストで許可されるイベントの最大数を定義します。デフォルト値は 65536 で、この値を変更してもカーネルデータ構造の事前割り当てやサイズ変更は行われません。
file-max- システム全体でのファイルハンドルの最大数を決定します。Red Hat Enterprise Linux のデフォルト値は、カーネルの起動時に使用可能な空きメモリーページの 10 分の 1 と 8192 のうち、いずれか大きい方です。この値を設定すると、利用可能なファイルハンドルがないためにエラーを解決できます。
25.5. カーネルパラメーター リンクのコピーリンクがクリップボードにコピーされました!
カーネルパラメーターのデフォルト値は /proc/sys/kernel/ ディレクトリーにあります。この値は、カーネルによって提供されるデフォルト値、または sysctl を使用してユーザーが指定した値に設定されます。次のカーネルパラメーターは、System V IPC (sysvipc) 関連のシステムコールである msg* および shm* の制限を設定します。
msgmax-
メッセージキューの単一のメッセージに対する最大許容サイズ (バイト単位) を定義します。この値は、キューのサイズ (
msgmnb) を超えることはできません。システムの現在のmsgmax値を確認するには、sysctl kernel.msgmaxコマンドを使用します。 msgmnb-
単一のメッセージキューの最大サイズをバイト単位で定義します。
sysctl msgmnbコマンドを使用して、システムの現在のmsgmnb値を確認します。 msgmni-
メッセージキュー識別子の最大数 (つまりキューの最大数) を定義します。システムの現在の
msgmni値を確認するには、sysctl kernel.msgmniコマンドを使用します。 shmall-
一度にシステムで使用できる共有メモリーページの合計量を定義します。たとえば、AMD64 および Intel 64 のアーキテクチャーでは、ページは 4096 バイトです。システムの現在の
shmall値を確認するには、sysctl kernel.shmallコマンドを使用します。 shmmax-
カーネルが許可する単一の共有メモリーセグメントの最大サイズをバイト単位で定義します。カーネルで、1Gb までの共有メモリーセグメントがサポートされるようになりました。システムの現在の
shmmax値を確認するには、sysctl kernel.shmmaxコマンドを使用します。 shmmni- システム全体の共有メモリーセグメントの最大数を定義します。すべてのシステムでは、デフォルト値は 4096 です。
第26章 SystemTap の使用 リンクのコピーリンクがクリップボードにコピーされました!
システム管理者は、SystemTap を使用して、実行中の RHEL システム上のバグやパフォーマンスの問題の根本的な原因を特定できます。アプリケーション開発者は、SystemTap を使用して、RHEL 環境内でのアプリケーションの動作を詳細に監視および分析できます。
26.1. SystemTap の目的 リンクのコピーリンクがクリップボードにコピーされました!
SystemTap は、オペレーティングシステム (特にカーネル) の動作を詳細に調査および監視するために使用できる追跡およびプロービングツールです。SystemTap は、netstat、ps、top、iostat などのツールの出力に似た情報を提供します。ただし、SystemTap は収集した情報をフィルタリング、分析するためのオプションがより多く用意されています。SystemTap スクリプトでは、SystemTap が収集する情報を指定します。
SystemTap は、カーネルアクティビティーを追跡するためのインフラストラクチャーをユーザーに提供し、この追跡機能を次の 2 つの特性とともに提供することで、既存の Linux 監視ツール群を補完することを目的としています。
- 柔軟性
- SystemTap フレームワークを使用すると、カーネル空間で発生するさまざまなカーネル関数、システムコール、その他のイベントを調査および監視するための簡単なスクリプトを開発できます。そのため、SystemTap はツールというよりも、独自のカーネル専用のフォレンジックおよび監視ツールを開発するために使用できるシステムであるといえます。
- 使いやすさ
- SystemTap を使用すると、カーネルを再コンパイルしたりシステムを再起動したりすることなく、カーネルのアクティビティーを監視できます。
26.2. SystemTap のインストール リンクのコピーリンクがクリップボードにコピーされました!
SystemTap の使用を開始するには、必要なパッケージをインストールします。複数のカーネルを持つシステムで、複数のカーネルに対して SystemTap を使用するには、各カーネルバージョンに対応するカーネルパッケージをインストールします。
前提条件
- デバッグおよびソースリポジトリーの有効化 の説明に従って、デバッグリポジトリーを有効にした。
手順
必要な SystemTap パッケージをインストールします。
# dnf install systemtap必要なカーネルパッケージをインストールします。
stap-prepの使用:# stap-prepstap-prepが機能しない場合は、必要なカーネルパッケージを手動でインストールします。# dnf install kernel-debuginfo-$(uname -r) kernel-debuginfo-common-$(uname -m)-$(uname -r) kernel-devel-$(uname -r)$(uname -m)は、システムのハードウェアプラットフォームに自動的に置き換えられ、$(uname -r)は、実行中のカーネルのバージョンに自動的に置き換えられます。
検証
SystemTap でプローブするカーネルが現在使用中の場合は、インストールが成功したかどうかをテストします。
# stap -v -e 'probe kernel.function("vfs_read") {printf("read performed\n"); exit()}'SystemTap のデプロイが成功すると、次のような出力が表示されます。
Pass 1: parsed user script and 45 library script(s) in 340usr/0sys/358real ms. Pass 2: analyzed script: 1 probe(s), 1 function(s), 0 embed(s), 0 global(s) in 290usr/260sys/568real ms. Pass 3: translated to C into "/tmp/stapiArgLX/stap_e5886fa50499994e6a87aacdc43cd392_399.c" in 490usr/430sys/938real ms. Pass 4: compiled C into "stap_e5886fa50499994e6a87aacdc43cd392_399.ko" in 3310usr/430sys/3714real ms. Pass 5: starting run. read performed Pass 5: run completed in 10usr/40sys/73real ms.ここでは、以下のようになります。
-
Pass 5: starting runは、SystemTap がカーネルをプローブするための計装を正常に作成し、その計装を実行したことを示しています。 -
read performedは、SystemTap が指定されたイベント (この例では VFS 読み取り) を検出したことを示しています。 -
Pass 5: run completed in <time> msは、SystemTap が有効なハンドラーを実行したことを示しています。また、テキストを表示し、エラーなく閉じたことを示しています。
26.3. SystemTap を実行する特権 リンクのコピーリンクがクリップボードにコピーされました!
SystemTap スクリプトを実行するには、システム特権の昇格が必要です。しかし、場合によっては、特権のないユーザーが自分のマシンで SystemTap の計装を実行する必要があります。
ユーザーが root アクセス権なしで SystemTap スクリプトをビルドおよび実行できるようにするには、次の両方のユーザーグループにユーザーを追加します。
- stapdev
-
このグループのメンバーは
stapを使用して SystemTap スクリプトを実行したり、staprunを使用して SystemTap インストルメンテーションモジュールを実行したりできます。stapを実行するには、SystemTap スクリプトをカーネルモジュールにコンパイルし、カーネルにロードする必要があります。これを行うには、システムに対する昇格された特権が必要であり、stapdevのメンバーにはこの特権が付与されます。この特権は、stapdevのメンバーに事実上の root アクセス権も付与するものです。stapdevグループのメンバーシップは、root アクセス権を与えても問題のない信頼できるユーザーにのみ付与してください。 - stapusr
-
このグループのメンバーが SystemTap インストルメンテーションモジュールの実行に使用できるのは、
staprunのみです。さらに、このグループのユーザーは、/lib/modules/<kernel_version>/systemtap/ディレクトリーからのみ、これらのモジュールを実行できます。このディレクトリーは、root ユーザーのみが所有し、書き込み可能である必要があります。
26.4. SystemTap スクリプトの実行 リンクのコピーリンクがクリップボードにコピーされました!
SystemTap スクリプトは、標準入力またはファイルから実行できます。SystemTap のインストール時に配布されるサンプルスクリプトは、サンプル SystemTap スクリプト または /usr/share/systemtap/examples ディレクトリーにあります。
前提条件
- SystemTap と必要なカーネルパッケージが、Systemtap のインストール の説明に従ってインストールされている。
SystemTap スクリプトを通常のユーザーとして実行するために、そのユーザーを SystemTap グループに追加する。
# usermod --append --groups stapdev,stapusr <user_name>
手順
SystemTap スクリプトを実行します。
標準入力の場合:
# stap -e "probe timer.s(1) {exit()}"ファイルから:
# stap <file_name>.stp
26.5. サンプル SystemTap スクリプト リンクのコピーリンクがクリップボードにコピーされました!
SystemTap のインストール時に配布されるサンプルスクリプトは、/usr/share/systemtap/examples ディレクトリーにあります。各 SystemTap スクリプトを実行するには、stap コマンドを使用します。
- 関数呼び出しのトレース
para-callgraph.stpSystemTap スクリプトを使用して、関数の呼び出しと関数の戻り値をトレースできます。# stap para-callgraph.stp <argument1 argument2>このスクリプトは、次の 2 つのコマンドライン引数を取ります。
- 開始/終了をトレースする関数の名前。
もう 1 つは、トリガー関数です (任意)。この関数は、スレッドごとのトレースを有効または無効にします。
トリガー関数が終了するまで、各スレッドでのトレースが継続されます。
- ポーリングアプリケーションの監視
timeout.stpSystemTap スクリプトを使用して、どのアプリケーションがポーリングしているかを特定および監視できます。これを把握することで、不要なポーリングや過剰なポーリングを追跡できます。これは、トラッキングは、CPU 使用率や省電力を改善するための領域を特定するのに役立ちます。# stap timeout.stpこのスクリプトは、各アプリケーションが
poll、select、epoll、itimer、futex、nanosleep、Signalシステムコールを何回使用したかを経時的に追跡します。- プロセスごとのシステムコールボリュームの追跡
syscalls_by_proc.stpSystemTap スクリプトを使用して、システムコールを最も多く実行しているプロセスを確認できます。上位 20 件のプロセスが表示されます。# stap syscalls_by_proc.stp- ネットワークソケットコードで呼び出された関数の追跡
socket-trace.stpSystemTap スクリプトを使用して、カーネルのnet/socket.cファイルから呼び出された関数をトレースできます。これにより、各プロセスがカーネルレベルでネットワークとどのようにやり取りしているかを詳細に確認できます。# stap socket-trace.stp- 各ファイルの読み取りまたは書き込みの I/O 時間の追跡
iotime.stpSystemTap スクリプトを使用して、各プロセスがファイルへの読み取りまたは書き込みを行うのにかかる時間を監視できます。これにより、システムへの読み込みに時間がかかっているファイルを判断する上で役立ちます。# stap iotime.stp- タスクからサイクルを奪っている IRQ やその他のプロセスを追跡する
cycle_thief.stpSystemTap スクリプトを使用すると、タスクが実行されている時間と実行されていない時間を追跡できます。これにより、どのプロセスがタスクからサイクルを奪っているかを特定できます。# stap cycle_thief.stp -x pid詳細は、
/usr/share/systemtap/examplesディレクトリーを参照してください。注記SystemTap スクリプトの詳細な例と情報は、
/usr/share/systemtap/examples/index.html ファイルにあります。Web ブラウザーで開くと、使用可能なすべてのスクリプトとその説明がリスト表示されます。
26.6. SystemTap のクロスインストルメンテーション リンクのコピーリンクがクリップボードにコピーされました!
SystemTap のクロスインストルメンテーションは、あるシステムで SystemTap スクリプトから SystemTap インストルメンテーションモジュールを作成し、SystemTap が完全にデプロイされていない別のシステムで使用します。ユーザーが SystemTap スクリプトを実行すると、そのスクリプトからカーネルモジュールが構築されます。次に SystemTap はモジュールをカーネルに読み込みます。
通常、SystemTap スクリプトは SystemTap がデプロイされているシステムでのみ実行できます。SystemTap を 10 台のシステムで実行するには、このようなすべてのシステムに SystemTap をデプロイする必要があります。場合によっては、これは実現不可能または推奨されない場合があります。たとえば、企業のポリシーで、特定のマシンにコンパイラーやデバッグ情報を提供するパッケージのインストールが禁止されている場合には、SystemTap のデプロイメントができなくなります。
この状況を回避するには、クロスインストルメンテーションを使用します。クロスインストルメンテーションとは、あるコンピューターの SystemTap スクリプトから SystemTap インストルメンテーションモジュールを生成して、別のシステムで使用するプロセスです。このプロセスには、以下のような効果があります。
-
各種マシンのカーネル情報パッケージを単一のホストマシにインストールできる。カーネルのパッケージ化にバグがあると、インストールが妨げられる場合があります。このような場合、ホストシステムとターゲットシステムの
kernel-debuginfoパッケージとkernel-develパッケージが同じである必要があります。バグが発生した場合は、Red Hat JIRA でバグを報告してください。 生成された SystemTap インストルメンテーションモジュールを使用する際に、各ターゲットマシンにインストールする必要があるのは、
systemtap-runtimeというパッケージだけです。ビルドされたインストルメンテーションモジュールを動作させるには、ホストシステムがターゲットシステムと同じアーキテクチャーであり、同じ Linux ディストリビューションを実行している必要があります。- 用語
インストルメンテーションモジュール
SystemTap スクリプトからビルドされるカーネルモジュール。SystemTap モジュールは、ホストシステム上にビルドされ、ターゲットシステムのターゲットカーネルにロードされます。
ホストシステム
ターゲットシステムにロードできるように、インストルメンテーションモジュール (SystemTap スクリプトから) がコンパイルされるシステム。
ターゲットシステム
インストルメンテーションモジュールが (SystemTap スクリプトから) ビルドされるシステム。
ターゲットカーネル
ターゲットシステムのカーネル。これは、インストルメンテーションモジュールをロードして実行するカーネルです。
26.7. SystemTap のクロスインストルメンテーションの初期化 リンクのコピーリンクがクリップボードにコピーされました!
SystemTap のクロスインストルメンテーションを初期化して、あるシステム上で SystemTap スクリプトから SystemTap インストルメンテーションモジュールをビルドし、SystemTap が完全にデプロイされていない別のシステムでこのモジュールを使用します。
前提条件
- SystemTap のインストール で説明されているように、SystemTap がホストシステムにインストールされている。
systemtap-runtimeパッケージが各ターゲットシステムにインストールされている。# dnf install systemtap-runtime- ホストシステムとターゲットシステムが両方とも同じアーキテクチャーである。
ホストシステムとターゲットシステムの両方で、同じメジャーバージョンの Red Hat Enterprise Linux (Red Hat Enterprise Linux 10 など) が実行されている。
重要カーネルパッケージのバグにより、複数の
kernel-debuginfoパッケージとkernel-develパッケージを 1 つのシステムにインストールできない場合があります。このような場合、ホストシステムとターゲットシステムのマイナーバージョンが同じである必要があります。バグが発生した場合は、Red Hat JIRA でバグを報告してください。
手順
各ターゲットシステムで実行されているカーネルを特定します。
$ uname -r- 各 ターゲット システムに対して上記のステップを繰り返します。
- Systemtap のインストール で説明されている方法に従って、ホストシステムで各ターゲットシステムのターゲットカーネルと関連パッケージをインストールします。
ホストシステムでインストルメンテーションモジュールをビルドし、このモジュールをターゲットシステムにコピーして、次のいずれかの方法でこのモジュールを実行します。
ホストシステムからターゲットシステムへの SSH 接続が可能な場合は、リモート実装を使用します。
# stap --remote <target_system> scriptこれを正常に実行するには、ホストシステムからターゲットシステムへの SSH 接続が確立できることを確認する必要があります。
手動:
ホストシステムでインストルメンテーションモジュールをビルドします。
# stap -r <kernel_version> script -m <module_name> -p 4<kernel_version>はステップ 1 で特定したターゲットカーネルのバージョン、scriptはインストルメンテーションモジュールに変換するスクリプト、<module_name>はインストルメンテーションモジュールの任意の名前です。-p4オプションは、SystemTap にコンパイルしたモジュールを読み込まないように指示します。インストルメンテーションモジュールをコンパイルしたら、それをターゲットシステムにコピーし、次のコマンドを使用してロードします。
# staprun <module_name>.ko
第27章 スケジューリングポリシーの調整 リンクのコピーリンクがクリップボードにコピーされました!
Red Hat Enterprise Linux ではプロセス実行の最小単位をスレッドと呼んでいます。システムスケジューラーは、スレッドを実行するプロセッサーと、スレッドの実行期間を決定します。しかし、スケジューラーの主な目標はシステムを常に稼働させ続けることです。そのため、スケジューラーは、アプリケーションのスケジューリングポリシーのパフォーマンスカテゴリーに最適な形で、スレッドをスケジュールしない可能性があります。
たとえば、NUMA システムでノード B のプロセッサーが利用可能になったときアプリケーションはノード A で実行中だったと仮定します。プロセッサーをノード B でビジー状態に維持するために、スケジューラーはアプリケーションのスレッドのいずれかをノード B に移動します。ただし、アプリケーションスレッドは依然としてノード A のメモリーにアクセスする必要があります。ただし、スレッドがノード B で実行され、ノード A のメモリーがスレッドに対してローカルにならないため、このメモリーへのアクセスには時間がかかります。そのため、スレッドがノード B での実行を終了するには、ノード A のプロセッサーが利用可能になるまで待機してから、ローカルメモリーアクセスで元のノードでスレッドを実行するよりも時間がかかる場合があります。
27.1. スケジューリングポリシーの分類 リンクのコピーリンクがクリップボードにコピーされました!
パフォーマンス重視のアプリケーションでは、多くの場合、設計者または管理者がスレッドの実行場所を決定することでメリットが得られます。Linux スケジューラーは、スレッドが実行される場所と期間を決定するいくつかのスケジューリングポリシーを実装します。以下は、スケジューリングポリシーの主なカテゴリーです。
- 通常のポリシー
- 通常スレッドは、通常の優先度のタスクに使用されます。
- リアルタイムポリシー
- リアルタイムポリシーは、中断なしで完了する必要のある時間的制約のあるタスクに使用されます。リアルタイムスレッドは、タイムスライスの対象ではありません。つまり、スレッドは、ブロック、終了、デプロイメント、または優先度の高いスレッドによってプリエンプションされるまで実行されます。
最も優先度の低いリアルタイムスレッドは、通常のポリシーを持つスレッドの前にスケジュールされます。詳細は、SCHED_FIFO を使用した静的優先度スケジューリング、SCHED_RR を使用したラウンドロビン優先度スケジューリング、およびシステム上の sched(7)、sched_setaffinity(2)、sched_getaffinity(2)、sched_setscheduler(2)、および sched_getscheduler(2) man ページを参照してください。
27.2. SCHED_FIFO を使用した静的優先度スケジューリング リンクのコピーリンクがクリップボードにコピーされました!
SCHED_FIFO は静的優先度スケジューリングとも呼ばれ、各スレッドに固定の優先度を定義するリアルタイムポリシーです。このポリシーにより、管理者はイベントの応答時間を改善し、レイテンシーを短縮できます。時間的制約のあるタスクでは、このポリシーを長時間実行しないでください。SCHED_FIFO が使用されている場合、スケジューラーは SCHED_FIFO の全スレッドのリストを優先度順にスキャンし、実行準備ができているスレッドを最も優先度の高いものとしてスケジュールします。SCHED_FIFO スレッドの優先度レベルは、1 から 99 までの任意の整数にすることができます。ここで、99 は最も高い優先度として処理されます。最初は低い数値に設定して、レイテンシーの問題が特定された場合にのみ、優先度を上げてください。
リアルタイムスレッドはタイムスライスの対象ではないため、優先度を 99 に設定しないでください。これにより、プロセスは移行およびウォッチドッグスレッドと同じ優先レベルを維持します。スレッドが演算ループに入り、これらのスレッドがブロックされると、実行できなくなります。単一のプロセッサーを持つシステムは、この状況では最終的にハングします。
管理者は、SCHED_FIFO 帯域幅を制限し、リアルタイムのアプリケーションプログラマーがプロセッサーを単調にするリアルタイムのタスクを開始できないようにすることができます。以下は、このポリシーで使用されるパラメーターの一部です。
/proc/sys/kernel/sched_rt_period_us- このパラメーターは、プロセッサー帯域幅の 100 パーセントとみなされる期間 (マイクロ秒単位) を定義します。デフォルト値は 1000000 μs つまり 1 秒 です。
/proc/sys/kernel/sched_rt_runtime_us- このパラメーターは、リアルタイムスレッドを実行する時間 (マイクロ秒単位) を定義します。デフォルト値は 950000 μs つまり 0.95 秒 です。
27.3. SCHED_RR を使用したラウンドロビン優先度スケジューリング リンクのコピーリンクがクリップボードにコピーされました!
SCHED_RR は、SCHED_FIFO のラウンドロビン型です。このポリシーは、複数のスレッドを同じ優先レベルで実行する必要がある場合に役に立ちます。SCHED_FIFO と同様に、SCHED_RR は、各スレッドに固定の優先度を定義するリアルタイムポリシーです。スケジューラーは、すべての SCHED_RR スレッドのリストを優先度順にスキャンし、実行準備ができている最も優先度の高いスレッドをスケジュールします。ただし、SCHED_FIFO とは異なり、優先順位が同じスレッドは、特定のタイムスライス内のラウンドロビンスタイルでスケジュールされます。このタイムスライスの値は、/proc/sys/kernel/sched_rr_timeslice_ms ファイルの sched_rr_timeslice_ms カーネルパラメーターでミリ秒単位で設定できます。最小値は 1 ミリ秒 です。
27.4. SCHED_OTHER を使用した通常のスケジューリング リンクのコピーリンクがクリップボードにコピーされました!
SCHED_OTHER はデフォルトのスケジューリングポリシーです。このポリシーは Completely Fair Scheduler (CFS) を使用して、このポリシーでスケジュールされているすべてのスレッドへの公平プロセッサーアクセスを許可します。このポリシーは、スレッドが多数ある場合や、データスループットの優先度が優先される場合に最も便利です。これは、時間とともにスレッドをより効率的にスケジュールできるためです。このポリシーが使用されると、スケジューラーは各プロセススレッドの niceness 値に基づいて動的な優先順位リストを作成します。管理者はプロセスの niceness 値を変更できますが、スケジューラーの動的優先順位のリストを直接変更することはできません。
27.5. スケジューラーポリシーの設定 リンクのコピーリンクがクリップボードにコピーされました!
chrt コマンドラインツールを使用して、スケジューラーのポリシーと優先度を確認および調整できます。希望するプロパティーで新しいプロセスを開始するか、実行中のプロセスのプロパティーを変更できます。また、ランタイム時にポリシーを設定するのにも使用できます。
手順
アクティブなプロセスのプロセス ID (PID) を表示します。
# ps-
psコマンドで--pidまたは-pオプションを使用して、特定の PID の詳細を表示します。 特定のプロセスのスケジューリングポリシー、PID、および優先順位を確認します。
# chrt -p 468 pid 468's current scheduling policy: SCHED_FIFO pid 468's current scheduling priority: 85 # chrt -p 476 pid 476's current scheduling policy: SCHED_OTHER pid 476's current scheduling priority: 0プロセスのスケジューリングポリシーを設定します。次に例を示します。
PID 1000 のプロセスを
SCHED_FIFOに設定し、優先度を 50 に設定するには、以下を実行します。# chrt -f -p 50 1000PID 1000 のプロセスを
SCHED_OTHERに設定し、優先度を 0 に設定するには、以下を実行します。# chrt -o -p 0 1000PID 1000 のプロセスを
SCHED_RRに設定し、優先度を 10 に設定するには、以下を実行します。# chrt -r -p 10 1000特定のポリシーおよび優先度で新規アプリケーションを開始するには、アプリケーションの名前を指定します。
# chrt -f 36 /bin/my-app
27.6. chrt コマンドのポリシーオプション リンクのコピーリンクがクリップボードにコピーされました!
chrt コマンドを使用して、プロセスのスケジューリングポリシーを表示および設定できます。次の表は、プロセスのスケジューリングポリシーを設定するために使用できる、適切なポリシーオプションを説明しています。
| 短いオプション | Long オプション | 説明 |
|---|---|---|
|
|
|
スケジュールを |
|
|
|
スケジュールを |
|
|
|
スケジュールを |
27.7. ブートプロセス中のサービス優先度の変更 リンクのコピーリンクがクリップボードにコピーされました!
systemd サービスを使用すると、ブートプロセス中に起動するサービスのリアルタイムの優先度を設定できます。ブートプロセス中のサービスの優先度を変更するには、ユニット設定ディレクティブを使用します。ブートプロセスの優先度は、サービスセクションで次のディレクティブを使用して変更できます。
-
CPUSchedulingPolicy=: 実行されるプロセスの CPU スケジューリングポリシーを設定します。これは、other、fifo、および rr ポリシーを設定するために使用されます。 -
CPUSchedulingPriority=: 実行されるプロセスの CPU スケジューリング優先度を設定します。設定可能な優先度の範囲は、選択した CPU スケジューリングポリシーにより異なります。リアルタイムスケジューリングポリシーでは、1 (最も低い優先度) から 99 (最も高い優先度) の整数を使用できます。
サービスの優先度は、ブートプロセス中に、および mcelog サービスを使用して変更できます。
前提条件
-
tunedをインストールして有効化した。詳細は、TuneD のインストールと有効化 を参照してください。
手順
実行中のスレッドのスケジュールの優先度を表示します。
# tuna --show_threads thread ctxt_switches pid SCHED_ rtpri affinity voluntary nonvoluntary cmd 1 OTHER 0 0xff 3181 292 systemd 2 OTHER 0 0xff 254 0 kthreadd 3 OTHER 0 0xff 2 0 rcu_gp 4 OTHER 0 0xff 2 0 rcu_par_gp 6 OTHER 0 0 9 0 kworker/0:0H-kblockd 7 OTHER 0 0xff 1301 1 kworker/u16:0-events_unbound 8 OTHER 0 0xff 2 0 mm_percpu_wq 9 OTHER 0 0 266 0 ksoftirqd/0 [...]補足的な mcelog サービス設定ディレクトリーファイルを作成し、このファイルにポリシー名と優先度を挿入します。
# cat << EOF > /etc/systemd/system/mcelog.service.d/priority.conf [Service] CPUSchedulingPolicy=fifo CPUSchedulingPriority=20 EOFsystemdスクリプト設定を再読み込みします。# systemctl daemon-reloadmcelogサービスを再起動します。# systemctl restart mcelog
検証
systemd問題で設定したmcelog優先度を表示します。# tuna -t mcelog -P thread ctxt_switches pid SCHED_ rtpri affinity voluntary nonvoluntary cmd 826 FIFO 20 0,1,2,3 13 0 mcelog
27.8. 優先順位マップ リンクのコピーリンクがクリップボードにコピーされました!
優先度はグループで定義され、特定のカーネル機能専用のグループもあります。リアルタイムスケジューリングポリシーでは、1 (最も低い優先度) から 99 (最も高い優先度) までの整数が使用されます。
次の表は、プロセスのスケジューリングポリシーを設定する際に使用できる優先度の範囲を示しています。
| 優先度 | Threads | 説明 |
|---|---|---|
| 1 | 優先度の低いカーネルスレッド |
通常、この優先度は |
| 2 - 49 | 利用可能 | 標準的なアプリケーションの優先度に使用される範囲。 |
| 50 | ハード IRQ のデフォルト値 | |
| 51 - 98 | 優先度の高いスレッド | この範囲は、定期的に実行されるスレッドと、迅速な応答時間に使用します。CPU にバインドされたスレッドには割り込みが必要になるため、この範囲を使用しないでください。 |
| 99 | ウォッチドッグおよび移行 | 最も高い優先順位で実行される必要があるシステムスレッド。 |
27.9. TuneD cpu-partitioning プロファイル リンクのコピーリンクがクリップボードにコピーされました!
レイテンシーの影響を受けやすいワークロード向けに Red Hat Enterprise Linux をチューニングするには、cpu-partitioning TuneD プロファイルを使用します。Red Hat Enterprise Linux 9 以降では、cpu-partitioning TuneD プロファイルを使用して、低レイテンシーのチューニングをより効率的に実行できます。このプロファイルは、個々の低レイテンシーアプリケーションの要件に従って簡単にカスタマイズできます。次の図は、cpu-partitioning プロファイルの使用方法を示す例です。この例では、CPU とノードのレイアウトを使用します。
/etc/tuned/cpu-partitioning-variables.conf ファイルで cpu-partitioning プロファイルを設定するには、次の設定オプションを使用します。
- 負荷分散機能のある分離された CPU
cpu-partitioningの図では、4 から 23 までの番号が付けられたブロックが、デフォルトの分離された CPU です。カーネルスケジューラーのプロセスの負荷分散は、この CPU で有効になります。これは、カーネルスケジューラーの負荷分散を必要とする複数のスレッドを使用した低レイテンシープロセス用に設計されています。/etc/tuned/cpu-partitioning-variables.confファイルで、isolated_cores=cpu-listオプションを使用して cpu-partitioning プロファイルを設定できます。このオプションに、カーネルスケジューラーの負荷分散を使用する分離された CPU を列挙します。分離された CPU のリストはコンマで区切るか、または 3-5 のようにダッシュを使用して範囲を指定できます。このオプションは必須です。このリストにない CPU は、自動的にハウスキーピング CPU と見なされます。
- 負荷分散を行わずに分離した CPU
cpu-partitioning の図では、2 と 3 の番号が付けられたブロックは、追加のカーネルスケジューラープロセスの負荷分散を提供しない分離された CPU です。
/etc/tuned/cpu-partitioning-variables.confファイルで、no_balance_cores=cpu-listオプションを使用してcpu-partitioningプロファイルを設定できます。このオプションに、カーネルスケジューラーの負荷分散を使用しない分離された CPU を列挙します。no_balance_coresオプションの指定は任意ですが、このリスト内の CPU は、isolated_coresリストに列挙されている CPU の一部である必要があります。これらの CPU を使用するアプリケーションスレッドは、各 CPU に個別にピニングする必要があります。- ハウスキーピング CPU
-
cpu-partitioning-variables.confファイル内で分離されていない CPU は、自動的にハウスキーピング CPU と見なされます。ハウスキーピング CPU では、すべてのサービス、デーモン、ユーザープロセス、移動可能なカーネルスレッド、割り込みハンドラー、およびカーネルタイマーの実行が許可されます。
27.10. 低レイテンシーチューニングへの TuneD の cpu-partitioning プロファイルの使用 リンクのコピーリンクがクリップボードにコピーされました!
TuneD の cpu-partitioning プロファイルを使用して、システムを低レイテンシーのためにチューニングできます。この場合のアプリケーションでは、以下を使用します。
- ネットワークからデータを読み取る 1 つの専用のリーダースレッドを、CPU 2 にピニングします。
- このネットワークデータを処理する多数のスレッドを、CPU 4 - 23 にピニングします。
- 処理されたデータをネットワークに書き込む 1 つの専用のライタースレッドを、CPU 3 にピニングします。
前提条件
-
dnf install tuned-profiles-cpu-partitioningコマンドを root で使用して、cpu-partitioningTuneD プロファイルをインストールしている。
手順
/etc/tuned/cpu-partitioning-variables.confファイルを次のように編集します。isolated_cores=${f:calc_isolated_cores:1}行をコメントアウトします。# isolated_cores=${f:calc_isolated_cores:1}分離された CPU について次の情報を追加します。
# All isolated CPUs: isolated_cores=2-23 # Isolated CPUs without the kernel’s scheduler load balancing: no_balance_cores=2,3cpu-partitioning TuneD プロファイルを設定します。
# tuned-adm profile cpu-partitioning
システムを再起動します。
再起動後、システムは、cpu-partitioning の図の分離に従って、低レイテンシーにチューニングされます。このアプリケーションでは、タスクセットを使用して、リーダーおよびライターのスレッドを CPU 2 および 3 に固定し、残りのアプリケーションスレッドを CPU 4-23 に固定できます。
検証
分離された CPU が Cpus_allowed_list フィールドに反映されていないことを確認します。
# cat /proc/self/status | grep Cpu Cpus_allowed: 003 Cpus_allowed_list: 0-1すべてのプロセスのアフィニティーを確認するには、次のように入力します。
# ps -ae -o pid= | xargs -n 1 taskset -cp pid 1's current affinity list: 0,1 pid 2's current affinity list: 0,1 pid 3's current affinity list: 0,1 pid 4's current affinity list: 0-5 pid 5's current affinity list: 0,1 pid 6's current affinity list: 0,1 pid 7's current affinity list: 0,1 pid 9's current affinity list: 0 ...注記TuneD は、一部のプロセス (主にカーネルプロセス) のアフィニティーを変更できません。この例では、PID 4 および 9 のプロセスは変更されません。
27.11. cpu-partitioning TuneD プロファイルのカスタマイズ リンクのコピーリンクがクリップボードにコピーされました!
TuneD プロファイルを拡張して、追加のチューニング変更を行うことができます。たとえば、cpu-partitioning プロファイルは、cstate=1 を使用する CPU を設定します。cpu-partitioning プロファイルを使用しながら、CPU の cstate を cstate1 から cstate0 に変更するために、次の手順では、my_profile という名前の新しい TuneD プロファイルを説明しています。このプロファイルは、cpu-partitioning プロファイルを継承した後、C state-0 を設定します。
手順
/etc/tuned/my_profileディレクトリーを作成します。# mkdir /etc/tuned/profiles/my_profileこのディレクトリーに
tuned.confファイルを作成し、次の内容を追加します。# vi /etc/tuned/profiles/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 プロファイルの変更を有効にするために再起動が必要な場合は、マシンを再起動します。
第28章 numastat を使用したメモリー割り当てのプロファイリング リンクのコピーリンクがクリップボードにコピーされました!
numastat ツールは、システム内のメモリー割り当てに関する詳細な統計情報を提供し、各 NUMA ノードのデータを個別に表示します。この情報は、システムメモリーのパフォーマンスを分析し、さまざまなメモリーポリシーの有効性を評価するのに役立ちます。
28.1. デフォルトの numastat 統計 リンクのコピーリンクがクリップボードにコピーされました!
デフォルトでは、numastat ツールは、各 NUMA ノードの以下のカテゴリーに対する統計を表示します。
numa_hit- このノードに正常に割り当てられていたページ数。
numa_miss対象のノードのメモリーが少ないために、このノードに割り当てたページ数。それぞれの
numa_missイベントには、別のノードで対応するnuma_foreignイベントがあります。注記高い
numa_hitの値と低いnuma_missの値 (互いに相対的) は、最適なパフォーマンスを示します。numa_foreign-
代わりに別のノードに割り当てられたこのノードについて最初に意図されたページ数です。それぞれの
numa_foreignイベントには、対応するnuma_missイベントが別のノードにあります。 interleave_hit- このノードに正常に割り当てられるインターリーブポリシーページの数。
local_node- このノードのプロセスで、このノードで正常に割り当てられるページ数。
other_node- 別のノードのプロセスでこのノードに割り当てられるページ数。
28.2. numastat を使用したメモリー割り当ての表示 リンクのコピーリンクがクリップボードにコピーされました!
numastat ツールを使用してシステムのメモリー割り当てを表示できます。
前提条件
numactlパッケージがインストールされている。# dnf install numactl
手順
システムのメモリー割り当てを表示する。
$ numastat node0 node1 numa_hit 76557759 92126519 numa_miss 30772308 30827638 numa_foreign 30827638 30772308 interleave_hit 106507 103832 local_node 76502227 92086995 other_node 30827840 30867162