ネイティブ・イメージでのLinux Perfプロファイラのサポート
perf
プロファイラは、Linuxのパフォーマンス分析ツールで、CPU使用率、メモリー使用量などの様々なパフォーマンス関連データを収集および分析できます。これは、アプリケーションの動作のプロファイリングおよび理解に特に役立ちます。
インストール
perfは、Linuxシステム用のプロファイラ・ツールです。ほとんどのディストリビューションには、perf
が事前にインストールされていますが、存在しない場合は、パッケージ・マネージャを使用してインストールできます。
Oracle Linux/Red Hat/CentOSにperf
をインストールするには、次のコマンドを実行します:
sudo yum install perf
Debian/Ubuntuにperf
をインストールするには、次のコマンドを1つずつ実行します:
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
前述の例では、-1
および0
が値として使用されていますが、これらは最も制限が少ないため、本番コードで使用することはお薦めしません。これらの値は、必要に応じてカスタマイズできます。
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
オプションは、生成されたバイナリのデバッグ情報を出力するようにネイティブ・イメージに指示します。perf
は、このデバッグ情報を使用して、たとえばトレース内のタイプとメソッドに適切な名前を指定できます。
基本操作
CPUプロファイリング
-
使用可能なすべてのイベントをリストします:
perf list
このコマンドは、プロファイリングに使用できるすべてのイベントのリストを表示します。
-
CPUイベントを記録します:
perf record -e <event> -o perf.data <your_executable>
<event>
はリストの目的のイベントに置き換えます。このコマンドは、実行可能ファイルをプロファイルし、データをperf.dataという名前のファイルに保存します。 -
レポートを生成します:
perf report
このコマンドは、収集されたデータに基づいてレポートを生成します。様々なオプションを使用して出力をカスタマイズできます。
メモリー・プロファイリング
-
メモリー・イベントを記録します:
perf record -e memory:<event> -o perf.data <your_executable>
<event>
は特定のメモリー・イベントに置き換えます。このコマンドは、メモリー関連のイベントをプロファイルします。 -
メモリー・レポートを生成します:
perf report --sort=dso
このコマンドは、動的共有オブジェクト(DSO)でソートされた、メモリー関連のイベントに重点を置いたレポートを生成します。
トレース
-
システム全体のトレースを記録します:
sudo perf record -a -g -o perf.data
このコマンドは、システム全体のトレース(コールグラフ情報を含む)を記録し、データをperf.dataという名前のファイルに保存します。システム全体のトレースにはsudoを使用します。
-
トレース・レポートを生成します:
perf script
このコマンドは、記録されたトレース・データの分析に使用できるスクリプトを生成します。