LoginSignup
23
14

More than 3 years have passed since last update.

FlameGraphでRustプログラムの性能解析を行う

Last updated at Posted at 2019-09-29

ferrous-systems/flamegraphを使ってRustプログラムの性能評価を行っていきます。

image.png
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も作られますが、自分で触る必要はありません。

Cargo.toml
[profile.release]
debug = true

のようにすると関数の情報をある程度残したまま最適化するので結果が見やすくなります。

How to Read

image.png
Blazing Performance with Flame Graphsより引用

  • 関数の呼び出しのスタックに応じて関数を縦に積み上げて、関数での消費時間に応じて横幅を定めます
  • a()の実行の中で、実際にどの関数で時間を消費しているかは一番上の端を見ればいい(上図の太い部分)。上図ではf(), d(), e(), h()の順に時間を消費している。
23
14
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
23
14