GC timing stats (e.g. mutator_elapsed_ns) decrease over time
See this measurement code here in the gauge
benchmarking tool, which is a clone of the criterion benchmarking tool.
: https://github.com/harendra-kumar/hs-gauge/blob/f8c9bcd6ee03c3090f110664ff279a20f2da9130/Gauge/Measurement.hs#L315 . This code displays debug prints when the end time is lower than the start time for mutator_elapsed_ns
.
When we run this benchmark defined in https://github.com/harendra-kumar/hs-gauge/blob/f8c9bcd6ee03c3090f110664ff279a20f2da9130/benchs/GCBug.hs the following output is produced:
$ stack bench --benchmark-arguments "--quick"
gauge-0.1.3: benchmarks
Running 1 benchmarks...
Benchmark gcbug: RUNNING...
benchmarking streamingDecreased by: 25818791 : s = 59840178 e = 34021387
Decreased by: 22707134 : s = 76706673 e = 53999539
Decreased by: 4776100 : s = 96201146 e = 91425046
streaming time 50.00 ms
benchmarking pipesDecreased by: 12487955 : s = 153949495 e = 141461540
pipes time 50.00 ms
benchmarking conduitDecreased by: 5523916 : s = 310913002 e = 305389086
conduit time 50.00 ms
Benchmark gcbug: FINISH
Notice the "Decreased by" getting printed quite a few times. I have found it to be more likely for these particular libraries i.e. streaming, pipes and conduit; so I have used only these in the benchmarking file GCBug.hs
. I tried some other streaming libraries as well but it did not occur often in those cases. In these cases it occurs almost every time. I am running it on a macbook.
The repository is here: https://github.com/harendra-kumar/hs-gauge/tree/gc-bug . The branch in the repo is gc-bug
. You can run the benchmark named gcbug
using the command stack bench --benchmark-arguments "--quick"
to reproduce the output above.
Trac metadata
Trac field | Value |
---|---|
Version | 8.2.1 |
Type | Bug |
TypeOfFailure | OtherFailure |
Priority | normal |
Resolution | Unresolved |
Component | Runtime System |
Test case | |
Differential revisions | |
BlockedBy | |
Related | |
Blocking | |
CC | |
Operating system | |
Architecture |