From 25db6224544be0df483a661f5e2cc1ed595525ae Mon Sep 17 00:00:00 2001 From: Eelco Dolstra Date: Thu, 13 May 2004 19:35:46 +0000 Subject: * Load balancing. `build-remote.pl' will only execute up to a per-machine maximum number of parallel jobs on a remote machine. --- distributed/build-remote.pl | 36 ++++++++++++++++++++++++++++-------- distributed/remote-systems.conf | 2 +- distributed/test.sh | 5 ++++- src/libstore/normalise.cc | 2 +- 4 files changed, 34 insertions(+), 11 deletions(-) diff --git a/distributed/build-remote.pl b/distributed/build-remote.pl index f1a9b10f4d60..12cb272b95fa 100755 --- a/distributed/build-remote.pl +++ b/distributed/build-remote.pl @@ -7,9 +7,16 @@ my $localSystem = shift @ARGV; my $neededSystem = shift @ARGV; my $storeExpr = shift @ARGV; +sub sendReply { + my $reply = shift; + open OUT, ">&3" or die; + print OUT "$reply\n"; + close OUT; +} + # Decline if the local system can do the build. if ($amWilling && ($localSystem eq $neededSystem)) { - print "decline\n"; + sendReply "decline"; exit 0; } @@ -45,11 +52,8 @@ while () { } close LOAD; -sub sendReply { - my $reply = shift; - open OUT, ">&3" or die; - print OUT "$reply\n"; - close OUT; +foreach my $cur (keys %machines) { + $curJobs{$cur} = 0 unless defined $curJobs{$cur}; } # Find a suitable system. @@ -58,8 +62,7 @@ my $machine; foreach my $cur (keys %machines) { if ($neededSystem eq $systemTypes{$cur}) { $rightType = 1; - if (!defined $curJobs{$cur} or - ($curJobs{$cur} < $maxJobs{$cur})) + if ($curJobs{$cur} < $maxJobs{$cur}) { $machine = $cur; last; @@ -86,6 +89,19 @@ close IN; print "BUILDING REMOTE: $storeExpr on $machine\n"; +$curJobs{$machine} = $curJobs{$machine} + 1; + +sub writeLoad { + open LOAD, "> /home/eelco/nix/distributed/current-load" or die; + foreach my $cur (keys %machines) { + print LOAD "$cur $curJobs{$cur}\n"; + } + close LOAD; +} + +writeLoad + + my $ssh = "ssh -i $sshKeys{$machine} -x"; my $inputs = `cat inputs`; @@ -117,3 +133,7 @@ foreach my $output (split '\n', $outputs) { system "rsync -a -e '$ssh' $machine:$output /nix/store"; die "cannot rsync outputs from $machine" if ($? != 0); } + +$curJobs{$machine} = $curJobs{$machine} - 1; + +writeLoad diff --git a/distributed/remote-systems.conf b/distributed/remote-systems.conf index 4e6d2b962d80..3c9abc7194b4 100644 --- a/distributed/remote-systems.conf +++ b/distributed/remote-systems.conf @@ -1,2 +1,2 @@ -scratchy.labs.cs.uu.nl i686-linux /home/eelco/.ssh/id_scratchy_auto 2 +scratchy.labs.cs.uu.nl i686-linux /home/eelco/.ssh/id_scratchy_auto 1 mckroket.labs.cs.uu.nl powerpc-mac /home/eelco/.ssh/id_scratchy_mckroket 1 diff --git a/distributed/test.sh b/distributed/test.sh index 38116eba5dd1..78f83095e820 100755 --- a/distributed/test.sh +++ b/distributed/test.sh @@ -2,8 +2,11 @@ set -e +rm -f current-load +touch current-load + storeExpr=$(nix-instantiate ~/nixpkgs/pkgs/system/test.nix) export NIX_BUILD_HOOK="build-remote.pl" -../src/nix-store/nix-store -qnvvvv -j0 $storeExpr +../src/nix-store/nix-store -qnvvvv -j1 $storeExpr diff --git a/src/libstore/normalise.cc b/src/libstore/normalise.cc index 3ae3fb7891e7..0673814bab0b 100644 --- a/src/libstore/normalise.cc +++ b/src/libstore/normalise.cc @@ -332,7 +332,7 @@ void Normaliser::run() while (!goals.empty()) { - printMsg(lvlVomit, "main loop"); + debug("main loop - starting jobs"); /* Start building as many buildable goals as possible. */ bool madeProgress = false; -- cgit 1.4.1