Nix flamegraph or profiling tool?

Adapted to home-manager configuration, made it use nix run to support flakes and inferno for magnitudes faster svg generation:

 home.packages =
      let
        # https://discourse.nixos.org/t/nix-flamegraph-or-profiling-tool/33333
        stackCollapse = pkgs.writeTextFile {
          name = "stack-collapse.py";
          destination = "/bin/stack-collapse.py";
          text = builtins.readFile (builtins.fetchurl
            {
              url = "https://raw.githubusercontent.com/NixOS/nix/master/contrib/stack-collapse.py";
              sha256 = "sha256:0mi9cf3nx7xjxcrvll1hlkhmxiikjn0w95akvwxs50q270pafbjw";
            });
          executable = true;
        };
        nixFunctionCalls = pkgs.writeShellApplication {
          name = "nixFunctionCalls";
          runtimeInputs = [ stackCollapse pkgs.inferno ];
          text = builtins.readFile ./nix-function-calls.sh;
          checkPhase = "";
        };
      in
      [ nixFunctionCalls ];
#!/usr/bin/env zsh

WORKDIR=$(mktemp -d)

nix eval -vvvvvvvvvvvvvvvvvvvv --raw --option trace-function-calls true $1 1>/dev/null 2> $WORKDIR/nix-function-calls.trace
stack-collapse.py $WORKDIR/nix-function-calls.trace > $WORKDIR/nix-function-calls.folded
inferno-flamegraph $WORKDIR/nix-function-calls.folded > $WORKDIR/nix-function-calls.svg
echo "$WORKDIR/nix-function-calls.svg"
4 Likes