まとめ
配布されてなかったのでビルドできるようにしました。
prefとは
パフォーマンスカウンタを使用したプロファイリングののためのツールです。
アプリケーションのパフォーマンスチューニングで計測をするためには使えます。
ところでprefのカウンタはlinuxに深く依存している、というかLinuxのツールであり、カーネルバージョンにあったバイナリが必要です。
Ubuntuなどではapt install linux-tools-`uname -r`
のようにカーネルバージョンを指定してinstallができたりしますが、Jetsonでは配布されていなかったりします。
自前でビルドが必要です。
Jetsonにおけるprefのビルド
prefはL4Tのソースコード、カーネルのツール郡の中に含まれています。
Linux_for_Tegra/source/kernel/<kernel-dir>/tools/perf
自前でカーネルの変更をしている場合はこちらを一緒にビルドしても使えます。
ですが、それだけではすべての機能がつかえるわけではありません。
パフォーマンスカウンタとしてアクセスできる機能や、計測結果を処理するためにpythonなどスクリプトと連携するなどができ、そのためには実機の中で然るべきライブラリとともにビルドをすることで機能が使えます。
perf with flamegraph
可視化としてflamegraphが使いたいです。
perfにもこの機能は取り込まれておりpythonと合わせてビルドをする必要があります。
ファイルの配置はカーネルビルドとほとんど同じなのでR35,R36についてはMakefileで配置可能にしています。
Jetson上にcloneして、適切なパッケージをinstallして、ビルドをすることで有効なperfが作れます。
sudo apt install libdw-dev libdwarf-dev python3-dev
make -C perf-tool build
スクリプトは適切なパスへのは位置も必要なので、すべてを/opt/perf
への配置という形でdebパッケージを作れるようにしています。
debを作るのにgo-bin-debを使っています。
計測と表示は以下のとおりです。d3-flame-graph(同梱のindex.html)でstacks.json
を開けばflamegraphが見れます。
# イベントにアクセスするために権限付与
sudo sysctl kernel.perf_event_paranoid=0
# record
/opt/perf/perf record -a --call-graph dwarf -F 99 <application command>
# export Flamegraph(stacks.json) from perf.data
/opt/perf/perf script report flamegraph -f json