BenchmarkIps

Warning: this is a work-in-progress by someone learning Elixir and has not been reviewed by anyone who knows what they’re doing.

BenchmarkIps benchmarks a function and returns how many iterations it can run per second (in wall time). This saves you from having to guess how many times to run something in order to get a meaningful benchmark.

This library is inspired by Evan Phoenix’s Ruby library benchmark-ips.

Installation

Add BenchmarkIps to your mix.exs file:

defp deps do
  [
    # ...
    { :benchmark_ips, "~> 0.2.0" },
  ]
end

Then run mix deps.get to fetch everything.

Usage

Pass in a function to BenchmarkIps.report and it will return {iterations_per_second, microseconds_per_iteration}:

iex> BenchmarkIps.report(fn -> :timer.sleep(1_000) end)
{0.9952333299661271, 1004789.5000000001}

You can also specify how long the warmup time and bench time should be (below are the defaults, in seconds):

BenchmarkIps.report(fn -> :timer.sleep(1_000) end, warmup_time_s: 1, bench_time_s: 2)

Example

An example is included in examples/list_bench.exs that compares various operations on lists and tuples.

See examples/list_bench.md for the output it generates.