Changelog History
Page 3
-
v0.6.0 Changes
November 30, 2016๐ One of the biggest releases yet. Great stuff in here - more elixir like API for
Benchee.run/2with the jobs as the primary argument and the optional options as the second argument and now also as the more idiomatic keyword list!The biggest feature apart from that is the possibility to use multiple inputs - which you all should do now as quite many functions behave differently with bigger, smaller or differently shaped inputs. Apart from that a bulk of work has gone into making and supporting benchee_html!
๐ Features (User Facing)
- New
:inputsconfiguration key that allows you to specify a map from input name to input value so that each defined benchmarking job is then executed with this input. For this to work the benchmarking function is called with the appropriateinputas an argument. Seesamples/multiple_inputs.exsfor an example. #21 - ๐ The highlevel
Benchee.run/2is now more idiomatic elixir and takes the map of jobs as the first argument and a keyword list of options as the second (and last) argument. The old way of passing config as a map as the first argument and the jobs as the second argument still works, but might be deprecated later on #47 - Along with that
Benchee.init/1now also accepts keyword lists of course
๐ฅ Breaking Changes (User Facing)
- ๐ The old way of providing the jobs as a list of tuples now removed, please switch to using a map from string to functions
๐ Features (Plugins)
Benchee.Utility.FileCreationmodule to help with creating files from a map of multiple inputs (or other descriptors) mapping to input and aninterleavefunction that spits out the correct file names especially if the:__no_inputmarker is usedBenchee.Systemis available to retrieve Elixir and Erlang versions but it's also already added to the suite duringBenchee.run/2
๐ฅ Breaking Changes (Plugins)
- ๐ท The structure of the output from
Benchee.Benchmark.measure/1toBenchee.Statistics.statistics/1has changed to accommodate the new inputs feature there is now an additional level where in a map the input name then points to the appropriate results of the jobs. When there were no inputs the key is the value returned byBenchee.Benchmark.no_input/0.
๐ Bugfixes
- ๐ prewarming (discarding the first result due to some timer issues) during run time was removed, as it should already happen during the warmup period and would discard actual useful results especially for longer running macro benchmarks.
- ๐ท when the execution time of the benchmarking job exceeds the given
:timeit will now execute exactly once (used to be 2) #49 - ๐
run_timesare now in the order as recorded (used to be reverse) - important when wants to graph them/look at them to see if there are any anomalies during benchmarking - โ Remove elixir 1.4.0-rc.0 warnings
- New
-
v0.5.0 Changes
October 13, 2016๐ This release focuses on scaling units to more appropriate sizes. Instead of always working with base one for counts and microseconds those values are scaled accordingly to thousands, milliseconds for better readability. This work was mostly done by new contributor @wasnotrice.
๐ Features (User Facing)
- Console output now scales units to be more friendly. Examples:
- instead of "44556677" ips, you would see "44.56 M"
- instead of "44556.77 ฮผs" run time, you would see "44.56 ms"
- Console output for standard deviation omits the parentheses
- ๐ Scaling of console output can be configured with the 4 different strategies
:best,:largest,:smallestand:none. Refer to the documentation for their different properties. - โ Shortened the fast function warning and instead linked to the wiki
๐ Features (Plugins)
- The statistics module now computes the
minimum,maximumandsample_size(not yet shown in the console formatter) - you can rely on
Benchee.Conversion.Duration,Benchee.Conversion.CountandBenchee.Conversion.DeviationPercentfor help with formatting and scaling units
๐ฅ Breaking Changes (Plugins)
- The
Benchee.Timemodule is gone, if you relied on it for one reason or another it's succeeded by the more powerfulBenchee.Conversion.Duration
- Console output now scales units to be more friendly. Examples:
-
v0.4.0 Changes
September 11, 2016๐ง Focuses on making what benchee print out configurable to make it fit to your preferences :)
๐ Features (User Facing)
- ๐ง The configuration now has a
:printkey where it is possible to configure in a map what benchee prints out during benchmarking. All options are enabled by default (true). Options are::benchmarking- print when Benchee starts benchmarking a new job (Benchmarking name ..):configuration- a summary of configured benchmarking options including estimated total run time is printed before benchmarking starts:fast_warning- warnings are displayed if functions are executed too fast leading to inaccurate measures
- ๐ง There is also a new configuration option for the built-in console formatter. Which is also enabled by default:
:comparison- if the comparison of the different benchmarking jobs (x times slower than) is shown
- ๐ง The pre-benchmarking output of the configuration now also prints the currently used Erlang and Elixir versions (similar to
elixir -v) - โ Add a space between the benchmarked time and the unit (microseconds)
- ๐ง The configuration now has a
-
v0.3.0 Changes
July 11, 2016๐ This release switches internal data structures from lists of tuples to maps, allows the configuration of formatters, aggregates all values and hands them down so formatters can access the whole configuration, prints general configuration information and much more great stuff :)
๐ฅ Breaking Changes (User Facing)
- The recommended data structure handed to
Benchee.runwas changed from a list of 2-element tuples to a map ("Name" => benchmark_function). However, the old list of tuples still works but may be removed in future releases (so it's not "breaking" strictly speaking). - ๐ท You can not have benchmark jobs with the same names anymore, the last one wins here. This was the reason why previously the data structure was a list of tuples. However, having benchmarks with the same name is nonsensical as you can't discern their results in the output any way.
๐ฅ Breaking Changes (Plugins)
- ๐ท main data structure to hold benchmarks and results was changed from a list of 2-element tuples to a map (
"Name" => values). That is for the jobs, the run times as well as the statistics. However, if you used something likeEnum.each(data, fn({name, value}) -> .. end)you are still fine though, cause Elixir is awesome :)
๐ Features (User Facing)
- ๐ง now takes a
parallel: numberconfiguration option and will then execute each job in parallel in as many parallel processes as specified innumber. This way you can gather more samples in the same time and also simulate a system more under load. This is tricky, however. One of the use cases is also stress testing a system. Thanks @ldr - the name column width is now determined based on the longest name. Thanks @alvinlindstam
- ๐ง Print general configuration information at the start of the benchmark, including warmup, time, parallel and an estimated total run time
- ๐ New method
Benchee.Formatters.Console.output/1that immediately prints to the console - ๐ง now takes a
formatters: [&My.Format.function/1, &Benchee.Formatters.console.output/1]configuration option with which multiple formatters for the same benchmarking run can be configured when usingBenchee.run/2. E.g. you can print results to the console and create a csv from that same run. Defaults to the builtin Console formatter.
๐ Features (Plugins)
- All previous configuration options are preserved after
Benchee.Statistics.statistics/1, meaning there is access to raw run times as well as custom options etc. E.g. you could grab custom options like%{csv: %{file: "my_file_name.csv"}}to use.
๐ Bugfixes
- name columns are no longer truncated after 30 characters. Thanks @alvinlindstam
- The recommended data structure handed to
-
v0.2.0 Changes
June 11, 2016๐ This release introduces warmup for benchmarks, nicer console output and the new
Benchee.measurethat runs the benchmarks previously defined instead of running them instantly.๐ฅ Breaking Changes (User Facing)
- ๐ท
Benchee.benchmark/3now doesn't run the benchmark anymore but simply adds it to:jobsin the config. The whole benchmark suite is then run viaBenchee.measure/1. This only affects you if you used the more verbose way of defining benchmarks,Benchee.run/2still work as before.
๐ฅ Breaking Changes (Plugins)
- ๐ท the defined benchmarking are now preserved after running the benchmark under the
:jobskey of the suite. Run times are added to the:run_timeskey of the suite (important for alternative statistics implementations)
๐ Features (User Facing)
๐ง configuring a warmup time to run functions before measurements are taken can be configured via the
warmupkey in the config defaulting to 2 (seconds)๐ statistics in console output are aligned right now for better comparisons
๐ last blank line of console output removed
๐ Features (Plugins)
- additionally supply the total standard deviation of iterations per second as
std_dev_ipsafterBenchee.Statistics.statistics
๐ Bugfixes
- if no time/warmup is specified the function won't be called at all
- ๐ท
-
v0.1.0 Changes
June 05, 2016๐ Initial release