[Haskell-cafe] Fast JSON validation - reducing allocations

Ben Gamari ben at smart-cactus.org
Thu May 11 18:40:14 UTC 2017


Ccing Luke Maurer under the assumption that he will appreciate seeing
the fruits of his labor.


David Turner <dct25-561bs at mythic-beasts.com> writes:

> Dear Café,
>
(snip)
>
> There's a copy of the relevant code for option 4 at
> https://github.com/DaveCTurner/json-validator. I've hacked around with it a
> bit since producing the numbers above, so it's now apparently a bit slower
> than Aeson but allocates less too (~65kB).
>
> Could anyone help, e.g. by pointing me at the bit in the Core that is
> allocating within the main loop?
>
While turning this over in my head I realized that this is the sort of
program which may be helped significantly by GHC 8.2's improved join
point handling. Indeed the timings seem to support this hypothesis:

GHC 8.0.2

    benchmarking json-validator/Automaton/testEvent
    time                 22.84 μs   (22.76 μs .. 22.94 μs)
                         1.000 R²   (1.000 R² .. 1.000 R²)
    mean                 22.84 μs   (22.76 μs .. 22.94 μs)
    std dev              297.4 ns   (221.8 ns .. 378.8 ns)

    Alloc rate     4,015,256,078,038 bytes per MUT second

GHC 8.2

    benchmarking json-validator/Automaton/testEvent
    time                 9.221 μs   (9.141 μs .. 9.318 μs)
                         0.998 R²   (0.996 R² .. 1.000 R²)
    mean                 9.163 μs   (9.084 μs .. 9.356 μs)
    std dev              399.8 ns   (193.0 ns .. 745.4 ns)
    variance introduced by outliers: 54% (severely inflated)

    Alloc rate           123,141,635 bytes per MUT second


Wow! I suspect your allocations have now vanished.

I didn't verify that the improvement really was due to more join points,
but it seems quite likely. Well done Luke!

Cheers,

- Ben

-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 487 bytes
Desc: not available
URL: <http://mail.haskell.org/pipermail/haskell-cafe/attachments/20170511/f0c0ff60/attachment.sig>


More information about the Haskell-Cafe mailing list