Skip to content

Latest commit

 

History

History
51 lines (33 loc) · 2.02 KB

README.ghc-events-perf.md

File metadata and controls

51 lines (33 loc) · 2.02 KB

Crash-course of the ghc-events-perf tool:

ghc --make -eventlog -rtsopts -threaded MyProgram.hs

ghc-events-perf record MyProgram --RTS +RTS -N2 -l-g-p

ghc-events-perf convert MyProgram

threadscope MyProgram.total.eventlog

A longer example, pointing out some common pitfalls and using the test data files from the test/ directory of the library's github repository. The Haskell program test/ParFib.hs is compiled with GHC >= 7.8 as follows

ghc --make -eventlog -rtsopts -threaded ParFib.hs

Test data files corresponding to test/ParFib.perf.data and test/ParFib.eventlog can be created with

sudo path-to/ghc-events-perf record +GhcEventsPerf -o ParFib.perf.data -GhcEventsPerf ./ParFib --RTS +RTS -N2 -la

At this point, one can change the owner or permissions of ParFib.perf.data and parse and view it with the standard 'perf script' command or with the 'dump-perf' tool that uses our Haskell library for parsing perf data.

The perf data can be transformed to an eventlog and synchronized and merged with the standard eventlog using

ghc-events-perf convert ParFib ParFib.total.eventlog ParFib.perf.data ParFib.eventlog

The resulting big eventlog can be displayed with

ghc-events show ParFib.total.eventlog | less

but it's best viewed in ThreadScope with

threadscope ParFib.total.eventlog

in the Timeline main pane, with Instant Events selected in the Traces tab and with the View/Event_Labels option on. If no perf events show up in the Instant Events traces, your GHC is probably 7.6 or older.

Note: in this version of haskell-linux-perf one can obtain the perf data just as well by running 'perf record' or 'perf script record' by hand instead of by running 'ghc-events-perf record'. In other versions (to be found on the sync-by-syscall and control-execution branches) 'ghc-events-perf record' is mandatory, since it inserts special synchronizing events. See the findings recorded in from_linux-perf-users.md for some background related to our current design decisions and shedding light on possible future directions.