I have a Criterion benchmark where each bgroup
corresponds to a test, and within each bgroup
there are two bench
values of the test with different options. For example:
main = defaultMain
[bgroup "test1" [bench "v1" test1_1, bench "v2" test1_2]
,bgroup "test2" [bench "v1" test2_1, bench "v2" test2_2
-- lots more tests
]
Within each bgroup
the two bench
tests are comparable. However, test1
takes 2000 micro seconds, while test2
takes 45 micro seconds. The overview graph (which is most useful for what I want to do) displays different tests on the same axes, so I can clearly see the differences in test1
, but test2
is hard to see.
Is it possible to normalise each bgroup
for plotting? Or show them on separate axes? Or should I dump the CSV data and plot what I want myself?
I have just released a library criterion-plus. It is a dome library over "criterion", which approaches the issue you're experiencing amongst others. It allows you to declare multiple "standoffs", which generate independent "criterion" report files. Another important issue it fixes is the ability to exclude "setup/teardown" phases from benchmarking, which "criterion" does not let you do.
Here is an example of how this library is supposed to be used:
import CriterionPlus
import qualified SomeMySQLLib as MySQL
import qualified SomePostgreSQLLib as PostgreSQL
main =
benchmark $ do
standoff "Inserting rows" $ do
subject "MySQL" $ do
-- Exclude the "setup" phase from measurement:
pause
connection <- liftIO $ MySQL.openConnection
-- Measure what we want:
continue
liftIO $ MySQL.insertAThousandRows connection
-- Exclude the "teardown" phase from measurement:
pause
liftIO $ MySQL.closeConnection connection
subject "PostgreSQL" $ do
-- This is how we can exclude the "setup" phase from monad transformers:
pause
PostgreSQL.runSession $ do
lift $ continue
PostgreSQL.insertAThousandRows
-- Exclude "teardown":
lift $ pause
-- Each standoff generates an independent report file:
standoff "Querying" $ do
subject "MySQL" $ error "So on..."
subject "PostgreSQL" $ error "So on..."
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With