Red Hat Training

A Red Hat training course is available for RHEL 8

システムの状態とパフォーマンスの監視と管理

Red Hat Enterprise Linux 8

システムのスループット、レイテンシー、および電力消費の最適化

Red Hat Customer Content Services

概要

本ドキュメントは、Red Hat Enterprise Linux 8 のスループット、レイテンシー、および電力消費を、さまざまなシナリオで監視および最適化する方法を説明します。

Red Hat ドキュメントへのフィードバック (英語のみ)

ご意見ご要望をお聞かせください。ドキュメントの改善点はございませんか。改善点を報告する場合は、以下のように行います。

  • 特定の文章に簡単なコメントを記入する場合は、以下の手順を行います。

    1. ドキュメントの表示が Multi-page HTML 形式になっていて、ドキュメントの右上端に Feedback ボタンがあることを確認してください。
    2. マウスカーソルで、コメントを追加する部分を強調表示します。
    3. そのテキストの下に表示される Add Feedback ポップアップをクリックします。
    4. 表示される手順に従ってください。
  • より詳細なフィードバックを行う場合は、Bugzilla のチケットを作成します。

    1. Bugzilla の Web サイトにアクセスします。
    2. Component で Documentation を選択します。
    3. Description フィールドに、ドキュメントの改善に関するご意見を記入してください。ドキュメントの該当部分へのリンクも記入してください。
    4. Submit Bug をクリックします。

第1章 Tuned の使用

システム管理者は、Tuned アプリケーションを使用して、さまざまなユースケースに合わせてシステムのパフォーマンスプロファイルを最適化します。

1.1. Tuned の目的

Tuned は、システムを監視し、特定の作業負荷の下でパフォーマンスを最適化するサービスです。Tuned のコアとなるのは、さまざまなユースケースに合わせてシステムを調整する プロファイル です。

Tuned では、次のようなユースケースのために、いくつかの事前定義プロファイルとともに配布されています。

  • 高スループット
  • 低レイテンシー
  • 節電

各プロファイル向けに定義されたルールを変更し、特定のデバイスのチューニング方法をカスタマイズできます。他のプロフィールに切り替えたり、Tuned を無効にした場合は、以前のプロファイルによりシステム設定に加えられたすべての変更が、元の状態に戻ります。

Tuned も設定できます。デバイスの使用状況の変化に対応し、設定を調整してアクティブデバイスのパフォーマンスを向上させ、非アクティブデバイスの消費電力を削減します。

1.2. Tuned プロファイル

システムを詳細に分析することは、非常に時間のかかる作業です。Tuned は、典型的なユースケースに定義済みのプロファイルを多数提供します。プロファイルを作成、変更、および削除することも可能です。

Tuned で提供したプロファイルは、次のカテゴリーに分類されます。

  • 省電力プロファイル
  • パフォーマンス重視プロファイル

performance-boosting プロファイルの場合は、次の側面に焦点が置かれます。

  • ストレージおよびネットワークに対して少ないレイテンシー
  • ストレージおよびネットワークの高い処理能力
  • 仮想マシンのパフォーマンス
  • 仮想化ホストのパフォーマンス

デフォルトプロファイル

インストール時に、システムの最適なプロファイルが自動的に選択されます。現時点では、以下のカスタマイズ可能なルールに従ってデフォルトのプロファイルが選択されます。

環境デフォルトプロファイル目的

コンピュートノード

throughput-performance

最適なスループットパフォーマンス

仮想マシン

virtual-guest

ベストパフォーマンスベストパフォーマンスが重要でない場合は、balanced プロファイルまたは powersave プロファイルに変更できます。

その他のケース

balanced

パフォーマンスと電力消費の調和

マージされたプロファイル

試験目的で提供された機能として、複数のプロファイルを一度に選択することができます。Tuned は、読み込み中にそれらをマージしようとします。

競合が発生した場合は、最後に指定されたプロファイルの設定が優先されます。

例1.1 仮想ゲストの低消費電力

以下の例では、仮想マシンでの実行でパフォーマンスを最大化するようにシステムが最適化され、同時に、(低消費電力が最優先である場合は) 低消費電力を実現するようにシステムがチューニングされます。

# tuned-adm profile virtual-guest powersave
警告

マージは自動的に行われ、使用されるパラメーターの組み合わせが適切であるかどうかはチェックされません。結果として、この機能は一部のパラメーターを逆に調整する可能性があります。これは逆効果になる可能性があります。たとえば、throughput-performance プロファイルで高スループットにディスクを設定し、同時に、spindown-disk プロファイルでディスクスピンダウンを低い値に設定します。

プロファイルの場所

Tuned は、次のディレクトリーにプロファイルを格納します。

/usr/lib/tuned/
ディストリビューション固有のプロファイルは、このディレクトリーに保存されます。各プロファイルには独自のディレクトリーがあります。プロファイルは tuned.conf という名前の主要設定ファイルと、ヘルパースクリプトなどの他の任意のファイルから構成されます。
/etc/tuned/
プロファイルをカスタマイズする必要がある場合は、プロファイルのカスタマイズに使用されるディレクトリーにプロファイルディレクトリーをコピーします。同じ名前のプロファイルが 2 つある場合、カスタムのプロファイルは、/etc/tuned/ に置かれています。

プロファイル設定の構文

tuned.conf ファイルは、1 つの [main] セクションとプラグインインスタンスを設定するためのその他のセクションが含まれます。ただし、すべてのセクションはオプションです。

