MyNixOS website logo
Description

A graphical tool for profiling parallel Haskell programs.

ThreadScope is a graphical viewer for thread profile information generated by the Glasgow Haskell compiler (GHC).

The Threadscope program allows us to debug the parallel performance of Haskell programs. Using Threadscope we can check to see that work is well balanced across the available processors and spot performance issues relating to garbage collection or poor load balancing.

ThreadScope

Hackage Hackage-Deps CI

Using pre-built binaries

Currently pre-built binaries for the following platforms are provided:

  • Ubuntu 24.04 (64-bit)
  • macOS 14.7
  • Windows Server 2022 (x64)

GTK+3 needs to be installed for these binaries to work.

On Windows, the MSYS2 is the recommended way to install GTK+3. In MSYS2 MINGW64 shell:

pacman -S $MINGW_PACKAGE_PREFIX-gtk3

then you can run the threadscope binary from the shell.

Building from source

Use git clone or cabal get threadscope to get the source and move into the threadscope directory.

The code for the Github Actions is a good guide for building from source.

Linux

GTK+3 is required to be installed. On Ubuntu-like systems:

sudo apt install libgtk-3-dev

Then you can build threadscope using cabal:

cabal v2-build   # to only build the project, or
cabal v2-install # to build and install the binary

Or using stack:

stack build   # to only build the project, or
stack install # to build and install the binary

macOS

GTK+ is required:

brew install cairo gtk+3 pkg-config

Then you can build threadscope using cabal:

cabal --project-file=cabal.project.osx v2-build   # to only build the project, or
cabal --project-file=cabal.project.osx v2-install # to build and install the binary

Or using stack:

stack --stack-yaml=stack.osx.yaml build   # to only build the project, or
stack --stack-yaml=stack.osx.yaml install # to install the binary

Windows

[!CAUTION] The Windows instructions may be out of date. Contributions to update them would be welcome.

Chocolatey can be used to install GHC and MSYS2 is the recommended way to install GTK+.

choco install ghc
refreshenv
set PATH=C:\\msys64\\mingw64\\bin;C:\\msys64\\usr\\bin;%PATH%
pacman -Sy mingw-w64-x86_64-gtk3

then you can build threadscope using cabal:

cabal v2-build

Or you can use stack instead.

CAVEAT: gtk3 needs to be installed twice: one for stack's MSYS2 environment and another for local MSYS2 environment.

In command prompt:

stack setup
stack exec -- pacman --needed -Sy bash pacman pacman-mirrors msys2-runtime msys2-runtime-devel
stack exec -- pacman -Syu
stack exec -- pacman -Syuu
stack exec -- pacman -S base-devel mingw-w64-x86_64-pkg-config mingw-w64-x86_64-toolchain mingw-w64-x86_64-gtk3
stack install

Then in MSYS2 MINGW64 shell:

pacman -S $MINGW_PACKAGE_PREFIX-gtk3
echo 'export PATH=$APPDATA/local/bin:$PATH' >> .profile
source .profile
threadscope

Building using stack is not tested in CI. If you find any issues with building with stack, please update the instructions and send a PR.

Metadata

Version

0.2.15.0

Maintainers (1)

Executables (1)

  • bin/threadscope

Platforms (75)

    Darwin
    FreeBSD
    Genode
    GHCJS
    Linux
    MMIXware
    NetBSD
    none
    OpenBSD
    Redox
    Solaris
    WASI
    Windows
Show all
  • aarch64-darwin
  • aarch64-freebsd
  • aarch64-genode
  • aarch64-linux
  • aarch64-netbsd
  • aarch64-none
  • aarch64-windows
  • aarch64_be-none
  • arm-none
  • armv5tel-linux
  • armv6l-linux
  • armv6l-netbsd
  • armv6l-none
  • armv7a-linux
  • armv7a-netbsd
  • armv7l-linux
  • armv7l-netbsd
  • avr-none
  • i686-cygwin
  • 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