MyNixOS website logo
Description

Convert an eventlog into the speedscope json format.

Convert an eventlog into the speedscope json format. The interactive visualisation displays an approximate trace of the program and summary views akin to .prof files. There is also support for parallel programs, each capability is rendered in its own profile.

hs-speedscope

hs-speedscope is a simple executable for converting an eventlog into a format suitable to load into speedscope.

WARNING: Only GHC 8.10 supports generating an eventlog with the correct events for this program to work.

Usage

  1. Create an eventlog which contains time profiling events by running your program with program +RTS -p -l-au.
  2. Run hs-speedscope on the resulting eventlog hs-speedscope program.eventlog.
  3. Load the resulting program.eventlog.json file into speedscope to visualise the profile.

Installation

cabal update
cabal install exe:hs-speedscope

This will install to cabal's per-user default location: ~/.cabal/bin/hs-speedscope.

Filtering an eventlog

It is sometimes useful to isolate a specific part of the sample, for example, when I was profiling ghcide, I want to isolate a single hover request.

The --start and --end options can be used to indicate which parts of the eventlog to keep. The filtering options look for messages inserted into the eventlog by traceMarker events.

  • No events before the first marker which matches the prefix given by --start will be included in the result
  • No events after the first marker which matches the prefix given by --end will be included in the result.

For example, the following invocation will filter the profile between the START and END markers.

hs-speedscope File.eventlog --start START --end END
Metadata

Version

0.2.1

Executables (1)

  • bin/hs-speedscope

Platforms (75)

    Darwin
    FreeBSD
    Genode
    GHCJS
    Linux
    MMIXware
    NetBSD
    none
    OpenBSD
    Redox
    Solaris
    WASI
    Windows
Show all
  • aarch64-darwin
  • aarch64-genode
  • aarch64-linux
  • aarch64-netbsd
  • aarch64-none
  • aarch64_be-none
  • arm-none
  • armv5tel-linux
  • armv6l-linux
  • armv6l-netbsd
  • armv6l-none
  • armv7a-darwin
  • armv7a-linux
  • armv7a-netbsd
  • armv7l-linux
  • armv7l-netbsd
  • avr-none
  • i686-cygwin
  • i686-darwin
  • i686-freebsd
  • i686-genode
  • i686-linux
  • i686-netbsd
  • i686-none
  • i686-openbsd
  • i686-windows
  • javascript-ghcjs
  • loongarch64-linux
  • m68k-linux
  • m68k-netbsd
  • m68k-none
  • microblaze-linux
  • microblaze-none
  • microblazeel-linux
  • microblazeel-none
  • mips-linux
  • mips-none
  • mips64-linux
  • mips64-none
  • mips64el-linux
  • mipsel-linux
  • mipsel-netbsd
  • mmix-mmixware
  • msp430-none
  • or1k-none
  • powerpc-netbsd
  • powerpc-none
  • powerpc64-linux
  • powerpc64le-linux
  • powerpcle-none
  • riscv32-linux
  • riscv32-netbsd
  • riscv32-none
  • riscv64-linux
  • riscv64-netbsd
  • riscv64-none
  • rx-none
  • s390-linux
  • s390-none
  • s390x-linux
  • s390x-none
  • vc4-none
  • wasm32-wasi
  • wasm64-wasi
  • x86_64-cygwin
  • x86_64-darwin
  • x86_64-freebsd
  • x86_64-genode
  • x86_64-linux
  • x86_64-netbsd
  • x86_64-none
  • x86_64-openbsd
  • x86_64-redox
  • x86_64-solaris
  • x86_64-windows