ネイティブイメージにおけるLinux Perfプロファイラサポート

perf プロファイラ は、Linuxのパフォーマンス分析ツールであり、CPU使用率、メモリ使用量など、さまざまなパフォーマンス関連データの収集と分析を可能にします。アプリケーションの動作をプロファイリングして理解するのに特に役立ちます。

インストール #

PerfはLinuxシステムのプロファイラツールです。ほとんどのディストリビューションにはperfがプリインストールされていますが、利用できない場合はパッケージマネージャーを使用してインストールできます。

Oracle Linux/Red Hat/CentOSにperfをインストールするには、次のコマンドを実行します。

sudo yum install perf

Debian/Ubuntuにperfをインストールするには、次のコマンドを順番に実行します。

sudo apt update
sudo apt install linux-tools-common linux-tools-generic

perfをインストールした後、次のオプションのデフォルト値をバックアップします。

cat /proc/sys/kernel/perf_event_paranoid > perf_event_paranoid.backup
cat /proc/sys/kernel/kptr_restrict > kptr_restrict.backup

次に、それらを新しい目的の値に設定します。

echo -1 > /proc/sys/kernel/perf_event_paranoid
echo 0 > /proc/sys/kernel/kptr_restrict

上記の例では、-10が値として使用されていますが、これは最も制限が少なく、本番コードでは使用しないことをお勧めします。これらの値は必要に応じてカスタマイズできます。

perf_event_paranoidには4つの異なるレベル(値)があります。

  • -1: すべてのユーザーによる(ほぼ)すべてのイベントの使用を許可します。
  • >=0: CAP_SYS_ADMINを持たないユーザーによるftrace関数トレースポイントの使用を禁止します。
  • >=1: CAP_SYS_ADMINを持たないユーザーによるCPUイベントアクセスを禁止します。
  • >=2: CAP_SYS_ADMINを持たないユーザーによるカーネルプロファイリングを禁止します。

kptr_restrictには3つの異なるレベル(値)があります。

  • 0: カーネルポインタはすべてのユーザーが読み取ることができます。
  • 1: カーネルポインタは特権ユーザー(CAP_SYS_ADMIN機能を持つユーザー)のみがアクセスできます。
  • 2: カーネルポインタはすべてのユーザーから非表示になります。

perfの使用が終了したら、元の値を復元します。

cat perf_event_paranoid.backup > /proc/sys/kernel/perf_event_paranoid
cat kptr_restrict.backup > /proc/sys/kernel/kptr_restrict

ネイティブ実行ファイルのビルド #

次のコマンドでは、native-imageがシステムパス上にあり、使用可能であることを前提としています。インストールされていない場合は、入門を参照してください。

native-image -g <entry_class>

-gオプションは、Native Imageに生成されたバイナリ用のデバッグ情報を生成するように指示します。perfは、このデバッグ情報を使用して、トレース内の型とメソッドの適切な名前を提供できます。

基本操作 #

CPUプロファイリング #

  1. 利用可能なすべてのイベントをリストします。

    perf list
    

    このコマンドは、プロファイリングに使用できるすべてのイベントのリストを表示します。

  2. CPUイベントを記録します。

    perf record -e <event> -o perf.data <your_executable>
    

    <event>をリストから目的のイベントに置き換えます。このコマンドは実行可能ファイルをプロファイリングし、データをperf.dataという名前のファイルに保存します。

  3. レポートを生成します。

    perf report
    

    このコマンドは、収集されたデータに基づいてレポートを生成します。さまざまなオプションを使用して出力をカスタマイズできます。

メモリプロファイリング #

  1. メモリイベントを記録します。

    perf record -e memory:<event> -o perf.data <your_executable>
    

    <event>を特定のメモリイベントに置き換えます。このコマンドは、メモリ関連イベントをプロファイリングします。

  2. メモリレポートを生成します。

    perf report --sort=dso
    

    このコマンドは、動的共有オブジェクト(DSO)別にソートされた、メモリ関連イベントに焦点を当てたレポートを生成します。

トレース #

  1. システム全体のトレースを記録します。

    sudo perf record -a -g -o perf.data
    

    このコマンドは、コールグラフ情報を含むシステム全体のトレースを記録し、データをperf.dataという名前のファイルに保存します。システム全体のトレースにはsudoを使用してください。

  2. トレースレポートを生成します。

    perf script
    

    このコマンドは、記録されたトレースデータの分析に使用できるスクリプトを生成します。

お問い合わせ