Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/tweag/hyperion
A lab for future Criterion features.
https://github.com/tweag/hyperion
benchmark-framework benchmarking criterion haskell hyperion latency performance
Last synced: 2 months ago
JSON representation
A lab for future Criterion features.
- Host: GitHub
- URL: https://github.com/tweag/hyperion
- Owner: tweag
- License: bsd-3-clause
- Created: 2016-12-27T14:16:44.000Z (about 8 years ago)
- Default Branch: master
- Last Pushed: 2019-01-09T20:18:13.000Z (about 6 years ago)
- Last Synced: 2024-11-14T00:40:41.736Z (3 months ago)
- Topics: benchmark-framework, benchmarking, criterion, haskell, hyperion, latency, performance
- Language: Haskell
- Homepage:
- Size: 104 KB
- Stars: 29
- Watchers: 72
- Forks: 1
- Open Issues: 7
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# Hyperion: Haskell-based systems benchmarking
[![Build Status](https://travis-ci.org/tweag/hyperion.svg?branch=master)](https://travis-ci.org/tweag/hyperion)
Hyperion is a DSL for writing benchmarks to measure and analyze
software performance. It is a lab for future [Criterion][criterion]
features.## Getting started
### Build
You can build the [`micro benchmark example`](examples/micro-benchmarks.hs)
using stack:``` shell
$ stack build
$ stack exec hyperion-micro-benchmark-example
```### Example usage
The Hyperion DSL is a backwards compatible extension
to [Criterion][criterion]'s DSL (except for the rarely used `env`
combinator, which has a safer type). Here is an example:``` haskell
benchmarks :: [Benchmark]
benchmarks =
[ bench "id" (nf id ())
, series [0,5..20] $ \n ->
bgroup "pure-functions"
[ bench "fact" (nf fact n)
, bench "fib" (nf fib n)
]
, series [1..4] $ \n ->
series [1..n] $ \k ->
bench "n choose k" $ nf (uncurry choose) (n, k)
]main :: IO ()
main = defaultMain "hyperion-example-micro-benchmarks" benchmarks
```By default Hyperion runs your benchmarks and pretty prints the
results. There are several command-line options that you can pass to
the executable, like printing the results to a JSON file or including
individual raw measurements. To see the full set of options run the
executable with `--help`:``` shell
$ stack exec hyperion-micro-benchmark-example -- --help
Usage: hyperion-micro-benchmark-example ([--pretty] | [-j|--json PATH] |
[-f|--flat PATH]) ([-l|--list] | [--run]
| [--no-analyze]) [--raw]
[--arg KEY:VAL] [NAME...]Available options:
-h,--help Show this help text
--pretty Pretty prints the measurements on stdout.
-j,--json PATH Where to write the json benchmarks output. Can be a
file name, a directory name or '-' for stdout.
-f,--flat PATH Where to write the json benchmarks output. Can be a
file name, a directory name or '-' for stdout.
--version Display version information
-l,--list List benchmark names
--run Run benchmarks and analyze them (default)
--no-analyze Only run the benchmarks
--raw Include raw measurement data in report.
--arg KEY:VAL Extra metadata to include in the report, in the
format key:value.
```[criterion]: http://www.serpentine.com/criterion/