第19章 perf を再起動せずに perf コレクターを使用してトレースポイントを管理する方法
コントロールパイプインターフェイスを使用して、実行中の perf
コレクターで異なるトレースポイントを有効化および無効化することで、perf
を停止または再起動せずに、収集するデータを動的に調整できます。これにより、プロセスの停止または再起動中に記録されたはずのパフォーマンスデータが失われることはありません。
19.1. perf を停止または再起動せずに、実行中の perf コレクターにトレースポイントを追加する
制御パイプインターフェイスを使用して実行中の perf
コレクターにトレースポイントを追加し、記録するデータを調整します。perf
を停止する必要がないため、パフォーマンスデータが失われません。
前提条件
-
perf
ユーザー空間ツールがインストールされている。詳細は、perf のインストール を参照してください。
手順
制御パイプインターフェイスを設定します。
mkfifo control ack perf.pipe
# mkfifo control ack perf.pipe
Copy to Clipboard Copied! コントロールファイル設定と、有効にするイベントで
perf record
を実行します。perf record --control=fifo:control,ack -D -1 --no-buffering -e 'sched:*' -o - > perf.pipe
# perf record --control=fifo:control,ack -D -1 --no-buffering -e 'sched:*' -o - > perf.pipe
Copy to Clipboard Copied! この例では、
-e
オプションの後に'sched:*'
を宣言すると、スケジューラーイベントでperf record
が開始されます。2 つ目の端末で、制御パイプの読み取り側を起動します。
cat perf.pipe | perf --no-pager script -i -
# cat perf.pipe | perf --no-pager script -i -
Copy to Clipboard Copied! コントロールパイプの読み取り側を起動すると、最初の端末で以下のメッセージがトリガーされます。
Events disabled
Events disabled
Copy to Clipboard Copied! 3 番目のターミナルで、制御ファイルを使用してトレースポイントを有効にします。
echo 'enable sched:sched_process_fork' > control
# echo 'enable sched:sched_process_fork' > control
Copy to Clipboard Copied! このコマンドは
perf
をトリガーし、宣言されたイベントについて制御ファイル内の現在のイベントリストをスキャンします。イベントが存在する場合は、トレースポイントが有効になり、次のメッセージが最初の端末に表示されます。event sched:sched_process_fork enabled
event sched:sched_process_fork enabled
Copy to Clipboard Copied! トレースポイントを有効にすると、2 番目のターミナルにトレースポイントを検出した perf からの出力が表示されます。
bash 33349 [034] 149587.674295: sched:sched_process_fork: comm=bash pid=33349 child_comm=bash child_pid=34056
bash 33349 [034] 149587.674295: sched:sched_process_fork: comm=bash pid=33349 child_comm=bash child_pid=34056
Copy to Clipboard Copied!