
The 'safe' mark was just an oversight from me - I don't really think
it matters, considering it's only called once at startup anyway.
Similarly I imagine the oversight is negligible in the Criterion or
ekg case.
And also, take note the conditional is very specific; you want
COLLECT_GC_STATS only when NO_GC_STATS is the current setting - if you
unconditionally force COLLECT_GC_STATS, then things like `+RTS
-sstderr -RTS` will no longer work. I mention this because I messed it
up originally. :)
Given we already use this in GHC, and other users want it, it's
probably reasonable to put such an interface in `base` somewhere, e.g.
data GCStatisticsOption = NoStatistics | CollectStatistics |
VerboseStatistics ...
getGcStatistics :: IO GcStatisticsOption
setGcStatistics :: GcStatisticsOption -> IO ()
modifyGcStatistics :: (GcStatisticsOption -> GcStatisticsOption) -> IO ()
or something like that.
The special case inside GHC could then be handled with such an API I suppose.
On Thu, Jul 31, 2014 at 11:41 AM, Johan Tibell
Indeed. I filed a bug earlier today to make use of this.
On Thu, Jul 31, 2014 at 6:15 PM, Edward Kmett
wrote: Interesting.
I suppose ekg could also (ab)use this.
Johan?
-Edward
On Thu, Jul 31, 2014 at 5:51 AM, Simon Marlow
wrote: Hey Bryan,
Sorry for the delay.
On 15/07/14 01:57, Bryan O'Sullivan wrote:
I spent a bit of time over the weekend trying to figure out how to force the RTS to collect GC statistics, but was unable to do so.
I'm currently working on enriching criterion's ability to gather data, among which I'd like to see GC statistics. If I try to obtain GC stats using criterion when I'm not running the benchmark app with +RTS -T, I get an exception.
Is there a way to allow criterion to forcibly enable stats collection? My efforts to do so have gotten me nowhere. It would be unfortunate if I had to tell users of criterion that they should always run with +RTS -T or add a -rtsopts clause, as they'll simply forget.
And while I'm asking, why does GHC not simply collect GC stats by default? Collecting them seems to have zero cost, from what I can see?
So you can do this in the same way as GHC. See
https://phabricator.haskell.org/diffusion/GHC/browse/master/ghc/hschooks.c;6...
Which is imported into Haskell like this:
https://phabricator.haskell.org/diffusion/GHC/browse/master/ghc/Main.hs;6fa6...
I'm not sure why it's marked "safe", but it doesn't hurt.
This API is kind-of public, in the sense that we deliberately expose it via the Rts.h header, and I'll try not to break it gratuitously.
Cheers, Simon
_______________________________________________ ghc-devs mailing list ghc-devs@haskell.org http://www.haskell.org/mailman/listinfo/ghc-devs
_______________________________________________ ghc-devs mailing list ghc-devs@haskell.org http://www.haskell.org/mailman/listinfo/ghc-devs
-- Regards, Austin Seipp, Haskell Consultant Well-Typed LLP, http://www.well-typed.com/