storing highly shared data structures

Simon Marlow simonmar at
Tue Jan 10 10:46:15 EST 2006

Jan-Willem Maessen wrote:
> On Jan 10, 2006, at 4:26 AM, Simon Marlow wrote:
>> Christian Maeder wrote:
>>> Bulat Ziganshin wrote:
>>>> CM> My old version is faster, because the version with  
>>>> makeStableName does
>>>> CM> very much GC.
>>>> CM>    MUT   time   27.28s  ( 28.91s elapsed)
>>>> CM>    GC    time  133.98s  (140.08s elapsed)
>>>> try to add infamous "+RTS -A10m" switch ;)
>>> You saved my day, thank you Bulat!
>>> Without that flag:
>>>   MUT   time   24.30s  ( 24.76s elapsed)
>>>   GC    time  131.25s  (140.01s elapsed)
>>>   EXIT  time    0.00s  (  0.00s elapsed)
>>>   Total time  155.55s  (164.77s elapsed)
>>> And with it:
>>>   MUT   time   23.86s  ( 24.86s elapsed)
>>>   GC    time   11.03s  ( 11.68s elapsed)
>>>   EXIT  time    0.00s  (  0.00s elapsed)
>>>   Total time   34.89s  ( 36.54s elapsed)
>> The real problem seems to be that minor GCs are taking too long.   
>> Having said that, you can usually reduce GC overhead with large -A  or 
>> -H options.
> Is the full table of stable names being traversed at every minor GC?   
> If so, it might be worth somehow segregating the nursery stable  names.  
> I bet this complicates management a bunch, though, since  right now 
> there's only one table to look things up in.

It's traversed, but not re-hashed.  So it shouldn't be a bottleneck, 
unless the table is really huge.  I agree that separating the gen 0 
stable names into a separate table would be the right fix, though.


More information about the Glasgow-haskell-users mailing list