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 <[email protected]> wrote: > Indeed. I filed a bug earlier today to make use of this. > > On Thu, Jul 31, 2014 at 6:15 PM, Edward Kmett <[email protected]> wrote: >> Interesting. >> >> I suppose ekg could also (ab)use this. >> >> Johan? >> >> -Edward >> >> >> On Thu, Jul 31, 2014 at 5:51 AM, Simon Marlow <[email protected]> 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;6fa6caad0cb4ba99b2c0b444b0583190e743dd63$18-28 >>> >>> Which is imported into Haskell like this: >>> >>> >>> https://phabricator.haskell.org/diffusion/GHC/browse/master/ghc/Main.hs;6fa6caad0cb4ba99b2c0b444b0583190e743dd63$847-848 >>> >>> 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 >>> [email protected] >>> http://www.haskell.org/mailman/listinfo/ghc-devs >> >> > _______________________________________________ > ghc-devs mailing list > [email protected] > http://www.haskell.org/mailman/listinfo/ghc-devs > -- Regards, Austin Seipp, Haskell Consultant Well-Typed LLP, http://www.well-typed.com/ _______________________________________________ ghc-devs mailing list [email protected] http://www.haskell.org/mailman/listinfo/ghc-devs
