60% performance regression in continuation-heavy code between 6.12 and 7
I have a JSON parsing library whose performance has regressed by a little over 60% between 6.12.3 and the current head of the 7.0 branch.
The library uses my attoparsec parsing library, which is written in a heavily continuation-based style.
Building the code
Reproducing the problem is pretty easy.
You need two git repos:
git clone git://github.com/bos/attoparsec
git clone git://github.com/mailrank/aeson
They're easily built:
(cd attoparsec && cabal install)
(cd aeson && cabal install)
Measuring performance
Inside the aeson repo are some benchmarks, of which AesonParse
is the only interesting one for our purposes.
cd aeson/benchmarks && make AesonParse
There's also prepackaged test data, so you can run a benchmark on the spot.
./AesonParse 1000 json-data/twitter100.json
This program accepts a number of loop iterations as its first argument, and a data file as its second. It prints its execution time, so a smaller number indicates better performance.
Performance with 6.12.3
Here's what I see with 6.12.3, on my MacBook Pro running OS X 10.6.5.
$ ./AesonParse 1000 json-data/twitter100.json
json-data/twitter100.json:
1000 good, 1.847631s
This number is good - it's about as fast as Python's C-based json parser.
Performance with GHC 7
You can pass a ghc
argument to make
to build the benchmark with a different compiler.
make clean
make AesonParse ghc=/usr/local/ghc/7/bin/ghc
And with the benchmark rebuilt, here's the performance:
$ ./AesonParse7 1000 json-data/twitter100.json
json-data/twitter100.json:
1000 good, 2.939818s
This is one of the very few instances I've seen of a performance regression with GHC 7, and unfortunately it's very large.
Please let me know what other information I can provide.
Trac metadata
Trac field | Value |
---|---|
Version | 7.0.1 |
Type | Bug |
TypeOfFailure | OtherFailure |
Priority | normal |
Resolution | Unresolved |
Component | Compiler |
Test case | |
Differential revisions | |
BlockedBy | |
Related | |
Blocking | |
CC | |
Operating system | |
Architecture |