FPGA開発日記

カテゴリ別記事インデックス https://msyksphinz.github.io/github_pages , English Version https://fpgadevdiary.hatenadiary.com/

RustでRISC-V命令セットシミュレータを作ろう (15. flamegraphによる性能解析)

f:id:msyksphinz:20190224185310p:plain:w400

Rustで作る自作命令セットシミュレータの続き。テストパタンによってはシミュレーションにかなり時間がかかっているような気がするので、どこに負荷がかかっているのかを解析したい。 色々調べていると、Rustで書いたプログラムの性能解析としてFlamegraphというツールを使っている例を見つけた。

qiita.com

これは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が生成されたので、ブラウザで結果を確認してみる。

f:id:msyksphinz:20200307224109p:plain
Swimmer-Rustのテストコード実行結果

何じゃこりゃ!細かいところを見ていくと、以下のことが分かってきた。

  • メモリアクセスが遅い(細粒度なハッシュマップを使っているので当たり前か。これは修正しなければらならない点)。
  • トレース出力が遅い(これも確かに反省点。トレース出力を行わないモードを作るべきだ)。

今後の課題として修正していくことにする。