Отчет о научно-исследовательской работе

Вид материалаОтчет
Приложение 2 скрипт запуска распределённых приложений
ПРИЛОЖЕНИЕ 3 ДОПОЛНИТЕЛЬНЫЕ НАСТРОЙКИ СИСТЕМЫ МОНИТОРИНГА FLAME 1.HTTP-агент
Подобный материал:
1   ...   6   7   8   9   10   11   12   13   ...   22

ПРИЛОЖЕНИЕ 2

СКРИПТ ЗАПУСКА РАСПРЕДЕЛЁННЫХ ПРИЛОЖЕНИЙ



#!/usr/bin/perl -w


my $currDir = `pwd`;

chomp($currDir);


$needCopy = 0;

if ($ARGV[0] eq "-copy") {

$needCopy = 1;

shift @ARGV;

}


my $appname = $ARGV[0];

die "Application name was not specified" if (! defined $appname);

die "No such application $appname" if (system("test -x $appname") != 0);


###########################################################################

###########################################################################

# Get info about computational nodes #

# format: ::
#


###########################################################################

# nodesInfo[k] - k-th info entry #

# nodesInfo[k][0] - hostname in k-th info entry #

# nodesInfo[k][1] - number of nodes on hostname in k-th info entry #

# nodesInfo[k][2] - ports of hostname in k-th info entry #

###########################################################################

my @nodesInfo;


my @nodeInfo;

open(F, "getnodesinfo |");

for ($index = 0; ; $index++) {

chomp;

@nodeInfo = split(/:/, $_);

for (my $i = 0; $i < 3; $i++) {

$nodesInfo[$index][$i] = $nodeInfo[$i];

}

}

close(F);


my $index;


#sub mympirun {

# my $nodeNum = $_[0];

# return "cd $currDir && ";

#}


sub mysystem {

print "Before system @_\n";

system(@_);

print "After system @_\n";

}


sub runOne {

$k = $_[0];


$pid = fork();

# $pid = 0;

if (! defined $pid) {

die "Can't fork";

}

elsif ($pid == 0) {

# child

print "Created pid $$\n";

my $l = "n0,0,0";

for (my $i = 1; $i < $nodesInfo[$k][1]; $i++) {

$l = $l . "," . $i;

}

my $cmd = "";

my $mympirun = "lamboot \&\& cd $currDir \&\& ./fixup $k \&\& mpirun $l $appname; lamhalt";

if ($k == 0) {

$cmd = $mympirun;

}

else {

$cmd = "ssh -p $nodesInfo[$k][2] $nodesInfo[$k][0] \"$mympirun\"";

}

mysystem($cmd);

exit(0);

}

else {

# parent

return $pid;

}

}


###########################################################################

###########################################################################

# Generate .hostfile #

###########################################################################

sub genHostfile {

# system("rm -f .hostfile");

open(F, "> .hostfile.in");

for (my $index = 0; $index <= $#nodesInfo;) {

print F "$nodesInfo[$index][0] $nodesInfo[$index][1]\n";

$index++

}

close(F);

}


###########################################################################

###########################################################################

# Run PACX-MPI-application #

###########################################################################


genHostfile;


if ($needCopy == 1) {

for ($index = 1; $index <= $#nodesInfo;) {

foreach my $nodePort (split(/\,/, $nodesInfo[$index][2])) {

mysystem("ssh -p $nodePort $nodesInfo[$index][0] mkdir -p $currDir");

mysystem("scp -P $nodePort -r $currDir \@$nodesInfo[$index][0]:$currDir/..");

}

$index++;

}

}


my $pids = ();

for (my $i = 0; $i <= $#nodesInfo; $i++) {

$pids = push(@pids, runOne($i));

# sleep 2;

}


#my $l = "n0,0,0";

#for (my $i = 1; $i < $nodesInfo[0][1]; $i++) {

# $l = $l . "," . $i;

#}


#mysystem("mpirun", $l, $appname);


for (my $i = 0; $i <= $#nodesInfo; $i++) {

print "Waiting for pid $pids[$i]";

waitpid($pids[$i], 0);

}


ПРИЛОЖЕНИЕ 3

ДОПОЛНИТЕЛЬНЫЕ НАСТРОЙКИ СИСТЕМЫ МОНИТОРИНГА FLAME

1.HTTP-агент