diff --git a/src/parallel b/src/parallel index 597bebfa..62d2ecd5 100755 --- a/src/parallel +++ b/src/parallel @@ -1160,7 +1160,7 @@ sub check_invalid_option_combinations { sub init_globals { # Defaults: - $Global::version = 20151123; + $Global::version = 20151213; $Global::progname = 'parallel'; $Global::infinity = 2**31; $Global::debug = 0; @@ -3012,25 +3012,31 @@ sub parallelized_host_filtering { while (my ($host, $sshlogin) = each %Global::host) { if($host eq ":") { next } # The 'true' is used to get the $host out later - my $sshcmd = "true $host; exec " . $sshlogin->sshcommand()." ".$sshlogin->serverlogin(); - push(@cores, $host."\t".$sshcmd." -- ".$envvar." parallel --number-of-cores\n\0"); - push(@cpus, $host."\t".$sshcmd." -- ".$envvar." parallel --number-of-cpus\n\0"); - push(@maxline, $host."\t".$sshcmd." -- ".$envvar." parallel --max-line-length-allowed\n\0"); + my $sshcmd = "true $host; exec " .$sshlogin->sshcommand()." ". + $sshlogin->serverlogin(); + push(@cores, $host."\t".$sshcmd." -- ".$envvar. + " parallel --number-of-cores\n\0"); + push(@cpus, $host."\t".$sshcmd." -- ".$envvar. + " parallel --number-of-cpus\n\0"); + push(@maxline, $host."\t".$sshcmd." -- ".$envvar. + " parallel --max-line-length-allowed\n\0"); # 'echo' is used to get the best possible value for an ssh login time push(@echo, $host."\t".$sshcmd." -- echo\n\0"); } my ($fh, $tmpfile) = ::tmpfile(SUFFIX => ".ssh"); print $fh @cores, @cpus, @maxline, @echo; close $fh; - # --timeout 5: Setting up an SSH connection and running a simple - # command should never take > 5 sec. - # --delay 0.1: If multiple sshlogins use the same proxy the delay - # will make it less likely to overload the ssh daemon. - # --retries 3: If the ssh daemon it overloaded, try 3 times - # -s 16000: Half of the max line on UnixWare + # --timeout 10: Setting up an SSH connection and running a simple + # command should never take > 10 sec. + # --delay 0.1: If multiple sshlogins use the same proxy the delay + # will make it less likely to overload the ssh daemon. + # --retries 3: If the ssh daemon it overloaded, try 3 times + # -s 16000: Half of the max line on UnixWare # TODO sh -c wrapper to work in csh my $unlinkcmd = $Global::debug ? "true" : "rm $tmpfile"; - my $cmd = "($unlinkcmd; cat -) < $tmpfile | $0 -j0 --timeout 5 -s 16000 --joblog - --plain --delay 0.1 --retries 3 --tag --tagstring {1} -0 --colsep '\t' -k eval {2} 2>/dev/null"; + my $cmd = "($unlinkcmd; cat -) < $tmpfile | ". + "$0 -j0 --timeout 10 -s 16000 --joblog - --plain --delay 0.1 --retries 3 ". + "--tag --tagstring {1} -0 --colsep '\t' -k eval {2} 2>/dev/null"; ::debug("init", $cmd, "\n"); my @out; my $prepend = ""; @@ -4703,15 +4709,7 @@ sub loadavg { ::die_bug("loadavg_invalid_content: " . $self->{'loadavg_file'} . "\n$load_out"); } - # Because of instant load average, it should not be delayed 10 secs - # The instant load does not give 2 R if there is only 1 cpu. -# ::debug("load", "Last update: ", $self->{'last_loadavg_update'}); -# if(time - $self->{'last_loadavg_update'} > 10) { -# # last loadavg was started 10 seconds ago -# ::debug("load", time - $self->{'last_loadavg_update'}, " secs old: ", -# $self->{'loadavg_file'}); - $update_loadavg_file = 1; -# } + $update_loadavg_file = 1; } else { ::debug("load", "No loadavg file: ", $self->{'loadavg_file'}); $self->{'loadavg'} = undef; diff --git a/src/parallel_design.pod b/src/parallel_design.pod index 00aef871..4ff06cdc 100644 --- a/src/parallel_design.pod +++ b/src/parallel_design.pod @@ -35,9 +35,8 @@ sense to wait for a job to finish. Instead the load average must be checked again. Load average is not the only reason: --timeout has a similar problem. -To not burn up too up too much CPU GNU B sleeps -exponentially longer and longer if nothing happens, maxing out at 1 -second. +To not burn up too much CPU GNU B sleeps exponentially +longer and longer if nothing happens, maxing out at 1 second. =head2 Shell compatibility @@ -59,7 +58,7 @@ job from the queue will be run in that slot. But originally GNU B did not model job slots in the code. Job slots have been added to make it possible to use {%} as a replacement string. -Job slots were added to the code in 20140522, but while the job +While the job sequence number can be computed in advance, the job slot can only be computed the moment a slot becomes available. So it has been implemented as a stack with lazy evaluation: Draw one from an empty @@ -185,6 +184,10 @@ ssh I I Read about B<--protocol 30> in the section B. +=item --transferfile I + +<> + =item --basefile <>