From fab439201e1c48ab8670ee073ab8f5905a2b6c15 Mon Sep 17 00:00:00 2001 From: Eelco Dolstra Date: Thu, 24 Mar 2016 17:36:26 +0100 Subject: [PATCH] Keep track of Nixpkgs/NixOS evaluation statistics --- pkgs/top-level/metrics.nix | 54 ++++++++++++++++++++++++++++++++++++++ pkgs/top-level/release.nix | 2 ++ 2 files changed, 56 insertions(+) create mode 100644 pkgs/top-level/metrics.nix diff --git a/pkgs/top-level/metrics.nix b/pkgs/top-level/metrics.nix new file mode 100644 index 00000000000..44cf87f1094 --- /dev/null +++ b/pkgs/top-level/metrics.nix @@ -0,0 +1,54 @@ +{ nixpkgs, pkgs }: + +with pkgs; + +runCommand "nixpkgs-metrics" + { buildInputs = [ nix time ]; + requiredSystemFeatures = [ "benchmark" ]; + } + '' + export NIX_DB_DIR=$TMPDIR + export NIX_STATE_DIR=$TMPDIR + nix-store --init + + mkdir -p $out/nix-support + + run() { + local name="$1" + shift + + echo "running $@" + NIX_SHOW_STATS=1 time "$@" > /dev/null 2> stats + + cat stats + + x=$(sed -e 's/.*time elapsed: \([0-9\.]\+\).*/\1/ ; t ; d' stats) + [[ -n $x ]] || exit 1 + echo "$name.time $x s" >> $out/nix-support/hydra-metrics + + x=$(sed -e 's/.* \([0-9]\+\)maxresident.*/\1/ ; t ; d' stats) + [[ -n $x ]] || exit 1 + echo "$name.maxresident $x KiB" >> $out/nix-support/hydra-metrics + + x=$(sed -e 's/.*total allocations: \([0-9]\+\) bytes.*/\1/ ; t ; d' stats) + [[ -n $x ]] || exit 1 + echo "$name.allocations $x B" >> $out/nix-support/hydra-metrics + + x=$(sed -e 's/.*values allocated: \([0-9]\+\) .*/\1/ ; t ; d' stats) + [[ -n $x ]] || exit 1 + echo "$name.values $x" >> $out/nix-support/hydra-metrics + } + + run nixos.smallContainer nix-instantiate --dry-run ${nixpkgs}/nixos/release.nix -A closures.smallContainer.x86_64-linux + run nixos.kde nix-instantiate --dry-run ${nixpkgs}/nixos/release.nix -A closures.kde.x86_64-linux + run nixos.lapp nix-instantiate --dry-run ${nixpkgs}/nixos/release.nix -A closures.lapp.x86_64-linux + run nix-env.qa nix-env -f ${nixpkgs} -qa + run nix-env.qaDrv nix-env -f ${nixpkgs} -qa --drv-path --meta --xml + + export GC_INITIAL_HEAP_SIZE=128k + run nix-env.qaAggressive nix-env -f ${nixpkgs} -qa + run nix-env.qaDrvAggressive nix-env -f ${nixpkgs} -qa --drv-path --meta --xml + + lines=$(find ${nixpkgs} -name "*.nix" -type f | xargs cat | wc -l) + echo "loc $lines" >> $out/nix-support/hydra-metrics + '' diff --git a/pkgs/top-level/release.nix b/pkgs/top-level/release.nix index b1da5bf3035..afdcb3627df 100644 --- a/pkgs/top-level/release.nix +++ b/pkgs/top-level/release.nix @@ -25,6 +25,8 @@ let jobs = { tarball = import ./make-tarball.nix { inherit pkgs nixpkgs officialRelease; }; + metrics = import ./metrics.nix { inherit pkgs nixpkgs; }; + manual = import ../../doc; lib-tests = import ../../lib/tests/release.nix { inherit nixpkgs; };