Rustで作る自作命令セットシミュレータの続き。テストパタンによってはシミュレーションにかなり時間がかかっているような気がするので、どこに負荷がかかっているのかを解析したい。 色々調べていると、Rustで書いたプログラムの性能解析としてFlamegraphというツールを使っている例を見つけた。
これはCargoでインストールするのか。なるほど。少し試してみたがどうもWindows Subsystem on Linuxでは動作しなかった。 仕方がないのでAWS上にLinuxを構築して実行してみる。
Flamegraphを実行するために、linux-tools-aws
のインストールを行った。
$ apt install linux-tools-aws
さらにプロジェクト上でFlameGraphをインストールする。
cargo install flamegraph
この状態で、目的のプログラムを実行してどのようになるのかを確認した。
$ cargo flamegraph --bin swimmer_rust ./riscv-tests/isa/rv64ui-v-bne.bin
テストコードを実行すると、flamegraph.svg
が生成されたので、ブラウザで結果を確認してみる。
何じゃこりゃ!細かいところを見ていくと、以下のことが分かってきた。
- メモリアクセスが遅い(細粒度なハッシュマップを使っているので当たり前か。これは修正しなければらならない点)。
- トレース出力が遅い(これも確かに反省点。トレース出力を行わないモードを作るべきだ)。
今後の課題として修正していくことにする。