windowsでDockerを利用してflamegraphでRustのプロファイリングをする
競技プログラミングのマラソンという分野でRustプログラムのボトルネックを探したかったのですが、windowsにはRustの良さげなプロファイラツールがなさそうでした。なのでDockerを利用してlinuxで動作するflamegraphを使います。
手順
Docker desktopのインストール
インストールします。
Docker imageのビルド
- Dockerfile
上のDockerfileを作成して。それが置いてあるディレクトリで
docker build -t rust-profile .
を実行します。
プロファイラの実行
Cargo.tomlに以下を追加します。
- Cargo.toml
[profile.release]
debug = true
以下でプロファイル結果が得られます(パスなどは変更してください)。
docker run -it \
--name profile-container \
-v $(pwd):/profile \
rust-profile \
/bin/bash -c "cargo flamegraph --bin=a -- ./target/release/a < tools/in/0000.txt > out0000.txt"
--name profile-container \
-v $(pwd):/profile \
rust-profile \
/bin/bash -c "cargo flamegraph --bin=a -- ./target/release/a < tools/in/0000.txt > out0000.txt"
こんな感じに可視化されます。
終わったらコンテナは消してください。
終わりに
記事の内容は間違っていたりもっと良い方法があるかもしれません。