
Sergej Jaskiewicz via ghc-devs
tl;dr: I propose adding a new GHC flag for generating a log that allows visualizing how much time each stage in the compiler pipleline took, similar to Clang's -ftime-trace.
Hello, everyone.
Hi Sergej, [snip]
The latter option is much closer to what we need. If we link the GHC executable with the -eventlog flag, then various significant events will be written to a special log file. For example, "Parser began parsing the Main.hs file after 5 ms since GHC has started, and ended parsing it 3 ms after that". The resulting log file can be parsed with the ghc-events library [4], and also visualized using the ThreadScope app [5].
I'm a bit short on time but here are a few points in no particular order: Out of curiosity, have you seen Alp's work [1] in this area? This work allows use to the ghc-events-analyze package [2] to visualize (e.g. [3]) the existing withTiming eventlog output in a reasonably easy-to-consume format. That being said, I can certainly see the benefit of using the Chrome tracing infrastructure for this; it would make for a nicer user experience than the static image that ghc-events-analyze spits out. I also know that Matthew Pickering has been working in this area and I'm sure will have something interesting to add. I will admit that I am a bit reluctant to add support for a *particular* tracing format to GHC itself. I think it would make the most sense for GHC to produce a consumer-agnostic trace representation (via our existing eventlog mechanism) and for users to transform this into the format their tools require. Our current withTimings infrastructure is quite ad-hoc and could perhaps expose more detail. It would be great to know what sorts of detail people would find useful. Cheers, - Ben [1] https://www.haskell.org/ghc/blog/20190924-eventful-ghc.html [2] https://hackage.haskell.org/package/ghc-events-analyze [3] https://www.haskell.org/ghc/blog/images/eventful-ghc/ghc-events-viz.svg