Skip to content

Commit

Permalink
benchmarks: pkg-funcs vs. modules
Browse files Browse the repository at this point in the history
  • Loading branch information
DavHau committed Aug 7, 2023
1 parent 7b96349 commit deb25a3
Show file tree
Hide file tree
Showing 3 changed files with 117 additions and 0 deletions.
17 changes: 17 additions & 0 deletions misc/benchmarks/benchmark.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
#!/usr/bin/env bash
set -eou pipefail

export NUM_PKGS=${1:-1000}

# measure date ini milliseconds
echo -e "\nBenchmarking ${NUM_PKGS}x builtins.derivaton via pkg-funcs"
time nix eval --impure -f ./builtins-derivation-modules-vs-pkg-func.nix --json pkg-funcs > /dev/null

echo -e "\nBenchmarking ${NUM_PKGS}x builtins.derivaton via modules"
time nix eval --impure -f ./builtins-derivation-modules-vs-pkg-func.nix --json modules > /dev/null

echo -e "\nBenchmarking ${NUM_PKGS}x mkDerivation via pkg-funcs"
time nix eval --impure -f ./mkDerivation-modules-vs-pkg-func.nix --json pkg-funcs > /dev/null

echo -e "\nBenchmarking ${NUM_PKGS}x mkDerivation via modules"
time nix eval --impure -f ./mkDerivation-modules-vs-pkg-func.nix --json modules > /dev/null
49 changes: 49 additions & 0 deletions misc/benchmarks/builtins-derivation-modules-vs-pkg-func.nix
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
{dream2nixSource ? ../..}: let
dream2nix = import dream2nixSource;
nixpkgs = import dream2nix.inputs.nixpkgs {};
lib = nixpkgs.lib;

_callModule = module:
nixpkgs.lib.evalModules {
specialArgs.dream2nix = dream2nix;
specialArgs.packageSets.nixpkgs = nixpkgs;
modules = [module dream2nix.modules.drv-parts.core];
};

# like callPackage for modules
callModule = module: (_callModule module).config.public;

numPkgs = lib.toInt (builtins.getEnv "NUM_PKGS");

pkg-funcs = lib.genAttrs (map toString (lib.range 0 numPkgs)) (
num:
derivation {
name = "hello-${num}";
version = "2.12.1";
system = "x86_64-linux";
builder = "/bin/sh";
args = ["sh" "-c" "echo hello-${num} > $out"];
}
);

modules = lib.genAttrs (map toString (lib.range 0 numPkgs)) (
num:
callModule {
imports = [
dream2nix.modules.drv-parts.builtins-derivation
];
name = "hello-${num}";
version = "2.12.1";
builtins-derivation = {
system = "x86_64-linux";
builder = "/bin/sh";
args = ["sh" "-c" "echo hello-${num} > $out"];
};
}
);
in {
inherit
pkg-funcs
modules
;
}
51 changes: 51 additions & 0 deletions misc/benchmarks/mkDerivation-modules-vs-pkg-func.nix
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
{dream2nixSource ? ../..}: let
dream2nix = import dream2nixSource;
nixpkgs = import dream2nix.inputs.nixpkgs {};
lib = nixpkgs.lib;

_callModule = module:
nixpkgs.lib.evalModules {
specialArgs.dream2nix = dream2nix;
specialArgs.packageSets.nixpkgs = nixpkgs;
modules = [module dream2nix.modules.drv-parts.core];
};

# like callPackage for modules
callModule = module: (_callModule module).config.public;

numPkgs = lib.toInt (builtins.getEnv "NUM_PKGS");

pkg-funcs = lib.genAttrs (map toString (lib.range 0 numPkgs)) (
num:
nixpkgs.stdenv.mkDerivation rec {
pname = "hello-${num}";
version = "2.12.1";
src = nixpkgs.fetchurl {
url = "mirror://gnu/hello/hello-${version}.tar.gz";
sha256 = "sha256-jZkUKv2SV28wsM18tCqNxoCZmLxdYH2Idh9RLibH2yA=";
};
doCheck = false;
}
);

modules = lib.genAttrs (map toString (lib.range 0 numPkgs)) (num:
callModule rec {
imports = [
dream2nix.modules.drv-parts.mkDerivation
];
name = "hello-${num}";
version = "2.12.1";
deps.stdenv = nixpkgs.stdenv;
mkDerivation = {
src = nixpkgs.fetchurl {
url = "mirror://gnu/hello/hello-${version}.tar.gz";
sha256 = "sha256-jZkUKv2SV28wsM18tCqNxoCZmLxdYH2Idh9RLibH2yA=";
};
};
});
in {
inherit
pkg-funcs
modules
;
}

0 comments on commit deb25a3

Please sign in to comment.