Deprecated
In favour of
gauge
small framework for performance measurement and analysis
https://github.com/vincenthz/hs-gauge
Version on this page: | 0.2.1 |
LTS Haskell 22.39: | 0.2.5 |
Stackage Nightly 2024-10-31: | 0.2.5 |
Latest on Hackage: | 0.2.5@rev:2 |
BSD-3-Clause licensed by Bryan O'Sullivan
Maintained by Vincent Hanquez
This version can be pinned in stack with:
gauge-0.2.1@sha256:b93b196a599d495306a3a0bc0e8c415aae613f868b748089852f818c6d7afc44,4852
Module documentation for 0.2.1
Gauge: a clone of criterion
This is a clone of criterion with a code / dependencies on a diet. It works the same way as criterion for outputing to terminal benchmark data.
features compared to criterion
missing:
- JSON export
- HTML/javascript pages
- Glob benchmark matching
Added:
- Small condensed output (
-s
or--small
) - Raw measurements dumping (CSV)
Future Feature Plan
- Remove further dependencies
- storing benchmarks data in CSV and JSON
- Add a standalone program taking benchmark data files and rendering to html/javascript/graphs
- Make the library more useful as a standalone library to gather benchmark numbers related to functions in a programatic way
Small mode
It’s hard to compare many benchmarks with criterion, so gauge has a --small
output:
identity mean 41.65 ns ( +- 2.246 ns )
slow mean 163.9 ns ( +- 9.683 ns )
Direct dependencies removed compared to criterion
Number of total dependencies (direct & indirect):
- gauge: 12 dependencies
- criterion: 63 dependencies
Dependencies removed:
- Glob 0.8.0
- abstract-deque 0.3
- abstract-par 0.3.3
- aeson 1.1.2.0
- ansi-terminal 0.6.3.1
- ansi-wl-pprint 0.6.7.3
- array 0.5.1.1
- attoparsec 0.13.1.0
- base-compat 0.9.3
- base-orphans 0.6
- binary 0.8.3.0
- blaze-builder 0.4.0.2
- bytestring 0.10.8.1
- cassava 0.4.5.1
- cereal 0.5.4.0
- code-page 0.1.3
- containers 0.5.7.1
- criterion 1.2.2.0
- directory 1.3.0.0
- dlist 0.8.0.3
- erf 2.0.0.0
- exceptions 0.8.3
- filepath 1.4.1.1
- ghc-boot-th 8.0.2
- hashable 1.2.6.1
- integer-gmp 1.0.0.1
- integer-logarithms 1.0.2
- js-flot 0.8.3
- js-jquery 3.2.1
- math-functions 0.2.1.0
- microstache 1.0.1.1
- monad-par 0.3.4.8
- monad-par-extras 0.3.3
- mtl 2.2.1
- mwc-random 0.13.6.0
- optparse-applicative 0.13.2.0
- parallel 3.2.1.1
- parsec 3.1.11
- pretty 1.1.3.3
- process 1.4.3.0
- random 1.1
- scientific 0.3.5.2
- statistics 0.14.0.2
- stm 2.4.4.1
- tagged 0.8.5
- template-haskell 2.11.1.0
- text 1.2.2.2
- time 1.6.0.1
- time-locale-compat 0.1.1.3
- transformers-compat 0.5.1.4
- unix 2.7.2.1
- unordered-containers 0.2.8.0
- uuid-types 1.0.3
- vector-algorithms 0.7.0.1
- vector-binary-instances 0.2.3.5
- vector-th-unbox 0.2.1.6
Criterion graph of dependencies:
Gauge graph of dependencies:
Changes
0.2.1
- Inline math-functions & mwc-random:
- Remove most functions, instances and types, that are unnecessary for gauge
- Remove unsafe seeding with partial seed (unused in gauge anyway)
- Remove vector-th-unbox dependency (transitively template-haskell, pretty, ghc-boot-th)
- Remove time dependency
- Re-add Gauge.Benchmark to Gauge.Main to keep the transition between criterion and gauge easy
- Fix cycles reporting on linux, osx and windows
- Add some extra callstack for reporting on partial function
- Fix compilation with Semigroup => Monoid (compilation on 8.4). still unsupported
- Add some color on terminal output
0.2.0
Usability
: Simplify and organize the documentation and user APIs.Functionality
:- Add measurement and reporting of more performance counters on Unices (collected via getrusage) for example page faults, user time, system time and rss are now available in verbose mode.
- Re-enable CSV analysis with the same output format as criterion (
--csv
) - Add CSV measurement dumping with
--csvraw
Control
: Provide better control over measurement process with--min-samples
,--min-duration
and--include-first-iter
flags.Speed:
Add--quick
flag that provides results much faster (10x) without using statistical analysis.- Reliability:
- Fix a bug in GC stats collection and reporting with GHC 8.2 that caused incorrect reporting of some GC stats.
- Fix a bug in statistical regression that caused incorrect reporting of mean and other stats.
- Improve reliability by isolating benchmarks from one another using the
--measure-with
flag. The results of one benchmark are no longer affected by other benchmarks because each benchmark runs in a separate process. - Introduce an optional value type
Optional
with an efficient runtime representation to replace the ad-hoc fromXXX functions and the untyped approach.
- Modularity:
- Introduce
--measure-only
flag that allows just measurement and no analysis or reporting. - Provide modular build, measurement code is cleanly separated from
statistical analysis code. As a result a leaner version can now be built
without analysis code (controlled by the
analysis
build flag). - Clean, refactor & rewrite source code
- Introduce
- Remove code-page dependency
0.1.3
- Simplify monad handling, remove foundation as dependency
0.1.2
- condensed display with
--small
0.1.1
- remove optparse-applicative
0.1.0
- remove bunch of dependencies
- initial import of criterion-1.2.2.0