[racket] Gathering GC statistics for Racket programs
Looks neat. Can you add more statistics for gc time, like maximum/minimum/average/median?
On 10/01/2011 04:50 PM, Sam Tobin-Hochstadt wrote:
> Since Matthew added nice programmatic tools for understanding the
> behavior of the GC, I've written a little tool to summarize the GC
> behavior of your program. You can find it on GitHub here:
> https://github.com/samth/gcstats . To install it, do this:
>
> % git clone git://github.com/samth/gcstats.git
> % raco link gcstats
>
> Then you can do this:
>
> % racket -l gcstats -u my-program.rkt
>
> and you get output like this:
>
> 39,703,916 bytes allocated in the heap
> 28,890,688 bytes collected by GC
> 17,083,432 bytes max heap size
> 16,604,120 bytes max slop
> 28,229,632 bytes peak total memory use
>
> Generation 0: 5 collections, 32ms, 31.71ms elapsed
> Generation 1: 0 collections, 0ms, 0ms elapsed
>
> INIT time 256 ms
> MUT time 132 ms ( 129.98 ms elapsed)
> GC time 32 ms ( 31.71 ms elapsed)
> TOTAL time 420 ms ( 417.69 ms elapsed)
>
> %GC time 19.51% ( 19.61% elapsed)
>
> Alloc rate 300,787,242 bytes per MUT second
>
> There are a few significant limitations at present:
> 1. There are a few GCs before the tool starts -- it can't report
> anything about them.
> 2. If you have multiple places, it will do totally the wrong thing.
> Fixing this will require a little more information from Racket.
> 3. The current architecture keeps too much info around during the run
> of the program. I hope to fix that soon.
>
> The whole thing is inspired by the similar GHC reporting tools,
> documented here:
> http://www.haskell.org/ghc/docs/latest/html/users_guide/runtime-control.html#rts-options-gc
> . The GHC tools report one more interesting piece of information,
> which is how many bytes are copied by the GC. I hope we can get the
> information from the Racket GC at some point as well.