windowsでDockerを利用してflamegraphでRustのプロファイリングをする

競技プログラミングのマラソンという分野でRustプログラムのボトルネックを探したかったのですが、windowsにはRustの良さげなプロファイラツールがなさそうでした。なのでDockerを利用してlinuxで動作するflamegraphを使います。

 

手順

Docker desktopのインストール

インストールします。

Docker imageのビルド
  •   Dockerfile 
    FROM rust:latest
    RUN apt-get update && apt-get install -y \
        linux-perf \
        linux-headers-amd64
    RUN cargo install flamegraph
    WORKDIR /profile

上の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"

こんな感じに可視化されます。

終わったらコンテナは消してください。

 

終わりに

記事の内容は間違っていたりもっと良い方法があるかもしれません。