Remove old stages and update some
This commit is contained in:
parent
27bc977590
commit
4de20d3aa5
@ -1,23 +0,0 @@
|
|||||||
{
|
|
||||||
stdenv
|
|
||||||
}:
|
|
||||||
|
|
||||||
{
|
|
||||||
program
|
|
||||||
}:
|
|
||||||
|
|
||||||
# This stage provides a clean environment to run experiments
|
|
||||||
stdenv.mkDerivation {
|
|
||||||
name = "broom";
|
|
||||||
preferLocalBuild = true;
|
|
||||||
phases = [ "installPhase" ];
|
|
||||||
installPhase = ''
|
|
||||||
cat > $out <<EOF
|
|
||||||
#!/bin/sh
|
|
||||||
|
|
||||||
# Removes all environment variables
|
|
||||||
/usr/bin/env -i ${program}
|
|
||||||
EOF
|
|
||||||
chmod +x $out
|
|
||||||
'';
|
|
||||||
}
|
|
@ -1,64 +0,0 @@
|
|||||||
{
|
|
||||||
pkgs
|
|
||||||
, callPackage
|
|
||||||
, callPackages
|
|
||||||
}:
|
|
||||||
|
|
||||||
let
|
|
||||||
|
|
||||||
garlic = {
|
|
||||||
|
|
||||||
# Load some helper functions to generate app variants
|
|
||||||
inherit (import ./gen.nix) genApps genApp genConfigs;
|
|
||||||
|
|
||||||
mpptest = callPackage ./mpptest { };
|
|
||||||
|
|
||||||
ppong = callPackage ./ppong {
|
|
||||||
mpi = pkgs.mpi;
|
|
||||||
};
|
|
||||||
|
|
||||||
nbody = callPackage ./nbody {
|
|
||||||
cc = pkgs.icc;
|
|
||||||
mpi = pkgs.impi;
|
|
||||||
tampi = pkgs.tampi;
|
|
||||||
gitBranch = "garlic/seq";
|
|
||||||
};
|
|
||||||
|
|
||||||
runWrappers = {
|
|
||||||
sbatch = callPackage ./sbatch.nix { };
|
|
||||||
srun = callPackage ./srun.nix { };
|
|
||||||
launch = callPackage ./launcher.nix { };
|
|
||||||
control = callPackage ./control.nix { };
|
|
||||||
nixsetup= callPackage ./nix-setup.nix { };
|
|
||||||
argv = callPackage ./argv.nix { };
|
|
||||||
statspy = callPackage ./statspy.nix { };
|
|
||||||
extrae = callPackage ./extrae.nix { };
|
|
||||||
stagen = callPackage ./stagen.nix { };
|
|
||||||
};
|
|
||||||
|
|
||||||
# Perf is tied to a linux kernel specific version
|
|
||||||
linuxPackages = pkgs.linuxPackages_4_4;
|
|
||||||
perfWrapper = callPackage ./perf.nix {
|
|
||||||
perf = pkgs.linuxPackages.perf;
|
|
||||||
};
|
|
||||||
|
|
||||||
exp = {
|
|
||||||
noise = callPackage ./exp/noise.nix { };
|
|
||||||
nbody = {
|
|
||||||
bs = callPackage ./exp/nbody/bs.nix {
|
|
||||||
pkgs = pkgs // garlic;
|
|
||||||
};
|
|
||||||
mpi = callPackage ./exp/nbody/mpi.nix { };
|
|
||||||
};
|
|
||||||
osu = rec {
|
|
||||||
latency-internode = callPackage ./exp/osu/latency.nix { };
|
|
||||||
latency-intranode = callPackage ./exp/osu/latency.nix {
|
|
||||||
interNode = false;
|
|
||||||
};
|
|
||||||
latency = latency-internode;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
in
|
|
||||||
garlic
|
|
@ -1,25 +0,0 @@
|
|||||||
{
|
|
||||||
stdenv
|
|
||||||
}:
|
|
||||||
|
|
||||||
{
|
|
||||||
program
|
|
||||||
}:
|
|
||||||
|
|
||||||
stdenv.mkDerivation {
|
|
||||||
name = "envRecord";
|
|
||||||
preferLocalBuild = true;
|
|
||||||
phases = [ "installPhase" ];
|
|
||||||
installPhase = ''
|
|
||||||
cat > $out <<EOF
|
|
||||||
#!/bin/sh
|
|
||||||
|
|
||||||
>&2 echo ----- ENV BEGIN -------
|
|
||||||
>&2 /usr/bin/env
|
|
||||||
>&2 echo ----- ENV END -------
|
|
||||||
|
|
||||||
exec ${program} \''${argv[@]}
|
|
||||||
EOF
|
|
||||||
chmod +x $out
|
|
||||||
'';
|
|
||||||
}
|
|
@ -1,36 +1,34 @@
|
|||||||
{
|
{
|
||||||
stdenv
|
stdenv
|
||||||
, bash
|
, garlicTools
|
||||||
#, writeShellScriptBin
|
|
||||||
}:
|
}:
|
||||||
|
|
||||||
{
|
{
|
||||||
program
|
nextStage
|
||||||
, configFile
|
, configFile
|
||||||
, traceLib
|
, traceLib
|
||||||
, extrae
|
, extrae
|
||||||
}:
|
}:
|
||||||
|
|
||||||
#writeShellScriptBin "extraeWrapper" ''
|
with garlicTools;
|
||||||
# export EXTRAE_HOME=${extrae}
|
|
||||||
# export LD_PRELOAD=${extrae}/lib/lib${traceLib}trace.so:$LD_PRELOAD
|
|
||||||
# export EXTRAE_CONFIG_FILE=${configFile}
|
|
||||||
# exec ${program}
|
|
||||||
#''
|
|
||||||
|
|
||||||
stdenv.mkDerivation {
|
let
|
||||||
name = "extrae";
|
program = stageProgram nextStage;
|
||||||
preferLocalBuild = true;
|
in
|
||||||
phases = [ "installPhase" ];
|
stdenv.mkDerivation {
|
||||||
installPhase = ''
|
name = "extrae";
|
||||||
cat > $out <<EOF
|
phases = [ "installPhase" ];
|
||||||
#!/bin/sh
|
preferLocalBuild = true;
|
||||||
|
dontPatchShebangs = true;
|
||||||
|
installPhase = ''
|
||||||
|
cat > $out <<EOF
|
||||||
|
#!/bin/sh
|
||||||
|
|
||||||
export EXTRAE_HOME=${extrae}
|
export EXTRAE_HOME=${extrae}
|
||||||
export LD_PRELOAD=${extrae}/lib/lib${traceLib}trace.so:$LD_PRELOAD
|
export LD_PRELOAD=${extrae}/lib/lib${traceLib}trace.so:$LD_PRELOAD
|
||||||
export EXTRAE_CONFIG_FILE=${configFile}
|
export EXTRAE_CONFIG_FILE=${configFile}
|
||||||
exec ${program}
|
exec ${program}
|
||||||
EOF
|
EOF
|
||||||
chmod +x $out
|
chmod +x $out
|
||||||
'';
|
'';
|
||||||
}
|
}
|
||||||
|
@ -1,34 +0,0 @@
|
|||||||
let
|
|
||||||
lib = import <nixpkgs/lib>;
|
|
||||||
|
|
||||||
gen = rec {
|
|
||||||
# genAttrSets "a" ["hello" "world"]
|
|
||||||
# [ { a = "hello"; } { a = "world"; } ]
|
|
||||||
genAttrSets = (name: arr: (map (x: {${name}=x; })) arr);
|
|
||||||
|
|
||||||
# addAttrSets "a" [1 2] {e=4;}
|
|
||||||
# [ { a = 1; e = 4; } { a = 2; e = 4; } ]
|
|
||||||
addAttrSets = (name: arr: set: (map (x: set // {${name}=x; })) arr);
|
|
||||||
|
|
||||||
# attrToList {a=1;}
|
|
||||||
# [ { name = "a"; value = 1; } ]
|
|
||||||
attrToList = (set: map (name: {name=name; value=set.${name};} ) (builtins.attrNames set));
|
|
||||||
|
|
||||||
# mergeConfig [{e=1;}] {name="a"; value=[1 2]
|
|
||||||
# [ { a = 1; e = 1; } { a = 2; e = 1; } ]
|
|
||||||
mergeConfig = (arr: new: lib.flatten ( map (x: addAttrSets new.name new.value x) arr));
|
|
||||||
|
|
||||||
# genConfigs {a=[1 2]; b=[3 4];}
|
|
||||||
# [ { a = 1; b = 3; } { a = 1; b = 4; } { a = 2; b = 3; } { a = 2; b = 4; } ]
|
|
||||||
genConfigs = (config: lib.foldl mergeConfig [{}] (attrToList config));
|
|
||||||
|
|
||||||
# Generate multiple app versions by override with each config
|
|
||||||
genApp = (app: configs: map (conf: app.override conf // {conf=conf;}) configs);
|
|
||||||
|
|
||||||
# Generate app version from an array of apps
|
|
||||||
genApps = (apps: configs:
|
|
||||||
lib.flatten (map (app: genApp app configs) apps));
|
|
||||||
|
|
||||||
};
|
|
||||||
in
|
|
||||||
gen
|
|
@ -1,32 +0,0 @@
|
|||||||
{
|
|
||||||
stdenv
|
|
||||||
}:
|
|
||||||
|
|
||||||
{
|
|
||||||
program
|
|
||||||
, nixsetup
|
|
||||||
}:
|
|
||||||
|
|
||||||
stdenv.mkDerivation {
|
|
||||||
name = "nixsetup";
|
|
||||||
preferLocalBuild = true;
|
|
||||||
phases = [ "installPhase" ];
|
|
||||||
dontPatchShebangs = true;
|
|
||||||
installPhase = ''
|
|
||||||
cat > $out <<EOF
|
|
||||||
#!/bin/sh -ex
|
|
||||||
|
|
||||||
>&2 echo Running nixsetup stage
|
|
||||||
env
|
|
||||||
|
|
||||||
# We need to enter the nix namespace first, in order to have /nix
|
|
||||||
# available, so we use this hack:
|
|
||||||
if [ ! -e /nix ]; then
|
|
||||||
exec ${nixsetup} \$0
|
|
||||||
fi
|
|
||||||
|
|
||||||
exec ${program}
|
|
||||||
EOF
|
|
||||||
chmod +x $out
|
|
||||||
'';
|
|
||||||
}
|
|
@ -1,24 +0,0 @@
|
|||||||
{
|
|
||||||
stdenv
|
|
||||||
, bash
|
|
||||||
, perf
|
|
||||||
}:
|
|
||||||
|
|
||||||
{
|
|
||||||
program
|
|
||||||
, perfArgs ? "record -a"
|
|
||||||
}:
|
|
||||||
|
|
||||||
stdenv.mkDerivation {
|
|
||||||
name = "perfWrapper";
|
|
||||||
preferLocalBuild = true;
|
|
||||||
phases = [ "installPhase" ];
|
|
||||||
installPhase = ''
|
|
||||||
cat > $out <<EOF
|
|
||||||
#!/bin/sh
|
|
||||||
|
|
||||||
exec ${perf}/bin/perf ${perfArgs} ${program}
|
|
||||||
EOF
|
|
||||||
chmod +x $out
|
|
||||||
'';
|
|
||||||
}
|
|
@ -1,55 +0,0 @@
|
|||||||
{
|
|
||||||
stdenv
|
|
||||||
, bash
|
|
||||||
, extrae
|
|
||||||
, writeShellScriptBin
|
|
||||||
, jq
|
|
||||||
}:
|
|
||||||
|
|
||||||
{
|
|
||||||
stages
|
|
||||||
, conf
|
|
||||||
, experimentName ? "run"
|
|
||||||
}:
|
|
||||||
|
|
||||||
with stdenv.lib;
|
|
||||||
|
|
||||||
let
|
|
||||||
|
|
||||||
dStages = foldr (stageFn: {conf, prevStage, stages}: {
|
|
||||||
conf = conf;
|
|
||||||
prevStage = stageFn {stage=prevStage; conf=conf;};
|
|
||||||
stages = [ (stageFn {stage=prevStage; conf=conf;}) ] ++ stages;
|
|
||||||
})
|
|
||||||
{conf=conf; stages=[]; prevStage=null;} stages;
|
|
||||||
|
|
||||||
stageProgram = stage:
|
|
||||||
if stage ? programPath
|
|
||||||
then "${stage}${stage.programPath}" else "${stage}";
|
|
||||||
|
|
||||||
linkStages = imap1 (i: s: {
|
|
||||||
name = "${toString i}-${baseNameOf s.name}";
|
|
||||||
path = stageProgram s;
|
|
||||||
}) dStages.stages;
|
|
||||||
|
|
||||||
createLinks = builtins.concatStringsSep "\n"
|
|
||||||
(map (x: "ln -s ${x.path} $out/bin/${x.name}") linkStages);
|
|
||||||
|
|
||||||
firstStageLink = (x: x.name) (elemAt linkStages 0);
|
|
||||||
in
|
|
||||||
stdenv.mkDerivation {
|
|
||||||
name = "stagen";
|
|
||||||
preferLocalBuild = true;
|
|
||||||
phases = [ "installPhase" ];
|
|
||||||
buildInputs = [ jq ];
|
|
||||||
installPhase = ''
|
|
||||||
mkdir -p $out/bin
|
|
||||||
${createLinks}
|
|
||||||
ln -s ${firstStageLink} $out/bin/${experimentName}
|
|
||||||
cat > $out/config.raw << EOF
|
|
||||||
${builtins.toJSON conf}
|
|
||||||
EOF
|
|
||||||
jq . $out/config.raw > $out/config.json
|
|
||||||
rm $out/config.raw
|
|
||||||
'';
|
|
||||||
}
|
|
@ -1,29 +0,0 @@
|
|||||||
{
|
|
||||||
stdenv
|
|
||||||
, bash
|
|
||||||
}:
|
|
||||||
|
|
||||||
{
|
|
||||||
program
|
|
||||||
, outputDir ? "."
|
|
||||||
}:
|
|
||||||
|
|
||||||
stdenv.mkDerivation {
|
|
||||||
name = "statspy";
|
|
||||||
preferLocalBuild = true;
|
|
||||||
phases = [ "installPhase" ];
|
|
||||||
programPath = "/bin/${name}";
|
|
||||||
installPhase = ''
|
|
||||||
mkdir -p $out/bin
|
|
||||||
cat > $out/bin/${name} <<EOF
|
|
||||||
#!/bin/sh
|
|
||||||
|
|
||||||
mkdir -p ${outputDir}
|
|
||||||
cat /proc/[0-9]*/stat | sort -n > ${outputDir}/statspy.\$(date +%s.%3N).begin
|
|
||||||
${program}
|
|
||||||
cat /proc/[0-9]*/stat | sort -n > ${outputDir}/statspy.\$(date +%s.%3N).end
|
|
||||||
|
|
||||||
EOF
|
|
||||||
chmod +x $out/bin/${name}
|
|
||||||
'';
|
|
||||||
}
|
|
@ -1,23 +1,29 @@
|
|||||||
{
|
{
|
||||||
stdenv
|
stdenv
|
||||||
, bash
|
|
||||||
, strace
|
, strace
|
||||||
|
, garlicTools
|
||||||
}:
|
}:
|
||||||
|
|
||||||
{
|
{
|
||||||
program
|
nextStage
|
||||||
}:
|
}:
|
||||||
|
|
||||||
stdenv.mkDerivation {
|
with garlicTools;
|
||||||
name = "strace";
|
|
||||||
preferLocalBuild = true;
|
|
||||||
phases = [ "installPhase" ];
|
|
||||||
installPhase = ''
|
|
||||||
cat > $out <<EOF
|
|
||||||
#!/bin/sh
|
|
||||||
|
|
||||||
exec ${strace}/bin/strace -f ${program}
|
let
|
||||||
EOF
|
program = stageProgram nextStage;
|
||||||
chmod +x $out
|
in
|
||||||
'';
|
stdenv.mkDerivation {
|
||||||
}
|
name = "strace";
|
||||||
|
phases = [ "installPhase" ];
|
||||||
|
preferLocalBuild = true;
|
||||||
|
dontPatchShebangs = true;
|
||||||
|
installPhase = ''
|
||||||
|
cat > $out <<EOF
|
||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
exec ${strace}/bin/strace -f ${program}
|
||||||
|
EOF
|
||||||
|
chmod +x $out
|
||||||
|
'';
|
||||||
|
}
|
||||||
|
@ -1,23 +1,29 @@
|
|||||||
{
|
{
|
||||||
stdenv
|
stdenv
|
||||||
, bash
|
|
||||||
, valgrind
|
, valgrind
|
||||||
|
, garlicTools
|
||||||
}:
|
}:
|
||||||
|
|
||||||
{
|
{
|
||||||
program
|
nextStage
|
||||||
}:
|
}:
|
||||||
|
|
||||||
stdenv.mkDerivation {
|
with garlicTools;
|
||||||
name = "valgrind";
|
|
||||||
preferLocalBuild = true;
|
|
||||||
phases = [ "installPhase" ];
|
|
||||||
installPhase = ''
|
|
||||||
cat > $out <<EOF
|
|
||||||
#!/bin/sh
|
|
||||||
|
|
||||||
exec ${valgrind}/bin/valgrind ${program}
|
let
|
||||||
EOF
|
program = stageProgram nextStage;
|
||||||
chmod +x $out
|
in
|
||||||
'';
|
stdenv.mkDerivation {
|
||||||
}
|
name = "valgrind";
|
||||||
|
phases = [ "installPhase" ];
|
||||||
|
preferLocalBuild = true;
|
||||||
|
dontPatchShebangs = true;
|
||||||
|
installPhase = ''
|
||||||
|
cat > $out <<EOF
|
||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
exec ${valgrind}/bin/valgrind ${program}
|
||||||
|
EOF
|
||||||
|
chmod +x $out
|
||||||
|
'';
|
||||||
|
}
|
||||||
|
@ -207,16 +207,9 @@ let
|
|||||||
stages = {
|
stages = {
|
||||||
sbatch = callPackage ./garlic/stages/sbatch.nix { };
|
sbatch = callPackage ./garlic/stages/sbatch.nix { };
|
||||||
srun = callPackage ./garlic/stages/srun.nix { };
|
srun = callPackage ./garlic/stages/srun.nix { };
|
||||||
launch = callPackage ./garlic/stages/launcher { };
|
|
||||||
control = callPackage ./garlic/stages/control.nix { };
|
control = callPackage ./garlic/stages/control.nix { };
|
||||||
nixsetup = callPackage ./garlic/stages/nix-setup.nix { };
|
|
||||||
exec = callPackage ./garlic/stages/exec.nix { };
|
exec = callPackage ./garlic/stages/exec.nix { };
|
||||||
statspy = callPackage ./garlic/stages/statspy.nix { };
|
|
||||||
extrae = callPackage ./garlic/stages/extrae.nix { };
|
extrae = callPackage ./garlic/stages/extrae.nix { };
|
||||||
stagen = callPackage ./garlic/stages/stagen.nix { };
|
|
||||||
perf = callPackage ./garlic/stages/perf.nix { };
|
|
||||||
broom = callPackage ./garlic/stages/broom.nix { };
|
|
||||||
envRecord = callPackage ./garlic/stages/envRecord.nix { };
|
|
||||||
valgrind = callPackage ./garlic/stages/valgrind.nix { };
|
valgrind = callPackage ./garlic/stages/valgrind.nix { };
|
||||||
isolate = callPackage ./garlic/stages/isolate { };
|
isolate = callPackage ./garlic/stages/isolate { };
|
||||||
trebuchet = callPackage ./garlic/stages/trebuchet.nix { };
|
trebuchet = callPackage ./garlic/stages/trebuchet.nix { };
|
||||||
|
Loading…
Reference in New Issue
Block a user