LoginSignup
9
6

More than 3 years have passed since last update.

Elixirのパフォーマンス測定にBenchfellaを使ってみた

Last updated at Posted at 2019-09-18

記事概要

ElixirConf JP 2019 Kokurajoでパフォーマンス計測を行っていた際にBenchfellaを使ってみたのですが、取り扱っている記事がなかったので、1つのトピックとして取り上げることにしました。元々はLTで学んだTipsの1つとして書く予定でした。

この記事では簡単にBenchfellaの使い方を説明します。

2019/10/01 訂正

プロジェクトのUsageにあるように、prj_root/bench/ のファイル名は xxx_bench.exs と_benchである必要があります。

Benchfellaとは

BenchfellaはExUnitのような使い勝手で簡単にパフォーマンス測定ができるパッケージです。複数回実行して平均を取るようなことも自動でやってくれるのでパフォーマンス測定が楽になります。

Benchfellaでパフォーマンス測定した流れ

Elixirでデータ構造を作ってみて、スプレーヒープの普通の再起と末尾再帰のパフォーマンス計測していた時に@zacky1972 先生に助言頂いてBenchfellaを使ってみました。
スクリーンショット 2020-03-23 15.04.20.png

Benchfellaの使い方

というわけで早速使い方!

mix.exsのdepsに追加

  defp deps do
    [
      {:benchfella, "~> 0.3.0", only: :dev}
    ]
  end

envは適切に。

パフォーマンス測定用のコードを書く

必要なこと

  • プロジェクト直下にbenchディレクトリを掘ってxxx_bench.exsに書く
  • use Benchfella
  • ExUnitのtestの部分をbenchと書く感じで、処理を中に。
defmodule SplayHeapBench do
  use Benchfella

  @nums 1..1_000_000 |> Enum.to_list |> Enum.shuffle

  bench "normal" do
    DataStructureEx.SplayHeap.from_list_org(@nums)
  end

  bench "tail call" do
    DataStructureEx.SplayHeap.from_list(@nums)
  end
end

mix benchの実行

$ mix bench

と実行すればbench配下のexsファイルを実行してくれます。
スクリーンショット 2019-09-18 11.56.47.png
あれ、末尾再帰の方が速い…
durationの期間内に回せるだけ処理を回して平均の時間を取っているようです。iterationを増やしたい場合、mix bench -d 10というような感じで秒数を指定しましょう。これは10秒ずつ実行する設定です。この時間が切れたときに始まったiterationまでで実行が終わるようなので、長い処理は大抵iterationが1になります。

まとめ

  • Benchfella簡単使ってみて
9
6
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
9
6