ferrous-systems/flamegraphを使ってRustプログラムの性能評価を行っていきます。
(eom/example/benchのベンチマーク結果です)
FlamgeGraphと呼ばれる関数の呼び出しと個々の関数での実行時間を一度に表示したものです。
FlameGraphに関する説明は以下が詳しいです
Install
cargo install flamegraph
これでflamegraph
, cargo-flamegraph
がインストールされます。flamegraphは背後でperfを外部プロセスとして実行するのでperfを入れておく必要があります。
ubuntu/debian
linux-tools
をインストールします。これはカーネルによって適切なものが変わるので注意してください。
sudo apt install linux-tools
とすると候補が出るのでその中から適切なものを選んでください。私の場合はGCP上の仮想マシンだったのでlinux-tools-gcp
をインストールしました。
RedHat/CentOS/Fedora
sudo yum install perf
Windows
未調査です…
Usage
cargo flamegraph
でcargo run --release
の結果をプロファイルしてくれて結果を flamegraph.svg
を生成してくれます。-o another_name.svg
のようにすると別名で保存してくれます。また背後でperfを実行するのでperf.data
も作られますが、自分で触る必要はありません。
[profile.release]
debug = true
のようにすると関数の情報をある程度残したまま最適化するので結果が見やすくなります。
How to Read
Blazing Performance with Flame Graphsより引用
- 関数の呼び出しのスタックに応じて関数を縦に積み上げて、関数での消費時間に応じて横幅を定めます
-
a()
の実行の中で、実際にどの関数で時間を消費しているかは一番上の端を見ればいい(上図の太い部分)。上図ではf()
,d()
,e()
,h()
の順に時間を消費している。