ハッシュ記号 (#) で始まる行はコメントです。

関連情報

  • man ページの tuned.conf(5)

1.3. RHEL と一緒に配布される Tuned プロファイル

以下は、Red Hat Enterprise Linux で、Tuned とともにインストールされるプロファイルのリストです。

注記

さらに製品固有なプロファイルまたはサードパーティー製の Tuned プロファイルが利用可能なことがあります。このようなプロファイルは通常、個別の RPM パッケージで提供されます。

balanced
デフォルトの省電力プロファイル。パフォーマンスと電力消費のバランスを取ることが目的です。可能な限り、自動スケーリングと自動チューニングを使用します。唯一の欠点はレイテンシーが増加することです。現在の Tuned リリースでは、CPU、ディスク、音声、および動画のプラグインが有効になり、CPU ガバナー conservative がアクティブになります。radeon_powersave オプションは、dpm-balanced 値に対応している場合はその値を使用し、それ以外の場合は auto に設定されます。
powersave

省電力パフォーマンスを最大化するプロファイル。実際の電力消費を最小化するためにパフォーマンスを調整できます。現行の Tuned リリースでは、SATA ホストアダプターの USB 自動サスペンド、WiFi の省電力、およびアグレッシブリンク電源管理 (ALPM) の省電力を有効にします。また、ウェイクアップ率が低いシステムのマルチコア省電力がスケジュールされ、ondemand ガバナーがアクティブ化されます。さらに、AC97 音声省電力と、システムに応じて HDA-Intel 省電力 (10 秒のタイムアウト) が有効になります。KMS が有効なサポート対象の Radeon グラフィックカードがシステムに搭載されている場合、プロファイルは自動省電力に設定されます。ASUS Eee PC では、動的な Super Hybrid Engine が有効になります。

注記

場合によっては、balanced プロファイルの方が、powersave プロファイルよりも効率的です。

定義された量の作業を行う場合 (たとえば、動画ファイルをトランスコードする必要がある場合) を考えてください。トランスコードがフルパワーで実行される場合に、マシンの電力消費が少なくなることがあります。これは、タスクがすぐに完了し、マシンがアイドル状態になり、非常に効率的な省電力モードに自動的に切り替わることがあるためです。その一方で、調整されたマシンでファイルをトランスコードすると、マシンはトランスコード中に少ない電力を消費しますが、処理に時間がかかり、全体的な消費電力は高くなることがあります。

このため、一般的に balanced プロファイルが優れたオプションになる場合があります。

throughput-performance
高スループットに最適化されたサーバープロファイル。これにより、節電メカニズムが無効になり、sysctl が有効になるため、ディスクおよびネットワーク IO のスループットパフォーマンスが向上します。CPU ガバナーは performance に設定されます。
latency-performance
低レイテンシーに最適化されたサーバープロファイル。省電力メカニズムが無効になり、レイテンシーを向上させる sysctl 設定が有効になります。CPU ガバナーは performance に設定され、CPU は低い C 状態にロックされます (PM QoS を使用)。
network-latency
低レイテンシーネットワークチューニング向けプロファイル。latency-performance プロファイルに基づきます。さらに、透過的な huge page と NUMA 分散を無効にし、他のいくつかのネットワーク関連の sysctl パラメーターの調整を行います。
network-throughput
スループットネットワークチューニング向けプロファイル。throughput-performance プロファイルに基づきます。また、カーネルネットワークバッファーが増加されます。
virtual-guest
throughput-performance プロファイルに基づく仮想ゲスト向けプロファイル。仮想メモリーのスワップの減少や、ディスクの readahead 値の増加などが行われます。ディスクバリアは無効になりません。
virtual-host
throughput-performance プロファイルに基づいて仮想ホスト用に設計されたプロファイル。他のタスクの中でも特に、仮想メモリーのスワップを減らし、ディスクの先読み値を増やし、ダーティーページの書き戻しというより積極的な値を可能にします。
oracle
Oracle データベース向けに最適化されたプロファイルは、throughput-performance プロファイルに基づいて読み込まれます。これにより Transparent Huge Page が無効になり、その他のパフォーマンス関連カーネルパラメーターが変更されます。このプロファイルは、tuned-profiles-oracle パッケージで利用できます。
desktop
balanced プロファイルに基づく、デスクトップに最適化されたプロファイル。対話型アプリケーションの応答を向上させるスケジューラーオートグループが有効になります。
cpu-partitioning

cpu-partitioning プロファイルは、システムの CPU を、分離されたハウスキーピングの CPU に分割します。分離された CPU のジッターと割り込みを減らすために、プロファイルは分離された CPU を、ユーザー空間プロセス、可動カーネルスレッド、割り込みハンドラー、およびカーネルタイマーから削除します。

ハウスキーピング CPU は、すべてのサービス、シェルプロセス、およびカーネルスレッドを実行できます。

/etc/tuned/cpu-partitioning-variables.conf ファイルで cpu-partitioning プロファイルを設定できます。設定オプションは以下のようになります。

isolated_cores=cpu-list
分離する CPU を一覧表示します。分離された CPU の一覧はコンマで区切るか、ユーザーが範囲を指定できます。3-5 のようにハイフンを使用して範囲を指定できます。このオプションは必須です。この一覧にない CPU は、自動的にハウスキーピング CPU と見なされます。
no_balance_cores=cpu-list
システム全体のプロセスの負荷分散時に、カーネルに考慮されない CPU の一覧を表示します。このオプションは任意です。通常、これは isolated_cores と同じリストです。

cpu-partitioning の詳細は、man ページの tuned-profiles-cpu-partitioning(7) を参照してください。

リアルタイムプロファイル

リアルタイムプロファイルは、リアルタイムカーネルを実行するシステムを対象としています。特殊なカーネルビルドなしでは、システムはリアルタイムになりません。RHEL では、このプロファイルは追加のリポジトリーから利用できます。

利用できるリアルタイムプロファイルは以下の通りです。

リアルタイム

ベアメタルのリアルタイムシステムで使用します。

tuned-profiles-realtime パッケージにより提供されます。これは、RT リポジトリーまたは NFV リポジトリーから入手できます。

realtime-virtual-host

リアルタイムに設定された仮想ホストで使用します。

NFV リポジトリーから利用できる tuned-profiles-nfv-host パッケージにより提供されます。

realtime-virtual-guest

リアルタイムに設定された仮想化ゲストで使用します。

NFV リポジトリーから利用できる tuned-profiles-nfv-guest パッケージにより提供されます。

1.4. Tuned の静的および動的のチューニング

このセクションでは、Tuned が提供するシステムチューニングの 2 つのカテゴリー (静的 および 動的) の違いを説明します。

静的なチューニング
主に、事前定義された sysctl 設定および sysfs 設定の適用と、ethtool などの複数の設定ツールのワンショットアクティベーションから構成されます。
動的チューニング

システムのアップタイム中に、さまざまなシステムコンポーネントがどのように使用されているかを監視します。Tuned は、その監視情報に基づいてシステム設定を動的に調整します。

たとえば、ハードドライブは起動時およびログイン時に頻繁に使用されますが、Web ブラウザーや電子メールクライアントなどのアプリケーションをユーザーが主に使用する場合はほとんど使用されません。同様に、CPU とネットワークデバイスは、異なるタイミングで使用されます。Tuned は、これらのコンポーネントのアクティビティーを監視し、その使用の変化に反応します。

デフォルトでは、動的チューニングは無効になっています。これを有効にするには、/etc/tuned/tuned-main.conf ファイルを編集して、dynamic_tuning オプションを 1 に変更します。Tuned は、その後、定期的にシステム統計を分析し、それらを使用してシステム調整設定を更新します。これらの更新間の時間間隔を秒単位で設定するには、update_interval オプションを使用します。

現在実装されている動的チューニングアルゴリズムは、パフォーマンスと省電力のバランスを取ろうとし、パフォーマンスプロファイルで無効になります。個々のプラグインの動的調整は、Tuned プロファイルで有効または無効にできます。

例1.2 ワークステーションでの静的および動的のチューニング

一般的なオフィスワークステーションでは、イーサネットネットワークインターフェースは常に非アクティブの状態です。少数の電子メールのみが出入りするか、一部の Web ページが読み込まれている可能性があります。

ネットワークインターフェースは、このような読み込みではデフォルトではフルで稼働しますが、常にフルスピードで稼働する必要はありません。Tuned には、ネットワークデバイスの監視および調整のプラグインがあり、これによりこの低いアクティビティーを検出して、自動的にそのインターフェースの速度を下げることができるため、通常は消費電力が少なくなります。

DVD イメージをダウンロードしているとき、または大きな添付ファイル付きの電子メールが開いているときなど、インターフェースのアクティビティーが長期間にわたって増加した場合は、Tuned がこれを検出し、アクティビティーレベルが高い間にインターフェースの速度を最大に設定します。

この原則は、CPU およびディスクの他のプラグインにも使用されます。

1.5. Tuned の no-daemon モード

no-daemon モードの Tuned を実行できます。これには常駐メモリーは必要ありません。このモードでは、Tuned が設定を適用して終了します。

デフォルトでは、このモードには、以下のように多くの Tuned 機能がないため、no-daemon モードが無効になっています。

  • D-Bus サポート
  • ホットプラグサポート
  • 設定のロールバックサポート

no-daemon モードを有効にするには、/etc/tuned/tuned-main.conf ファイルに以下の行を含めます。

daemon = 0

1.6. Tuned のインストールおよび有効化

この手順では、Tuned アプリケーションをインストールして有効にし、Tuned プロファイルをインストールし、システムにデフォルトの Tuned プロファイルをあらかじめ設定します。

手順

  1. tuned パッケージをインストールします。

    # yum install tuned
  2. tuned サービスを有効にして起動します。

    # systemctl enable --now tuned
  3. 必要に応じて、リアルタイムシステムで Tuned プロファイルをインストールします。

    # yum install tuned-profiles-realtime tuned-profiles-nfv
  4. Tuned プロファイルがアクティブで、適用されていることを確認します。

    $ tuned-adm active
    
    Current active profile: balanced
    $ tuned-adm verify
    
    Verfication succeeded, current system settings match the preset profile.
    See tuned log file ('/var/log/tuned/tuned.log') for details.

1.7. 利用可能な Tuned プロファイルの一覧表示

この手順は、システムで現在利用できる Tuned プロファイルの一覧を表示します。

手順

  • システムで利用可能な Tuned プロファイルの一覧を表示するには、次のコマンドを実行します。

    $ tuned-adm list
    
    Available profiles:
    - balanced               - General non-specialized tuned profile
    - desktop                - Optimize for the desktop use-case
    - latency-performance    - Optimize for deterministic performance at the cost of increased power consumption
    - network-latency        - Optimize for deterministic performance at the cost of increased power consumption, focused on low latency network performance
    - network-throughput     - Optimize for streaming network throughput, generally only necessary on older CPUs or 40G+ networks
    - powersave              - Optimize for low power consumption
    - throughput-performance - Broadly applicable tuning that provides excellent performance across a variety of common server workloads
    - virtual-guest          - Optimize for running inside a virtual guest
    - virtual-host           - Optimize for running KVM guests
    Current active profile: balanced
  • 現在アクティブなプロファイルのみを表示する場合は、次のコマンドを使用します。

    $ tuned-adm active
    
    Current active profile: balanced

関連情報

  • man ページの tuned-adm(8)

1.8. Tuned プロファイルの設定

この手順では、システムで選択した Tuned プロファイルを有効にします。

前提条件

手順

  1. 必要に応じて、Tuned が、システムに最も適したプロファイルを推奨するようにできます。

    # tuned-adm recommend
    
    balanced
  2. プロファイルをアクティブ化します。

    # tuned-adm profile selected-profile

    または、複数のプロファイルの組み合わせをアクティベートできます。

    # tuned-adm profile profile1 profile2

    例1.3 低消費電力向けに最適化された仮想マシン

    以下の例では、仮想マシンでの実行でパフォーマンスを最大化するようにシステムが最適化され、同時に、(低消費電力が最優先である場合は) 低消費電力を実現するようにシステムがチューニングされます。

    # tuned-adm profile virtual-guest powersave
  3. Tuned プロファイルがアクティブで適用されていることを確認します。

    $ tuned-adm active
    
    Current active profile: selected-profile
    $ tuned-adm verify
    
    Verfication succeeded, current system settings match the preset profile.
    See tuned log file ('/var/log/tuned/tuned.log') for details.

関連情報

  • man ページの tuned-adm(8)

1.9. Tuned の無効化

この手順は、Tuned を無効にし、Tuned が修正する前に、影響を受けるすべてのシステム設定を元の状態にリセットします。

手順

  • すべてのチューニングを一時的に無効にするには、次のコマンドを実行します。

    # tuned-adm off

    tuned サービスが再開したあと、再度調整が適用されます。

  • または、tuned サービスを永続的に停止して無効にするには、次のコマンドを実行します。

    # systemctl disable --now tuned

関連情報

  • man ページの tuned-adm(8)

第2章 Tuned プロファイルのカスタマイズ

使用目的に合わせてシステムパフォーマンスを最適化するための Tuned プロファイルを作成または変更できます。

前提条件

2.1. Tuned プロファイル

システムを詳細に分析することは、非常に時間のかかる作業です。Tuned は、典型的なユースケースに定義済みのプロファイルを多数提供します。プロファイルを作成、変更、および削除することも可能です。

Tuned で提供したプロファイルは、次のカテゴリーに分類されます。

  • 省電力プロファイル
  • パフォーマンス重視プロファイル

performance-boosting プロファイルの場合は、次の側面に焦点が置かれます。

  • ストレージおよびネットワークに対して少ないレイテンシー
  • ストレージおよびネットワークの高い処理能力
  • 仮想マシンのパフォーマンス
  • 仮想化ホストのパフォーマンス

デフォルトプロファイル

インストール時に、システムの最適なプロファイルが自動的に選択されます。現時点では、以下のカスタマイズ可能なルールに従ってデフォルトのプロファイルが選択されます。

環境デフォルトプロファイル目的

コンピュートノード

throughput-performance

最適なスループットパフォーマンス

仮想マシン

virtual-guest

ベストパフォーマンスベストパフォーマンスが重要でない場合は、balanced プロファイルまたは powersave プロファイルに変更できます。

その他のケース

balanced

パフォーマンスと電力消費の調和

マージされたプロファイル

試験目的で提供された機能として、複数のプロファイルを一度に選択することができます。Tuned は、読み込み中にそれらをマージしようとします。

競合が発生した場合は、最後に指定されたプロファイルの設定が優先されます。

例2.1 仮想ゲストの低消費電力

以下の例では、仮想マシンでの実行でパフォーマンスを最大化するようにシステムが最適化され、同時に、(低消費電力が最優先である場合は) 低消費電力を実現するようにシステムがチューニングされます。

# tuned-adm profile virtual-guest powersave
警告

マージは自動的に行われ、使用されるパラメーターの組み合わせが適切であるかどうかはチェックされません。結果として、この機能は一部のパラメーターを逆に調整する可能性があります。これは逆効果になる可能性があります。たとえば、throughput-performance プロファイルで高スループットにディスクを設定し、同時に、spindown-disk プロファイルでディスクスピンダウンを低い値に設定します。

プロファイルの場所

Tuned は、次のディレクトリーにプロファイルを格納します。

/usr/lib/tuned/
ディストリビューション固有のプロファイルは、このディレクトリーに保存されます。各プロファイルには独自のディレクトリーがあります。プロファイルは tuned.conf という名前の主要設定ファイルと、ヘルパースクリプトなどの他の任意のファイルから構成されます。
/etc/tuned/
プロファイルをカスタマイズする必要がある場合は、プロファイルのカスタマイズに使用されるディレクトリーにプロファイルディレクトリーをコピーします。同じ名前のプロファイルが 2 つある場合、カスタムのプロファイルは、/etc/tuned/ に置かれています。

プロファイル設定の構文

tuned.conf ファイルは、1 つの [main] セクションとプラグインインスタンスを設定するためのその他のセクションが含まれます。ただし、すべてのセクションはオプションです。

ハッシュ記号 (#) で始まる行はコメントです。

関連情報

  • man ページの tuned.conf(5)

2.2. Tuned プロファイル間の継承

Tuned プロファイルは、他のプロファイルを基にして、親プロファイルの特定の側面のみを変更できます。

Tuned プロファイルの [main] セクションは、include オプションを認識します。

[main]
include=parent

プロファイルの設定はすべて、この プロファイルに読み込まれます。以下のセクションでは、 プロファイルは、 プロファイルから継承された特定の設定をオーバーライドするか、 プロファイルに表示されない新しい設定を追加します。

/usr/lib/tuned/ にあらかじめインストールしておいたプロファイルでパラメーターをいくつか調整するだけで、/etc/tuned/ に独自の プロファイルを作成できます。

Tuned のアップグレード後などに、 プロファイルが更新すると、この変更は プロファイルに反映されます。

例2.2 バランスの取れた省電力プロファイル

以下は、balanced プロファイルを拡張し、すべてのデバイスの Aggressive Link Power Management (ALPM) を最大省電力に設定するカスタムプロファイルの例です。

[main]
include=balanced

[scsi_host]
alpm=min_power

関連情報

  • man ページの tuned.conf(5)

2.3. Tuned の静的および動的のチューニング

このセクションでは、Tuned が提供するシステムチューニングの 2 つのカテゴリー (静的 および 動的) の違いを説明します。

静的なチューニング
主に、事前定義された sysctl 設定および sysfs 設定の適用と、ethtool などの複数の設定ツールのワンショットアクティベーションから構成されます。
動的チューニング

システムのアップタイム中に、さまざまなシステムコンポーネントがどのように使用されているかを監視します。Tuned は、その監視情報に基づいてシステム設定を動的に調整します。

たとえば、ハードドライブは起動時およびログイン時に頻繁に使用されますが、Web ブラウザーや電子メールクライアントなどのアプリケーションをユーザーが主に使用する場合はほとんど使用されません。同様に、CPU とネットワークデバイスは、異なるタイミングで使用されます。Tuned は、これらのコンポーネントのアクティビティーを監視し、その使用の変化に反応します。

デフォルトでは、動的チューニングは無効になっています。これを有効にするには、/etc/tuned/tuned-main.conf ファイルを編集して、dynamic_tuning オプションを 1 に変更します。Tuned は、その後、定期的にシステム統計を分析し、それらを使用してシステム調整設定を更新します。これらの更新間の時間間隔を秒単位で設定するには、update_interval オプションを使用します。

現在実装されている動的チューニングアルゴリズムは、パフォーマンスと省電力のバランスを取ろうとし、パフォーマンスプロファイルで無効になります。個々のプラグインの動的調整は、Tuned プロファイルで有効または無効にできます。

例2.3 ワークステーションでの静的および動的のチューニング

一般的なオフィスワークステーションでは、イーサネットネットワークインターフェースは常に非アクティブの状態です。少数の電子メールのみが出入りするか、一部の Web ページが読み込まれている可能性があります。

ネットワークインターフェースは、このような読み込みではデフォルトではフルで稼働しますが、常にフルスピードで稼働する必要はありません。Tuned には、ネットワークデバイスの監視および調整のプラグインがあり、これによりこの低いアクティビティーを検出して、自動的にそのインターフェースの速度を下げることができるため、通常は消費電力が少なくなります。

DVD イメージをダウンロードしているとき、または大きな添付ファイル付きの電子メールが開いているときなど、インターフェースのアクティビティーが長期間にわたって増加した場合は、Tuned がこれを検出し、アクティビティーレベルが高い間にインターフェースの速度を最大に設定します。

この原則は、CPU およびディスクの他のプラグインにも使用されます。

2.4. Tuned プラグイン

プラグインは、Tuned がシステムのさまざまなデバイスを監視または最適化するために使用する Tuned プロファイルのモジュールです。

Tuned は、2 種類のプラグインを使用します。

  • プラグインの監視
  • プラグインのチューニング

プラグインの監視

モニタリングプラグインは、稼働中のシステムから情報を取得するために使用されます。監視プラグインの出力は、動的チューニング向けチューニングプラグインで使用できます。

監視プラグインは、有効ないずれかのチューニングプラグインでメトリクスが必要な場合に必ず自動的にインスタンス化されます。2 つのチューニングプラグインで同じデータが必要な場合は、監視プラグインのインスタンスが 1 つだけ作成され、データが共有されます。

プラグインのチューニング

各チューニングプラグインにより、個別サブシステムがチューニングされ、tuned プロファイルから入力される複数のパラメーターが取得されます。各サブシステムには、チューニングプラグインの個別インスタンスで処理される複数のデバイス (複数の CPU やネットワークカードなど) を含めることができます。また、個別デバイスの特定の設定もサポートされます。

Tuned プロファイルのプラグインの構文

プラグインインスタンスが記述されるセクションは、以下のように書式化されます。

[NAME]
type=TYPE
devices=DEVICES
NAME
ログで使用されるプラグインインスタンスの名前です。これは、任意の文字列です。
TYPE
チューニングプラグインのタイプです。
DEVICES

このプラグインインスタンスが処理するデバイスの一覧です。

device の行には、リスト、ワイルドカード (*)、否定 (!) が含まれます。device の行がないと、TYPE のシステムに現在または後で接続されるすべてのデバイスは、プラグインインスタンスにより処理されます。devices=* オプションを使用する場合と同じです。

例2.4 ブロックデバイスとプラグインのマッチング

次の例では、sdasdb など sd で始まるすべてのブロックデバイスに一致し、それらに対する境界は無効にしない例になります。

[data_disk]
type=disk
devices=sd*
disable_barriers=false

次の例は、sda1 および sda2 を除くすべてのブロックデバイスと一致します。

[data_disk]
type=disk
devices=!sda1, !sda2
disable_barriers=false

プラグインのインスタンスを指定しないと、そのプラグインは有効になりません。

このプラグインがより多くのオプションに対応していると、プラグインセクションでも指定できます。このオプションが指定されておらず、含まれているプラグインでこれまで指定しなかった場合は、デフォルト値が使用されます。

短いプラグイン構文

プラグインインスタンスのカスタム名が不要で、設定ファイルにインスタンスの定義が 1 つしかない場合、Tuned は、以下の短い構文に対応します。

[TYPE]
devices=DEVICES

この場合は、type の行を省略することができます。タイプと同様に、インスタンスは名前で参照されます。上記の例は、以下のように書き換えることができます。

例2.5 短い構文を使用したブロックデバイスのマッチング

[disk]
devices=sdb*
disable_barriers=false

プロファイルで競合するプラグインの定義

include オプションを使用して同じセクションを複数回指定した場合は、設定がマージされます。設定をマージできない場合は、競合がある以前の設定よりも、競合がある最後の定義が優先されます。以前に定義されたものが分からない場合は、replace ブール式オプションを使用して、それを true に設定します。これにより、同じ名前の以前の定義がすべて上書きされ、マージは行われません。

また、enabled=false オプションを指定してプラグインを無効にすることもできます。これは、インスタンスが定義されない場合と同じ効果になります。include オプションから以前の定義を再定義し、カスタムプロファイルでプラグインをアクティブにしない場合には、プラグインを無効にすると便利です。

どのプラグインにも実装されていない機能

Tuned には、調整プロファイルを有効または無効にする一環として、シェルコマンドを実行する機能が含まれています。これにより、Tuned に統合されていない機能を持つ Tuned プロファイルを拡張できます。

任意のシェルコマンドは、script プラグインを使用して指定できます。

関連情報

  • man ページの tuned.conf(5)

2.5. 利用可能な Tuned プラグイン

このセクションでは、Tuned で現在利用可能なすべての監視および調整のプラグインを一覧表示します。

プラグインの監視

現在、以下の監視プラグインが実装されています。

disk
デバイスおよび測定間隔ごとのディスク負荷 (IO 操作の数) を取得します。
net
ネットワークカードおよび測定間隔ごとのネットワーク負荷 (転送済みパケットの数) を取得します。
load
CPU および測定間隔ごとの CPU 負荷を取得します。

プラグインのチューニング

現在、以下のチューニングプラグインが実装されています。動的チューニングを実装するのは、これらのプラグインの一部のみです。プラグインで対応しているオプションも一覧表示されます。

cpu

CPU ガバナーを、governor オプションで指定された値に設定し、CPU 負荷に応じて、電源管理サービス品質 (PM QoS) CPU ダイレクトメモリーアクセス (DMA) のレイテンシーを動的に変更します。

CPU 負荷が load_threshold オプションで指定された値よりも小さい場合、レイテンシーは latency_highオプションで指定した値に設定されます。それ以外では、latency_low で指定した値に設定されます。

レイテンシーを特定の値に強制し、さらに動的に変更しないようにすることもできます。これを行うには、force_latency オプションを、必要なレイテンシーの値に設定します。

eeepc_she

CPU の負荷に応じて、フロントサイドバス (FSB) の速度を動的に設定します。

この機能は一部のネットブックで利用でき、ASUS Super buf Engine (SHE) としても知られています。

CPU 負荷が load_threshold_powersave オプションで指定した値と同じかそれ未満の場合、プラグインは、FSB 速度を、she_powersave オプションで指定した値に設定します。CPU 負荷が load_threshold_normal オプションで指定した値と同じかそれより上になる場合は、FSB 速度が、she_normal オプションで指定された値に設定されます。

Tuned が、この機能に対するハードウェアサポートを検出しない場合は、静的な調整には対応しておらず、プラグインが透過的に無効になります。

net
Wake on LAN 機能を、wake_on_lan オプションで指定した値に構成します。ethtool ユーティリティーと同じ構文を使用します。また、インターフェースの使用状況に応じてインターフェース速度が動的に変更します。
sysctl

プラグインオプションで指定したさまざまな sysctl 設定を設定します。

この構文は、name=value です。name は、sysctl ユーティリティーが指定した名前と同じです。

Tuned で利用可能な別のプラグインで対応していないシステム設定を変更する必要がある場合は、sysctl プラグインを使用します。他の特定プラグインが、この設定に対応している場合は、そのプラグインを使用することが推奨されます。

usb

USB デバイスの autosuspend タイムアウトを、autosuspend パラメーターで指定した値に設定します。

値が 0 の場合は、autosuspend が無効になります。

vm
transparent_hugepages オプションのブール値に応じて、Transparent Huge Page を有効または無効にします。
audio

音声コーデックの autosuspend タイムアウトを、timeout オプションで指定した値に設定します。

現在、snd_hda_intel コーデックおよび snd_ac97_codec コーデックに対応しています。値が 0 の場合は、autosuspend が無効になります。また、ブール値オプション reset_controllertrue に設定することにより、コントローラーを強制的にリセットすることもできます。

disk

elevator オプションで指定された値にディスクエレベーターを設定します。

また、以下も設定します。

  • apm オプションで指定された値への APM
  • scheduler_quantum オプションで指定された値へのスケジューラーの量子
  • spindown オプションで指定された値へのディスクスピンダウンタイムアウト
  • readahead パラメーターで指定した値までディスク先読み
  • 現在のディスクが、readahead_multiply オプションで指定した定数を掛けた値に先読みされます。

さらに、このプラグインにより、現在のドライブ使用状況に応じて、ドライブの高度な電力管理設定および spindown タイムアウト設定が動的に変更します。動的チューニングは、ブール値オプション dynamic により制御でき、デフォルトで有効になります。

scsi_host

SCSI ホストのオプションをチューニングします。

Aggressive Link Power Management (ALPM) を、alpm オプションで指定した値に設定します。

mounts
disable_barriers オプションのブール値に応じて、マウントのバリアを有効または無効にします。
script

プロファイルの読み込み時またはアンロード時に、外部スクリプトまたはバイナリーを実行します。任意の実行可能ファイルを選択できます。

重要

script プラグインは、以前のリリースとの互換性を維持するために提供されています。その他の Tuned プラグインが、必要な機能に対応している場合は、そのプラグインを使用することが推奨されます。

Tuned は、次のいずれかの引数で実行ファイルを呼び出します。

  • プロファイルの読み込み時に start
  • プロファイルのアンロード時に stop

実行可能ファイルに stop アクションを適切に実装し、start アクション中に変更したすべての設定を元に戻す必要があります。それ以外の場合は、Tuned プロファイルの変更後のロールバック手順が有効ではありません。

bash スクリプトは、Bash ライブラリー /usr/lib/tuned/functions をインポートし、そこで定義されている関数を使用できます。これらの機能は、Tuned が本来提供していない機能にのみ使用してください。関数名が _wifi_set_power_level などのアンダースコアで始まる場合は、将来変更される可能性があるため、関数をプライベートにし、スクリプトでは使用しないでください。

プラグイン構造の script パラメーターを使用して、実行ファイルへのパスを指定します。

例2.6 プロファイルからの Bash スクリプトの実行

プロファイルディレクトリーに置かれた script.sh という名前の Bash スクリプトを実行するには、次のコマンドを実行します。

[script]
script=${i:PROFILE_DIR}/script.sh
sysfs

プラグインオプションで指定したさまざまな sysfs 設定を構成します。

構文は name=value となります。name は、使用する sysfs パスです。

このプラグインは、他のプラグインで対応していない一部の設定を変更する必要がある場合に使用します。特定のプラグインが必要な設定に対応する場合は、そのプラグインを優先します。

video

ビデオカードのさまざまな省電力レベルを設定します。現在、Radeon カードにのみ対応しています。

省電力レベルは、radeon_powersave オプションを使用して指定できます。対応している値は次のとおりです。

  • default
  • auto
  • low
  • mid
  • High
  • dynpm
  • dpm-battery
  • dpm-balanced
  • dpm-perfomance

詳細は www.x.org を参照してください。このプラグインは実験的なものであるため、今後のリリースでオプションが変更する可能性があることに注意してください。

bootloader

カーネルコマンドラインにオプションを追加します。このプラグインは、GRUB 2 ブートローダーのみに対応しています。

grub2_cfg_file オプションを使用すると、GRUB 2 設定ファイルの場所を、標準以外のカスタマイズされた場所に指定できます。

そのカーネルオプションは、現在の GRUB 設定とそのテンプレートに追加されます。カーネルオプションを有効にするには、システムを再起動する必要があります。

別のプロファイルに切り替えたり、tuned サービスを手動で停止すると、追加オプションが削除されます。システムをシャットダウンまたは再起動しても、カーネルオプションは grub.cfg ファイルに残ります。

カーネルオプションは、以下の構文で指定できます。

cmdline=arg1 arg2 ... argN

例2.7 カーネルコマンドラインの変更

たとえば、quiet カーネルオプションを Tuned プロファイルに追加するには、tuned.conf ファイルに次の行を含めます。

[bootloader]
cmdline=quiet

以下に、isolcpus=2 オプションをカーネルコマンドラインに追加するカスタムプロファイルの例を示します。

[bootloader]
cmdline=isolcpus=2

2.6. Tuned プロファイルの変数と組み込み関数

Tuned プロファイルがアクティブになると、実行時に変数と組み込み関数が拡張されます。

Tuned 変数は、Tuned プロファイルで必要な入力量を減らします。また、以下を行うこともできます。

  • Tuned 変数とともに、さまざまな組み込み関数を使用します。
  • Python でカスタム関数を作成し、プラグインの形式で Tuned に追加します。

変数

Tuned プロファイルには、あらかじめ定義された変数がありません。プロファイルに [variables] セクションを作成し、以下の構文を使用すると、独自の変数を定義できます。

[variables]

variable_name=value

プロファイル内の変数の値を展開するには、以下の構文を使用します。

${variable_name}

例2.8 変数を使用した CPU コアの分離

以下の例では、${isolated_cores} 変数が 1,2 に展開されるため、カーネルは isolcpus=1,2 オプションで起動します。

[variables]
isolated_cores=1,2

[bootloader]
cmdline=isolcpus=${isolated_cores}

変数は個別のファイルで指定できます。たとえば、次の行を tuned.conf に追加できます。

[variables]
include=/etc/tuned/my-variables.conf

[bootloader]
cmdline=isolcpus=${isolated_cores}

isolated_cores=1,2 オプションを /etc/tuned/my-variables.conf ファイルに追加すると、カーネルが isolcpus=1,2 オプションで起動します。

関数

関数を呼び出すには、以下の構文を使用します。

${f:function_name:argument_1:argument_2}

プロファイルと tuned.conf ファイルが置かれたディレクトリーパスを展開するには、特殊な構文が必要な PROFILE_DIR 関数を使用します、

${i:PROFILE_DIR}

例2.9 変数と組み込み関数を使用した CPU コア分離

次の例では、${non_isolated_cores} 変数は 0,3-5 に展開され、cpulist_invert 組み込み関数が 0,3-5 引数で呼び出されます。

[variables]
non_isolated_cores=0,3-5

[bootloader]
cmdline=isolcpus=${f:cpulist_invert:${non_isolated_cores}}

cpulist_invert 関数は、CPU の一覧を反転します。6 CPU のマシンでは、反転が 1,2 になり、カーネルは isolcpus=1,2 コマンドラインオプションで起動します。

関連情報

  • man ページの tuned.conf(5)

2.7. Tuned プロファイルで使用可能な組み込み関数

以下の組み込み関数は、Tuned プロファイルで利用できます。

PROFILE_DIR
プロファイルと tuned.conf ファイルが置かれているディレクトリーパスを返します。
exec
プロセスを実行し、その出力を返します。
assertion
2 つの引数を比較します。一致しない 場合、関数は最初の引数からテキストをログに記録し、プロファイルの読み込みを中止します。
assertion_non_equal
2 つの引数を比較します。2 つの引数が 一致する 場合、関数は最初の引数からテキストをログに記録し、プロファイルの読み込みを中止します。
kb2s
キロバイトをディスクセクターに変換します。
s2kb
ディスクセクターをキロバイトに変換します。
strip
渡されたすべての引数から文字列を作成し、最初と最後の空白の両方を削除します。
virt_check

Tuned が仮想マシン内またはベアメタル上で実行しているかどうかを確認します。

  • 仮想マシン内では、この関数が最初の引数を返します。
  • ベアメタルでは、この関数は、エラーが発生した場合でも 2 番目の引数を返します。
cpulist_invert
補完するために CPU の一覧を反転します。たとえば、0 から 3 までの番号が付けられた 4 つの CPU を持つシステムでは、リスト 0,2,3 の反転は 1 です。
cpulist2hex
CPU リストを 16 進数の CPU マスクに変換します。
cpulist2hex_invert
CPU リストを 16 進数の CPU マスクに変換し、反転します。
hex2cpulist
16 進数の CPU マスクを CPU リストに変換します。
cpulist_online
リストからの CPU がオンラインかどうかをチェックします。オンライン CPU のみを含むリストを返します。
cpulist_present
リストに CPU が存在するかどうかを確認します。存在する CPU のみを含むリストを返します。
cpulist_unpack
1-3,4 形式の CPU リストを、1,2,3,4 に展開します。
cpulist_pack
CPU リストを、1,2,3,5 の形式で 1-3,5 に圧縮します。

2.8. 新しい Tuned プロファイルの作成

この手順は、カスタムのパフォーマンスルールを使用して、新しい Tuned プロファイルを作成します。

前提条件

手順

  1. /etc/tuned/ ディレクトリーで、作成するプロファイルと同じ名前の新しいディレクトリー作成します。

    # mkdir /etc/tuned/my-profile
  2. 新しいディレクトリーに、ファイル 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
  3. プロファイルをアクティベートするには、次のコマンドを実行します。

    # tuned-adm profile my-profile
  4. Tuned プロファイルがアクティブになり、システム設定が適用されていることを確認します。

    $ tuned-adm active
    
    Current active profile: my-profile
    $ tuned-adm verify
    
    Verfication succeeded, current system settings match the preset profile.
    See tuned log file ('/var/log/tuned/tuned.log') for details.

関連情報

  • man ページの tuned.conf(5)

2.9. 既存の Tuned プロファイルの変更

この手順では、既存の Tuned プロファイルに基づいて変更した子プロファイルを作成します。

前提条件

手順

  1. /etc/tuned/ ディレクトリーで、作成するプロファイルと同じ名前の新しいディレクトリー作成します。

    # mkdir /etc/tuned/modified-profile
  2. 新しいディレクトリーに、ファイル tuned.conf を作成し、以下のように [main] セクションを設定します。

    [main]
    include=parent-profile

    parent-profile を、変更しているプロファイルの名前に置き換えます。

  3. プロファイルの変更を含めます。

    例2.10 throughput-performance プロファイルでスワップを低減

    throughput-perfromance プロファイルの設定を使用し、vm.swappiness の値を、デフォルトの 10 ではなく 5 に変更するには、以下を使用します。

    [main]
    include=throughput-performance
    
    [sysctl]
    vm.swappiness=5
  4. プロファイルをアクティベートするには、次のコマンドを実行します。

    # tuned-adm profile modified-profile
  5. Tuned プロファイルがアクティブになり、システム設定が適用されていることを確認します。

    $ tuned-adm active
    
    Current active profile: my-profile
    $ tuned-adm verify
    
    Verfication succeeded, current system settings match the preset profile.
    See tuned log file ('/var/log/tuned/tuned.log') for details.

関連情報

  • man ページの tuned.conf(5)

2.10. Tuned でディスクスケジューラーの設定

この手順では、選択したブロックデバイスに対して特定のディスクスケジューラーを設定する Tuned プロファイルを作成し、有効にします。この設定は、システムを再起動しても持続します。

以下のコマンドと設定で、次の内容を置き換えます。

  • device を、ブロックデバイスの名前 (例: sdf) に置き換えます。
  • selected-scheduler を、デバイスに設定するディスクスケジューラー (例: bfq) に置き換えます。

前提条件

手順

  1. 必要に応じて、プロファイルのベースとなる既存の Tuned プロファイルを選択します。使用できるプロファイルの一覧は、「RHEL と一緒に配布される Tuned プロファイル」を参照してください。

    現在アクティブなプロファイルを確認するには、次のコマンドを実行します。

    $ tuned-adm active
  2. Tuned プロファイルを保存するディレクトリーを新たに作成します。

    # mkdir /etc/tuned/my-profile
  3. 選択したブロックデバイスの World Wide Name (WWN) 識別子を見つけます。

    $ udevadm info --query=property --name=/dev/device | grep WWN=
    
    ID_WWN=0x5002538d00000000
  4. /etc/tuned/my-profile/tuned.conf 設定ファイルを作成します。このファイルで、以下のオプションを設定します。

    • 必要に応じて、既存のプロファイルを追加します。

      [main]
      include=existing-profile
    • WWN 識別子に一致するデバイスに対して選択したディスクスケジューラーを設定します。

      [disk]
      devices_udev_regex=ID_WWN=0x5002538d00000000
      elevator=selected-scheduler

      devices_udev_regex オプション内の複数のデバイスに一致させる場合は、識別子をコンマで区切ります。

      devices_udev_regex=ID_WWN=0x5002538d00000000, ID_WWN=0x1234567800000000
  5. プロファイルを有効にします。

    # tuned-adm profile my-profile
  6. Tuned プロファイルがアクティブで適用されていることを確認します。

    $ tuned-adm active
    
    Current active profile: my-profile
    $ tuned-adm verify
    
    Verification succeeded, current system settings match the preset profile.
    See tuned log file ('/var/log/tuned/tuned.log') for details.

関連情報

第3章 Performance Co-Pilot によるパフォーマンスの監視

システム管理者は、Red Hat Enterprise Linux 8 の Performance Co-Pilot (PCP) アプリケーションを使用して、システムのパフォーマンスを監視できます。

3.1. PCP の概要

PCP は、システムレベルのパフォーマンス測定を監視、視覚化、保存、および解析するためのツール、サービス、およびライブラリーのスイートです。

PCP の機能:

  • 軽量の分散アーキテクチャ。複雑なシステムの集中分析に役に立ちます。
  • これにより、リアルタイムデータの監視および管理が可能になります。
  • これにより、履歴データのログおよび取得が可能になります。

Python、Perl、C++、および C のインターフェースを使用したパフォーマンスメトリックを追加できます。分析ツールは、Python、C++、C のクライアント API を直接使用でき、豊富な Web アプリケーションは、JSON インターフェースを使用して利用可能なすべてのパフォーマンスデータを調べることができます。

ライブ結果とアーカイブされたデータを比較して、データパターンを解析できます。

PCP には以下のコンポーネントがあります。

  • Performance Metric Collector Daemon (pmcd) は、インストールされている Performance Metric Domain Agents (pmda) からパフォーマンスデータを収集します。PMDA は、システムで個別にロードまたはアンロードでき、同じホストの PMCD によって制御されます。
  • pminfopmstat などのさまざまなクライアントツールは、同じホストまたはネットワーク上でこのデータを取得、表示、アーカイブ、処理できます。
  • pcp パッケージは、コマンドラインツールと、基本的な機能を提供します。
  • pcp-gui パッケージは、グラフィカルアプリケーションを提供します。yum install pcp-gui コマンドを実行して、pcp-gui パッケージをインストールします。詳細はPCP Charts アプリケーションで PCP ログアーカイブを視覚的にトレース」を参照してください。

3.2. PCP のインストールおよび有効化

PCP の使用を開始するには、必要なパッケージをすべてインストールし、PCP 監視サービスを有効にします。

手順

  1. PCP パッケージをインストールします。

    # yum install pcp
  2. ホストマシンで pmcd サービスを有効にして起動します。

    # systemctl enable pmcd
    
    # systemctl start pmcd
  3. pmcd プロセスがホストで実行しており、設定一覧に XFS PMDA が有効として記載されていることを確認します。

    # pcp
    
    Performance Co-Pilot configuration on workstation:
    
    platform: Linux workstation 4.18.0-80.el8.x86_64 #1 SMP Wed Mar 13 12:02:46 UTC 2019 x86_64
    hardware: 12 cpus, 2 disks, 1 node, 36023MB RAM
    timezone: CEST-2
    services: pmcd
    pmcd: Version 4.3.0-1, 8 agents
    pmda: root pmcd proc xfs linux mmv kvm jbd2

関連情報

3.3. 最小限の PCP 設定のデプロイメント

最小 PCP 設定は、Red Hat Enterprise Linux でパフォーマンス統計を収集します。この設定は、詳細な分析のためにデータを収集するために必要な、実稼働システムに最低限のパッケージを追加します。作成された tar.gz ファイルおよび pmlogger の出力のアーカイブは、さまざまな PCP ツールを使用して解析し、その他のソースのパフォーマンス情報と比較できます。

前提条件

手順

  1. pmlogger 設定を更新します。

    # pmlogconf -r /var/lib/pcp/config/pmlogger/config.default
  2. pmcd サービスおよび pmlogger サービスを起動します。

    # systemctl start pmcd.service
    
    # systemctl start pmlogger.service
  3. 必要な操作を実行して、パフォーマンスデータを記録します。
  4. pmcd サービスおよび pmlogger サービスを停止します。

    # systemctl stop pmcd.service
    
    # systemctl stop pmlogger.service
  5. 出力を保存し、ホスト名と現在の日時に基づいて名前が付けられた tar.gz ファイルに保存します。

    # cd /var/log/pcp/pmlogger/
    
    # tar -czf $(hostname).$(date +%F-%Hh%M).pcp.tar.gz $(hostname)

    このファイルを展開し、PCP ツールを使用してデータを解析します。

3.4. pmlogger でのパフォーマンスデータのロギング

PCP ツールを使用してパフォーマンスのメトリック値をログに記録すると、後で再生できます。これにより、遡及的なパフォーマンス解析を実行できます。

pmlogger ツールを使用すると、以下が可能になります。

  • 選択したメトリックのアーカイブログをシステムに作成する
  • システムに記録されるメトリックとその頻度を指定する

3.4.1. pmlogconf で pmlogger 設定ファイルの変更

pmlogger サービスの実行中、PCP はホストでメトリックのデフォルトセットをログに記録します。pmlogconf ユーティリティーを使用してデフォルト設定を確認します。pmlogger 設定ファイルが存在しない場合は、pmlogconf がデフォルトのメトリック値で作成します。

前提条件

手順

  1. pmlogger 設定ファイルを作成または変更します。

    # pmlogconf -r /var/lib/pcp/config/pmlogger/config.default
  2. pmlogconf プロンプトに従い、関連するパフォーマンスメトリックのグループを有効または無効にし、有効な各グループのロギング間隔を制御します。

3.4.2. pmlogger の設定ファイルの手動編集

指定したメトリックと間隔でカスタマイズしたロギング設定を作成する場合は、pmlogger 設定ファイルを手動で編集します。

手動の設定では、以下が可能になります。

  • 自動設定の一覧に記載されていないメトリックを記録する。
  • カスタムロギングの周波数を選択する。
  • アプリケーションのメトリックを使用して PMDA を追加する。

デフォルトの pmlogger 設定ファイルは /var/lib/pcp/config/pmlogger/config.default です。設定ファイルでは、プライマリーのロギングインスタンスによって記録されるメトリックを指定します。

前提条件

手順

  • /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;

3.4.3. pmlogger サービスの有効化

ローカルマシンでメトリック値のログを記録するには、pmlogger サービスを開始して有効にする必要があります。

前提条件

手順

  1. pmlogger サービスを開始して、有効にします。

    # systemctl start pmlogger
    
    # systemctl enable pmlogger
  2. pmlogger が有効になっていることを確認します。

    # pcp
    
    Performance Co-Pilot configuration on workstation:
    
    platform: Linux workstation 4.18.0-80.el8.x86_64 #1 SMP Wed Mar 13 12:02:46 UTC 2019 x86_64
    hardware: 12 cpus, 2 disks, 1 node, 36023MB RAM
    timezone: CEST-2
    services: pmcd
    pmcd: Version 4.3.0-1, 8 agents, 1 client
    pmda: root pmcd proc xfs linux mmv kvm jbd2
    pmlogger: primary logger: /var/log/pcp/pmlogger/workstation/20190827.15.54

関連情報

3.4.4. メトリック収集のためのクライアントシステムの設定

この手順では、中央サーバーが、PCP を実行しているクライアントからメトリックを収集できるように、クライアントシステムを設定する方法を説明します。

前提条件

手順

  1. pcp-system-tools パッケージをインストールします。

    # yum install pcp-system-tools
  2. pmcd の IP アドレスを設定します。

    # echo "-i 192.168.4.62" >>/etc/pcp/pmcd/pmcd.options

    192.168.4.62 を、クライアントがリッスンする IP アドレスに置き換えます。

    デフォルトでは、pmcd は、ローカルホストをリッスンします。

  3. パブリック ゾーン を永続的に追加するように、ファイアウォールを設定します。

    # firewall-cmd --permanent --zone=public --add-port=44321/tcp
    success
    
    # firewall-cmd --reload
    success
  4. SELinux ブール値を設定します。

    # setsebool -P pcp_bind_all_unreserved_ports on
  5. pmcd サービスおよび pmlogger サービスを有効にします。

    # systemctl enable pmcd pmlogger
    # systemctl restart pmcd pmlogger

検証手順

  • pmcd が、設定した IP アドレスを正しくリッスンしているかどうかを確認します。

    # ss -tlp | grep 44321
    LISTEN   0   5     127.0.0.1:44321   0.0.0.0:*   users:(("pmcd",pid=151595,fd=6))
    LISTEN   0   5  192.168.4.62:44321   0.0.0.0:*   users:(("pmcd",pid=151595,fd=0))
    LISTEN   0   5         [::1]:44321      [::]:*   users:(("pmcd",pid=151595,fd=7))

関連情報

3.4.5. データ収集用に中央サーバーの設定

この手順では、PCP を実行しているクライアントからメトリックを収集する中央サーバーを作成する方法を説明します。

前提条件

手順

  1. pcp-system-tools パッケージをインストールします。

    # yum install pcp-system-tools
  2. 監視するクライアントを追加します。

    # echo "192.168.4.13 n n PCP_LOG_DIR/pmlogger/rhel7u4a -r -T24h10m \
    -c config.remote"  >> /etc/pcp/pmlogger/control.d/remote
    
    # echo "192.168.4.14 n n PCP_LOG_DIR/pmlogger/rhel6u10a -r -T24h10m \
     -c config.remote" >> /etc/pcp/pmlogger/control.d/remote
    
    # echo "192.168.4.62 n n PCP_LOG_DIR/pmlogger/rhel8u1a -r -T24h10m \
    -c config.remote" >> /etc/pcp/pmlogger/control.d/remote

    192.168.4.13192.168.4.14、および 192.168.4.62 を、クライアントの IP アドレスに置き換えます。

  3. 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/ ディレクトリーのアーカイブファイルは、詳細な分析とグラフ作成に使用できます。

関連情報

3.4.6. pmdumptext で PCP ログアーカイブの再生

メトリックデータの記録後、PCP ログアーカイブを再生できます。ログをテキストファイルにエクスポートしてスプレッドシートにインポートするには、pmdumptextpmreppmlogsummary などの PCP ユーティリティーを使用します。

pmdumptext ツールを使用すると、以下が可能になります。

  • ログファイルを表示する
  • 選択した PCP ログアーカイブを解析し、値を ASCII テーブルにエクスポートする
  • アーカイブログ全体を展開するか、コマンドラインで個別のメトリックを指定して、ログからメトリック値のみを選択する

前提条件

手順

  • メトリックのデータを表示します。

    $ pmdumptext -t 5seconds -H -a 20170605 xfs.perdev.log.writes
    
    Time local::xfs.perdev.log.writes["/dev/mapper/fedora-home"] local::xfs.perdev.log.writes["/dev/mapper/fedora-root"]
    ? 0.000 0.000
    none count / second count / second
    Mon Jun 5 12:28:45 ? ?
    Mon Jun 5 12:28:50 0.000 0.000
    Mon Jun 5 12:28:55 0.200 0.200
    Mon Jun 5 12:29:00 6.800 1.000

    上記の例では、アーカイブに 5 秒 間隔で収集された xfs.perdev.log メトリックのデータを表示し、すべてのヘッダーを表示します。

関連情報

3.5. pmda-postfix で postfix の監視

この手順では、pmda-postfix を使用して postfix メールサーバーのパフォーマンスメトリックを監視する方法を説明します。これは、1 秒間に受信した電子メールの数を確認するのに役立ちます。

前提条件

手順

  1. 以下のパッケージをインストールします。

    1. pcp-system-tools をインストールします。

      # yum install pcp-system-tools
    2. pmda-postfix パッケージをインストールして、postfix を監視します。

      # yum install pcp-pmda-postfix postfix
    3. ロギングデーモンをインストールします。

      # yum install rsyslog
    4. テスト用にメールクライアントをインストールします。

      # yum install mutt
  2. postfix サービスおよび rsyslog サービスを有効にします。

    # systemctl enable postfix rsyslog
    # systemctl restart postfix rsyslog
  3. SELinux ブール値を有効にして、pmda-postfix が必要なログファイルにアクセスできるようにします。

    # setsebool -P pcp_read_generic_logs=on
  4. PMDA をインストールします。

    # cd /var/lib/pcp/pmdas/postfix/
    
    # ./Install
    
    Updating the Performance Metrics Name Space (PMNS) ...
    Terminate PMDA if already installed ...
    Updating the PMCD control file, and notifying PMCD ...
    Waiting for pmcd to terminate ...
    Starting pmcd ...
    Check postfix metrics have appeared ... 7 metrics and 58 values

検証手順

  • pmda-postfix 操作を確認します。

    echo testmail | mutt root
  • 利用可能なメトリックを確認します。

    # pminfo postfix
    
    postfix.received
    postfix.sent
    postfix.queues.incoming
    postfix.queues.maildrop
    postfix.queues.hold
    postfix.queues.deferred
    postfix.queues.active

関連情報

3.6. PCP Charts アプリケーションで PCP ログアーカイブを視覚的にトレース

メトリックデータの記録後、PCP ログアーカイブをグラフとして再生できます。

PCP Charts アプリケーションを使用すると、以下が可能になります。

  • PCP Charts アプリケーションのデータを再生し、グラフを使用して、システムのライブデータとともに遡及データを視覚化する。
  • パフォーマンスメトリック値をグラフに描画する。
  • 複数のチャートを同時に表示する。

メトリックは、PCP ログアーカイブのメトリックデータを履歴データのソースとして使用する代替オプションを持つ 1 台または複数のライブホストから提供されます。

PCP Charts アプリケーションインターフェースをカスタマイズして、パフォーマンスメトリックのデータを表示する方法を以下に示します。

  • 折れ線グラフ
  • 棒グラフ
  • 使用状況グラフ

前提条件

手順

  1. コマンドラインで PCP Charts アプリケーションを起動します。

    # pmchart

    pmchart started

    pmtime サーバー設定は下部にあります。start ボタンおよび pause ボタンを使用すると、以下を制御できます。

    • PCP がメトリックデータをポーリングする間隔
    • 履歴データのメトリックの日付および時間
  2. File → New Chart に移動して、ホスト名またはアドレスを指定して、ローカルマシンおよびリモートマシンの両方からメトリックを選択します。高度な構成オプションには、チャートの軸値を手動で設定する機能、およびプロットの色を手動で選択する機能が含まれます。
  3. PCP Charts アプリケーションで作成したビューを記録します。

    以下は、PCP Charts アプリケーションで作成したイメージを撮影したり、ビューを記録するためのオプションです。

    • File → Export の順にクリックして、現在のビューのイメージを保存します。
    • Record → Start の順にクリックして、録画を開始します。Record → Stop の順にクリックして、録画を停止します。録画の停止後、記録されたメトリックは後で表示できるようにアーカイブが作成されます。
  4. 必要に応じて、PCP Charts アプリケーションでは、ビュー と呼ばれるメインの設定ファイルによって、1 つ以上のチャートに関連付けられたメタデータを保存できます。このメタデータでは、使用されるメトリックや、チャート列など、チャート側面をすべて記述します。File → Save View をクリックしてカスタムの ビュー 設定を保存し、後で ビュー 設定を読み込みます。PCP Charts アプリケーションビューの設定ファイルの例では、指定の XFS ファイルシステム loop1 に対して読み書きされた合計バイト数を示す積み上げチャートグラフを説明します。

    #kmchart
    version 1
    
    chart title "Filesystem Throughput /loop1" style stacking antialiasing off
        plot legend "Read rate"   metric xfs.read_bytes   instance  "loop1"
        plot legend "Write rate"  metric xfs.write_bytes  instance  "loop1"

関連情報

3.7. PCP で XFS ファイルシステムのパフォーマンス解析

XFS PMDA は、pcp パッケージの一部として提供され、インストール時にデフォルトで有効になります。PCP の XFS ファイルシステムのパフォーマンスメトリックデータを収集するのに使用されます。

3.7.1. XFS PMDA の手動インストール

XFS PMDA が、PCP 設定の読み出しに記載されていない場合は、PMDA エージェントを手動でインストールします。

手順

  1. xfs ディレクトリーに移動します。

    # cd /var/lib/pcp/pmdas/xfs/
  2. XFS PMDA を手動でインストールします。

    xfs]# ./Install
    
    You will need to choose an appropriate configuration for install of
    the “xfs” Performance Metrics Domain Agent (PMDA).
    
      collector     collect performance statistics on this system
      monitor       allow this system to monitor local and/or remote systems
      both          collector and monitor configuration for this system
    
    Please enter c(ollector) or m(onitor) or (both) [b]
    Updating the Performance Metrics Name Space (PMNS) ...
    Terminate PMDA if already installed ...
    Updating the PMCD control file, and notifying PMCD ...
    Waiting for pmcd to terminate ...
    Starting pmcd ...
    Check xfs metrics have appeared ... 149 metrics and 149 values
  3. collector の場合は c を、monitor の場合は m を、またはこれら両方の場合は b を入力して、PMDA ロールを選択します。PMDA インストールスクリプトから、以下の PMDA ロールのいずれかを指定するように求められます。

    • collector ロールを指定すると、現在のシステムでパフォーマンスメトリックを収集できます。
    • monitor ロールを指定すると、システムがローカルシステム、リモートシステム、またはその両方を監視できるようになります。

      デフォルトオプションは collectormonitor の両方です。これにより、ほとんどのシナリオで XFS PMDA が適切に動作します。

関連情報

3.7.2. pminfo で XFS パフォーマンスメトリックの検証

pminfo ツールは、利用可能なパフォーマンスメトリックに関する情報を表示します。この手順では、XFS PMDA が提供する利用可能なメトリックの一覧を表示します。

前提条件

手順

  1. XFS PMDA が提供する利用可能なメトリックの一覧を表示します。

    # pminfo xfs
  2. 個別のメトリックの情報を表示します。以下の例は、pminfo ツールを使用して、特定の XFS の read メトリックおよび write メトリックを検証します。

    • xfs.write_bytes メトリックの簡単な説明を表示します。

      # pminfo --online xfs.write_bytes
      
      xfs.write_bytes [number of bytes written in XFS file system write operations]
    • xfs.read_bytes メトリックの長い説明を表示します。

      # pminfo --helptext xfs.read_bytes
      
      xfs.read_bytes
      Help:
      This is the number of bytes read via read(2) system calls to files in
      XFS file systems. It can be used in conjunction with the read_calls
      count to calculate the average size of the read operations to file in
      XFS file systems.
    • xfs.read_bytes メトリックの現在のパフォーマンス値を取得します。

      # pminfo --fetch xfs.read_bytes
      
      xfs.read_bytes
          value 4891346238

3.7.3. pmstore で XFS パフォーマンスメトリックのリセット

PCP を使用すると、特に特定のメトリックが、xfs.control.reset メトリックなどの制御変数として動作する場合は、そのメトリックの値を変更できます。メトリックの値を変更するには、pmstore ツールを使用します。

前提条件

手順

  1. メトリックの値を表示します。

    $ pminfo -f xfs.write
    
    xfs.write
        value 325262
  2. すべての XFS メトリックをリセットします。

    # pmstore xfs.control.reset 1
    
    xfs.control.reset old value=0 new value=1
  3. メトリックをリセットした後に情報を表示します。

    $ pminfo --fetch xfs.write
    
    xfs.write
        value 0

3.7.4. 各ファイルシステムに利用できる XFS メトリックの検証

PCP は XFS PMDA を有効にして、マウントされた各 XFS ファイルシステムに対して特定の XFS メトリックの報告を可能にします。これにより、特定のマウントされたファイルシステムの問題を特定して、パフォーマンスを評価することが容易になります。pminfo コマンドは、マウントされた各 XFS ファイルシステムの各デバイスに対する XFS メトリックを提供します。

前提条件

手順

  • pminfo で、デバイスごとの XFS メトリックを取得します。

    # pminfo --fetch --online xfs.perdev.read xfs.perdev.write
    
    xfs.perdev.read [number of XFS file system read operations]
    inst [0 or "loop1"] value 0
    inst [0 or "loop2"] value 0
    
    xfs.perdev.write [number of XFS file system write operations]
    inst [0 or "loop1"] value 86
    inst [0 or "loop2"] value 0

3.8. PCP で配布されるシステムサービス

名前

説明

pmcd

PMCD (Performance Metric Collector Daemon)

pmie

Performance Metrics In difference Engine

pmlogger

パフォーマンスメトリックロガー。

pmmgr

ゼロ以上の設定ディレクトリーに従って、PMCD (Performance Metric Collector Daemon) を実行している、検出された一連のローカルおよびリモートのホストで PCP デーモンのコレクションを管理します。

pmproxy

PMCD (Performance Metric Collector Daemon) プロキシーサーバー

pmwebd

HTTP プロトコルを使用して、Performance Co-Pilot クライアント API のサブセットを RESTful Web アプリケーションにバインドします。

3.9. PCP と共に配布されるツール

名前

説明

pcp

Performance Co-Pilot インストールの現在のステータスを表示します。

pcp-atop

パフォーマンスの観点から最も重要なハードウェアリソース (CPU、メモリー、ディスク、およびネットワーク) のシステムレベルの占有を表示します。

pcp-dstat

一度に 1 台のシステムのメトリックを表示します。複数のシステムのメトリックを表示するには、--host オプションを使用します。

pmchart

Performance Co-Pilot の機能を介して利用可能なパフォーマンスメトリック値を描画します。

pmclient

PMAPI (Performance Metrics Application Programming Interface) を使用して、高水準のシステムパフォーマンスメトリックを表示します。

pmcollectl

ライブシステムまたは Performance Co-Pilot アーカイブファイルのいずれかからシステムレベルデータを収集して表示します。

pmconfig

設定パラメーターの値を表示します。

pmdbg

利用可能な Performance Co-Pilot デバッグ制御フラグとその値を表示します。

pmdiff

パフォーマンスのリグレッションを検索する際に重要と思われる変更について、指定された時間枠で、1 つまたは 2 つのアーカイブのすべてのメトリックの平均値を比較します。

pmdumplog

Performance Co-Pilot アーカイブファイルの制御、メタデータ、インデックス、および状態に関する情報を表示します。

pmdumptext

ライブまたは Performance Co-Pilot アーカイブから収集されたパフォーマンスメトリックの値を出力します。

pmerr

利用可能な Performance Co-Pilot エラーコードと、それに対応するエラーメッセージを表示します。

pmfind

ネットワークで PCP サービスを見つけます。

pmie

一連の演算式、論理式、およびルール式を定期的に評価する推論エンジン。メトリックは、ライブシステムまたは Performance Co-Pilot アーカイブファイルのいずれかから収集されます。

pmieconf

設定可能な pmie 変数を表示または設定します。

pminfo

パフォーマンスメトリックに関する情報を表示します。メトリックは、ライブシステムまたは Performance Co-Pilot アーカイブファイルのいずれかから収集されます。

pmiostat

SCSI デバイス (デフォルト) またはデバイスマッパーデバイス (-x dm オプションを使用) の I/O 統計を報告します。

pmlc

アクティブな pmlogger インスタンスを対話的に設定します。

pmlogcheck

Performance Co-Pilot アーカイブファイルで無効なデータを特定します。

pmlogconf

pmlogger 設定ファイルを作成および変更します。

pmloglabel

Performance Co-Pilot アーカイブファイルのラベルを検証、変更、または修復します。

pmlogsummary

Performance Co-Pilot アーカイブファイルに格納されたパフォーマンスメトリックに関する統計情報を計算します。

pmprobe

パフォーマンスメトリックの可用性を決定します。

pmrep

選択した、簡単にカスタマイズ可能なパフォーマンスメトリック値に関するレポート。

pmsocks

ファイアウォールを介して Performance Co-Pilot ホストへのアクセスを許可します。

pmstat

システムパフォーマンスの簡単な概要を定期的に表示します。

pmstore

パフォーマンスメトリックの値を変更します。

pmtrace

トレースの PMDA (Performance Metrics Domain Agent) にコマンドラインインターフェースを提供します。

pmval

パフォーマンスメトリックの現在の値を表示します。

3.10. XFS の PCP メトリックグループ

メトリックグループ

提供されたメトリック

xfs.*

読み書き操作の数、読み書きバイト数を含む一般的な XFS メトリック。inode がフラッシュされた回数、クラッシュした回数、クラスター化に失敗した数に関するカウンターを併用。

xfs.allocs.*

xfs.alloc_btree.*

ファイルシステムのオブジェクトの割り当てに関するメトリックの範囲。これには、エクステントおよびブロックの作成/解放の数が含まれます。割り当てツリーの検索と、拡張レコードの作成と btree からの削除との比較。

xfs.block_map.*

xfs.bmap_tree.*

メトリックには、ブロックマップの読み取り/書き込みとブロックの削除の数、挿入、削除、および検索のためのエクステントリスト操作が含まれます。また、ブロックマップからの比較、検索、挿入、および削除に関する操作カウンター。

xfs.dir_ops.*

作成、エントリー削除、getdent の操作の数に対する XFS ファイルシステムのディレクトリー操作のカウンター。

xfs.transactions.*

メタデータトランザクションの数のカウンター。これには、空のトランザクションの数と、同期および非同期のトランザクションの数のカウントが含まれます。

xfs.inode_ops.*

オペレーティングシステムが、複数の結果で inode キャッシュの XFS inode を検索する回数のカウンター。このカウントキャッシュのヒット数、キャッシュミスなど。

xfs.log.*

xfs.log_tail.*

XFS ファイルシステムを介したログバッファーの書き込み数のカウンターには、ディスクに書き込まれたブロックの数が含まれます。また、ログフラッシュおよびピニングの数のメトリックです。

xfs.xstrat.*

XFS フラッシュデーモンによりフラッシュされたファイルデータのバイト数と、ディスク上の連続および非連続の領域にフラッシュされたバッファーの数のカウンター。

xfs.attr.*

すべての XFS ファイルシステムでの属性の取得、設定、削除、および一覧表示の操作数のカウント。

xfs.quota.*

XFS ファイルシステムでのクォータ操作のメトリック。これには、クォータ回収、クォータキャッシュミス、キャッシュヒット、およびクォータデータの回収の数に関するカウンターが含まれます。

xfs.buffer.*

XFS バッファーオブジェクトに関するメトリックの範囲。カウンターには、ページ検索時に要求されたバッファコールの数、成功したバッファロック、待機バッファロック、失敗したときのロック、失敗したときの再試行、バッファーヒットが含まれます。

xfs.btree.*

XFS btree の操作に関するメトリック。

xfs.control.reset

XFS 統計のメトリックカウンターをリセットするのに使用される設定メトリック。コントロールメトリックは、pmstore ツールを使用して切り替えられます。

3.11. XFS のデバイスごとの PCP メトリックグループ

メトリックグループ

提供されたメトリック

xfs.perdev.*

読み書き操作の数、読み書きバイト数を含む一般的な XFS メトリック。inode がフラッシュされた回数、クラッシュした回数、クラスター化に失敗した数に関するカウンターを併用。

xfs.perdev.allocs.*

xfs.perdev.alloc_btree.*

ファイルシステムのオブジェクトの割り当てに関するメトリックの範囲。これには、エクステントおよびブロックの作成/解放の数が含まれます。割り当てツリーの検索と、拡張レコードの作成と btree からの削除との比較。

xfs.perdev.block_map.*

xfs.perdev.bmap_tree.*

メトリックには、ブロックマップの読み取り/書き込みとブロックの削除の数、挿入、削除、および検索のためのエクステントリスト操作が含まれます。また、ブロックマップからの比較、検索、挿入、および削除に関する操作カウンター。

xfs.perdev.dir_ops.*

作成、エントリー削除、getdent の操作の数に対する XFS ファイルシステムのディレクトリー操作のカウンター。

xfs.perdev.transactions.*

メタデータトランザクションの数のカウンター。これには、空のトランザクションの数と、同期および非同期のトランザクションの数のカウントが含まれます。

xfs.perdev.inode_ops.*

オペレーティングシステムが、複数の結果で inode キャッシュの XFS inode を検索する回数のカウンター。このカウントキャッシュのヒット数、キャッシュミスなど。

xfs.perdev.log.*

xfs.perdev.log_tail.*

XFS ファイルシステムを介したログバッファーの書き込み数のカウンターには、ディスクに書き込まれたブロックの数が含まれます。また、ログフラッシュおよびピニングの数のメトリックです。

xfs.perdev.xstrat.*

XFS フラッシュデーモンによりフラッシュされたファイルデータのバイト数と、ディスク上の連続および非連続の領域にフラッシュされたバッファーの数のカウンター。

xfs.perdev.attr.*

すべての XFS ファイルシステムでの属性の取得、設定、削除、および一覧表示の操作数のカウント。

xfs.perdev.quota.*

XFS ファイルシステムでのクォータ操作のメトリック。これには、クォータ回収、クォータキャッシュミス、キャッシュヒット、およびクォータデータの回収の数に関するカウンターが含まれます。

xfs.perdev.buffer.*

XFS バッファーオブジェクトに関するメトリックの範囲。カウンターには、ページ検索時に要求されたバッファコールの数、成功したバッファロック、待機バッファロック、失敗したときのロック、失敗したときの再試行、バッファーヒットが含まれます。

xfs.perdev.btree.*

XFS btree の操作に関するメトリック。

第4章 Web コンソールでパフォーマンスプロファイルの選択

Red Hat Enterprise Linux 8 には、以下を最適化するパフォーマンスプロファイルが同梱されています。

  • Desktop を使用するシステム
  • レイテンシーパフォーマンス
  • ネットワークパフォーマンス
  • 電力の低消費
  • 仮想マシン

次の手順では、Web コンソールでパフォーマンスプロファイルを設定する方法を説明します。

RHEL 8 Web コンソールでは、tuned サービスを構成します。

tuned サービスの詳細は、『システムの状態とパフォーマンスの監視と管理』を参照してください。

前提条件

手順

  1. RHEL 8 Web コンソールにログインします。

    詳細は「Web コンソールへのログイン」を参照してください。

  2. 概要 をクリックします。
  3. パフォーマンスプロファイル フィールドで、現在のパフォーマンスプロファイルをクリックします。

    cockpit performance profile pf4

  4. 必要に応じて、パフォーマンスプロファイルの変更 ダイアログボックスで、プロファイルを変更します。
  5. プロファイルの変更 をクリックします。

    cockpit performance profile change pf4

この変更が 概要 タブで利用できるようになりました。

第5章 ディスクスケジューラーの設定

ディスクスケジューラーは、ストレージデバイスに送信された I/O 要求を順序付けます。

スケジューラーは以下の複数の方法で設定できます。

5.1. RHEL 8 におけるディスクスケジューラーの変更

RHEL 8 では、ブロックデバイスはマルチキュースケジューリングのみに対応しています。これにより、高速ソリッドステートドライブ (SSD) およびマルチコアシステムのブロックレイヤーのパフォーマンスが向上します。

RHEL 7 以前のバージョンで利用できた従来のシングルキュースケジューラーが削除されました。

5.2. 利用可能なディスクスケジューラー

RHEL 8 では、以下のマルチキューディスクスケジューラーに対応しています。

ディスクスケジューラー

none
FIFO (First-in First-out) スケジューリングアルゴリズムを実装します。これにより、汎用のブロック層で単純な last-hit キャッシュを介して要求がマージされます。
mq-deadline

これにより、要求がスケジューラーに到達した時点からの要求のレイテンシーが保証されます。

mq-deadline スケジューラーは、キュー待ちの I/O リクエストを読み取りバッチまたは書き込みバッチに分類します。そして、論理ブロックアドレス (LBA) を増大順に実行するためのスケジュール設定を行います。デフォルトでは、アプリケーションは読み取り I/O 操作でブロックする可能性の方が高いため、読み取りバッチの方が書き込みバッチより優先されます。mq-deadline がバッチを処理すると、このプロセスは書き込み動作が待機している長さを確認して、次の読み取りバッチまたは書き込みバッチをスケジュールします。

このスケジューラーはほとんどのユースケースに適していますが、必要に応じて特に書き込み動作より読み取り動作の方が頻繁に起こるユースケースに適しています。

bfq

デスクトップシステムおよび対話式のタスクを対象とします。

bfq スケジューラーは、単一のアプリケーションがすべての帯域幅を使用しないようにします。これにより、ストレージデバイスがアイドル状態であるかのように常に応答できるようになります。大きなファイルをコピーしても、システムが応答しなくなることはありません。デフォルトの設定では、bfq は、最大スループットを実現するのではなく、レイテンシーを最小限に抑えることに焦点を合わせています。

bfqcfq コードに基づいています。固定タイムスライスについて、ディスクは各プロセスに付与されることはありませんが、セクター数を測定する budget をプロセスに割り当てます。

kyber
高速なデバイス用です。このスケジューラーは、レイテンシーゴールを達成するために自身を調整します。読み込み/同期書き込みリクエストにターゲットレイテンシーを設定できます。

5.4. デフォルトのディスクスケジューラー

ブロックデバイスは、別のスケジューラーを指定しない限り、デフォルトのディスクスケジューラーを使用します。

カーネルは、デバイスのタイプに基づいてデフォルトのディスクスケジューラーを選択します。自動的に選択されたスケジューラーは、通常、最適な設定です。別のスケジューラーが必要な場合、Red Hat は、udev ルールまたは Tuned アプリケーションを使用して設定することを推奨されます。選択したデバイスを一致させ、そのデバイスのスケジューラーのみを切り替えます。

5.5. アクティブなディスクスケジューラーの決定

この手順では、特定のブロックデバイスで現在アクティブなディスクスケジューラーを確認します。

手順

  • /sys/block/device/queue/scheduler ファイルの内容を読み取ります。

    # cat /sys/block/device/queue/scheduler
    
    [mq-deadline] kyber bfq none

    ファイル名の device を、sdc などのブロックデバイス名に置き換えます。

    アクティブなスケジューラーは、角括弧 ([ ]) に一覧表示されます。

5.6. Tuned でディスクスケジューラーの設定

この手順では、選択したブロックデバイスに対して特定のディスクスケジューラーを設定する Tuned プロファイルを作成し、有効にします。この設定は、システムを再起動しても持続します。

以下のコマンドと設定で、次の内容を置き換えます。

  • device を、ブロックデバイスの名前 (例: sdf) に置き換えます。
  • selected-scheduler を、デバイスに設定するディスクスケジューラー (例: bfq) に置き換えます。

前提条件

手順

  1. 必要に応じて、プロファイルのベースとなる既存の Tuned プロファイルを選択します。使用できるプロファイルの一覧は、「RHEL と一緒に配布される Tuned プロファイル」を参照してください。

    現在アクティブなプロファイルを確認するには、次のコマンドを実行します。

    $ tuned-adm active
  2. Tuned プロファイルを保存するディレクトリーを新たに作成します。

    # mkdir /etc/tuned/my-profile
  3. 選択したブロックデバイスの World Wide Name (WWN) 識別子を見つけます。

    $ udevadm info --query=property --name=/dev/device | grep WWN=
    
    ID_WWN=0x5002538d00000000
  4. /etc/tuned/my-profile/tuned.conf 設定ファイルを作成します。このファイルで、以下のオプションを設定します。

    • 必要に応じて、既存のプロファイルを追加します。

      [main]
      include=existing-profile
    • WWN 識別子に一致するデバイスに対して選択したディスクスケジューラーを設定します。

      [disk]
      devices_udev_regex=ID_WWN=0x5002538d00000000
      elevator=selected-scheduler

      devices_udev_regex オプション内の複数のデバイスに一致させる場合は、識別子をコンマで区切ります。

      devices_udev_regex=ID_WWN=0x5002538d00000000, ID_WWN=0x1234567800000000
  5. プロファイルを有効にします。

    # tuned-adm profile my-profile
  6. Tuned プロファイルがアクティブで適用されていることを確認します。

    $ tuned-adm active
    
    Current active profile: my-profile
    $ tuned-adm verify
    
    Verification succeeded, current system settings match the preset profile.
    See tuned log file ('/var/log/tuned/tuned.log') for details.

関連情報

5.7. udev ルールでディスクスケジューラーの設定

この手順では、udev ルールを使用して、特定ブロックデバイスに、特定のディスクスケジューラーを設定します。この設定は、システムを再起動しても持続します。

以下のコマンドと設定で、次の内容を置き換えます。

  • device を、ブロックデバイスの名前 (例: sdf) に置き換えます。
  • selected-scheduler を、デバイスに設定するディスクスケジューラー (例: bfq) に置き換えます。

手順

  1. ブロックデバイスの World Wide Identifier (WWID) を見つけます。

    $ udevadm info --attribute-walk --name=/dev/device | grep wwid
    
        ATTRS{wwid}=="device WWID"

    デバイス WWID には、以下のような値があります。

    t10.ATA     SAMSUNG MZNLN256HMHQ-000L7              S2WDNX0J336519
  2. udev ルールを設定します。以下の内容で /etc/udev/rules.d/99-scheduler.rules ファイルを作成します。

    ACTION=="add|change", SUBSYSTEM=="block", ATTRS{wwid}=="device WWID", ATTR{queue/scheduler}="selected-scheduler"

    WWID を、前の手順で確認した WWID 値に置き換えます。

  3. udev ルールを再読み込みします。

    # udevadm control --reload-rules
  4. スケジューラー設定を適用します。

    # udevadm trigger --type=devices --action=change
  5. アクティブなスケジューラーを確認します。

    # cat /sys/block/device/queue/scheduler

5.8. 特定ディスクに任意のスケジューラーを一時的に設定

この手順では、特定のブロックデバイスに、特定のディスクスケジューラーを設定します。この設定は、システムを再起動すると元に戻ります。

手順

  • 選択したスケジューラーの名前を、/sys/block/device/queue/scheduler ファイルに書き込みます。

    # echo selected-scheduler > /sys/block/device/queue/scheduler

    ファイル名の device を、sdc などのブロックデバイス名に置き換えます。

検証手順

  • スケジューラーがデバイスでアクティブになっていることを確認します。

    # cat /sys/block/device/queue/scheduler

第6章 Samba サーバーのパフォーマンスチューニング

本章では、特定の状況で Samba のパフォーマンスを改善できる設定と、パフォーマンスが低下する可能性のある設定を説明します。

このセクションの一部は、Samba Wiki に公開されているドキュメント「Performance Tuning」に掲載されています。ライセンスは、CC BY 4.0 にあります。著者および貢献者は、Wiki ページの history タブを参照してください。

前提条件

6.1. SMB プロトコルバージョンの設定

新しい SMB バージョンごとに機能が追加され、プロトコルのパフォーマンスが向上します。最新の Windows および Windows Server オペレーティングシステムは、常に最新のプロトコルバージョンに対応しています。Samba がプロトコルの最新バージョンも使用している場合は、Samba に接続する Windows クライアントで、このパフォーマンス改善を活用できます。Samba では、server max protocol のデフォルト値が、対応している安定した SMB プロトコルの最新バージョンに設定されます。

注記

常に最新の安定した SMB プロトコルバージョンを有効にするには、server max protocol パラメーターを設定しないでください。このパラメーターを手動で設定する場合は、最新のプロトコルバージョンを有効にするために、それぞれ新しいバージョンの SMB プロトコルで設定を変更する必要があります。

次の手順では、server max protocol パラメーターでデフォルト値を使用する方法を説明します。

手順

  1. /etc/samba/smb.conf ファイルの [global] セクションから、server max protocol パラメーターを削除します。
  2. Samba 設定を再読み込みします。

    # smbcontrol all reload-config

6.2. 大量のファイルを含むディレクトリーとの共有の調整

Linux は、大文字と小文字を区別するファイル名に対応しています。このため、Samba はファイルの検索時またはアクセス時に、大文字と小文字のファイル名のディレクトリーをスキャンする必要があります。小文字または大文字のいずれかでのみ新しいファイルを作成するように共有を設定すると、パフォーマンスが向上します。

前提条件

  • Samba が、ファイルサーバーとして設定されている。

手順

  1. 共有の全ファイルの名前を小文字に変更します。

    注記

    この手順の設定を使用すると、小文字以外の名前が付けられたファイルは表示されなくなります。

  2. 共有のセクションに、以下のパラメーターを設定します。

    case sensitive = true
    default case = lower
    preserve case = no
    short preserve case = no

    パラメーターの詳細は、man ページの smb.conf(5) を参照してください。

  3. /etc/samba/smb.conf ファイルを検証します。

    # testparm
  4. Samba 設定を再読み込みします。

    # smbcontrol all reload-config

この設定が適用されと、この共有に新たに作成されるすべてのファイルの名前が小文字になります。この設定により、Samba はディレクトリーを大文字と小文字で分けたスキャンが不要になり、パフォーマンスが向上します。

6.3. パフォーマンスが低下する可能性のある設定

デフォルトでは、Red Hat Enterprise Linux のカーネルは、ネットワークパフォーマンスが高くなるように調整されています。たとえば、カーネルはバッファーサイズに自動チューニングメカニズムを使用しています。/etc/samba/smb.conf ファイルに socket options パラメーターを設定すると、このカーネル設定が上書きされます。その結果、このパラメーターの設定により、ほとんどの場合は、Samba ネットワークのパフォーマンスが低下します。

カーネルの最適化された設定を使用するには、/etc/samba/smb.conf[global] セクションから socket options パラメーターを削除します。

第7章 仮想マシンのパフォーマンスの最適化

仮想マシンでは、ホストと比べて、パフォーマンス低下が常に見られます。以下のセクションでは、この低下の理由を説明します。また、ハードウェアのインフラストラクチャーリソースを可能な限り効率的に使用できるように、RHEL 8 での仮想化によるパフォーマンスへの影響を最小限に抑える方法を説明します。

7.1. 仮想マシンのパフォーマンスに影響を及ぼすもの

仮想マシンは、ホストのユーザー空間プロセスとして実行します。したがって、ハイパーバイザーは、仮想マシンがホストシステムのリソースを使用できるように、ホストのシステムリソースを変換する必要があります。したがって、変換によりリソースの一部が消費されるため、仮想マシンのパフォーマンス効率は、ホストと同じにはなりません。

システムパフォーマンスにおける仮想化の影響

仮想マシンのパフォーマンス低下の理由には、以下のようなものがあります。

  • 仮想 CPU (vCPU) がホスト上のスレッドとして実装され、Linux スケジューラーで処理される。
  • 仮想マシンは、ホストカーネルから NUMA や Huge Page などの最適化機能を自動的に継承しない。
  • ホストのディスクおよびネットワーク I/O の設定が、仮想マシンのパフォーマンスに大きく影響する可能性がある。
  • ネットワークトラフィックは、一般的に、ソフトウェアベースのブリッジから仮想マシンに流れる。
  • ホストデバイスとそのモデルによっては、その特定のハードウェアのエミュレーションにより、オーバーヘッドが著しくなる可能性がある。

仮想化が仮想マシンのパフォーマンスに与える影響の重大度は、次のようなさまざまな要因の影響を受けます。

  • 同時に実行している仮想マシンの数
  • 各仮想マシンで使用される仮想デバイスのサイズ
  • 仮想マシンが使用するデバイスの種類

仮想マシンのパフォーマンス損失を減らす

RHEL 8は、仮想化のパフォーマンスへの悪影響を減らすのに使用できる多くの機能を提供します。以下に例を示します。

重要

仮想マシンのパフォーマンスのチューニングは、その他の仮想化機能に悪影響を与える可能性があります。たとえば、変更した仮想マシンの移行がより困難になります。

7.2. tuned で仮想マシンのパフォーマンスの最適化

tuned ユーティリティーは、CPU 集中型タスクや、ストレージネットワークスループットの応答などの特定のワークロードの特性に対して RHEL を調整するプロファイル配信メカニズムです。これにより、特定のユースケースで、パフォーマンスを強化し、電力消費を減らすように事前設定されたチューニングプロファイルを多数利用できます。これらのプロファイルを編集するか、または新規プロファイルを作成して、仮想化環境に適したパフォーマンスソリューション (仮想化環境を含む) を作成できます。

Red Hat は、RHEL 8 で仮想化を使用する場合は、次のプロファイルの使用を推奨します。

  • RHEL 8 仮想マシンの場合は、virtual-guest プロファイルを使用します。これは、一般的に適用された throughput-performance プロファイルをベースにしていますが、仮想メモリーのスワップは減少します。
  • RHEL 8 仮想ホストの場合は、virtual-host プロファイルを使用します。これにより、ダーティーメモリーページのより集中的なライトバックが有効になり、ホストのパフォーマンスを活用できます。

前提条件

手順

特定の tuned プロファイルを有効にするには、以下を実行します。

  1. 利用可能な tuned プロファイルを一覧表示します。

    # tuned-adm list
    
    Available profiles:
    - balanced             - General non-specialized tuned profile
    - desktop              - Optimize for the desktop use-case
    [...]
    - virtual-guest        - Optimize for running inside a virtual guest
    - virtual-host         - Optimize for running KVM guests
    Current active profile: balanced
  2. (必要に応じて) 新しい tuned プロファイルを作成するか、既存の tuned プロファイルを編集します。

    詳細は「tuned プロファイルのカスタマイズ」を参照してください。

  3. tuned プロファイルをアクティベートします。

    # tuned-adm profile selected-profile
    • 仮想化ホストを最適化するには、virtual-host プロファイルを使用します。

      # tuned-adm profile virtual-host
    • RHEL ゲストオペレーティングシステムで、virtual-guest プロファイルを使用します。

      # tuned-adm profile virtual-guest

関連情報

7.3. 仮想マシンの I/O パフォーマンスの最適化

仮想マシンの入出力 (I/O) 機能は、仮想マシンの全体的な効率を大幅に制限する可能性があります。これに対処するために、ブロック I/O パラメーターを設定して、仮想マシンの I/O を最適化できます。

7.3.1. 仮想マシンにおけるブロック I/O のチューニング

複数のブロックデバイスが、複数の仮想マシンで使用されている場合は、I/O ウェイト を変更して特定の仮想デバイスの I/O の優先度を調整することが重要になる場合があります。

デバイスの I/O ウェイトを上げると、I/O 帯域幅の優先度が高まるため、より多くのホストリソースが提供されます。同様に、デバイスのウェイトを下げると、ホストのリソースが少なくなります。

注記

各デバイスの ウェイト の値は 100 から 1000 の範囲内でなければなりません。もしくは、値を 0 にすると、各デバイスの一覧からそのデバイスを削除できます。

手順

仮想マシンのブロック I/O パラメーターを表示および設定するには、以下を行います。

  1. 仮想マシンの現在の <blkio> パラメーターを表示します。

    # virsh blkiotune virtual_machine

    <domain>
      ...
      <blkiotune>
        <weight>800</weight>
        <device>
          <path>/dev/sda</path>
          <weight>1000</weight>
        </device>
        <device>
          <path>/dev/sdb</path>
          <weight>500</weight>
        </device>
      </blkiotune>
      ...
    </domain>
  2. 指定したデバイスの I/O ウェイトを編集します。

    # virsh blkiotune VM-name --device-weights device, I/O-weight

    たとえば、以下では、liftrul 仮想マシンの /dev/sda デバイスのウェイトを 500 に変更します。

    # *virsh blkiotune liftbrul --device-weights /dev/sda, 500

7.3.2. 仮想マシンのディスク I/O スロットリング

複数の仮想マシンが同時に実行する場合は、過剰なディスク I/O により、システムパフォーマンスに影響が及ぶ可能性があります。KVM 仮想化のディスク I/O スロットリングでは、仮想マシンからホストマシンに送られるディスク I/O 要求に制限を設定する機能を利用できます。これにより、仮想マシンが共有リソースを過剰に使用し、その他の仮想マシンのパフォーマンスに影響を及ぼすことを防ぐことができます。

ディスク I/O スロットリングを有効にするには、仮想マシンに割り当てられた各ブロックデバイスからホストマシンに送られるディスク I/O 要求に制限を設定します。

手順

  1. virsh domblklist コマンドを使用して、指定された仮想マシン上のすべてのディスクデバイスの名前を一覧表示します。

    # virsh domblklist rollin-coal
    Target     Source
    ------------------------------------------------
    vda        /var/lib/libvirt/images/rollin-coal.qcow2
    sda        -
    sdb        /home/horridly-demanding-processes.iso
  2. virsh blkdeviotune コマンドを使用して、仮想マシンに割り当てられているブロックデバイスの I/O 制限を設定します。

    # virsh blkdeviotune VM-name device --parameter limit

    たとえば、rollin-coal 仮想マシン上の sdb デバイスを 1 秒あたり 1000 の I/O 操作と、1 秒スループットあたり 50 MB にスロットリングするには、次のコマンドを実行します。

    # virsh blkdeviotune rollin-coal sdb --total-iops-sec 1000 --total-bytes-sec 52428800

関連情報

  • ディスク I/O スロットリングは、異なる顧客に属する仮想マシンが同じホストで実行されている場合や、異なる仮想マシンに QoS 保証が提供されている場合など、さまざまな状況で役立ちます。ディスク I/O スロットリングは、低速なディスクをシミュレートするために使用することもできます。
  • I/O スロットリングは、仮想マシンに割り当てられた各ブロックデバイスに個別に適用でき、スループットおよび I/O 操作の制限に対応します。

7.3.3. マルチキュー virtio-scsi の有効化

仮想マシンで virtio-scsi ストレージデバイスを使用する場合は、マルチキュー virtio-scsi 機能により、ストレージパフォーマンスおよびスケーラビリティーが向上します。このため、各仮想 CPU (vCPU) に別のキューを持たせることが可能になります。また仮想 CPU は、その他の vCPU に影響を及ぼすことなく使用するために、割り込みできるようになります。

手順

  • 特定の仮想マシンに対してマルチキュー virtio-scsi サポートを有効にするには、仮想マシンの XML 設定に以下を追加します。ここでの N は、vCPU キューの合計数です。

    <controller type='scsi' index='0' model='virtio-scsi'>
       <driver queues='N' />
    </controller>

7.4. 仮想マシンの CPU パフォーマンスの最適化

vCPU は、ホストマシンの物理 CPU と同様、仮想マシンのパフォーマンスにおいて極めて重要です。したがって、vCPU を最適化すると、仮想マシンのリソース効率に大きな影響を及ぼす可能性があります。vCPU を最適化するには、以下を実行します。

  1. vCPU モデルが、ホストの CPU モデルに調整されていることを確認します。たとえば、仮想マシン testguest1 を、ホストの CPU モデルを使用するように設定するには、次のコマンドを実行します。

    # virt-xml testguest1 --edit --cpu host-model
  2. ホストマシンが Non-Uniform Memory Access (NUMA) を使用する場合は、その仮想マシンに対して NUMA を設定 することもできます。これにより、ホストの CPU およびメモリープロセスが、仮想マシンの CPU およびメモリープロセスにできるだけ近くにマッピングされます。事実上、NUMA チューニングにより、仮想マシンに割り当てられたシステムメモリーへのより効率的なアクセスが可能になります。これにより、vCPU 処理の効果が改善されます。

    詳細は「仮想マシンでの NUMA の設定」および「vCPU のパフォーマンスチューニングシナリオ例」を参照してください。

7.4.1. 仮想マシンでの NUMA の設定

以下の方法は、RHEL 8 ホストで、仮想マシンの Non-Uniform Memory Access (NUMA) 設定の構成に使用できます。

前提条件

  • ホストは NUMA 対応のマシンである必要があります。これを確認するには、virsh nodeinfo コマンドを使用して、NUMA cell(2) の行を確認します。

    # virsh nodeinfo
    CPU model:           x86_64
    CPU(s):              48
    CPU frequency:       1200 MHz
    CPU socket(s):       1
    Core(s) per socket:  12
    Thread(s) per core:  2
    NUMA cell(s):        2
    Memory size:         67012964 KiB

    行の値が 2 以上であると、そのホストは NUMA に対応しています。

手順

使いやすさのため、自動化ユーティリティーとサービスを使用して、仮想マシンの NUMA を設定できます。ただし、手動で NUMA を設定すると、パフォーマンスが大幅に向上する可能性が高くなります。

自動方式
  • 仮想マシンの NUMA ポリシーを Preferred に設定します。たとえば、仮想マシン testguest5 に対してこれを行うには、次のコマンドを実行します。

    # virt-xml testguest5 --edit --vcpus placement=auto
    # virt-xml testguest5 --edit --numatune mode=preferred
  • ホストで NUMA の自動負荷分散を有効にします。

    # echo 1 > /proc/sys/kernel/numa_balancing
  • numad コマンドを使用して、メモリーリソースで仮想マシンの CPU を自動的に調整します。

    # numad
手動方式
  1. 特定ホストの CPU、またはある範囲の CPU に特定の vCPU スレッドをピニングします。これは、NUMA 以外のホストおよび仮想マシンでも可能で、vCPU のパフォーマンスを向上させる安全な方法として推奨されています。

    たとえば、次のコマンドでは、仮想マシン testguest6 の vCPU スレッドの 0 から 5 を、ホストの CPU 1、3、5、7、9、11 にそれぞれピニングします。

    # virsh vcpupin testguest6 0 1
    # virsh vcpupin testguest6 1 3
    # virsh vcpupin testguest6 2 5
    # virsh vcpupin testguest6 3 7
    # virsh vcpupin testguest6 4 9
    # virsh vcpupin testguest6 5 11

    その後、これが成功したかどうかを確認できます。

    # virsh vcpupin testguest6
    VCPU   CPU Affinity
    ----------------------
    0      1
    1      3
    2      5
    3      7
    4      9
    5      11
  2. vCPU スレッドのピニング後に、指定の仮想マシンに関連付けられた QEMU プロセススレッドを、特定ホスト CPU、またはある範囲の CPU に固定することもできます。たとえば、以下のコマンドは、testguest6 の QEMU プロセススレッドを CPU 13 および 15 にピニングし、これが成功したことを確認します。

    # virsh emulatorpin testguest6 13,15
    # virsh emulatorpin testguest6
    emulator: CPU Affinity
    ----------------------------------
           *: 13,15
  3. これで、特定の仮想マシンに対して割り当てられるホストの NUMA ノードを指定することができます。これにより、仮想マシンの vCPU によるホストメモリーの使用率が向上します。たとえば、次のコマンドでは、ホスト NUMA ノード 3 ~ 5 を使用するように testguest6 を設定し、これが成功したかどうかを確認します。

    # virsh numatune testguest6 --nodeset 3-5
    # virsh numatune testguest6

関連情報

7.4.2. vCPU のパフォーマンスチューニングシナリオ例

最適な vCPU パフォーマンスを得るためにも、以下のシナリオなど、手動で vcpupinemulatorpin、および numatune 設定をまとめて使用することが推奨されます。

開始シナリオ

  • ホストには以下のハードウェア仕様があります。

    • 2 つの NUMA ノード
    • 各ノードにある 3 つの CPU コア
    • 各コアにある 2 スレッド

    このようなマシンの virsh nodeinfo の出力は以下のようになります。

    # virsh nodeinfo
    CPU model:           x86_64
    CPU(s):              12
    CPU frequency:       3661 MHz
    CPU socket(s):       2
    Core(s) per socket:  3
    Thread(s) per core:  2
    NUMA cell(s):        2
    Memory size:         31248692 KiB
  • 既存の仮想マシンを変更して、8 つの vCPU を使用できるようにします。これは、1 つの NUMA ノードに収まらないことを意味します。

    したがって、各 NUMA ノードに 4 つの vCPU を分散し、vCPU トポロジーをホストトポロジーに可能な限り近づけるようにする必要があります。つまり、指定の物理 CPU のシブリングスレッドとして実行される vCPU は、同じコア上のホストスレッドに固定 (ピニング) される必要があります。詳細は、以下の ソリューション を参照してください。

ソリューション

  1. ホストトポロジーに関する情報を取得します。

    # virsh capabilities

    この出力には、以下のようなセクションが含まれます。

    <topology>
      <cells num="2">
        <cell id="0">
          <memory unit="KiB">15624346</memory>
          <pages unit="KiB" size="4">3906086</pages>
          <pages unit="KiB" size="2048">0</pages>
          <pages unit="KiB" size="1048576">0</pages>
          <distances>
            <sibling id="0" value="10" />
            <sibling id="1" value="21" />
          </distances>
          <cpus num="6">
            <cpu id="0" socket_id="0" core_id="0" siblings="0,3" />
            <cpu id="1" socket_id="0" core_id="1" siblings="1,4" />
            <cpu id="2" socket_id="0" core_id="2" siblings="2,5" />
            <cpu id="3" socket_id="0" core_id="0" siblings="0,3" />
            <cpu id="4" socket_id="0" core_id="1" siblings="1,4" />
            <cpu id="5" socket_id="0" core_id="2" siblings="2,5" />
          </cpus>
        </cell>
        <cell id="1">
          <memory unit="KiB">15624346</memory>
          <pages unit="KiB" size="4">3906086</pages>
          <pages unit="KiB" size="2048">0</pages>
          <pages unit="KiB" size="1048576">0</pages>
          <distances>
            <sibling id="0" value="21" />
            <sibling id="1" value="10" />
          </distances>
          <cpus num="6">
            <cpu id="6" socket_id="1" core_id="3" siblings="6,9" />
            <cpu id="7" socket_id="1" core_id="4" siblings="7,10" />
            <cpu id="8" socket_id="1" core_id="5" siblings="8,11" />
            <cpu id="9" socket_id="1" core_id="3" siblings="6,9" />
            <cpu id="10" socket_id="1" core_id="4" siblings="7,10" />
            <cpu id="11" socket_id="1" core_id="5" siblings="8,11" />
          </cpus>
        </cell>
      </cells>
    </topology>
  2. (必要に応じて) 適用可能なツールおよびユーティリティー を使用して、仮想マシンのパフォーマンスをテストします。
  3. ホストに 1 GiB の Huge Page を設定してマウントします。

    1. ホストのカーネルコマンドラインに次の行を追加します。

      default_hugepagesz=1G hugepagesz=1G
    2. /etc/systemd/system/hugetlb-gigantic-pages.service ファイルを以下の内容で作成します。

      [Unit]
      Description=HugeTLB Gigantic Pages Reservation
      DefaultDependencies=no
      Before=dev-hugepages.mount
      ConditionPathExists=/sys/devices/system/node
      ConditionKernelCommandLine=hugepagesz=1G
      
      [Service]
      Type=oneshot
      RemainAfterExit=yes
      ExecStart=/etc/systemd/hugetlb-reserve-pages.sh
      
      [Install]
      WantedBy=sysinit.target
    3. /etc/systemd/hugetlb-reserve-pages.sh ファイルを以下の内容で作成します。

      #!/bin/sh
      
      nodes_path=/sys/devices/system/node/
      if [ ! -d $nodes_path ]; then
      	echo "ERROR: $nodes_path does not exist"
      	exit 1
      fi
      
      reserve_pages()
      {
      	echo $1 > $nodes_path/$2/hugepages/hugepages-1048576kB/nr_hugepages
      }
      
      reserve_pages 4 node1
      reserve_pages 4 node2

      これにより、4 つの 1GiB の Huge Page が node1 から予約され、さらに別の 4 つの 1 GiB の Huge Page が node2 から予約されます。

    4. 前の手順で作成したスクリプトを実行ファイルにします。

      # chmod +x /etc/systemd/hugetlb-reserve-pages.sh
    5. システムの起動時に Huge Page 予約を有効にします。

      # systemctl enable hugetlb-gigantic-pages
  4. virsh edit コマンドを使用して、最適化する仮想マシンの XML 設定 (この例では super-VM) を編集します。

    # virsh edit super-vm
  5. 次の方法で仮想マシンの XML 設定を調整します。

    1. 仮想マシンが 8 つの静的 vCPU を使用するように設定します。これを行うには、<vcpu/> 要素を使用します。
    2. トポロジーでミラーリングする、対応するホスト CPU スレッドに、各 vCPU スレッドをピニングします。これを行うには、<cputune> セクションの <vcpupin/> 要素を使用します。

      上記の virsh 機能 ユーティリティーで示されているように、ホストの CPU スレッドは、各コアで連続的に順次付けされません。また、vCPU スレッドは、同じ NUMA ノード上のホストのコアの利用可能な最大セットに固定される必要があります。表の図については、以下の 関連情報 セクションを参照してください。

      手順 a と b の XML 構成は次のようになります。

      <cputune>
        <vcpupin vcpu='0' cpuset='1'/>
        <vcpupin vcpu='1' cpuset='4'/>
        <vcpupin vcpu='2' cpuset='2'/>
        <vcpupin vcpu='3' cpuset='5'/>
        <vcpupin vcpu='4' cpuset='7'/>
        <vcpupin vcpu='5' cpuset='10'/>
        <vcpupin vcpu='6' cpuset='8'/>
        <vcpupin vcpu='7' cpuset='11'/>
        <emulatorpin cpuset='6,9'/>
      </cputune>
    3. 1 GiB の Huge Page を使用するように仮想マシンを設定します。

      <memoryBacking>
        <hugepages>
          <page size='1' unit='GiB'/>
        </hugepages>
      </memoryBacking>
    4. ホスト上で対応する NUMA ノードからメモリーを使用するように、仮想マシンの NUMA ノードを設定します。これを行うには、<numatune/> セクションの <memnode/> 要素を使用します。

      <numatune>
        <memory mode="preferred" nodeset="1"/>
        <memnode cellid="0" mode="strict" nodeset="0"/>
        <memnode cellid="1" mode="strict" nodeset="1"/>
      </numatune>
    5. CPU モードが host-passthrough に設定され、CPU が パススルー モードでキャッシュを使用していることを確認します。

      <cpu mode="host-passthrough">
        <topology sockets="2" cores="2" threads="2"/>
        <cache mode="passthrough"/>
  6. 作成される仮想マシンの XML 設定には、以下のようなセクションが含まれます。

    [...]
      <memoryBacking>
        <hugepages>
          <page size='1' unit='GiB'/>
        </hugepages>
      </memoryBacking>
      <vcpu placement='static'>8</vcpu>
      <cputune>
        <vcpupin vcpu='0' cpuset='1'/>
        <vcpupin vcpu='1' cpuset='4'/>
        <vcpupin vcpu='2' cpuset='2'/>
        <vcpupin vcpu='3' cpuset='5'/>
        <vcpupin vcpu='4' cpuset='7'/>
        <vcpupin vcpu='5' cpuset='10'/>
        <vcpupin vcpu='6' cpuset='8'/>
        <vcpupin vcpu='7' cpuset='11'/>
        <emulatorpin cpuset='6,9'/>
      </cputune>
      <numatune>
        <memory mode="preferred" nodeset="1"/>
        <memnode cellid="0" mode="strict" nodeset="0"/>
        <memnode cellid="1" mode="strict" nodeset="1"/>
      </numatune>
      <cpu mode="host-passthrough">
        <topology sockets="2" cores="2" threads="2"/>
        <cache mode="passthrough"/>
        <numa>
          <cell id="0" cpus="0-3" memory="2" unit="GiB">
            <distances>
              <sibling id="0" value="10"/>
              <sibling id="1" value="21"/>
            </distances>
          </cell>
          <cell id="1" cpus="4-7" memory="2" unit="GiB">
            <distances>
              <sibling id="0" value="21"/>
              <sibling id="1" value="10"/>
            </distances>
          </cell>
        </numa>
      </cpu>
    </domain>
  7. (必要に応じて) アプリケーションツールおよびユーティリティー を使用して仮想マシンのパフォーマンスをテストし、仮想マシンの最適化への影響を評価します。

関連情報

  • 以下の表は、ピニングされる必要のある vCPU とホストCPU 間の接続を示しています。

    表7.1 ホストトポロジー

    CPU スレッド

    0

    3

    1

    4

    2

    5

    6

    9

    7

    10

    8

    11

    コア

    0

    1

    2

    3

    4

    5

    ソケット

    0

    1

    NUMA ノード

    0

    1

    表7.2 仮想マシントポロジー

    vCPU スレッド

    0

    1

    2

    3

    4

    5

    6

    7

    コア

    0

    1

    2

    3

    ソケット

    0

    1

    NUMA ノード

    0

    1

    表7.3 ホストと仮想マシントポロジーの組み合わせ

    vCPU スレッド

     

    0

    1

    2

    3

     

    4

    5

    6

    7

    ホストの CPU スレッド

    0

    3

    1

    4

    2

    5

    6

    9

    7

    10

    8

    11

    コア

    0

    1

    2

    3

    4

    5

    ソケット

    0

    1

    NUMA ノード

    0

    1

    このシナリオでは、2 つの NUMA ノードと 8 つの vCPU があります。したがって、4 つの vCPU スレッドは各ノードに固定 (ピニング) される必要があります。

    また、Red Hat では、ホストシステムの操作に対して、各ノードに少なくとも 1 つの CPU スレッドを使用することを推奨します。

    以下の例では、NUMA ノードにはそれぞれ 3 コアで、2 個のホスト CPU スレッドがあるため、ノード 0 のセットは、以下のように変換できます。

    <vcpupin vcpu='0' cpuset='1'/>
    <vcpupin vcpu='1' cpuset='4'/>
    <vcpupin vcpu='2' cpuset='2'/>
    <vcpupin vcpu='3' cpuset='5'/>

7.5. 仮想マシンのネットワークパフォーマンスの最適化

仮想マシンのネットワークインターフェースカード (NIC) の性質上、仮想マシンは、割り当てられているホストネットワークの帯域幅の一部を失います。これにより、仮想マシンの全体的なワークロード効率が削減されることがあります。以下のヒントは、仮想 NIC (vNIC) のスループットで仮想化の影響を最小限に抑えることができます。

手順

以下の方法のいずれかを使用し、仮想マシンのネットワークパフォーマンスにメリットがあるかどうかを調べます。

vhost_net モジュールの有効化

ホストで vhost_net カーネル機能が有効になっていることを確認します。

# lsmod | grep vhost
vhost_net              32768  1
vhost                  53248  1 vhost_net
tap                    24576  1 vhost_net
tun                    57344  6 vhost_net

このコマンドの出力が空白である場合は、vhost_net カーネルモジュールを有効にします。

# modprobe vhost_net
マルチキュー virtio-net の設定

仮想マシンに マルチキュー virtio-net 機能を設定するには、virsh edit コマンドを使用して、仮想マシンの XML 設定を編集します。XML で、以下を <devices> セクションに追加し、N を、仮想マシンの vCPU 数 (最大 16) に変更します。

<interface type='network'>
      <source network='default'/>
      <model type='virtio'/>
      <driver name='vhost' queues='N'/>
</interface>

仮想マシンが実行中の場合は、再起動して変更を適用します。

vhost のゼロコピー送信の設定

大規模なパケットサイズでネットワークを使用している場合は、vhost のゼロコピー送信 機能を有効にします。

この機能は、ゲストネットワークと外部ネットワークとの間で大規模なパケットを送信する場合に限りパフォーマンスが向上することに注意してください。これは、ゲストとゲスト間、およびゲストとホスト間のワークロードのパフォーマンスには影響を与えません。また、おそらく、小さいパケットのワークロードのパフォーマンスに影響を及ぼす可能性があります。

また、ゼロコピー送信を有効にすると、パケットの HOT (head-of-line) ブロッキングが発生するため、セキュリティーリスクが発生する可能性があります。

vhost のゼロコピー送信を有効にするには、以下を実行します。

  1. ホストで、vhost-net カーネルモジュールを無効にします。

    # modprobe -r vhost_net
  2. ゼロコピーパラメーターを有効にして、vhost-net モジュールを再度有効にします。

    # modprobe vhost-net experimental_zcopytx=1
  3. ゼロコピー送信を有効にできたかどうかを確認します。

    # cat /sys/module/vhost_net/parameters/experimental_zcopytx
    1
ネットワークパケットのバッチ処理

転送パスが長い Linux の仮想マシン設定では、パケットをバッチ処理してからカーネルに送信することで、キャッシュが有効に活用される場合があります。パケットバッチ機能を設定するには、ホストで次のコマンドを実行し、tap0 を、仮想マシンが使用するネットワークインターフェースの名前に置き換えます。

# ethtool -C tap0 rx-frames 128

関連情報

7.6. 仮想マシンのパフォーマンス監視ツール

最も多くの仮想マシンリソースを消費するものと、仮想マシンで最適化を必要とする部分を認識するために、一般的なパフォーマンス診断ツールや仮想マシン固有のパフォーマンス診断ツールを使用できます。

デフォルトの OS パフォーマンス監視ツール

標準のパフォーマンス評価には、ホストおよびゲストのオペレーティングシステムでデフォルトで提供されるユーティリティーを使用できます。

  • RHEL 8 ホストで、root として top ユーティリティーまたは システムモニター アプリケーションを使用し、出力結果から qemuvirt を見つけます。これは、仮想マシンが消費しているホストシステムのリソースのサイズを示します。

    • 監視ツールにおいて、qemu プロセスまたは virt プロセスのいずれかで、ホストの CPU またはメモリーの容量を大幅に消費していることが示されている場合は、perf ユーティリティを使用して調査を行います。詳細は以下を参照してください。
    • また、vhost_net スレッドプロセス (例: vhost_net-1234) が、ホストの CPU 容量を過剰に消費する際に表示される場合は、マルチキュー virtio-net などの 仮想ネットワークの最適化機能 を使用することを検討してください。
  • ゲストオペレーティングシステムでは、システムで利用可能なパフォーマンスユーティリティーとアプリケーションを使用して、どのプロセスが最も多くのシステムリソースを消費するかを評価します。

    • Linux システムでは、top ユーティリティを使用できます。
    • Windows システムでは、Task Manager アプリケーションを使用できます。

perf kvm

perf ユーティリティーを使用して、RHEL 8 ホストのパフォーマンスに関する仮想化固有の統計を収集および分析できます。これを行うには、以下のように行います。

  1. ホストに、perf パッケージをインストールします。

    # yum install perf
  2. perf kvm stat コマンドを使用して、仮想化ホストの perf 統計を表示します。

    • お使いのハイパーバイザーのリアルタイム監視には、perf kvm stat live コマンドを使用します。
    • 一定期間でハイパーバイザーの perf データをログに記録するには、perf kvm stat record コマンドを使用してロギングを有効にします。コマンドをキャンセルまたは中断した後、データは perf.data.guest ファイルに保存されます。これは、perf kvm stat report コマンドを使用して分析できます。
  3. VM-EXIT イベントとそのディストリビューションのタイプについて perf 出力を分析します。たとえば、PAUSE_INSTRUCTION イベントは頻繁に存在すべきではありませんが、以下の出力では、このイベントが頻繁に現れ、ホスト CPU が vCPU を適切に処理していないことを示しています。このようなシナリオでは、アクティブな一部の仮想マシンの電源オフ、その仮想マシンからの vCPU の削除、または vCPU のパフォーマンスの調整 を検討してください。

    # perf kvm stat report
    
    Analyze events for all VMs, all VCPUs:
    
    
                 VM-EXIT    Samples  Samples%     Time%    Min Time    Max Time         Avg time
    
      EXTERNAL_INTERRUPT     365634    31.59%    18.04%      0.42us  58780.59us    204.08us ( +-   0.99% )
               MSR_WRITE     293428    25.35%     0.13%      0.59us  17873.02us      1.80us ( +-   4.63% )
        PREEMPTION_TIMER     276162    23.86%     0.23%      0.51us  21396.03us      3.38us ( +-   5.19% )
       PAUSE_INSTRUCTION     189375    16.36%    11.75%      0.72us  29655.25us    256.77us ( +-   0.70% )
                     HLT      20440     1.77%    69.83%      0.62us  79319.41us  14134.56us ( +-   0.79% )
                  VMCALL      12426     1.07%     0.03%      1.02us   5416.25us      8.77us ( +-   7.36% )
           EXCEPTION_NMI         27     0.00%     0.00%      0.69us      1.34us      0.98us ( +-   3.50% )
           EPT_MISCONFIG          5     0.00%     0.00%      5.15us     10.85us      7.88us ( +-  11.67% )
    
    Total Samples:1157497, Total events handled time:413728274.66us.

    perf kvm stat の出力で問題を知らせる他のイベントタイプには、以下が含まれます。

perf を使用した仮想パフォーマンスを監視する方法は、man ページの perf-kvm を参照してください。

numastat

システムの現在の NUMA 設定を表示するには、numastat ユーティリティーを使用できます。これは numactl パッケージをインストールすることで利用できます。

以下は、4 つの実行中の仮想マシンが含まれるホストを示しています。それぞれは、複数の NUMA ノードからメモリーを取得しています。これは、vCPU のパフォーマンスに対して最適なのではなく、保証調整 です。

# numastat -c qemu-kvm

Per-node process memory usage (in MBs)
PID              Node 0 Node 1 Node 2 Node 3 Node 4 Node 5 Node 6 Node 7 Total
---------------  ------ ------ ------ ------ ------ ------ ------ ------ -----
51722 (qemu-kvm)     68     16    357   6936      2      3    147    598  8128
51747 (qemu-kvm)    245     11      5     18   5172   2532      1     92  8076
53736 (qemu-kvm)     62    432   1661    506   4851    136     22    445  8116
53773 (qemu-kvm)   1393      3      1      2     12      0      0   6702  8114
---------------  ------ ------ ------ ------ ------ ------ ------ ------ -----
Total              1769    463   2024   7462  10037   2672    169   7837 32434

一方、以下では、1 つのノードで各仮想マシンに提供されているメモリーを示しています。これは、より一層効率的です。

# numastat -c qemu-kvm

Per-node process memory usage (in MBs)
PID              Node 0 Node 1 Node 2 Node 3 Node 4 Node 5 Node 6 Node 7 Total
---------------  ------ ------ ------ ------ ------ ------ ------ ------ -----
51747 (qemu-kvm)      0      0      7      0   8072      0      1      0  8080
53736 (qemu-kvm)      0      0      7      0      0      0   8113      0  8120
53773 (qemu-kvm)      0      0      7      0      0      0      1   8110  8118
59065 (qemu-kvm)      0      0   8050      0      0      0      0      0  8051
---------------  ------ ------ ------ ------ ------ ------ ------ ------ -----
Total                 0      0   8072      0   8072      0   8114   8110 32368

第8章 PowerTOP で電力消費の管理

システム管理者であれば、PowerTOP ツールを使用して、消費電力を解析および管理できます。

8.1. PowerTOP の目的

PowerTOP は、消費電力に関連する問題を診断し、バッテリーの寿命を延ばす方法について提案を示すプログラムです。

PowerTOP ツールは、システムの総電力使用量の想定と、各プロセス、デバイス、カーネルワーカー、タイマー、および割り込みハンドラーの個々の電力使用量の想定を示すことができます。このツールは、CPU を頻繁にウェイクアップするカーネルおよびユーザー空間アプリケーションの特定のコンポーネントを識別することもできます。

Red Hat Enterprise Linux 8 は、PowerTOP のバージョン2.x を使用します。

8.2. PowerTOP の使用

前提条件

  • PowerTOP を使用できるようにするには、powertop パッケージがシステムにインストールされていることを確認してください。

    # yum install powertop

8.2.1. PowerTOP の起動

手順

  • PowerTOP を実行するには、次のコマンドを使用します。

    # powertop
重要

powertop コマンドの実行時には、ラップトップはバッテリー電源で動作します。

8.2.2. PowerTOP の調整

手順

  1. ラップトップでは、次のコマンドを実行して電力予測エンジンを調整することができます。

    # powertop --calibrate
  2. プロセス中にマシンと対話せずに、調整を終了させます。

    プロセスがさまざまなテストを実行し、輝度を切り替え、デバイスのオンとオフを切り替える操作を繰り返すため、調整には時間がかかります。

  3. 調整プロセスが完了すると、PowerTOP が通常どおり起動します。データを収集するために約 1 時間実行します。

    十分なデータが収集されると、出力テーブルの最初の列に電力予測マークが表示されます。

注記

powertop --calibrate は、ノートパソコンでのみ使用できることに注意してください。

8.2.3. 測定間隔の設定

デフォルトでは、PowerTOP は、20 秒間隔で測定します。

この測定頻度を変更する場合は、以下の手順に従います。

手順

  • --time オプションを指定して powertop コマンドを実行します。

    # powertop --time=time in seconds

8.3. PowerTOP の統計

PowerTOP は、実行中に、システムから統計を収集します。

PowerTOP の出力には、複数のタブがあります。

  • Overview
  • idle stats
  • Frequency stats
  • Device stats
  • Tunables

Tab キーおよび Shift+ Tab キーを使用して、このタブを順番に切り替えることができます。

8.3.1. Overview タブ

Overview タブでは、ウェイクアップを最も頻繁に CPU に送信するか、最も電力を消費するコンポーネントの一覧を表示できます。プロセス、割り込み、デバイス、その他のリソースなど、Overview タブの項目は、使用率に従って並べ替えられます。

Overview タブで隣接する列は、以下の情報を提供します。

Usage
リソース使用の電力想定。
Events/s
1 秒あたりウェイクアップ。1 秒あたりのウェイクアップ数は、サービスまたはデバイス、ならびにカーネルのドライバーがいかに効率的に実行しているかを示します。ウェイクアップが少ないほど、消費電力が少なくなります。コンポーネントは、電力使用率をどの程度まで最適化できるかによって順序付けられます。
Category
プロセス、デバイス、タイマーなどのコンポーネントの分類。
説明
コンポーネントの説明。

適切に調整すると、最初の列にリストされているすべての項目に対する電力消費予測も表示されます。

これとは別に、Overview タブには、次のようなサマリー統計の行が含まれます。

  • 合計電力消費
  • バッテリーの残り寿命 (該当する場合)
  • 1 秒あたりの合計ウェイクアップ数、1 秒あたり GPU 操作数、および 1 秒あたりの仮想ファイルシステム操作数の概要

8.3.2. Idle stats タブ

Idle stats タブには、すべてのプロセッサーおよびコアに対する C 状態の使用率が表示されます。Frequency stats タブには、(該当する場合は) すべてのプロセッサーおよびコアに対する Turbo モードを含む P 状態の使用率が表示されます。C または P 状態の長さは、CPU 使用率がどの程度最適化されているかを示します。CPU の C 状態または P 状態が高いままになるほど (C4 が C3 よりも高くなるなど)、CPU 使用率がより最適化されます。システムがアイドル状態の時に、最高の C 状態または P 状態の常駐が 90% 以上になることが理想的と言えます。

8.3.3. Device stats タブ

Device stats タブは Overview タブと同様の情報を提供しますが、デバイス専用です。

8.3.4. Tunables タブ

Tunables タブには、低消費電力にシステムを最適化するための、PowerTOP の推奨事項が含まれます。

up キーおよび down キーを使用して提案を移動し、enter キーを使用して提案をオンまたはオフにします。

図8.1 PowerTOP 出力

PowerTOP 出力

関連情報

PowerTOP の詳細は、PowerTOP のホームページ を参照してください。

8.4. HTML 出力の生成

端末の powertop の出力結果以外にも、HTML レポートを生成することもできます。

手順

  • --html オプションを指定して powertop コマンドを実行します。

    # powertop --html=htmlfile.html

    htmlfile.html パラメーターを、出力ファイルに必要な名前に置き換えます。

8.5. 電力消費の最適化

電力消費を最適化するには、powertop サービスまたは powertop2tuned ユーティリティーを使用できます。

8.5.1. powertop サービスで消費電力の最適化

powertop サービスを使用すると、システムの起動の Tunables タブから、すべての PowerTOP の提案を自動的に有効にできます。

手順

  • powertop サービスを有効にします。

    # systemctl enable powertop

8.5.2. powertop2tuned ユーティリティー

powertop2tuned ユーティリティーでは、PowerTOP の提案からカスタムの Tuned プロファイルを作成できます。

デフォルトでは、powertop2tuned/etc/tuned/ ディレクトリーにプロファイルを作成し、現在選択されている Tuned プロファイルに基づいてカスタムプロファイルを作成します。安全上の理由から、すべての PowerTOP チューニングは最初に新しいプロファイルで無効になっています。

チューニングを有効にするには、以下を行います。

  • /etc/tuned/profile_name/tuned.conf ファイルでコメントを解除します。
  • --enable オプションまたは -e オプションを使用して、PowerTOP により提案されたチューニングのほとんどを可能にする新しいプロファイルを生成します。

    USB 自動サスペンドなど、既知の問題のある特定のチューニングはデフォルトで無効になっているため、手動でコメントを解除する必要があります。

8.5.3. powertop2tuned ユーティリティーで電力消費の最適化

前提条件

  • powertop2tuned ユーティリティーがシステムにインストールされている場合は、次のコマンドを実行します。

    # yum install tuned-utils

手順

  1. カスタムプロファイルを作成するには、次のコマンドを使用します。

    # powertop2tuned new_profile_name
  2. 新しいプロファイルをアクティベートします。

    # tuned-adm profile new_profile_name

関連情報

  • powertop2tuned に対応しているオプションの完全リストを表示するには、以下を使用します。

    $ powertop2tuned --help

8.5.4. powertop.service と powertop2tuned の比較

以下の理由により、powertop2tuned を使用した電力消費の最適化は、powertop.service よりも推奨されます。

  • powertop2tuned ユーティリティーは、PowerTOPTuned に統合したものです。これにより、両方のツールの利点を活かすことができます。
  • powertop2tuned ユーティリティーを使用すると、有効になっているチューニングをきめ細かく制御できます。
  • powertop2tuned を使用すると、潜在的に危険なチューニングは自動的に有効になりません。
  • powertop2tuned を使用すると、再起動せずにロールバックを行うことができます。

第9章 perf の使用

システム管理者は、perf ツールを使用して、システムのパフォーマンスデータを収集および分析できます。

9.1. perf の概要

perf ユーザー空間ツールは、カーネルベースのサブシステム Performance Counters for Linux (PCL) と相互作用します。perf は、PMU (Performance Monitoring Unit) を使用してさまざまなハードウェアおよびソフトウェアイベントを測定、記録、監視する強力なツールです。perf は、tracepoint、kprobe、および uprobe にも対応しています。

9.2. perf のインストール

この手順では、perf ユーザー空間ツールをインストールします。

手順

  • perf ツールをインストールします。

    # yum install perf

9.3. 一般的な perf コマンド

本セクションでは、一般的に使用される 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 コマンドの一覧を表示します。

関連情報

  • サブコマンドの追加サブコマンドオプションとその説明を一覧表示するには、target コマンドに -h オプションを追加します。

9.4. perf top を使用した CPU 使用率のリアルタイムプロファイリング

perf top コマンドを使用して、さまざまな機能の CPU 使用率をリアルタイムで測定できます。

前提条件

9.4.1. perf top の目的

perf top コマンドは、top ユーティリティーと同様に、リアルタイムシステムのプロファイリングおよび機能に使用されます。ただし、top ユーティリティーは、通常、指定のプロセスまたはスレッドが使用している CPU 時間を示しており、perf top は各関数が使用する CPU 時間を表示します。デフォルトの状態では、perf top はユーザー空間とカーネル空間のすべての CPU で使用される関数について通知します。perf top を使用するには、root アクセスが必要です。

9.4.2. perf top を使った CPU 使用率のプロファイリング

この手順では、perf top をアクティブにし、CPU 使用率をリアルタイムでプロファイルします。

前提条件

  • 「perf のインストール」で説明されているように、perf ユーザー領域ツールがインストールされている。
  • Root アクセスがある。

手順

  • perf top モニタリングインターフェースを起動します。

    # perf top

    例9.1 perf top 出力

    --------------------------------------------------------------------
    PerfTop:   20806 irqs/sec  kernel:57.3%  exact: 100.0% lost: 0/0 drop: 0/0 [4000Hz cycles],  (all, 8 CPUs)
    ---------------------------------------------------------------------
    Overhead  Shared Object       Symbol
       2.20%  [kernel]            [k] do_syscall_64
       2.17%  [kernel]            [k] module_get_kallsym
       1.49%  [kernel]            [k] copy_user_enhanced_fast_string
       1.37%  libpthread-2.29.so  [.] __pthread_mutex_lock
       1.31%  [unknown]           [.] 0000000000000000
       1.07%  [kernel]            [k] psi_task_change
       1.04%  [kernel]            [k] switch_mm_irqs_off
       0.94%  [kernel]            [k] __fget
       0.74%  [kernel]            [k] entry_SYSCALL_64
       0.69%  [kernel]            [k] syscall_return_via_sysret
       0.69%  libxul.so           [.] 0x000000000113f9b0
       0.67%  [kernel]            [k] kallsyms_expand_symbol.constprop.0
       0.65%  firefox             [.] moz_xmalloc
       0.65%  libpthread-2.29.so  [.] __pthread_mutex_unlock_usercnt
       0.60%  firefox             [.] free
       0.60%  libxul.so           [.] 0x000000000241d1cd
       0.60%  [kernel]            [k] do_sys_poll
       0.58%  [kernel]            [k] menu_select
       0.56%  [kernel]            [k] _raw_spin_lock_irqsave
       0.55%  perf                [.] 0x00000000002ae0f3

    この例では、カーネル関数 do_syscall_64 が、CPU 時間を最も多く使用しています。

関連情報

  • man ページの perf-top(1)

9.4.3. perf top 出力の解釈

「Overhead」列
指定された関数が使用している CPU のパーセントを表示します。
「共有オブジェクト」のコラム
機能を使用しているプログラムまたはライブラリー名を表示します。
「Symbol」列
関数名またはシンボルを表示します。カーネル空間で実行される関数は [k] によって識別され、ユーザースペースで実行される関数は [.] によって識別されます。

9.4.4. perf が一部の関数名を raw 関数アドレスとして表示する理由

カーネル関数の場合は、perf/proc/kallsyms ファイルからの情報を使用して、サンプルをそれぞれの関数名またはシンボルにマッピングします。ただし、ユーザー空間で実行される関数については、バイナリーがストライピングされるので、raw 機能のアドレスが表示される可能性があります。

実行ファイルの debuginfo パッケージがインストールされているか、または実行ファイルがローカルで開発したアプリケーションである場合は、アプリケーションがデバッグ情報 (GCC の -g オプション) を有効にしてコンパイルされ、このような状況で関数名またはシンボルが表示される必要があります。

9.4.5. デバッグおよびソースのリポジトリーの有効化

Red Hat Enterprise Linux の標準インストールでは、デバッグリポジトリーおよびソースリポジトリーが有効になっていません。このリポジトリーには、システムコンポーネントのデバッグとパフォーマンスの測定に必要な情報が含まれます。

手順

  • ソースおよびデバッグの情報パッケージチャンネルを有効にします。

    # subscription-manager repos --enable rhel-8-for-$(uname -i)-baseos-debug-rpms
    # subscription-manager repos --enable rhel-8-for-$(uname -i)-baseos-source-rpms
    # subscription-manager repos --enable rhel-8-for-$(uname -i)-appstream-debug-rpms
    # subscription-manager repos --enable rhel-8-for-$(uname -i)-appstream-source-rpms

    $(uname -i) の部分は、システムのアーキテクチャーで一致する値に自動的に置き換えられます。

    アーキテクチャー名

    64 ビット Intel および AMD

    x86_64

    64 ビット ARM

    aarch64

    IBM POWER

    ppc64le

    IBM Z

    s390x

9.4.6. GDB を使用したアプリケーションまたはライブラリーの debuginfo パッケージの取得

デバッグ情報は、コードをデバッグするために必要です。パッケージからインストールされるコードの場合、GNU デバッガー (GDB) は足りないデバッグ情報を自動的に認識し、パッケージ名を解決し、パッケージの取得方法に関する具体的なアドバイスを提供します。

前提条件

  • デバッグするアプリケーションまたはライブラリーがシステムにインストールされている。
  • GDB と debuginfo-install ツールがシステムにインストールされている。詳細は「アプリケーションをデバッグするための設定」を参照してください。
  • debuginfo パッケージおよび debugsource パッケージを提供するチャンネルをシステムに設定し、有効にしている。

手順

  1. デバッグするアプリケーションまたはライブラリーに割われた GDB を起動します。GDB は、足りないデバッグ情報を自動的に認識し、実行するコマンドを提案します。

    $ gdb -q /bin/ls
    Reading symbols from /bin/ls...Reading symbols from .gnu_debugdata for /usr/bin/ls...(no debugging symbols found)...done.
    (no debugging symbols found)...done.
    Missing separate debuginfos, use: dnf debuginfo-install coreutils-8.30-6.el8.x86_64
    (gdb)
  2. GDB を終了します。q と入力して、Enter で確認します。

    (gdb) q
  3. GDB が提案するコマンドを実行して、必要な debuginfo パッケージをインストールします。

    # dnf debuginfo-install coreutils-8.30-6.el8.x86_64

    dnf パッケージ管理ツールは、変更の概要を提供し、確認を求め、確認後に必要なファイルをすべてダウンロードしてインストールします。

  4. GDB が debuginfo パッケージを提案できない場合は、「手動でのアプリケーションまたはライブラリーの debuginfo パッケージの取得」で説明されている手順に従います。

9.5. プロセスの実行中にイベントをカウント

perf stat コマンドを使用すると、プロセスの実行中にハードウェアおよびソフトウェアのイベントをカウントできます。

前提条件

9.5.1. perf stat の目的

perf stat コマンドは指定されたコマンドを実行し、コマンドの実行中にハードウェアおよびソフトウェアのイベントの発生回数を維持し、これらのカウントの統計を生成します。イベントを指定しないと、perf stat は共通のハードウェアおよびソフトウェアのイベントセットをカウントします。

9.5.2. perf stat を使用したイベントのカウント

perf stat を使用すると、コマンドの実行中に発生したハードウェアおよびソフトウェアのイベントをカウントし、これらのカウントの統計を生成できます。デフォルトでは、perf stat はスレッドごとのモードで動作します。

前提条件

手順

  • イベントをカウントします。

    • root アクセスなしで perf stat コマンドを実行すると、ユーザー空間で発生したイベントのみをカウントします。

      $ perf stat ls

      例9.2 perf stat の出力が root アクセスなしで実行

      Desktop  Documents  Downloads  Music  Pictures  Public  Templates  Videos
      
       Performance counter stats for 'ls':
      
                    1.28 msec task-clock:u               #    0.165 CPUs utilized
                       0      context-switches:u         #    0.000 M/sec
                       0      cpu-migrations:u           #    0.000 K/sec
                     104      page-faults:u              #    0.081 M/sec
               1,054,302      cycles:u                   #    0.823 GHz
               1,136,989      instructions:u             #    1.08  insn per cycle
                 228,531      branches:u                 #  178.447 M/sec
                  11,331      branch-misses:u            #    4.96% of all branches
      
             0.007754312 seconds time elapsed
      
             0.000000000 seconds user
             0.007717000 seconds sys

      以前の例で分かるように、perf stat を root アクセスなしで実行すると、イベント名の後に :uが付けられ、これらのイベントがユーザー空間でのみカウントされていることが分かります。

    • ユーザー空間およびカーネルスペースの両方のイベントをカウントするには、perf stat の実行時に root アクセスが必要になります。

      # perf stat ls

      例9.3 root アクセスで実行された perf stat の出力

      Desktop  Documents  Downloads  Music  Pictures  Public  Templates  Videos
      
       Performance counter stats for 'ls':
      
                    3.09 msec task-clock                #    0.119 CPUs utilized
                      18      context-switches          #    0.006 M/sec
                       3      cpu-migrations            #    0.969 K/sec
                     108      page-faults               #    0.035 M/sec
               6,576,004      cycles                    #    2.125 GHz
               5,694,223      instructions              #    0.87  insn per cycle
               1,092,372      branches                  #  352.960 M/sec
                  31,515      branch-misses             #    2.89% of all branches
      
             0.026020043 seconds time elapsed
      
             0.000000000 seconds user
             0.014061000 seconds sys
      • デフォルトでは、perf stat はスレッドごとのモードで動作します。CPU 全体のイベントカウントに変更するには、-a オプションを perf stat に渡します。CPU 全体のイベントをカウントするには、root アクセスが必要です。

        # perf stat -a ls

関連情報

  • man ページの perf-stat(1)

9.5.3. perf stat 出力の解釈

perf stat は指定されたコマンドを実行し、コマンドの実行中にイベントの発生をカウントし、これらのカウントの統計を 3 列で表示します。

  1. 指定されたイベントでカウントされた発生数
  2. カウントされたイベントの名前。
  3. 関連するメトリクスが利用可能な場合、右側のコラムのハッシュ記号 (#) の後に比率またはパーセンテージが表示されます。

    • たとえば、デフォルトモードで実行している場合、perf stat はサイクルと命令の両方をカウントします。したがって、右端のコラムのサイクルごとの命令を計算して表示します。デフォルトでは両方のイベントがカウントされるため、分岐ミスに関して同様の動作がすべてのブランチのパーセントとして表示されます。

9.5.4. 実行中のプロセスに perf stat を割り当てる

perf stat を実行中のプロセスに割り当てることができます。これにより、コマンドの実行中に、指定したプロセスでのみ発生するイベントをカウントするように perf stat に指示します。

前提条件

手順

  • perf stat を実行中のプロセスに割り当てます。

    $ perf stat -p ID1,ID2 sleep seconds

    前の例では、ID が ID1 and ID2 のプロセス内のイベントを、sleep コマンドで指定した seconds の秒数だけカウントします。

関連情報

  • man ページの perf-stat(1)

9.6. perf によるパフォーマンスプロファイルの記録および分析

perf ツールを使用すると、パフォーマンスデータを記録し、後で分析することができます。

前提条件

9.6.1. perf record の目的

perf record コマンドは、パフォーマンスデータをサンプリングし、ファイル perf.data に保存します。このファイルは、他の perf コマンドで読み込み、視覚化できます。perf.data は現在のディレクトリーに生成され、後で別のマシンからもアクセスできます。

perf record を記録するコマンドを指定しないと、Ctrl+C を押して手動でプロセスを停止するまで記録されます。-p オプションに続いてプロセス ID を 1 つ以上渡すと、perf record を特定のプロセスに割り当てることができます。root アクセスなしで perf record レコードを実行できますが、実行するとユーザー領域のパフォーマンスデータのサンプルのみとなります。デフォルトモードでは、perf record レコードは CPU サイクルをサンプルイベントとして使用し、継承モードが有効な状態でスレッドごとのモードで動作します。

CPU ごとのモード

perf record を使用して、CPU ごとのモードを有効にする -a オプションを渡すことで、監視された CPU の全スレッドでサンプルを収集できます。デフォルトでは、CPU ごとのモードはすべてのオンライン CPU を監視します。

9.6.2. root アクセスなしのパフォーマンスプロファイルの記録

root アクセスなしで perf record を使用すると、ユーザー空間のみのパフォーマンスデータのサンプリングおよび記録を行うことができます。

前提条件

手順

  • パフォーマンスデータのサンプルと記録:

    $ perf record command

    command を、サンプルデータを作成するコマンドに置き換えます。コマンドを指定しないと、Ctrl+C を押して手動で停止するまで perf record がデータのサンプリングを行います。

関連情報

  • man ページの perf-record(1)

9.6.3. root アクセスによるパフォーマンスプロファイルの記録

root アクセスで perf record を使用して、ユーザー空間とカーネル空間の両方でパフォーマンスデータを同時にサンプリングして記録できます。

前提条件

  • 「perf のインストール」で説明されているように、perf ユーザー領域ツールがインストールされている。
  • Root アクセスがある。

手順

  • パフォーマンスデータのサンプルと記録:

    # perf record command

    command を、サンプルデータを作成するコマンドに置き換えます。コマンドを指定しないと、Ctrl+C を押して手動で停止するまで perf record がデータのサンプリングを行います。

関連情報

  • man ページの perf-record(1)

9.6.4. CPU ごとのモードでのパフォーマンスプロファイルの記録

CPU ごとのモードで perf record を使用すると、監視対象の CPU のすべてのスレッドにわたって、ユーザー空間とカーネル空間の両方で同時にパフォーマンスデータをサンプリングして記録できます。デフォルトでは、CPU ごとのモードはすべてのオンライン CPU を監視します。

前提条件

  • 「perf のインストール」で説明されているように、perf ユーザー領域ツールがインストールされている。
  • Root アクセスがある。

手順

  • パフォーマンスデータのサンプルと記録:

    # perf record -a command

    command を、サンプルデータを作成するコマンドに置き換えます。コマンドを指定しないと、Ctrl+C を押して手動で停止するまで perf record がデータのサンプリングを行います。

関連情報

  • man ページの perf-record(1)

9.6.5. perf レコードで呼び出し先のデータを取得する

perf record ツールを設定して、どの関数がパフォーマンスプロファイル内の他の関数を呼び出しているかを記録することができます。これは、複数のプロセスが同じ関数を呼び出す場合にボトルネックを特定するのに役立ちます。

前提条件

手順

  • --call-graph オプションを使用して、パフォーマンスデータのサンプルと記録を行います。

    $ perf record --call-graph method command
    • command を、サンプルデータを作成するコマンドに置き換えます。コマンドを指定しないと、Ctrl+C を押して手動で停止するまで perf record がデータのサンプリングを行います。
    • method を、以下のアンワインドメソッドのいずれかに置き換えます。

      fp
      フレームポインターメソッドを使用します。GCC オプション --fomit-frame-pointer でビルドされたバイナリーの場合など、コンパイラーの最適化により、スタックをアンワインできない可能性があります。
      dwarf
      DWARF 呼び出し情報を使用してスタックのアンワインドを行います。
      lbr
      Intel プロセッサーで最後のブランチレコードハードウェアを使用します。

関連情報

  • man ページの perf-record(1)

9.6.6. perf レポートを使用した perf.data の分析

perf report を使用して perf.data ファイルを表示し、分析できます。

前提条件

  • 「perf のインストール」で説明されているように、perf ユーザー領域ツールがインストールされている。
  • 現行ディレクトリーに perf.data ファイルがある。
  • perf.data ファイルが root アクセスで作成された場合は、root アクセスで perf report を実行する必要もあります。

手順

  • 詳細な分析のために perf.data ファイルの内容を表示します。

    # perf report

    例9.4 出力例

    Samples: 2K of event 'cycles', Event count (approx.): 235462960
    Overhead  Command          Shared Object                     Symbol
       2.36%  kswapd0          [kernel.kallsyms]                 [k] page_vma_mapped_walk
       2.13%  sssd_kcm         libc-2.28.so                      [.] __memset_avx2_erms
       2.13%  perf             [kernel.kallsyms]                 [k] smp_call_function_single
       1.53%  gnome-shell      libc-2.28.so                      [.] __strcmp_avx2
       1.17%  gnome-shell      libglib-2.0.so.0.5600.4           [.] g_hash_table_lookup
       0.93%  Xorg             libc-2.28.so                      [.] __memmove_avx_unaligned_erms
       0.89%  gnome-shell      libgobject-2.0.so.0.5600.4        [.] g_object_unref
       0.87%  kswapd0          [kernel.kallsyms]                 [k] page_referenced_one
       0.86%  gnome-shell      libc-2.28.so                      [.] __memmove_avx_unaligned_erms
       0.83%  Xorg             [kernel.kallsyms]                 [k] alloc_vmap_area
       0.63%  gnome-shell      libglib-2.0.so.0.5600.4           [.] g_slice_alloc
       0.53%  gnome-shell      libgirepository-1.0.so.1.0.0      [.] g_base_info_unref
       0.53%  gnome-shell      ld-2.28.so                        [.] _dl_find_dso_for_object
       0.49%  kswapd0          [kernel.kallsyms]                 [k] vma_interval_tree_iter_next
       0.48%  gnome-shell      libpthread-2.28.so                [.] __pthread_getspecific
       0.47%  gnome-shell      libgirepository-1.0.so.1.0.0      [.] 0x0000000000013b1d
       0.45%  gnome-shell      libglib-2.0.so.0.5600.4           [.] g_slice_free1
       0.45%  gnome-shell      libgobject-2.0.so.0.5600.4        [.] g_type_check_instance_is_fundamentally_a
       0.44%  gnome-shell      libc-2.28.so                      [.] malloc
       0.41%  swapper          [kernel.kallsyms]                 [k] apic_timer_interrupt
       0.40%  gnome-shell      ld-2.28.so                        [.] _dl_lookup_symbol_x
       0.39%  kswapd0          [kernel.kallsyms]                 [k] __raw_callee_save___pv_queued_spin_unlock

関連情報

  • man ページの perf-report(1)

9.6.7. perf report 出力の解釈

perf report コマンドを実行して表示されるテーブルは、データを複数のコラムに分類します。

「Overhead」列
その特定の機能で収集された全体のサンプルのパーセンテージを示します。
「Command」列
サンプルが収集されたプロセスを通知します。
「Shared Object」列
サンプルの送信元である ELF イメージの名前を表示します (サンプルがカーネルからのものである場合に [kernel.kallsyms] という名前が使用されます)。
「Symbol」列
関数名またはシンボルを表示します。

デフォルトモードでは、関数は、オーバーヘッドの最も高いものが最初に表示される順に降順でソートされます。

9.6.8. perf が一部の関数名を raw 関数アドレスとして表示する理由

カーネル関数の場合は、perf/proc/kallsyms ファイルからの情報を使用して、サンプルをそれぞれの関数名またはシンボルにマッピングします。ただし、ユーザー空間で実行される関数については、バイナリーがストライピングされるので、raw 機能のアドレスが表示される可能性があります。

実行ファイルの debuginfo パッケージがインストールされているか、または実行ファイルがローカルで開発したアプリケーションである場合は、アプリケーションがデバッグ情報 (GCC の -g オプション) を有効にしてコンパイルされ、このような状況で関数名またはシンボルが表示される必要があります。

注記

実行ファイルに関連する debuginfo のインストール後に perf record レコードを再実行する必要はありません。単に perf report を再実行します。

9.6.9. デバッグおよびソースのリポジトリーの有効化

Red Hat Enterprise Linux の標準インストールでは、デバッグリポジトリーおよびソースリポジトリーが有効になっていません。このリポジトリーには、システムコンポーネントのデバッグとパフォーマンスの測定に必要な情報が含まれます。

手順

  • ソースおよびデバッグの情報パッケージチャンネルを有効にします。

    # subscription-manager repos --enable rhel-8-for-$(uname -i)-baseos-debug-rpms
    # subscription-manager repos --enable rhel-8-for-$(uname -i)-baseos-source-rpms
    # subscription-manager repos --enable rhel-8-for-$(uname -i)-appstream-debug-rpms
    # subscription-manager repos --enable rhel-8-for-$(uname -i)-appstream-source-rpms

    $(uname -i) の部分は、システムのアーキテクチャーで一致する値に自動的に置き換えられます。

    アーキテクチャー名

    64 ビット Intel および AMD

    x86_64

    64 ビット ARM

    aarch64

    IBM POWER

    ppc64le

    IBM Z

    s390x

9.6.10. GDB を使用したアプリケーションまたはライブラリーの debuginfo パッケージの取得

デバッグ情報は、コードをデバッグするために必要です。パッケージからインストールされるコードの場合、GNU デバッガー (GDB) は足りないデバッグ情報を自動的に認識し、パッケージ名を解決し、パッケージの取得方法に関する具体的なアドバイスを提供します。

前提条件

  • デバッグするアプリケーションまたはライブラリーがシステムにインストールされている。
  • GDB と debuginfo-install ツールがシステムにインストールされている。詳細は「アプリケーションをデバッグするための設定」を参照してください。
  • debuginfo パッケージおよび debugsource パッケージを提供するチャンネルをシステムに設定し、有効にしている。

手順

  1. デバッグするアプリケーションまたはライブラリーに割われた GDB を起動します。GDB は、足りないデバッグ情報を自動的に認識し、実行するコマンドを提案します。

    $ gdb -q /bin/ls
    Reading symbols from /bin/ls...Reading symbols from .gnu_debugdata for /usr/bin/ls...(no debugging symbols found)...done.
    (no debugging symbols found)...done.
    Missing separate debuginfos, use: dnf debuginfo-install coreutils-8.30-6.el8.x86_64
    (gdb)
  2. GDB を終了します。q と入力して、Enter で確認します。

    (gdb) q
  3. GDB が提案するコマンドを実行して、必要な debuginfo パッケージをインストールします。

    # dnf debuginfo-install coreutils-8.30-6.el8.x86_64

    dnf パッケージ管理ツールは、変更の概要を提供し、確認を求め、確認後に必要なファイルをすべてダウンロードしてインストールします。

  4. GDB が debuginfo パッケージを提案できない場合は、「手動でのアプリケーションまたはライブラリーの debuginfo パッケージの取得」で説明されている手順に従います。

法律上の通知

Copyright © 2020 Red Hat, Inc.
The text of and illustrations in this document are licensed by Red Hat under a Creative Commons Attribution–Share Alike 3.0 Unported license ("CC-BY-SA"). An explanation of CC-BY-SA is available at http://creativecommons.org/licenses/by-sa/3.0/. In accordance with CC-BY-SA, if you distribute this document or an adaptation of it, you must provide the URL for the original version.
Red Hat, as the licensor of this document, waives the right to enforce, and agrees not to assert, Section 4d of CC-BY-SA to the fullest extent permitted by applicable law.
Red Hat, Red Hat Enterprise Linux, the Shadowman logo, the Red Hat logo, JBoss, OpenShift, Fedora, the Infinity logo, and RHCE are trademarks of Red Hat, Inc., registered in the United States and other countries.
Linux® is the registered trademark of Linus Torvalds in the United States and other countries.
Java® is a registered trademark of Oracle and/or its affiliates.
XFS® is a trademark of Silicon Graphics International Corp. or its subsidiaries in the United States and/or other countries.
MySQL® is a registered trademark of MySQL AB in the United States, the European Union and other countries.
Node.js® is an official trademark of Joyent. Red Hat is not formally related to or endorsed by the official Joyent Node.js open source or commercial project.
The OpenStack® Word Mark and OpenStack logo are either registered trademarks/service marks or trademarks/service marks of the OpenStack Foundation, in the United States and other countries and are used with the OpenStack Foundation's permission. We are not affiliated with, endorsed or sponsored by the OpenStack Foundation, or the OpenStack community.
All other trademarks are the property of their respective owners.

このページには機械翻訳が使用されている場合があります (詳細はこちら)。