From d704b59550390528dd57f11d43f3420601fccd5c Mon Sep 17 00:00:00 2001 From: Ian Jackson Date: Fri, 4 Nov 2016 14:33:18 +0000 Subject: [PATCH] check really parallel --- check | 49 +++++++++++++++++++++++++++++++++---------------- 1 file changed, 33 insertions(+), 16 deletions(-) diff --git a/check b/check index 7293371..b9eac53 100755 --- a/check +++ b/check @@ -2,13 +2,30 @@ set -e set -o pipefail +cpus=$( + perl -we ' + use strict; + require Sys::CPU; + my $ncpus = Sys::CPU::cpu_count(); + $ncpus *= 1.5; + print join " ", (0 .. $ncpus-1) or die $!; + print "\n" or die $!; + ' || + echo 0 1 2 +) + rm -rf stunt mkdir stunt cd stunt +for cpu in $cpus; do + mkdir c$cpu + (cd c$cpu + git init) +done + #exec 3<&0 = $ncpus; + await_task unless @freecpus; + + my $cpu = shift @freecpus; my $pid = fork // die $!; if (!$pid) { close STDIN; # seek STDIN,0,1; # flush STDIN; - open STDIN, "<", $batch or die $batch; - exec qw(git update-ref --stdin); + open STDIN, "<", "b$batch" or die $batch; + chdir "c$cpu" or die "$cpu $!"; + exec qw(eatmydata git update-ref --stdin); die $!; } - print STDERR "check spawned $batch ($count) [$pid]\n"; - push @tasks, [ $pid, $batch ]; + print STDERR "check spawned $batch ($count) [$pid] #$cpu\n"; + push @tasks, [ $pid, $cpu, $batch ]; $batch++; $file = undef; $count = 0; @@ -65,7 +82,7 @@ $ncpus=1; while (<>) { #print STDERR ">$_<\n"; - $file ||= new IO::File $batch, ">" or die $!; + $file ||= new IO::File "b$batch", ">" or die $!; chomp; print $file "delete refs/tags/$_\n" or die $!; $count++ < 100000 or complete_batch; -- 2.30.2