Merge branch 'master' into fix/alpsinfov3
Этот коммит содержится в:
Коммит
8ec89001b3
1
.gitignore
поставляемый
1
.gitignore
поставляемый
@ -301,7 +301,6 @@ opal/mca/hwloc/hwloc*/hwloc/include/private/autogen/config.h
|
||||
opal/mca/installdirs/config/install_dirs.h
|
||||
|
||||
opal/mca/pmix/pmix1xx/pmix/include/pmix/autogen/config.h
|
||||
opal/mca/pmix/pmix1xx/pmix/include/pmix/pmix_common.h
|
||||
opal/mca/pmix/pmix1xx/pmix/include/private/autogen/config.h
|
||||
opal/mca/pmix/pmix1xx/pmix/include/private/autogen/config.h.in
|
||||
|
||||
|
@ -2,9 +2,13 @@ PROGS = orte_no_op mpi_no_op
|
||||
|
||||
all: $(PROGS)
|
||||
|
||||
CC = mpicc
|
||||
CFLAGS = -O
|
||||
CFLAGS_INTERNAL = -I../../.. -I../../../orte/include -I../../../opal/include
|
||||
|
||||
orte_no_op:
|
||||
ortecc -o orte_no_op orte_no_op.c
|
||||
|
||||
mpi_no_op:
|
||||
mpicc -o mpi_no_op mpi_no_op.c
|
||||
|
||||
clean:
|
||||
rm -f $(PROGS) *~
|
||||
|
309
contrib/scaling/scaling.pl
Обычный файл → Исполняемый файл
309
contrib/scaling/scaling.pl
Обычный файл → Исполняемый файл
@ -2,49 +2,66 @@
|
||||
#
|
||||
# Copyright (c) 2012 Los Alamos National Security, Inc.
|
||||
# All rights reserved.
|
||||
# Copyright (c) 2015 Intel, Inc. All rights reserved.
|
||||
|
||||
use strict;
|
||||
use Getopt::Long;
|
||||
|
||||
# globals
|
||||
my $showme_arg = 0;
|
||||
my $num_nodes = 0;
|
||||
my $num_nodes = 2;
|
||||
my $my_arg;
|
||||
my $reps = 1;
|
||||
my $usedvm = 0;
|
||||
my $usesrun = 0;
|
||||
my $usempirun = 0;
|
||||
my $runall = 0;
|
||||
|
||||
my @tests = qw(/bin/true ./orte_no_op ./mpi_no_op ./mpi_no_op);
|
||||
my @options = ("", "", "", "-mca mpi_preconnect_mpi 1");
|
||||
my @options = ("", "", "", "-mca mpi_add_procs_cutoff 0 -mca pmix_base_async_modex 1");
|
||||
my @starters = qw(mpirun orte-submit srun orterun);
|
||||
my @starteroptions = ("-npernode 1 --novm",
|
||||
"--hnp file:dvm_uri -pernode",
|
||||
"--distribution=cyclic",
|
||||
"-npernode 1 --novm");
|
||||
|
||||
# Cannot use the usual GetOpts library as the user might
|
||||
# be passing -options to us! So have to
|
||||
# parse the options ourselves to look for help and showme
|
||||
my $i = 0;
|
||||
foreach $my_arg (@ARGV) {
|
||||
if ($my_arg eq "-h" ||
|
||||
$my_arg eq "--h" ||
|
||||
$my_arg eq "-help" ||
|
||||
$my_arg eq "--help") {
|
||||
print "Options:
|
||||
--showme Show the actual commands without executing them
|
||||
--nodes Number of nodes to run the test across
|
||||
--reps Number of times to run each test (for statistics)
|
||||
--help | -h This help list\n";
|
||||
exit;
|
||||
} elsif ($my_arg eq "-showme" ||
|
||||
$my_arg eq "--showme") {
|
||||
$showme_arg = 1;
|
||||
} elsif ($my_arg eq "-nodes" ||
|
||||
$my_arg eq "--nodes") {
|
||||
$num_nodes = @ARGV[$i+1];
|
||||
} elsif ($my_arg eq "--reps" ||
|
||||
$my_arg eq "-reps") {
|
||||
$reps = @ARGV[$i+1];
|
||||
}
|
||||
$i++;
|
||||
# Set to true if the script should merely print the cmds
|
||||
# it would run, but don't run them
|
||||
my $SHOWME = 0;
|
||||
# Set to true to suppress most informational messages.
|
||||
my $QUIET = 0;
|
||||
# Set to true if we just want to see the help message
|
||||
my $HELP = 0;
|
||||
|
||||
GetOptions(
|
||||
"help" => \$HELP,
|
||||
"quiet" => \$QUIET,
|
||||
"showme" => \$SHOWME,
|
||||
"reps=s" => \$reps,
|
||||
"dvm" => \$usedvm,
|
||||
"srun" => \$usesrun,
|
||||
"mpirun" => \$usempirun,
|
||||
"all" => \$runall,
|
||||
) or die "unable to parse options, stopped";
|
||||
|
||||
if ($HELP) {
|
||||
print <<EOT;
|
||||
$0 [options]
|
||||
|
||||
--help | -h This help message
|
||||
--quiet | -q Only output critical messages to stdout
|
||||
--showme Show the actual commands without executing them
|
||||
--reps Number of times to run each test (for statistics)
|
||||
--mpirun Use only mpirun (or its equivalent orterun)
|
||||
--dvm Use only orte-dvm to execute the test
|
||||
--srun Use only srun to execute the test
|
||||
--all Use all available start commands [default]
|
||||
EOT
|
||||
exit(0);
|
||||
}
|
||||
|
||||
my $n = 1;
|
||||
my $cmd;
|
||||
|
||||
my $starter;
|
||||
my $test;
|
||||
my $output;
|
||||
my @lines;
|
||||
@ -54,65 +71,183 @@ my $res;
|
||||
my $toggle;
|
||||
my $idx;
|
||||
my $option;
|
||||
print "\n--------------------------------------------------\n";
|
||||
foreach $test (@tests) {
|
||||
$option = shift(@options);
|
||||
if (-e $test) {
|
||||
# pre-position the executable
|
||||
$cmd = "mpirun -npernode 1 $test 2>&1";
|
||||
system($cmd);
|
||||
$n = 1;
|
||||
while ($n <= $num_nodes) {
|
||||
$cmd = "time mpirun -npernode 1 -max-vm-size $n $option $test 2>&1";
|
||||
print $cmd . "\n";
|
||||
if (0 == $showme_arg) {
|
||||
for (1..$reps) {
|
||||
$toggle = 1;
|
||||
$output = `$cmd`;
|
||||
@lines = split(/\n/, $output);
|
||||
foreach $line (@lines) {
|
||||
if (0 <= index($line, "user") ||
|
||||
0 <= index($line, "sys") ||
|
||||
0 <= index($line, "real") ||
|
||||
0 <= index($line, "elapsed")) {
|
||||
$idx = 0;
|
||||
@results = split(/\s+/,$line, 4);
|
||||
foreach $res (@results) {
|
||||
if ($idx < 3) {
|
||||
print $res;
|
||||
if (0 == $toggle) {
|
||||
print " ";
|
||||
$toggle = 1;
|
||||
} else {
|
||||
print " ";
|
||||
$toggle = 0;
|
||||
}
|
||||
}
|
||||
$idx = $idx + 1;
|
||||
}
|
||||
print "\n";
|
||||
}
|
||||
}
|
||||
}
|
||||
print "\n";
|
||||
}
|
||||
$n = 2 * $n;
|
||||
my $havedvm = 0;
|
||||
|
||||
# see which starters are available
|
||||
my @path = split(":", $ENV{PATH});
|
||||
my $exists = 0;
|
||||
$idx=0;
|
||||
while ($idx <= $#starters) {
|
||||
$starter = $starters[$idx];
|
||||
$exists = 0;
|
||||
foreach my $path (@path) {
|
||||
if ( -x "$path/$starter") {
|
||||
$exists = 1;
|
||||
last;
|
||||
}
|
||||
if ($n != (2 * $num_nodes)) {
|
||||
$cmd = "time mpirun -npernode 1 $option $test 2>&1";
|
||||
print $cmd . "\n";
|
||||
if (0 == $showme_arg) {
|
||||
for (1..$reps) {
|
||||
$output = `$cmd`;
|
||||
$output =~ s/(.+)\n.*/$1/;
|
||||
@results = split(/\s+/,$output);
|
||||
print $results[0] . " " . $results[1] . " " . $results[2] . "\n";
|
||||
}
|
||||
}
|
||||
unless ($exists) {
|
||||
# remove this one from the list
|
||||
splice @starters, $idx, 1;
|
||||
splice @starteroptions, $idx, 1;
|
||||
# adjust the index
|
||||
$idx = $idx - 1;
|
||||
} elsif ($usedvm && $starter ne "orte-submit") {
|
||||
# remove this one from the list
|
||||
splice @starters, $idx, 1;
|
||||
splice @starteroptions, $idx, 1;
|
||||
# adjust the index
|
||||
$idx = $idx - 1;
|
||||
} elsif ($usesrun && $starter ne "srun") {
|
||||
# remove this one from the list
|
||||
splice @starters, $idx, 1;
|
||||
splice @starteroptions, $idx, 1;
|
||||
# adjust the index
|
||||
$idx = $idx - 1;
|
||||
} elsif ($usempirun && (($starter ne "mpirun") && ($starter ne "orterun"))) {
|
||||
# remove this one from the list
|
||||
splice @starters, $idx, 1;
|
||||
splice @starteroptions, $idx, 1;
|
||||
# adjust the index
|
||||
$idx = $idx - 1;
|
||||
}
|
||||
$idx = $idx + 1;
|
||||
}
|
||||
|
||||
# if both mpirun and orterun are present, then
|
||||
# we don't need to run both as they are just
|
||||
# symlinks to each other
|
||||
$exists = 0;
|
||||
foreach my $path (@path) {
|
||||
if ( -x "$path/mpirun") {
|
||||
$idx=0;
|
||||
foreach $starter (@starters) {
|
||||
if ($starter eq "orterun") {
|
||||
splice @starters, $idx, 1;
|
||||
splice @starteroptions, $idx, 1;
|
||||
last;
|
||||
}
|
||||
$idx = $idx + 1;
|
||||
}
|
||||
if ($exists) {
|
||||
last;
|
||||
}
|
||||
print "\n--------------------------------------------------\n";
|
||||
} else {
|
||||
print "Test " . $test . " was not found - test skipped\n";
|
||||
print "\n--------------------------------------------------\n";
|
||||
}
|
||||
}
|
||||
|
||||
# bozo check
|
||||
if (scalar @starters == 0) {
|
||||
print "No available starters\n";
|
||||
exit;
|
||||
}
|
||||
|
||||
# if we are going to use the dvm, then we
|
||||
# need to start it
|
||||
if (-e "dvm_uri") {
|
||||
system("rm -f dvm_uri");
|
||||
}
|
||||
foreach $starter (@starters) {
|
||||
if ($starter eq "orte-submit") {
|
||||
$cmd = "orte-dvm --report-uri dvm_uri 2>&1 &";
|
||||
print $cmd . "\n";
|
||||
if (!$SHOWME) {
|
||||
system($cmd);
|
||||
# wait for the rendezvous file to appear
|
||||
while (! -e "dvm_uri") {
|
||||
sleep(1);
|
||||
}
|
||||
$havedvm = 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
# determine the number of nodes - doesn't
|
||||
# matter which starter we use
|
||||
$cmd = $starters[0] . " " . $starteroptions[0] . " hostname";
|
||||
$output = `$cmd`;
|
||||
@lines = split(/\n/, $output);
|
||||
$num_nodes = $#lines + 1;
|
||||
|
||||
|
||||
print "\n--------------------------------------------------\n";
|
||||
|
||||
my $index = 0;
|
||||
foreach $starter (@starters) {
|
||||
my $testnum = 0;
|
||||
foreach $test (@tests) {
|
||||
$option = $options[$testnum];
|
||||
if (-e $test) {
|
||||
if (!$SHOWME) {
|
||||
# pre-position the executable
|
||||
$cmd = $starter . $starteroptions[$index] . " $test 2>&1";
|
||||
system($cmd);
|
||||
}
|
||||
$n = 1;
|
||||
while ($n <= $num_nodes) {
|
||||
$cmd = "time " . $starter . " " . $starteroptions[$index] . " -np $n $option $test 2>&1";
|
||||
print $cmd . "\n";
|
||||
if (!$SHOWME) {
|
||||
for (1..$reps) {
|
||||
$toggle = 1;
|
||||
$output = `$cmd`;
|
||||
print $output . "\n";
|
||||
@lines = split(/\n/, $output);
|
||||
foreach $line (@lines) {
|
||||
if (0 <= index($line, "user") ||
|
||||
0 <= index($line, "sys") ||
|
||||
0 <= index($line, "real") ||
|
||||
0 <= index($line, "elapsed")) {
|
||||
$idx = 0;
|
||||
@results = split(/\s+/,$line, 4);
|
||||
foreach $res (@results) {
|
||||
if ($idx < 3) {
|
||||
print $res;
|
||||
if (0 == $toggle) {
|
||||
print " ";
|
||||
$toggle = 1;
|
||||
} else {
|
||||
print " ";
|
||||
$toggle = 0;
|
||||
}
|
||||
}
|
||||
$idx = $idx + 1;
|
||||
}
|
||||
print "\n";
|
||||
}
|
||||
}
|
||||
}
|
||||
print "\n";
|
||||
}
|
||||
$n = 2 * $n;
|
||||
}
|
||||
if ($n < $num_nodes) {
|
||||
$cmd = "time " . $starter . " " . $starteroptions[$index] . " $option $test 2>&1";
|
||||
print $cmd . "\n";
|
||||
if (!$SHOWME) {
|
||||
for (1..$reps) {
|
||||
$output = `$cmd`;
|
||||
$output =~ s/(.+)\n.*/$1/;
|
||||
@results = split(/\s+/,$output);
|
||||
print $results[0] . " " . $results[1] . " " . $results[2] . "\n";
|
||||
}
|
||||
}
|
||||
}
|
||||
print "\n--------------------------------------------------\n";
|
||||
} else {
|
||||
print "Test " . $test . " was not found - test skipped\n";
|
||||
print "\n--------------------------------------------------\n";
|
||||
}
|
||||
$testnum = $testnum + 1;
|
||||
}
|
||||
$index = $index + 1;
|
||||
}
|
||||
|
||||
if ($havedvm) {
|
||||
if (!$SHOWME) {
|
||||
$cmd = "orte-submit --hnp file:dvm_uri --terminate";
|
||||
system($cmd);
|
||||
}
|
||||
if (-e "dvm_uri") {
|
||||
system("rm -f dvm_uri");
|
||||
}
|
||||
}
|
||||
|
128
contrib/symbol-hiding.pl
Исполняемый файл
128
contrib/symbol-hiding.pl
Исполняемый файл
@ -0,0 +1,128 @@
|
||||
#!/usr/bin/env perl
|
||||
#
|
||||
# Copyright (c) 2010-2014 Cisco Systems, Inc. All rights reserved.
|
||||
# Copyright (c) 2015 Intel, Inc. All rights reserved.
|
||||
# $COPYRIGHT$
|
||||
|
||||
use strict;
|
||||
use Getopt::Long;
|
||||
|
||||
# globals
|
||||
my $myfile;
|
||||
my $mylib;
|
||||
my $myprefix;
|
||||
my $mysuffix;
|
||||
|
||||
# Set to true if the script should merely check for symbols in
|
||||
# the library that are not in the provided output file - useful
|
||||
# for determining if something has changed prior to doing an update
|
||||
my $CHECK_ONLY = 0;
|
||||
# Set to true to suppress most informational messages. Only missing
|
||||
# symbols will be printed.
|
||||
my $QUIET = 0;
|
||||
# Set to true if we just want to see the help message
|
||||
my $HELP = 0;
|
||||
# Set to true if we want to reverse the hiding direction
|
||||
my $REVERSE = 0;
|
||||
|
||||
|
||||
GetOptions(
|
||||
"help" => \$HELP,
|
||||
"quiet" => \$QUIET,
|
||||
"check-only" => \$CHECK_ONLY,
|
||||
"prefix=s" => \$myprefix,
|
||||
"suffix=s" => \$mysuffix,
|
||||
"lib=s" => \$mylib,
|
||||
"file=s" => \$myfile,
|
||||
"reverse" => \$REVERSE,
|
||||
) or die "unable to parse options, stopped";
|
||||
|
||||
if ($HELP) {
|
||||
print <<EOT;
|
||||
$0 [options]
|
||||
|
||||
--help | -h This help message
|
||||
--quiet | -q Only output critical messages to stdout
|
||||
--check-only Output the symbols we would have prefixed, but don't do anything
|
||||
--prefix=NAME Add NAME to the front of all found symbols
|
||||
--suffix=NAME Add NAME to the end of all found symbols
|
||||
--lib=NAME Library containing symbols that are to be "hidden"
|
||||
--file=NAME Output file for results, or existing file to be updated
|
||||
--reverse Reverse the direction of hiding (i.e., #define prefix_foo to be foo)
|
||||
EOT
|
||||
exit(0);
|
||||
}
|
||||
|
||||
#-------------------------------------------------------------------------------
|
||||
# predeclare sub for print-like syntax
|
||||
sub quiet_print {
|
||||
unless ($QUIET) {
|
||||
print @_;
|
||||
}
|
||||
}
|
||||
|
||||
#-------------------------------------------------------------------------------
|
||||
|
||||
# get the symbol output for this lib
|
||||
my $output = qx(nm $mylib);
|
||||
|
||||
# cycle across each line and tokenize it
|
||||
my @symbols;
|
||||
my $len = 0;
|
||||
foreach my $line (split /[\r\n]+/, $output) {
|
||||
quiet_print "$line\n";
|
||||
my @values = split(' ',$line);
|
||||
my $val = shift(@values);
|
||||
# if the first character isn't a number, then
|
||||
# we can ignore the line
|
||||
my $str = substr($val,0,1);
|
||||
if ("0" ne $str) {
|
||||
quiet_print "skipping\n";
|
||||
next;
|
||||
}
|
||||
# this is a line of interest - see if the
|
||||
# next token indicates a public symbol by
|
||||
# being a 'T'
|
||||
$val = shift(@values);
|
||||
if ("T" ne $val) {
|
||||
quiet_print "NOT T\n";
|
||||
next;
|
||||
}
|
||||
$val = shift(@values);
|
||||
quiet_print "GOT: " . $val . "\n";
|
||||
push @symbols, $val;
|
||||
if ($len < length($val)) {
|
||||
$len = length($val);
|
||||
}
|
||||
}
|
||||
|
||||
$len = $len + 5;
|
||||
if ($myfile ne "") {
|
||||
open FILE, ">$myfile" || die "file could not be opened";
|
||||
}
|
||||
foreach my $sym (@symbols) {
|
||||
my $out;
|
||||
if ($REVERSE) {
|
||||
$out = "#define " . $myprefix . $sym . $mysuffix;
|
||||
} else {
|
||||
$out = "#define " . $sym;
|
||||
}
|
||||
my $diff = $len - length($sym);
|
||||
for (my $i=0; $i < $diff; $i++) {
|
||||
$out = $out . " ";
|
||||
}
|
||||
if ($REVERSE) {
|
||||
$out = $out . $sym . "\n";
|
||||
} else {
|
||||
$out = $out . $myprefix . $sym . $mysuffix . "\n";
|
||||
}
|
||||
if ($myfile ne "") {
|
||||
print FILE $out;
|
||||
} else {
|
||||
print $out;
|
||||
}
|
||||
}
|
||||
if ($myfile ne "") {
|
||||
close FILE;
|
||||
}
|
||||
|
@ -222,7 +222,7 @@ static int mca_bml_r2_endpoint_add_btl (struct ompi_proc_t *proc, mca_bml_base_e
|
||||
size = mca_bml_base_btl_array_get_size (&bml_endpoint->btl_send);
|
||||
bml_btl = mca_bml_base_btl_array_get_index (&bml_endpoint->btl_send, size - 1);
|
||||
|
||||
if (!bml_btl || bml_btl->btl->btl_exclusivity < btl->btl_exclusivity) {
|
||||
if (!bml_btl || bml_btl->btl->btl_exclusivity <= btl->btl_exclusivity) {
|
||||
/* this btl has higher exclusivity than an existing btl or none exists */
|
||||
|
||||
opal_output_verbose(1, opal_btl_base_framework.framework_output,
|
||||
|
@ -612,6 +612,7 @@ ompi_proc_pack(ompi_proc_t **proclist, int proclistsize,
|
||||
opal_buffer_t* buf)
|
||||
{
|
||||
int rc;
|
||||
char *nspace;
|
||||
|
||||
OPAL_THREAD_LOCK(&ompi_proc_lock);
|
||||
|
||||
@ -628,18 +629,30 @@ ompi_proc_pack(ompi_proc_t **proclist, int proclistsize,
|
||||
* can be sent.
|
||||
*/
|
||||
for (int i = 0 ; i < proclistsize ; ++i) {
|
||||
/* send proc name */
|
||||
rc = opal_dss.pack(buf, &(proclist[i]->super.proc_name), 1, OMPI_NAME);
|
||||
if(rc != OPAL_SUCCESS) {
|
||||
OMPI_ERROR_LOG(rc);
|
||||
OPAL_THREAD_UNLOCK(&ompi_proc_lock);
|
||||
return rc;
|
||||
}
|
||||
/* retrieve and send the corresponding nspace for this job
|
||||
* as the remote side may not know the translation */
|
||||
nspace = (char*)opal_pmix.get_nspace(proclist[i]->super.proc_name.jobid);
|
||||
rc = opal_dss.pack(buf, &nspace, 1, OPAL_STRING);
|
||||
if(rc != OPAL_SUCCESS) {
|
||||
OMPI_ERROR_LOG(rc);
|
||||
OPAL_THREAD_UNLOCK(&ompi_proc_lock);
|
||||
return rc;
|
||||
}
|
||||
/* pack architecture flag */
|
||||
rc = opal_dss.pack(buf, &(proclist[i]->super.proc_arch), 1, OPAL_UINT32);
|
||||
if(rc != OPAL_SUCCESS) {
|
||||
OMPI_ERROR_LOG(rc);
|
||||
OPAL_THREAD_UNLOCK(&ompi_proc_lock);
|
||||
return rc;
|
||||
}
|
||||
/* pass the name of the host this proc is on */
|
||||
rc = opal_dss.pack(buf, &(proclist[i]->super.proc_hostname), 1, OPAL_STRING);
|
||||
if(rc != OPAL_SUCCESS) {
|
||||
OMPI_ERROR_LOG(rc);
|
||||
@ -719,6 +732,7 @@ ompi_proc_unpack(opal_buffer_t* buf,
|
||||
char *new_hostname;
|
||||
bool isnew = false;
|
||||
int rc;
|
||||
char *nspace;
|
||||
|
||||
rc = opal_dss.unpack(buf, &new_name, &count, OMPI_NAME);
|
||||
if (rc != OPAL_SUCCESS) {
|
||||
@ -727,6 +741,15 @@ ompi_proc_unpack(opal_buffer_t* buf,
|
||||
free(newprocs);
|
||||
return rc;
|
||||
}
|
||||
rc = opal_dss.unpack(buf, &nspace, &count, OPAL_STRING);
|
||||
if (rc != OPAL_SUCCESS) {
|
||||
OMPI_ERROR_LOG(rc);
|
||||
free(plist);
|
||||
free(newprocs);
|
||||
return rc;
|
||||
}
|
||||
opal_pmix.register_jobid(new_name.jobid, nspace);
|
||||
free(nspace);
|
||||
rc = opal_dss.unpack(buf, &new_arch, &count, OPAL_UINT32);
|
||||
if (rc != OPAL_SUCCESS) {
|
||||
OMPI_ERROR_LOG(rc);
|
||||
|
@ -15,6 +15,7 @@
|
||||
* reserved.
|
||||
* Copyright (c) 2015 Research Organization for Information Science
|
||||
* and Technology (RIST). All rights reserved.
|
||||
* Copyright (c) 2015 Cisco Systems, Inc. All rights reserved.
|
||||
* $COPYRIGHT$
|
||||
*
|
||||
* Additional copyrights may follow
|
||||
@ -206,7 +207,7 @@ bool mca_btl_tcp_frag_recv(mca_btl_tcp_frag_t* frag, int sd)
|
||||
cnt = readv(sd, frag->iov_ptr, num_vecs);
|
||||
if( 0 < cnt ) goto advance_iov_position;
|
||||
if( cnt == 0 ) {
|
||||
btl_endpoint->endpoint_state = MCA_BTL_TCP_FAILED;
|
||||
btl_endpoint->endpoint_state = MCA_BTL_TCP_FAILED;
|
||||
mca_btl_tcp_endpoint_close(btl_endpoint);
|
||||
return false;
|
||||
}
|
||||
@ -220,16 +221,16 @@ bool mca_btl_tcp_frag_recv(mca_btl_tcp_frag_t* frag, int sd)
|
||||
frag->iov_ptr[0].iov_base, (unsigned long) frag->iov_ptr[0].iov_len,
|
||||
strerror(opal_socket_errno), (unsigned long) frag->iov_cnt));
|
||||
btl_endpoint->endpoint_state = MCA_BTL_TCP_FAILED;
|
||||
mca_btl_tcp_endpoint_close(btl_endpoint);
|
||||
return false;
|
||||
default:
|
||||
mca_btl_tcp_endpoint_close(btl_endpoint);
|
||||
return false;
|
||||
default:
|
||||
BTL_ERROR(("mca_btl_tcp_frag_recv: readv failed: %s (%d)",
|
||||
strerror(opal_socket_errno),
|
||||
opal_socket_errno));
|
||||
btl_endpoint->endpoint_state = MCA_BTL_TCP_FAILED;
|
||||
mca_btl_tcp_endpoint_close(btl_endpoint);
|
||||
return false;
|
||||
}
|
||||
mca_btl_tcp_endpoint_close(btl_endpoint);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
advance_iov_position:
|
||||
|
@ -82,10 +82,12 @@ void opal_btl_usnic_print_stats(
|
||||
char tmp[128], str[2048];
|
||||
|
||||
/* The usuals */
|
||||
snprintf(str, sizeof(str), "%s:MCW:%3u, ST(P+D)/F/C/R(T+F)/A:%8lu(%8u+%8u)/%8lu/%8lu/%4lu(%4lu+%4lu)/%8lu, RcvTot/Chk/F/C/L/H/D/BF/A:%8lu/%c%c/%8lu/%8lu/%4lu+%2lu/%4lu/%4lu/%6lu OA/DA %4lu/%4lu CRC:%4lu ",
|
||||
snprintf(str, sizeof(str), "%s:MCW:%3u, %s, ST(P+D)/F/C/R(T+F)/A:%8lu(%8u+%8u)/%8lu/%8lu/%4lu(%4lu+%4lu)/%8lu, RcvTot/Chk/F/C/L/H/D/BF/A:%8lu/%c%c/%8lu/%8lu/%4lu+%2lu/%4lu/%4lu/%6lu OA/DA %4lu/%4lu CRC:%4lu ",
|
||||
prefix,
|
||||
opal_proc_local_get()->proc_name.vpid,
|
||||
|
||||
module->fabric_info->fabric_attr->name,
|
||||
|
||||
module->stats.num_total_sends,
|
||||
module->mod_channels[USNIC_PRIORITY_CHANNEL].num_channel_sends,
|
||||
module->mod_channels[USNIC_DATA_CHANNEL].num_channel_sends,
|
||||
@ -194,11 +196,6 @@ static void usnic_stats_callback(int fd, short flags, void *arg)
|
||||
|
||||
opal_btl_usnic_print_stats(module, tmp,
|
||||
/*reset=*/mca_btl_usnic_component.stats_relative);
|
||||
|
||||
/* In OMPI v1.6, we have to re-add this event (because there's an
|
||||
old libevent in OMPI v1.6) */
|
||||
opal_event_add(&(module->stats.timer_event),
|
||||
&(module->stats.timeout));
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -21,367 +21,520 @@
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
/* buffer.c */
|
||||
#define _evbuffer_chain_pin opal_libevent2022_evbuffer_chain_pin
|
||||
#define _evbuffer_chain_unpin opal_libevent2022_evbuffer_chain_unpin
|
||||
#define _evbuffer_decref_and_unlock opal_libevent2022_evbuffer_decref_and_unlock
|
||||
#define _evbuffer_expand_fast opal_libevent2022_evbuffer_expand_fast
|
||||
#define _evbuffer_incref opal_libevent2022_evbuffer_incref
|
||||
#define _evbuffer_incref_and_lock opal_libevent2022_evbuffer_incref_and_lock
|
||||
#define _evbuffer_read_setup_vecs opal_libevent2022_evbuffer_read_setup_vecs
|
||||
#define _evbuffer_testing_use_linear_file_access opal_libevent2022_evbuffer_testing_use_linear_file_access
|
||||
#define _evbuffer_testing_use_mmap opal_libevent2022_evbuffer_testing_use_mmap
|
||||
#define _evbuffer_testing_use_sendfile opal_libevent2022_evbuffer_testing_use_sendfile
|
||||
#define evbuffer_add opal_libevent2022_evbuffer_add
|
||||
#define evbuffer_add_buffer opal_libevent2022_evbuffer_add_buffer
|
||||
#define evbuffer_add_cb opal_libevent2022_evbuffer_add_cb
|
||||
#define evbuffer_add_file opal_libevent2022_evbuffer_add_file
|
||||
#define evbuffer_add_printf opal_libevent2022_evbuffer_add_printf
|
||||
#define evbuffer_add_reference opal_libevent2022_evbuffer_add_reference
|
||||
#define evbuffer_add_vprintf opal_libevent2022_evbuffer_add_vprintf
|
||||
#define evbuffer_cb_clear_flags opal_libevent2022_evbuffer_cb_clear_flags
|
||||
#define evbuffer_cb_set_flags opal_libevent2022_evbuffer_cb_set_flags
|
||||
#define evbuffer_clear_flags opal_libevent2022_evbuffer_clear_flags
|
||||
#define evbuffer_commit_space opal_libevent2022_evbuffer_commit_space
|
||||
#define evbuffer_copyout opal_libevent2022_evbuffer_copyout
|
||||
#define evbuffer_defer_callbacks opal_libevent2022_evbuffer_defer_callbacks
|
||||
#define evbuffer_drain opal_libevent2022_evbuffer_drain
|
||||
#define evbuffer_enable_locking opal_libevent2022_evbuffer_enable_locking
|
||||
#define evbuffer_expand opal_libevent2022_evbuffer_expand
|
||||
#define evbuffer_find opal_libevent2022_evbuffer_find
|
||||
#define evbuffer_free opal_libevent2022_evbuffer_free
|
||||
#define evbuffer_freeze opal_libevent2022_evbuffer_freeze
|
||||
#define evbuffer_get_contiguous_space opal_libevent2022_evbuffer_get_contiguous_space
|
||||
#define evbuffer_get_length opal_libevent2022_evbuffer_get_length
|
||||
#define evbuffer_invoke_callbacks opal_libevent2022_evbuffer_invoke_callbacks
|
||||
#define evbuffer_lock opal_libevent2022_evbuffer_lock
|
||||
#define evbuffer_new opal_libevent2022_evbuffer_new
|
||||
#define evbuffer_peek opal_libevent2022_evbuffer_peek
|
||||
#define evbuffer_prepend opal_libevent2022_evbuffer_prepend
|
||||
#define evbuffer_prepend_buffer opal_libevent2022_evbuffer_prepend_buffer
|
||||
#define evbuffer_ptr_set opal_libevent2022_evbuffer_ptr_set
|
||||
#define evbuffer_pullup opal_libevent2022_evbuffer_pullup
|
||||
#define evbuffer_read opal_libevent2022_evbuffer_read
|
||||
#define evbuffer_readline opal_libevent2022_evbuffer_readline
|
||||
#define evbuffer_readln opal_libevent2022_evbuffer_readln
|
||||
#define evbuffer_remove opal_libevent2022_evbuffer_remove
|
||||
#define evbuffer_remove_buffer opal_libevent2022_evbuffer_remove_buffer
|
||||
#define evbuffer_remove_cb opal_libevent2022_evbuffer_remove_cb
|
||||
#define evbuffer_remove_cb_entry opal_libevent2022_evbuffer_remove_cb_entry
|
||||
#define evbuffer_reserve_space opal_libevent2022_evbuffer_reserve_space
|
||||
#define evbuffer_search opal_libevent2022_evbuffer_search
|
||||
#define evbuffer_search_eol opal_libevent2022_evbuffer_search_eol
|
||||
#define evbuffer_search_range opal_libevent2022_evbuffer_search_range
|
||||
#define evbuffer_set_flags opal_libevent2022_evbuffer_set_flags
|
||||
#define evbuffer_set_parent opal_libevent2022_evbuffer_set_parent
|
||||
#define evbuffer_setcb opal_libevent2022_evbuffer_setcb
|
||||
#define evbuffer_unfreeze opal_libevent2022_evbuffer_unfreeze
|
||||
#define evbuffer_unlock opal_libevent2022_evbuffer_unlock
|
||||
#define evbuffer_write opal_libevent2022_evbuffer_write
|
||||
#define evbuffer_write_atmost opal_libevent2022_evbuffer_write_atmost
|
||||
#define _bufferevent_add_event opal_libevent2022__bufferevent_add_event
|
||||
#define _bufferevent_decref_and_unlock opal_libevent2022__bufferevent_decref_and_unlock
|
||||
#define _bufferevent_del_generic_timeout_cbs opal_libevent2022__bufferevent_del_generic_timeout_cbs
|
||||
#define _bufferevent_generic_adj_timeouts opal_libevent2022__bufferevent_generic_adj_timeouts
|
||||
#define _bufferevent_incref_and_lock opal_libevent2022__bufferevent_incref_and_lock
|
||||
#define _bufferevent_init_generic_timeout_cbs opal_libevent2022__bufferevent_init_generic_timeout_cbs
|
||||
#define _bufferevent_run_eventcb opal_libevent2022__bufferevent_run_eventcb
|
||||
#define _bufferevent_run_readcb opal_libevent2022__bufferevent_run_readcb
|
||||
#define _bufferevent_run_writecb opal_libevent2022__bufferevent_run_writecb
|
||||
#define bufferevent_decref opal_libevent2022_bufferevent_decref
|
||||
#define bufferevent_disable opal_libevent2022_bufferevent_disable
|
||||
#define bufferevent_disable_hard opal_libevent2022_bufferevent_disable_hard
|
||||
#define bufferevent_enable opal_libevent2022_bufferevent_enable
|
||||
#define bufferevent_enable_locking opal_libevent2022_bufferevent_enable_locking
|
||||
#define bufferevent_flush opal_libevent2022_bufferevent_flush
|
||||
#define bufferevent_free opal_libevent2022_bufferevent_free
|
||||
#define bufferevent_get_base opal_libevent2022_bufferevent_get_base
|
||||
#define bufferevent_get_enabled opal_libevent2022_bufferevent_get_enabled
|
||||
#define bufferevent_get_input opal_libevent2022_bufferevent_get_input
|
||||
#define bufferevent_get_output opal_libevent2022_bufferevent_get_output
|
||||
#define bufferevent_get_underlying opal_libevent2022_bufferevent_get_underlying
|
||||
#define bufferevent_getfd opal_libevent2022_bufferevent_getfd
|
||||
#define bufferevent_incref opal_libevent2022_bufferevent_incref
|
||||
#define bufferevent_init_common opal_libevent2022_bufferevent_init_common
|
||||
#define bufferevent_lock opal_libevent2022_bufferevent_lock
|
||||
#define bufferevent_read opal_libevent2022_bufferevent_read
|
||||
#define bufferevent_read_buffer opal_libevent2022_bufferevent_read_buffer
|
||||
#define bufferevent_set_timeouts opal_libevent2022_bufferevent_set_timeouts
|
||||
#define bufferevent_setcb opal_libevent2022_bufferevent_setcb
|
||||
#define bufferevent_setfd opal_libevent2022_bufferevent_setfd
|
||||
#define bufferevent_settimeout opal_libevent2022_bufferevent_settimeout
|
||||
#define bufferevent_setwatermark opal_libevent2022_bufferevent_setwatermark
|
||||
#define bufferevent_suspend_read opal_libevent2022_bufferevent_suspend_read
|
||||
#define bufferevent_suspend_write opal_libevent2022_bufferevent_suspend_write
|
||||
#define bufferevent_unlock opal_libevent2022_bufferevent_unlock
|
||||
#define bufferevent_unsuspend_read opal_libevent2022_bufferevent_unsuspend_read
|
||||
#define bufferevent_unsuspend_write opal_libevent2022_bufferevent_unsuspend_write
|
||||
#define bufferevent_write opal_libevent2022_bufferevent_write
|
||||
#define bufferevent_write_buffer opal_libevent2022_bufferevent_write_buffer
|
||||
#define bufferevent_filter_new opal_libevent2022_bufferevent_filter_new
|
||||
#define bufferevent_get_openssl_error opal_libevent2022_bufferevent_get_openssl_error
|
||||
#define bufferevent_openssl_filter_new opal_libevent2022_bufferevent_openssl_filter_new
|
||||
#define bufferevent_openssl_get_ssl opal_libevent2022_bufferevent_openssl_get_ssl
|
||||
#define bufferevent_openssl_socket_new opal_libevent2022_bufferevent_openssl_socket_new
|
||||
#define bufferevent_ssl_renegotiate opal_libevent2022_bufferevent_ssl_renegotiate
|
||||
#define bufferevent_pair_get_partner opal_libevent2022_bufferevent_pair_get_partner
|
||||
#define bufferevent_pair_new opal_libevent2022_bufferevent_pair_new
|
||||
#define _bufferevent_decrement_read_buckets opal_libevent2022__bufferevent_decrement_read_buckets
|
||||
#define _bufferevent_decrement_write_buckets opal_libevent2022__bufferevent_decrement_write_buckets
|
||||
#define _bufferevent_get_read_max opal_libevent2022__bufferevent_get_read_max
|
||||
#define _bufferevent_get_write_max opal_libevent2022__bufferevent_get_write_max
|
||||
#define bufferevent_add_to_rate_limit_group opal_libevent2022_bufferevent_add_to_rate_limit_group
|
||||
#define bufferevent_decrement_read_limit opal_libevent2022_bufferevent_decrement_read_limit
|
||||
#define bufferevent_decrement_write_limit opal_libevent2022_bufferevent_decrement_write_limit
|
||||
#define bufferevent_get_max_to_read opal_libevent2022_bufferevent_get_max_to_read
|
||||
#define bufferevent_get_max_to_write opal_libevent2022_bufferevent_get_max_to_write
|
||||
#define bufferevent_get_read_limit opal_libevent2022_bufferevent_get_read_limit
|
||||
#define bufferevent_get_write_limit opal_libevent2022_bufferevent_get_write_limit
|
||||
#define bufferevent_rate_limit_group_decrement_read opal_libevent2022_bufferevent_rate_limit_group_decrement_read
|
||||
#define bufferevent_rate_limit_group_decrement_write opal_libevent2022_bufferevent_rate_limit_group_decrement_write
|
||||
#define bufferevent_rate_limit_group_free opal_libevent2022_bufferevent_rate_limit_group_free
|
||||
#define bufferevent_rate_limit_group_get_read_limit opal_libevent2022_bufferevent_rate_limit_group_get_read_limit
|
||||
#define bufferevent_rate_limit_group_get_totals opal_libevent2022_bufferevent_rate_limit_group_get_totals
|
||||
#define bufferevent_rate_limit_group_get_write_limit opal_libevent2022_bufferevent_rate_limit_group_get_write_limit
|
||||
#define bufferevent_rate_limit_group_new opal_libevent2022_bufferevent_rate_limit_group_new
|
||||
#define bufferevent_rate_limit_group_reset_totals opal_libevent2022_bufferevent_rate_limit_group_reset_totals
|
||||
#define bufferevent_rate_limit_group_set_cfg opal_libevent2022_bufferevent_rate_limit_group_set_cfg
|
||||
#define bufferevent_rate_limit_group_set_min_share opal_libevent2022_bufferevent_rate_limit_group_set_min_share
|
||||
#define bufferevent_remove_from_rate_limit_group opal_libevent2022_bufferevent_remove_from_rate_limit_group
|
||||
#define bufferevent_remove_from_rate_limit_group_internal opal_libevent2022_bufferevent_remove_from_rate_limit_group_internal
|
||||
#define bufferevent_set_rate_limit opal_libevent2022_bufferevent_set_rate_limit
|
||||
#define bufferevent_base_set opal_libevent2022_bufferevent_base_set
|
||||
#define bufferevent_new opal_libevent2022_bufferevent_new
|
||||
#define bufferevent_priority_set opal_libevent2022_bufferevent_priority_set
|
||||
#define bufferevent_socket_connect opal_libevent2022_bufferevent_socket_connect
|
||||
#define bufferevent_socket_connect_hostname opal_libevent2022_bufferevent_socket_connect_hostname
|
||||
#define bufferevent_socket_get_dns_error opal_libevent2022_bufferevent_socket_get_dns_error
|
||||
#define bufferevent_socket_new opal_libevent2022_bufferevent_socket_new
|
||||
|
||||
|
||||
/* tokens */
|
||||
#define ev_token_bucket_cfg_free opal_libevent2022_ev_token_bucket_cfg_free
|
||||
#define ev_token_bucket_cfg_new opal_libevent2022_ev_token_bucket_cfg_new
|
||||
#define ev_token_bucket_get_tick opal_libevent2022_ev_token_bucket_get_tick
|
||||
#define ev_token_bucket_init opal_libevent2022_ev_token_bucket_init
|
||||
#define ev_token_bucket_update opal_libevent2022_ev_token_bucket_update
|
||||
|
||||
|
||||
/* debug */
|
||||
#define _event_debug_map_HT_REP_IS_BAD opal_libevent2022__event_debug_map_HT_REP_IS_BAD
|
||||
#define event_debug_map_HT_CLEAR opal_libevent2022_event_debug_map_HT_CLEAR
|
||||
#define event_debug_map_HT_GROW opal_libevent2022_event_debug_map_HT_GROW
|
||||
#define event_debug_unassign opal_libevent2022_event_debug_unassign
|
||||
#define _event_debugx opal_libevent2022__event_debugx
|
||||
#define _event_debug_mode_on opal_libevent2022__event_debug_mode_on
|
||||
|
||||
/* event.c */
|
||||
#define event_active opal_libevent2022_event_active
|
||||
#define event_active_nolock opal_libevent2022_event_active_nolock
|
||||
#define event_add opal_libevent2022_event_add
|
||||
#define event_assign opal_libevent2022_event_assign
|
||||
#define event_base_add_virtual opal_libevent2022_event_base_add_virtual
|
||||
#define event_base_assert_ok opal_libevent2022_event_base_assert_ok
|
||||
#define event_base_del_virtual opal_libevent2022_event_base_del_virtual
|
||||
#define event_base_dispatch opal_libevent2022_event_base_dispatch
|
||||
#define event_base_dump_events opal_libevent2022_event_base_dump_events
|
||||
#define event_base_free opal_libevent2022_event_base_free
|
||||
#define event_base_get_deferred_cb_queue opal_libevent2022_event_base_get_deferred_cb_queue
|
||||
#define event_base_get_features opal_libevent2022_event_base_get_features
|
||||
#define event_base_get_method opal_libevent2022_event_base_get_method
|
||||
#define event_base_gettimeofday_cached opal_libevent2022_event_base_gettimeofday_cached
|
||||
#define event_base_got_break opal_libevent2022_event_base_got_break
|
||||
#define event_base_got_exit opal_libevent2022_event_base_got_exit
|
||||
#define event_base_init_common_timeout opal_libevent2022_event_base_init_common_timeout
|
||||
#define event_base_loop opal_libevent2022_event_base_loop
|
||||
#define event_base_loopexit opal_libevent2022_event_base_loopexit
|
||||
#define event_base_new opal_libevent2022_event_base_new
|
||||
#define event_base_new_with_config opal_libevent2022_event_base_new_with_config
|
||||
#define event_base_once opal_libevent2022_event_base_once
|
||||
#define event_base_priority_init opal_libevent2022_event_base_priority_init
|
||||
#define event_base_set opal_libevent2022_event_base_set
|
||||
#define event_base_start_iocp opal_libevent2022_event_base_start_iocp
|
||||
#define event_base_stop_iocp opal_libevent2022_event_base_stop_iocp
|
||||
#define event_config_avoid_method opal_libevent2022_event_config_avoid_method
|
||||
#define event_config_free opal_libevent2022_event_config_free
|
||||
#define event_config_new opal_libevent2022_event_config_new
|
||||
#define event_config_require_features opal_libevent2022_event_config_require_features
|
||||
#define event_config_set_flag opal_libevent2022_event_config_set_flag
|
||||
#define event_config_set_num_cpus_hint opal_libevent2022_event_config_set_num_cpus_hint
|
||||
#define event_deferred_cb_cancel opal_libevent2022_event_deferred_cb_cancel
|
||||
#define event_deferred_cb_init opal_libevent2022_event_deferred_cb_init
|
||||
#define event_deferred_cb_queue_init opal_libevent2022_event_deferred_cb_queue_init
|
||||
#define event_deferred_cb_schedule opal_libevent2022_event_deferred_cb_schedule
|
||||
#define event_del opal_libevent2022_event_del
|
||||
#define event_dispatch opal_libevent2022_event_dispatch
|
||||
#define event_enable_debug_mode opal_libevent2022_event_enable_debug_mode
|
||||
#define event_enable_debug_output opal_libevent2022_event_enable_debug_output
|
||||
#define event_free opal_libevent2022_event_free
|
||||
#define event_get_assignment opal_libevent2022_event_get_assignment
|
||||
#define event_get_base opal_libevent2022_event_get_base
|
||||
#define event_get_callback opal_libevent2022_event_get_callback
|
||||
#define event_get_callback_arg opal_libevent2022_event_get_callback_arg
|
||||
#define event_get_events opal_libevent2022_event_get_events
|
||||
#define event_get_fd opal_libevent2022_event_get_fd
|
||||
#define event_get_method opal_libevent2022_event_get_method
|
||||
#define event_get_struct_event_size opal_libevent2022_event_get_struct_event_size
|
||||
#define event_get_supported_methods opal_libevent2022_event_get_supported_methods
|
||||
#define event_get_version opal_libevent2022_event_get_version
|
||||
#define event_get_version_number opal_libevent2022_event_get_version_number
|
||||
#define event_init opal_libevent2022_event_init
|
||||
#define _event_initialized opal_libevent2022__event_initialized
|
||||
#define event_initialized opal_libevent2022_event_initialized
|
||||
#define event_loop opal_libevent2022_event_loop
|
||||
#define event_loopbreak opal_libevent2022_event_loopbreak
|
||||
#define event_loopexit opal_libevent2022_event_loopexit
|
||||
#define event_mm_calloc_ opal_libevent2022_event_mm_calloc_
|
||||
#define event_mm_free_ opal_libevent2022_event_mm_free_
|
||||
#define event_mm_malloc_ opal_libevent2022_event_mm_malloc_
|
||||
#define event_mm_realloc_ opal_libevent2022_event_mm_realloc_
|
||||
#define event_mm_strdup_ opal_libevent2022_event_mm_strdup_
|
||||
#define event_new opal_libevent2022_event_new
|
||||
#define event_once opal_libevent2022_event_once
|
||||
#define event_pending opal_libevent2022_event_pending
|
||||
#define event_priority_init opal_libevent2022_event_priority_init
|
||||
#define event_priority_set opal_libevent2022_event_priority_set
|
||||
#define event_reinit opal_libevent2022_event_reinit
|
||||
#define event_set opal_libevent2022_event_set
|
||||
#define event_set_mem_functions opal_libevent2022_event_set_mem_functions
|
||||
#define event_changelist_add opal_libevent2022_event_changelist_add
|
||||
#define event_changelist_del opal_libevent2022_event_changelist_del
|
||||
#define event_changelist_freemem opal_libevent2022_event_changelist_freemem
|
||||
#define event_changelist_init opal_libevent2022_event_changelist_init
|
||||
#define event_changelist_remove_all opal_libevent2022_event_changelist_remove_all
|
||||
#define event_err opal_libevent2022_event_err
|
||||
#define event_errx opal_libevent2022_event_errx
|
||||
#define event_msgx opal_libevent2022_event_msgx
|
||||
#define event_set_fatal_callback opal_libevent2022_event_set_fatal_callback
|
||||
#define event_set_log_callback opal_libevent2022_event_set_log_callback
|
||||
#define event_sock_err opal_libevent2022_event_sock_err
|
||||
#define event_sock_warn opal_libevent2022_event_sock_warn
|
||||
#define event_warn opal_libevent2022_event_warn
|
||||
#define event_warnx opal_libevent2022_event_warnx
|
||||
|
||||
/* evutil.c*/
|
||||
#define EVUTIL_ISALNUM opal_libevent2022_EVUTIL_ISALNUM
|
||||
#define EVUTIL_ISALPHA opal_libevent2022_EVUTIL_ISALPHA
|
||||
#define EVUTIL_ISDIGIT opal_libevent2022_EVUTIL_ISDIGIT
|
||||
#define EVUTIL_ISLOWER opal_libevent2022_EVUTIL_ISLOWER
|
||||
#define EVUTIL_ISPRINT opal_libevent2022_EVUTIL_ISPRINT
|
||||
#define EVUTIL_ISSPACE opal_libevent2022_EVUTIL_ISSPACE
|
||||
#define EVUTIL_ISUPPER opal_libevent2022_EVUTIL_ISUPPER
|
||||
#define EVUTIL_ISXDIGIT opal_libevent2022_EVUTIL_ISXDIGIT
|
||||
#define EVUTIL_TOLOWER opal_libevent2022_EVUTIL_TOLOWER
|
||||
#define EVUTIL_TOUPPER opal_libevent2022_EVUTIL_TOUPPER
|
||||
#define _evutil_weakrand opal_libevent2022__evutil_weakrand
|
||||
#define evutil_addrinfo_append opal_libevent2022_evutil_addrinfo_append
|
||||
#define evutil_adjust_hints_for_addrconfig opal_libevent2022_evutil_adjust_hints_for_addrconfig
|
||||
#define evutil_ascii_strcasecmp opal_libevent2022_evutil_ascii_strcasecmp
|
||||
#define evutil_ascii_strncasecmp opal_libevent2022_evutil_ascii_strncasecmp
|
||||
#define evutil_closesocket opal_libevent2022_evutil_closesocket
|
||||
#define evutil_ersatz_socketpair opal_libevent2022_evutil_ersatz_socketpair
|
||||
#define evutil_format_sockaddr_port opal_libevent2022_evutil_format_sockaddr_port
|
||||
#define evutil_freeaddrinfo opal_libevent2022_evutil_freeaddrinfo
|
||||
#define evutil_gai_strerror opal_libevent2022_evutil_gai_strerror
|
||||
#define evutil_getaddrinfo opal_libevent2022_evutil_getaddrinfo
|
||||
#define evutil_getaddrinfo_async opal_libevent2022_evutil_getaddrinfo_async
|
||||
#define evutil_getaddrinfo_common opal_libevent2022_evutil_getaddrinfo_common
|
||||
#define evutil_getenv opal_libevent2022_evutil_getenv
|
||||
#define evutil_hex_char_to_int opal_libevent2022_evutil_hex_char_to_int
|
||||
#define evutil_inet_ntop opal_libevent2022_evutil_inet_ntop
|
||||
#define evutil_inet_pton opal_libevent2022_evutil_inet_pton
|
||||
#define evutil_make_listen_socket_reuseable opal_libevent2022_evutil_make_listen_socket_reuseable
|
||||
#define evutil_make_socket_closeonexec opal_libevent2022_evutil_make_socket_closeonexec
|
||||
#define evutil_make_socket_nonblocking opal_libevent2022_evutil_make_socket_nonblocking
|
||||
#define evutil_new_addrinfo opal_libevent2022_evutil_new_addrinfo
|
||||
#define evutil_open_closeonexec opal_libevent2022_evutil_open_closeonexec
|
||||
#define evutil_parse_sockaddr_port opal_libevent2022_evutil_parse_sockaddr_port
|
||||
#define evutil_read_file opal_libevent2022_evutil_read_file
|
||||
#define evutil_secure_rng_get_bytes opal_libevent2022_evutil_secure_rng_get_bytes
|
||||
#define evutil_secure_rng_global_setup_locks_ opal_libevent2022_evutil_secure_rng_global_setup_locks_
|
||||
#define evutil_secure_rng_init opal_libevent2022_evutil_secure_rng_init
|
||||
#define evutil_set_evdns_getaddrinfo_fn opal_libevent2022_evutil_set_evdns_getaddrinfo_fn
|
||||
#define evutil_snprintf opal_libevent2022_evutil_snprintf
|
||||
#define evutil_sockaddr_cmp opal_libevent2022_evutil_sockaddr_cmp
|
||||
#define evutil_sockaddr_is_loopback opal_libevent2022_evutil_sockaddr_is_loopback
|
||||
#define evutil_socket_connect opal_libevent2022_evutil_socket_connect
|
||||
#define evutil_socket_finished_connecting opal_libevent2022_evutil_socket_finished_connecting
|
||||
#define evutil_socketpair opal_libevent2022_evutil_socketpair
|
||||
#define evutil_strtoll opal_libevent2022_evutil_strtoll
|
||||
#define evutil_tv_to_msec opal_libevent2022_evutil_tv_to_msec
|
||||
#define evutil_vsnprintf opal_libevent2022_evutil_vsnprintf
|
||||
|
||||
|
||||
/* threads */
|
||||
#define evthread_make_base_notifiable opal_libevent2022_evthread_make_base_notifiable
|
||||
#define _evthread_debug_get_real_lock opal_libevent2022__evthread_debug_get_real_lock
|
||||
#define _evthread_is_debug_lock_held opal_libevent2022__evthread_is_debug_lock_held
|
||||
#define evthread_enable_lock_debuging opal_libevent2022_evthread_enable_lock_debuging
|
||||
#define evthread_set_condition_callbacks opal_libevent2022_evthread_set_condition_callbacks
|
||||
#define evthread_set_id_callback opal_libevent2022_evthread_set_id_callback
|
||||
#define evthread_set_lock_callbacks opal_libevent2022_evthread_set_lock_callbacks
|
||||
#define evthread_use_pthreads opal_libevent2022_evthread_use_pthreads
|
||||
|
||||
|
||||
/* tags */
|
||||
#define evtag_consume opal_libevent2022_evtag_consume
|
||||
#define evtag_decode_int opal_libevent2022_evtag_decode_int
|
||||
#define evtag_decode_int64 opal_libevent2022_evtag_decode_int64
|
||||
#define evtag_decode_tag opal_libevent2022_evtag_decode_tag
|
||||
#define evtag_encode_int opal_libevent2022_evtag_encode_int
|
||||
#define evtag_encode_int64 opal_libevent2022_evtag_encode_int64
|
||||
#define evtag_encode_tag opal_libevent2022_evtag_encode_tag
|
||||
#define evtag_init opal_libevent2022_evtag_init
|
||||
#define evtag_marshal opal_libevent2022_evtag_marshal
|
||||
#define evtag_marshal_buffer opal_libevent2022_evtag_marshal_buffer
|
||||
#define evtag_marshal_int opal_libevent2022_evtag_marshal_int
|
||||
#define evtag_marshal_int64 opal_libevent2022_evtag_marshal_int64
|
||||
#define evtag_marshal_string opal_libevent2022_evtag_marshal_string
|
||||
#define evtag_marshal_timeval opal_libevent2022_evtag_marshal_timeval
|
||||
#define evtag_payload_length opal_libevent2022_evtag_payload_length
|
||||
#define evtag_peek opal_libevent2022_evtag_peek
|
||||
#define evtag_peek_length opal_libevent2022_evtag_peek_length
|
||||
#define evtag_unmarshal opal_libevent2022_evtag_unmarshal
|
||||
#define evtag_unmarshal_fixed opal_libevent2022_evtag_unmarshal_fixed
|
||||
#define evtag_unmarshal_header opal_libevent2022_evtag_unmarshal_header
|
||||
#define evtag_unmarshal_int opal_libevent2022_evtag_unmarshal_int
|
||||
#define evtag_unmarshal_int64 opal_libevent2022_evtag_unmarshal_int64
|
||||
#define evtag_unmarshal_string opal_libevent2022_evtag_unmarshal_string
|
||||
#define evtag_unmarshal_timeval opal_libevent2022_evtag_unmarshal_timeval
|
||||
|
||||
/* map */
|
||||
#define evmap_check_integrity opal_libevent2022_evmap_check_integrity
|
||||
#define evmap_io_active opal_libevent2022_evmap_io_active
|
||||
#define evmap_io_add opal_libevent2022_evmap_io_add
|
||||
#define evmap_io_clear opal_libevent2022_evmap_io_clear
|
||||
#define evmap_io_del opal_libevent2022_evmap_io_del
|
||||
#define evmap_io_get_fdinfo opal_libevent2022_evmap_io_get_fdinfo
|
||||
#define evmap_io_initmap opal_libevent2022_evmap_io_initmap
|
||||
#define evmap_signal_active opal_libevent2022_evmap_signal_active
|
||||
#define evmap_signal_add opal_libevent2022_evmap_signal_add
|
||||
#define evmap_signal_clear opal_libevent2022_evmap_signal_clear
|
||||
#define evmap_signal_del opal_libevent2022_evmap_signal_del
|
||||
#define evmap_signal_initmap opal_libevent2022_evmap_signal_initmap
|
||||
|
||||
|
||||
/* connections */
|
||||
#define evconnlistener_disable opal_libevent2022_evconnlistener_disable
|
||||
#define evconnlistener_enable opal_libevent2022_evconnlistener_enable
|
||||
#define evconnlistener_free opal_libevent2022_evconnlistener_free
|
||||
#define evconnlistener_get_base opal_libevent2022_evconnlistener_get_base
|
||||
#define evconnlistener_get_fd opal_libevent2022_evconnlistener_get_fd
|
||||
#define evconnlistener_new opal_libevent2022_evconnlistener_new
|
||||
#define evconnlistener_new_bind opal_libevent2022_evconnlistener_new_bind
|
||||
#define evconnlistener_set_cb opal_libevent2022_evconnlistener_set_cb
|
||||
#define evconnlistener_set_error_cb opal_libevent2022_evconnlistener_set_error_cb
|
||||
|
||||
/* signal */
|
||||
#define _evsig_restore_handler opal_libevent2022__evsig_restore_handler
|
||||
#define _evsig_set_handler opal_libevent2022__evsig_set_handler
|
||||
#define evsig_dealloc opal_libevent2022_evsig_dealloc
|
||||
#define evsig_init opal_libevent2022_evsig_init
|
||||
#define evsig_process opal_libevent2022_evsig_process
|
||||
#define evsig_set_base opal_libevent2022_evsig_set_base
|
||||
#define _bufferevent_add_event opal_libevent2022__bufferevent_add_event
|
||||
#define bufferevent_add_to_rate_limit_group opal_libevent2022_bufferevent_add_to_rate_limit_group
|
||||
#define bufferevent_base_set opal_libevent2022_bufferevent_base_set
|
||||
#define bufferevent_decref opal_libevent2022_bufferevent_decref
|
||||
#define _bufferevent_decref_and_unlock opal_libevent2022__bufferevent_decref_and_unlock
|
||||
#define _bufferevent_decrement_read_buckets opal_libevent2022__bufferevent_decrement_read_buckets
|
||||
#define bufferevent_decrement_read_limit opal_libevent2022_bufferevent_decrement_read_limit
|
||||
#define _bufferevent_decrement_write_buckets opal_libevent2022__bufferevent_decrement_write_buckets
|
||||
#define bufferevent_decrement_write_limit opal_libevent2022_bufferevent_decrement_write_limit
|
||||
#define _bufferevent_del_generic_timeout_cbs opal_libevent2022__bufferevent_del_generic_timeout_cbs
|
||||
#define bufferevent_disable opal_libevent2022_bufferevent_disable
|
||||
#define bufferevent_disable_hard opal_libevent2022_bufferevent_disable_hard
|
||||
#define bufferevent_enable opal_libevent2022_bufferevent_enable
|
||||
#define bufferevent_enable_locking opal_libevent2022_bufferevent_enable_locking
|
||||
#define bufferevent_filter_new opal_libevent2022_bufferevent_filter_new
|
||||
#define bufferevent_flush opal_libevent2022_bufferevent_flush
|
||||
#define bufferevent_free opal_libevent2022_bufferevent_free
|
||||
#define _bufferevent_generic_adj_timeouts opal_libevent2022__bufferevent_generic_adj_timeouts
|
||||
#define bufferevent_get_base opal_libevent2022_bufferevent_get_base
|
||||
#define bufferevent_get_enabled opal_libevent2022_bufferevent_get_enabled
|
||||
#define bufferevent_getfd opal_libevent2022_bufferevent_getfd
|
||||
#define bufferevent_get_input opal_libevent2022_bufferevent_get_input
|
||||
#define bufferevent_get_max_to_read opal_libevent2022_bufferevent_get_max_to_read
|
||||
#define bufferevent_get_max_to_write opal_libevent2022_bufferevent_get_max_to_write
|
||||
#define bufferevent_get_output opal_libevent2022_bufferevent_get_output
|
||||
#define bufferevent_get_read_limit opal_libevent2022_bufferevent_get_read_limit
|
||||
#define _bufferevent_get_read_max opal_libevent2022__bufferevent_get_read_max
|
||||
#define bufferevent_get_underlying opal_libevent2022_bufferevent_get_underlying
|
||||
#define bufferevent_get_write_limit opal_libevent2022_bufferevent_get_write_limit
|
||||
#define _bufferevent_get_write_max opal_libevent2022__bufferevent_get_write_max
|
||||
#define bufferevent_incref opal_libevent2022_bufferevent_incref
|
||||
#define _bufferevent_incref_and_lock opal_libevent2022__bufferevent_incref_and_lock
|
||||
#define bufferevent_init_common opal_libevent2022_bufferevent_init_common
|
||||
#define _bufferevent_init_generic_timeout_cbs opal_libevent2022__bufferevent_init_generic_timeout_cbs
|
||||
#define bufferevent_lock opal_libevent2022_bufferevent_lock
|
||||
#define bufferevent_new opal_libevent2022_bufferevent_new
|
||||
#define bufferevent_pair_get_partner opal_libevent2022_bufferevent_pair_get_partner
|
||||
#define bufferevent_pair_new opal_libevent2022_bufferevent_pair_new
|
||||
#define bufferevent_priority_set opal_libevent2022_bufferevent_priority_set
|
||||
#define bufferevent_rate_limit_group_decrement_read opal_libevent2022_bufferevent_rate_limit_group_decrement_read
|
||||
#define bufferevent_rate_limit_group_decrement_write opal_libevent2022_bufferevent_rate_limit_group_decrement_write
|
||||
#define bufferevent_rate_limit_group_free opal_libevent2022_bufferevent_rate_limit_group_free
|
||||
#define bufferevent_rate_limit_group_get_read_limit opal_libevent2022_bufferevent_rate_limit_group_get_read_limit
|
||||
#define bufferevent_rate_limit_group_get_totals opal_libevent2022_bufferevent_rate_limit_group_get_totals
|
||||
#define bufferevent_rate_limit_group_get_write_limit opal_libevent2022_bufferevent_rate_limit_group_get_write_limit
|
||||
#define bufferevent_rate_limit_group_new opal_libevent2022_bufferevent_rate_limit_group_new
|
||||
#define bufferevent_rate_limit_group_reset_totals opal_libevent2022_bufferevent_rate_limit_group_reset_totals
|
||||
#define bufferevent_rate_limit_group_set_cfg opal_libevent2022_bufferevent_rate_limit_group_set_cfg
|
||||
#define bufferevent_rate_limit_group_set_min_share opal_libevent2022_bufferevent_rate_limit_group_set_min_share
|
||||
#define bufferevent_read opal_libevent2022_bufferevent_read
|
||||
#define bufferevent_read_buffer opal_libevent2022_bufferevent_read_buffer
|
||||
#define bufferevent_remove_from_rate_limit_group opal_libevent2022_bufferevent_remove_from_rate_limit_group
|
||||
#define bufferevent_remove_from_rate_limit_group_internal opal_libevent2022_bufferevent_remove_from_rate_limit_group_internal
|
||||
#define _bufferevent_run_eventcb opal_libevent2022__bufferevent_run_eventcb
|
||||
#define _bufferevent_run_readcb opal_libevent2022__bufferevent_run_readcb
|
||||
#define _bufferevent_run_writecb opal_libevent2022__bufferevent_run_writecb
|
||||
#define bufferevent_setcb opal_libevent2022_bufferevent_setcb
|
||||
#define bufferevent_setfd opal_libevent2022_bufferevent_setfd
|
||||
#define bufferevent_set_rate_limit opal_libevent2022_bufferevent_set_rate_limit
|
||||
#define bufferevent_settimeout opal_libevent2022_bufferevent_settimeout
|
||||
#define bufferevent_set_timeouts opal_libevent2022_bufferevent_set_timeouts
|
||||
#define bufferevent_setwatermark opal_libevent2022_bufferevent_setwatermark
|
||||
#define bufferevent_socket_connect opal_libevent2022_bufferevent_socket_connect
|
||||
#define bufferevent_socket_connect_hostname opal_libevent2022_bufferevent_socket_connect_hostname
|
||||
#define bufferevent_socket_get_dns_error opal_libevent2022_bufferevent_socket_get_dns_error
|
||||
#define bufferevent_socket_new opal_libevent2022_bufferevent_socket_new
|
||||
#define bufferevent_suspend_read opal_libevent2022_bufferevent_suspend_read
|
||||
#define bufferevent_suspend_write opal_libevent2022_bufferevent_suspend_write
|
||||
#define bufferevent_unlock opal_libevent2022_bufferevent_unlock
|
||||
#define bufferevent_unsuspend_read opal_libevent2022_bufferevent_unsuspend_read
|
||||
#define bufferevent_unsuspend_write opal_libevent2022_bufferevent_unsuspend_write
|
||||
#define bufferevent_write opal_libevent2022_bufferevent_write
|
||||
#define bufferevent_write_buffer opal_libevent2022_bufferevent_write_buffer
|
||||
#define evbuffer_add opal_libevent2022_evbuffer_add
|
||||
#define evbuffer_add_buffer opal_libevent2022_evbuffer_add_buffer
|
||||
#define evbuffer_add_cb opal_libevent2022_evbuffer_add_cb
|
||||
#define evbuffer_add_file opal_libevent2022_evbuffer_add_file
|
||||
#define evbuffer_add_printf opal_libevent2022_evbuffer_add_printf
|
||||
#define evbuffer_add_reference opal_libevent2022_evbuffer_add_reference
|
||||
#define evbuffer_add_vprintf opal_libevent2022_evbuffer_add_vprintf
|
||||
#define evbuffer_cb_clear_flags opal_libevent2022_evbuffer_cb_clear_flags
|
||||
#define evbuffer_cb_set_flags opal_libevent2022_evbuffer_cb_set_flags
|
||||
#define _evbuffer_chain_pin opal_libevent2022__evbuffer_chain_pin
|
||||
#define _evbuffer_chain_unpin opal_libevent2022__evbuffer_chain_unpin
|
||||
#define evbuffer_clear_flags opal_libevent2022_evbuffer_clear_flags
|
||||
#define evbuffer_commit_space opal_libevent2022_evbuffer_commit_space
|
||||
#define evbuffer_copyout opal_libevent2022_evbuffer_copyout
|
||||
#define _evbuffer_decref_and_unlock opal_libevent2022__evbuffer_decref_and_unlock
|
||||
#define evbuffer_defer_callbacks opal_libevent2022_evbuffer_defer_callbacks
|
||||
#define evbuffer_drain opal_libevent2022_evbuffer_drain
|
||||
#define evbuffer_enable_locking opal_libevent2022_evbuffer_enable_locking
|
||||
#define evbuffer_expand opal_libevent2022_evbuffer_expand
|
||||
#define _evbuffer_expand_fast opal_libevent2022__evbuffer_expand_fast
|
||||
#define evbuffer_find opal_libevent2022_evbuffer_find
|
||||
#define evbuffer_free opal_libevent2022_evbuffer_free
|
||||
#define evbuffer_freeze opal_libevent2022_evbuffer_freeze
|
||||
#define evbuffer_get_contiguous_space opal_libevent2022_evbuffer_get_contiguous_space
|
||||
#define evbuffer_get_length opal_libevent2022_evbuffer_get_length
|
||||
#define _evbuffer_incref opal_libevent2022__evbuffer_incref
|
||||
#define _evbuffer_incref_and_lock opal_libevent2022__evbuffer_incref_and_lock
|
||||
#define evbuffer_invoke_callbacks opal_libevent2022_evbuffer_invoke_callbacks
|
||||
#define evbuffer_lock opal_libevent2022_evbuffer_lock
|
||||
#define evbuffer_new opal_libevent2022_evbuffer_new
|
||||
#define evbuffer_peek opal_libevent2022_evbuffer_peek
|
||||
#define evbuffer_prepend opal_libevent2022_evbuffer_prepend
|
||||
#define evbuffer_prepend_buffer opal_libevent2022_evbuffer_prepend_buffer
|
||||
#define evbuffer_ptr_set opal_libevent2022_evbuffer_ptr_set
|
||||
#define evbuffer_pullup opal_libevent2022_evbuffer_pullup
|
||||
#define evbuffer_read opal_libevent2022_evbuffer_read
|
||||
#define evbuffer_readline opal_libevent2022_evbuffer_readline
|
||||
#define evbuffer_readln opal_libevent2022_evbuffer_readln
|
||||
#define _evbuffer_read_setup_vecs opal_libevent2022__evbuffer_read_setup_vecs
|
||||
#define evbuffer_remove opal_libevent2022_evbuffer_remove
|
||||
#define evbuffer_remove_buffer opal_libevent2022_evbuffer_remove_buffer
|
||||
#define evbuffer_remove_cb opal_libevent2022_evbuffer_remove_cb
|
||||
#define evbuffer_remove_cb_entry opal_libevent2022_evbuffer_remove_cb_entry
|
||||
#define evbuffer_reserve_space opal_libevent2022_evbuffer_reserve_space
|
||||
#define evbuffer_search opal_libevent2022_evbuffer_search
|
||||
#define evbuffer_search_eol opal_libevent2022_evbuffer_search_eol
|
||||
#define evbuffer_search_range opal_libevent2022_evbuffer_search_range
|
||||
#define evbuffer_setcb opal_libevent2022_evbuffer_setcb
|
||||
#define evbuffer_set_flags opal_libevent2022_evbuffer_set_flags
|
||||
#define evbuffer_set_parent opal_libevent2022_evbuffer_set_parent
|
||||
#define _evbuffer_testing_use_linear_file_access opal_libevent2022__evbuffer_testing_use_linear_file_access
|
||||
#define _evbuffer_testing_use_mmap opal_libevent2022__evbuffer_testing_use_mmap
|
||||
#define _evbuffer_testing_use_sendfile opal_libevent2022__evbuffer_testing_use_sendfile
|
||||
#define evbuffer_unfreeze opal_libevent2022_evbuffer_unfreeze
|
||||
#define evbuffer_unlock opal_libevent2022_evbuffer_unlock
|
||||
#define evbuffer_write opal_libevent2022_evbuffer_write
|
||||
#define evbuffer_write_atmost opal_libevent2022_evbuffer_write_atmost
|
||||
#define evconnlistener_disable opal_libevent2022_evconnlistener_disable
|
||||
#define evconnlistener_enable opal_libevent2022_evconnlistener_enable
|
||||
#define evconnlistener_free opal_libevent2022_evconnlistener_free
|
||||
#define evconnlistener_get_base opal_libevent2022_evconnlistener_get_base
|
||||
#define evconnlistener_get_fd opal_libevent2022_evconnlistener_get_fd
|
||||
#define evconnlistener_new opal_libevent2022_evconnlistener_new
|
||||
#define evconnlistener_new_bind opal_libevent2022_evconnlistener_new_bind
|
||||
#define evconnlistener_set_cb opal_libevent2022_evconnlistener_set_cb
|
||||
#define evconnlistener_set_error_cb opal_libevent2022_evconnlistener_set_error_cb
|
||||
#define evdns_add_server_port opal_libevent2022_evdns_add_server_port
|
||||
#define evdns_add_server_port_with_base opal_libevent2022_evdns_add_server_port_with_base
|
||||
#define evdns_base_clear_nameservers_and_suspend opal_libevent2022_evdns_base_clear_nameservers_and_suspend
|
||||
#define evdns_base_count_nameservers opal_libevent2022_evdns_base_count_nameservers
|
||||
#define evdns_base_free opal_libevent2022_evdns_base_free
|
||||
#define evdns_base_load_hosts opal_libevent2022_evdns_base_load_hosts
|
||||
#define evdns_base_nameserver_add opal_libevent2022_evdns_base_nameserver_add
|
||||
#define evdns_base_nameserver_ip_add opal_libevent2022_evdns_base_nameserver_ip_add
|
||||
#define evdns_base_nameserver_sockaddr_add opal_libevent2022_evdns_base_nameserver_sockaddr_add
|
||||
#define evdns_base_new opal_libevent2022_evdns_base_new
|
||||
#define evdns_base_resolv_conf_parse opal_libevent2022_evdns_base_resolv_conf_parse
|
||||
#define evdns_base_resolve_ipv4 opal_libevent2022_evdns_base_resolve_ipv4
|
||||
#define evdns_base_resolve_ipv6 opal_libevent2022_evdns_base_resolve_ipv6
|
||||
#define evdns_base_resolve_reverse opal_libevent2022_evdns_base_resolve_reverse
|
||||
#define evdns_base_resolve_reverse_ipv6 opal_libevent2022_evdns_base_resolve_reverse_ipv6
|
||||
#define evdns_base_resume opal_libevent2022_evdns_base_resume
|
||||
#define evdns_base_search_add opal_libevent2022_evdns_base_search_add
|
||||
#define evdns_base_search_clear opal_libevent2022_evdns_base_search_clear
|
||||
#define evdns_base_search_ndots_set opal_libevent2022_evdns_base_search_ndots_set
|
||||
#define evdns_base_set_option opal_libevent2022_evdns_base_set_option
|
||||
#define evdns_cancel_request opal_libevent2022_evdns_cancel_request
|
||||
#define evdns_clear_nameservers_and_suspend opal_libevent2022_evdns_clear_nameservers_and_suspend
|
||||
#define evdns_close_server_port opal_libevent2022_evdns_close_server_port
|
||||
#define evdns_count_nameservers opal_libevent2022_evdns_count_nameservers
|
||||
#define evdns_err_to_string opal_libevent2022_evdns_err_to_string
|
||||
#define evdns_getaddrinfo opal_libevent2022_evdns_getaddrinfo
|
||||
#define evdns_getaddrinfo_cancel opal_libevent2022_evdns_getaddrinfo_cancel
|
||||
#define evdns_get_global_base opal_libevent2022_evdns_get_global_base
|
||||
#define evdns_init opal_libevent2022_evdns_init
|
||||
#define evdns_nameserver_add opal_libevent2022_evdns_nameserver_add
|
||||
#define evdns_nameserver_ip_add opal_libevent2022_evdns_nameserver_ip_add
|
||||
#define evdns_resolv_conf_parse opal_libevent2022_evdns_resolv_conf_parse
|
||||
#define evdns_resolve_ipv4 opal_libevent2022_evdns_resolve_ipv4
|
||||
#define evdns_resolve_ipv6 opal_libevent2022_evdns_resolve_ipv6
|
||||
#define evdns_resolve_reverse opal_libevent2022_evdns_resolve_reverse
|
||||
#define evdns_resolve_reverse_ipv6 opal_libevent2022_evdns_resolve_reverse_ipv6
|
||||
#define evdns_resume opal_libevent2022_evdns_resume
|
||||
#define evdns_search_add opal_libevent2022_evdns_search_add
|
||||
#define evdns_search_clear opal_libevent2022_evdns_search_clear
|
||||
#define evdns_search_ndots_set opal_libevent2022_evdns_search_ndots_set
|
||||
#define evdns_server_request_add_aaaa_reply opal_libevent2022_evdns_server_request_add_aaaa_reply
|
||||
#define evdns_server_request_add_a_reply opal_libevent2022_evdns_server_request_add_a_reply
|
||||
#define evdns_server_request_add_cname_reply opal_libevent2022_evdns_server_request_add_cname_reply
|
||||
#define evdns_server_request_add_ptr_reply opal_libevent2022_evdns_server_request_add_ptr_reply
|
||||
#define evdns_server_request_add_reply opal_libevent2022_evdns_server_request_add_reply
|
||||
#define evdns_server_request_drop opal_libevent2022_evdns_server_request_drop
|
||||
#define evdns_server_request_get_requesting_addr opal_libevent2022_evdns_server_request_get_requesting_addr
|
||||
#define evdns_server_request_respond opal_libevent2022_evdns_server_request_respond
|
||||
#define evdns_server_request_set_flags opal_libevent2022_evdns_server_request_set_flags
|
||||
#define evdns_set_log_fn opal_libevent2022_evdns_set_log_fn
|
||||
#define evdns_set_option opal_libevent2022_evdns_set_option
|
||||
#define evdns_set_random_bytes_fn opal_libevent2022_evdns_set_random_bytes_fn
|
||||
#define evdns_set_transaction_id_fn opal_libevent2022_evdns_set_transaction_id_fn
|
||||
#define evdns_shutdown opal_libevent2022_evdns_shutdown
|
||||
#define event_active opal_libevent2022_event_active
|
||||
#define event_active_nolock opal_libevent2022_event_active_nolock
|
||||
#define event_add opal_libevent2022_event_add
|
||||
#define event_assign opal_libevent2022_event_assign
|
||||
#define event_base_add_virtual opal_libevent2022_event_base_add_virtual
|
||||
#define event_base_assert_ok opal_libevent2022_event_base_assert_ok
|
||||
#define event_base_del_virtual opal_libevent2022_event_base_del_virtual
|
||||
#define event_base_dispatch opal_libevent2022_event_base_dispatch
|
||||
#define event_base_dump_events opal_libevent2022_event_base_dump_events
|
||||
#define event_base_free opal_libevent2022_event_base_free
|
||||
#define event_base_get_deferred_cb_queue opal_libevent2022_event_base_get_deferred_cb_queue
|
||||
#define event_base_get_features opal_libevent2022_event_base_get_features
|
||||
#define event_base_get_method opal_libevent2022_event_base_get_method
|
||||
#define event_base_gettimeofday_cached opal_libevent2022_event_base_gettimeofday_cached
|
||||
#define event_base_got_break opal_libevent2022_event_base_got_break
|
||||
#define event_base_got_exit opal_libevent2022_event_base_got_exit
|
||||
#define event_base_init_common_timeout opal_libevent2022_event_base_init_common_timeout
|
||||
#define event_base_loop opal_libevent2022_event_base_loop
|
||||
#define event_base_loopbreak opal_libevent2022_event_base_loopbreak
|
||||
#define event_base_loopexit opal_libevent2022_event_base_loopexit
|
||||
#define event_base_new opal_libevent2022_event_base_new
|
||||
#define event_base_new_with_config opal_libevent2022_event_base_new_with_config
|
||||
#define event_base_once opal_libevent2022_event_base_once
|
||||
#define event_base_priority_init opal_libevent2022_event_base_priority_init
|
||||
#define event_base_set opal_libevent2022_event_base_set
|
||||
#define event_base_start_iocp opal_libevent2022_event_base_start_iocp
|
||||
#define event_base_stop_iocp opal_libevent2022_event_base_stop_iocp
|
||||
#define event_changelist_add opal_libevent2022_event_changelist_add
|
||||
#define event_changelist_del opal_libevent2022_event_changelist_del
|
||||
#define event_changelist_freemem opal_libevent2022_event_changelist_freemem
|
||||
#define event_changelist_init opal_libevent2022_event_changelist_init
|
||||
#define event_changelist_remove_all opal_libevent2022_event_changelist_remove_all
|
||||
#define event_config_avoid_method opal_libevent2022_event_config_avoid_method
|
||||
#define event_config_free opal_libevent2022_event_config_free
|
||||
#define event_config_new opal_libevent2022_event_config_new
|
||||
#define event_config_require_features opal_libevent2022_event_config_require_features
|
||||
#define event_config_set_flag opal_libevent2022_event_config_set_flag
|
||||
#define event_config_set_num_cpus_hint opal_libevent2022_event_config_set_num_cpus_hint
|
||||
#define event_debug_map_HT_CLEAR opal_libevent2022_event_debug_map_HT_CLEAR
|
||||
#define event_debug_map_HT_GROW opal_libevent2022_event_debug_map_HT_GROW
|
||||
#define _event_debug_map_HT_REP_IS_BAD opal_libevent2022__event_debug_map_HT_REP_IS_BAD
|
||||
#define event_debug_unassign opal_libevent2022_event_debug_unassign
|
||||
#define _event_debugx opal_libevent2022__event_debugx
|
||||
#define event_deferred_cb_cancel opal_libevent2022_event_deferred_cb_cancel
|
||||
#define event_deferred_cb_init opal_libevent2022_event_deferred_cb_init
|
||||
#define event_deferred_cb_queue_init opal_libevent2022_event_deferred_cb_queue_init
|
||||
#define event_deferred_cb_schedule opal_libevent2022_event_deferred_cb_schedule
|
||||
#define event_del opal_libevent2022_event_del
|
||||
#define event_dispatch opal_libevent2022_event_dispatch
|
||||
#define event_enable_debug_mode opal_libevent2022_event_enable_debug_mode
|
||||
#define event_err opal_libevent2022_event_err
|
||||
#define event_errx opal_libevent2022_event_errx
|
||||
#define event_free opal_libevent2022_event_free
|
||||
#define event_get_assignment opal_libevent2022_event_get_assignment
|
||||
#define event_get_base opal_libevent2022_event_get_base
|
||||
#define event_get_callback opal_libevent2022_event_get_callback
|
||||
#define event_get_callback_arg opal_libevent2022_event_get_callback_arg
|
||||
#define event_get_events opal_libevent2022_event_get_events
|
||||
#define event_get_fd opal_libevent2022_event_get_fd
|
||||
#define event_get_method opal_libevent2022_event_get_method
|
||||
#define event_get_struct_event_size opal_libevent2022_event_get_struct_event_size
|
||||
#define event_get_supported_methods opal_libevent2022_event_get_supported_methods
|
||||
#define event_get_version opal_libevent2022_event_get_version
|
||||
#define event_get_version_number opal_libevent2022_event_get_version_number
|
||||
#define event_global_setup_locks_ opal_libevent2022_event_global_setup_locks_
|
||||
#define event_init opal_libevent2022_event_init
|
||||
#define event_initialized opal_libevent2022_event_initialized
|
||||
#define event_loop opal_libevent2022_event_loop
|
||||
#define event_loopbreak opal_libevent2022_event_loopbreak
|
||||
#define event_loopexit opal_libevent2022_event_loopexit
|
||||
#define event_mm_calloc_ opal_libevent2022_event_mm_calloc_
|
||||
#define event_mm_free_ opal_libevent2022_event_mm_free_
|
||||
#define event_mm_malloc_ opal_libevent2022_event_mm_malloc_
|
||||
#define event_mm_realloc_ opal_libevent2022_event_mm_realloc_
|
||||
#define event_mm_strdup_ opal_libevent2022_event_mm_strdup_
|
||||
#define event_msgx opal_libevent2022_event_msgx
|
||||
#define event_new opal_libevent2022_event_new
|
||||
#define event_once opal_libevent2022_event_once
|
||||
#define event_pending opal_libevent2022_event_pending
|
||||
#define event_priority_init opal_libevent2022_event_priority_init
|
||||
#define event_priority_set opal_libevent2022_event_priority_set
|
||||
#define event_reinit opal_libevent2022_event_reinit
|
||||
#define event_set opal_libevent2022_event_set
|
||||
#define event_set_fatal_callback opal_libevent2022_event_set_fatal_callback
|
||||
#define event_set_log_callback opal_libevent2022_event_set_log_callback
|
||||
#define event_set_mem_functions opal_libevent2022_event_set_mem_functions
|
||||
#define event_sock_err opal_libevent2022_event_sock_err
|
||||
#define event_sock_warn opal_libevent2022_event_sock_warn
|
||||
#define event_warn opal_libevent2022_event_warn
|
||||
#define event_warnx opal_libevent2022_event_warnx
|
||||
#define evhttp_accept_socket opal_libevent2022_evhttp_accept_socket
|
||||
#define evhttp_accept_socket_with_handle opal_libevent2022_evhttp_accept_socket_with_handle
|
||||
#define evhttp_add_header opal_libevent2022_evhttp_add_header
|
||||
#define evhttp_add_server_alias opal_libevent2022_evhttp_add_server_alias
|
||||
#define evhttp_add_virtual_host opal_libevent2022_evhttp_add_virtual_host
|
||||
#define evhttp_bind_listener opal_libevent2022_evhttp_bind_listener
|
||||
#define evhttp_bind_socket opal_libevent2022_evhttp_bind_socket
|
||||
#define evhttp_bind_socket_with_handle opal_libevent2022_evhttp_bind_socket_with_handle
|
||||
#define evhttp_bound_socket_get_fd opal_libevent2022_evhttp_bound_socket_get_fd
|
||||
#define evhttp_bound_socket_get_listener opal_libevent2022_evhttp_bound_socket_get_listener
|
||||
#define evhttp_cancel_request opal_libevent2022_evhttp_cancel_request
|
||||
#define evhttp_clear_headers opal_libevent2022_evhttp_clear_headers
|
||||
#define evhttp_connection_base_new opal_libevent2022_evhttp_connection_base_new
|
||||
#define evhttp_connection_connect opal_libevent2022_evhttp_connection_connect
|
||||
#define evhttp_connection_fail opal_libevent2022_evhttp_connection_fail
|
||||
#define evhttp_connection_free opal_libevent2022_evhttp_connection_free
|
||||
#define evhttp_connection_get_base opal_libevent2022_evhttp_connection_get_base
|
||||
#define evhttp_connection_get_bufferevent opal_libevent2022_evhttp_connection_get_bufferevent
|
||||
#define evhttp_connection_get_peer opal_libevent2022_evhttp_connection_get_peer
|
||||
#define evhttp_connection_new opal_libevent2022_evhttp_connection_new
|
||||
#define evhttp_connection_reset opal_libevent2022_evhttp_connection_reset
|
||||
#define evhttp_connection_set_base opal_libevent2022_evhttp_connection_set_base
|
||||
#define evhttp_connection_set_closecb opal_libevent2022_evhttp_connection_set_closecb
|
||||
#define evhttp_connection_set_local_address opal_libevent2022_evhttp_connection_set_local_address
|
||||
#define evhttp_connection_set_local_port opal_libevent2022_evhttp_connection_set_local_port
|
||||
#define evhttp_connection_set_max_body_size opal_libevent2022_evhttp_connection_set_max_body_size
|
||||
#define evhttp_connection_set_max_headers_size opal_libevent2022_evhttp_connection_set_max_headers_size
|
||||
#define evhttp_connection_set_retries opal_libevent2022_evhttp_connection_set_retries
|
||||
#define evhttp_connection_set_timeout opal_libevent2022_evhttp_connection_set_timeout
|
||||
#define evhttp_decode_uri opal_libevent2022_evhttp_decode_uri
|
||||
#define evhttp_del_accept_socket opal_libevent2022_evhttp_del_accept_socket
|
||||
#define evhttp_del_cb opal_libevent2022_evhttp_del_cb
|
||||
#define evhttp_encode_uri opal_libevent2022_evhttp_encode_uri
|
||||
#define evhttp_find_header opal_libevent2022_evhttp_find_header
|
||||
#define evhttp_free opal_libevent2022_evhttp_free
|
||||
#define evhttp_htmlescape opal_libevent2022_evhttp_htmlescape
|
||||
#define evhttp_make_request opal_libevent2022_evhttp_make_request
|
||||
#define evhttp_new opal_libevent2022_evhttp_new
|
||||
#define evhttp_parse_firstline opal_libevent2022_evhttp_parse_firstline
|
||||
#define evhttp_parse_headers opal_libevent2022_evhttp_parse_headers
|
||||
#define evhttp_parse_query opal_libevent2022_evhttp_parse_query
|
||||
#define evhttp_parse_query_str opal_libevent2022_evhttp_parse_query_str
|
||||
#define evhttp_remove_header opal_libevent2022_evhttp_remove_header
|
||||
#define evhttp_remove_server_alias opal_libevent2022_evhttp_remove_server_alias
|
||||
#define evhttp_remove_virtual_host opal_libevent2022_evhttp_remove_virtual_host
|
||||
#define evhttp_request_free opal_libevent2022_evhttp_request_free
|
||||
#define evhttp_request_get_command opal_libevent2022_evhttp_request_get_command
|
||||
#define evhttp_request_get_connection opal_libevent2022_evhttp_request_get_connection
|
||||
#define evhttp_request_get_evhttp_uri opal_libevent2022_evhttp_request_get_evhttp_uri
|
||||
#define evhttp_request_get_host opal_libevent2022_evhttp_request_get_host
|
||||
#define evhttp_request_get_input_buffer opal_libevent2022_evhttp_request_get_input_buffer
|
||||
#define evhttp_request_get_input_headers opal_libevent2022_evhttp_request_get_input_headers
|
||||
#define evhttp_request_get_output_buffer opal_libevent2022_evhttp_request_get_output_buffer
|
||||
#define evhttp_request_get_output_headers opal_libevent2022_evhttp_request_get_output_headers
|
||||
#define evhttp_request_get_response_code opal_libevent2022_evhttp_request_get_response_code
|
||||
#define evhttp_request_get_uri opal_libevent2022_evhttp_request_get_uri
|
||||
#define evhttp_request_is_owned opal_libevent2022_evhttp_request_is_owned
|
||||
#define evhttp_request_new opal_libevent2022_evhttp_request_new
|
||||
#define evhttp_request_own opal_libevent2022_evhttp_request_own
|
||||
#define evhttp_request_set_chunked_cb opal_libevent2022_evhttp_request_set_chunked_cb
|
||||
#define evhttp_response_code opal_libevent2022_evhttp_response_code
|
||||
#define evhttp_send_error opal_libevent2022_evhttp_send_error
|
||||
#define evhttp_send_page opal_libevent2022_evhttp_send_page
|
||||
#define evhttp_send_reply opal_libevent2022_evhttp_send_reply
|
||||
#define evhttp_send_reply_chunk opal_libevent2022_evhttp_send_reply_chunk
|
||||
#define evhttp_send_reply_end opal_libevent2022_evhttp_send_reply_end
|
||||
#define evhttp_send_reply_start opal_libevent2022_evhttp_send_reply_start
|
||||
#define evhttp_set_allowed_methods opal_libevent2022_evhttp_set_allowed_methods
|
||||
#define evhttp_set_cb opal_libevent2022_evhttp_set_cb
|
||||
#define evhttp_set_gencb opal_libevent2022_evhttp_set_gencb
|
||||
#define evhttp_set_max_body_size opal_libevent2022_evhttp_set_max_body_size
|
||||
#define evhttp_set_max_headers_size opal_libevent2022_evhttp_set_max_headers_size
|
||||
#define evhttp_set_timeout opal_libevent2022_evhttp_set_timeout
|
||||
#define evhttp_start opal_libevent2022_evhttp_start
|
||||
#define evhttp_start_read opal_libevent2022_evhttp_start_read
|
||||
#define evhttp_uridecode opal_libevent2022_evhttp_uridecode
|
||||
#define evhttp_uriencode opal_libevent2022_evhttp_uriencode
|
||||
#define evhttp_uri_free opal_libevent2022_evhttp_uri_free
|
||||
#define evhttp_uri_get_fragment opal_libevent2022_evhttp_uri_get_fragment
|
||||
#define evhttp_uri_get_host opal_libevent2022_evhttp_uri_get_host
|
||||
#define evhttp_uri_get_path opal_libevent2022_evhttp_uri_get_path
|
||||
#define evhttp_uri_get_port opal_libevent2022_evhttp_uri_get_port
|
||||
#define evhttp_uri_get_query opal_libevent2022_evhttp_uri_get_query
|
||||
#define evhttp_uri_get_scheme opal_libevent2022_evhttp_uri_get_scheme
|
||||
#define evhttp_uri_get_userinfo opal_libevent2022_evhttp_uri_get_userinfo
|
||||
#define evhttp_uri_join opal_libevent2022_evhttp_uri_join
|
||||
#define evhttp_uri_new opal_libevent2022_evhttp_uri_new
|
||||
#define evhttp_uri_parse opal_libevent2022_evhttp_uri_parse
|
||||
#define evhttp_uri_parse_with_flags opal_libevent2022_evhttp_uri_parse_with_flags
|
||||
#define evhttp_uri_set_flags opal_libevent2022_evhttp_uri_set_flags
|
||||
#define evhttp_uri_set_fragment opal_libevent2022_evhttp_uri_set_fragment
|
||||
#define evhttp_uri_set_host opal_libevent2022_evhttp_uri_set_host
|
||||
#define evhttp_uri_set_path opal_libevent2022_evhttp_uri_set_path
|
||||
#define evhttp_uri_set_port opal_libevent2022_evhttp_uri_set_port
|
||||
#define evhttp_uri_set_query opal_libevent2022_evhttp_uri_set_query
|
||||
#define evhttp_uri_set_scheme opal_libevent2022_evhttp_uri_set_scheme
|
||||
#define evhttp_uri_set_userinfo opal_libevent2022_evhttp_uri_set_userinfo
|
||||
#define evmap_check_integrity opal_libevent2022_evmap_check_integrity
|
||||
#define evmap_io_active opal_libevent2022_evmap_io_active
|
||||
#define evmap_io_add opal_libevent2022_evmap_io_add
|
||||
#define evmap_io_clear opal_libevent2022_evmap_io_clear
|
||||
#define evmap_io_del opal_libevent2022_evmap_io_del
|
||||
#define evmap_io_get_fdinfo opal_libevent2022_evmap_io_get_fdinfo
|
||||
#define evmap_io_initmap opal_libevent2022_evmap_io_initmap
|
||||
#define evmap_signal_active opal_libevent2022_evmap_signal_active
|
||||
#define evmap_signal_add opal_libevent2022_evmap_signal_add
|
||||
#define evmap_signal_clear opal_libevent2022_evmap_signal_clear
|
||||
#define evmap_signal_del opal_libevent2022_evmap_signal_del
|
||||
#define evmap_signal_initmap opal_libevent2022_evmap_signal_initmap
|
||||
#define evrpc_add_hook opal_libevent2022_evrpc_add_hook
|
||||
#define evrpc_free opal_libevent2022_evrpc_free
|
||||
#define evrpc_get_reply opal_libevent2022_evrpc_get_reply
|
||||
#define evrpc_get_request opal_libevent2022_evrpc_get_request
|
||||
#define evrpc_hook_add_meta opal_libevent2022_evrpc_hook_add_meta
|
||||
#define evrpc_hook_find_meta opal_libevent2022_evrpc_hook_find_meta
|
||||
#define evrpc_hook_get_connection opal_libevent2022_evrpc_hook_get_connection
|
||||
#define evrpc_init opal_libevent2022_evrpc_init
|
||||
#define evrpc_make_request opal_libevent2022_evrpc_make_request
|
||||
#define evrpc_make_request_ctx opal_libevent2022_evrpc_make_request_ctx
|
||||
#define evrpc_pool_add_connection opal_libevent2022_evrpc_pool_add_connection
|
||||
#define evrpc_pool_free opal_libevent2022_evrpc_pool_free
|
||||
#define evrpc_pool_new opal_libevent2022_evrpc_pool_new
|
||||
#define evrpc_pool_remove_connection opal_libevent2022_evrpc_pool_remove_connection
|
||||
#define evrpc_pool_set_timeout opal_libevent2022_evrpc_pool_set_timeout
|
||||
#define evrpc_register_generic opal_libevent2022_evrpc_register_generic
|
||||
#define evrpc_register_rpc opal_libevent2022_evrpc_register_rpc
|
||||
#define evrpc_remove_hook opal_libevent2022_evrpc_remove_hook
|
||||
#define evrpc_reqstate_free opal_libevent2022_evrpc_reqstate_free
|
||||
#define evrpc_request_done opal_libevent2022_evrpc_request_done
|
||||
#define evrpc_request_get_pool opal_libevent2022_evrpc_request_get_pool
|
||||
#define evrpc_request_set_cb opal_libevent2022_evrpc_request_set_cb
|
||||
#define evrpc_request_set_pool opal_libevent2022_evrpc_request_set_pool
|
||||
#define evrpc_resume_request opal_libevent2022_evrpc_resume_request
|
||||
#define evrpc_send_request_generic opal_libevent2022_evrpc_send_request_generic
|
||||
#define evrpc_unregister_rpc opal_libevent2022_evrpc_unregister_rpc
|
||||
#define evsig_dealloc opal_libevent2022_evsig_dealloc
|
||||
#define evsig_global_setup_locks_ opal_libevent2022_evsig_global_setup_locks_
|
||||
#define evsig_init opal_libevent2022_evsig_init
|
||||
#define _evsig_restore_handler opal_libevent2022__evsig_restore_handler
|
||||
#define evsig_set_base opal_libevent2022_evsig_set_base
|
||||
#define _evsig_set_handler opal_libevent2022__evsig_set_handler
|
||||
#define evtag_consume opal_libevent2022_evtag_consume
|
||||
#define evtag_decode_int opal_libevent2022_evtag_decode_int
|
||||
#define evtag_decode_int64 opal_libevent2022_evtag_decode_int64
|
||||
#define evtag_decode_tag opal_libevent2022_evtag_decode_tag
|
||||
#define evtag_encode_int opal_libevent2022_evtag_encode_int
|
||||
#define evtag_encode_int64 opal_libevent2022_evtag_encode_int64
|
||||
#define evtag_encode_tag opal_libevent2022_evtag_encode_tag
|
||||
#define evtag_init opal_libevent2022_evtag_init
|
||||
#define evtag_marshal opal_libevent2022_evtag_marshal
|
||||
#define evtag_marshal_buffer opal_libevent2022_evtag_marshal_buffer
|
||||
#define evtag_marshal_int opal_libevent2022_evtag_marshal_int
|
||||
#define evtag_marshal_int64 opal_libevent2022_evtag_marshal_int64
|
||||
#define evtag_marshal_string opal_libevent2022_evtag_marshal_string
|
||||
#define evtag_marshal_timeval opal_libevent2022_evtag_marshal_timeval
|
||||
#define evtag_payload_length opal_libevent2022_evtag_payload_length
|
||||
#define evtag_peek opal_libevent2022_evtag_peek
|
||||
#define evtag_peek_length opal_libevent2022_evtag_peek_length
|
||||
#define evtag_unmarshal opal_libevent2022_evtag_unmarshal
|
||||
#define evtag_unmarshal_fixed opal_libevent2022_evtag_unmarshal_fixed
|
||||
#define evtag_unmarshal_header opal_libevent2022_evtag_unmarshal_header
|
||||
#define evtag_unmarshal_int opal_libevent2022_evtag_unmarshal_int
|
||||
#define evtag_unmarshal_int64 opal_libevent2022_evtag_unmarshal_int64
|
||||
#define evtag_unmarshal_string opal_libevent2022_evtag_unmarshal_string
|
||||
#define evtag_unmarshal_timeval opal_libevent2022_evtag_unmarshal_timeval
|
||||
#define _evthread_debug_get_real_lock opal_libevent2022__evthread_debug_get_real_lock
|
||||
#define evthread_enable_lock_debuging opal_libevent2022_evthread_enable_lock_debuging
|
||||
#define _evthread_is_debug_lock_held opal_libevent2022__evthread_is_debug_lock_held
|
||||
#define evthread_make_base_notifiable opal_libevent2022_evthread_make_base_notifiable
|
||||
#define evthread_set_condition_callbacks opal_libevent2022_evthread_set_condition_callbacks
|
||||
#define evthread_set_id_callback opal_libevent2022_evthread_set_id_callback
|
||||
#define evthread_set_lock_callbacks opal_libevent2022_evthread_set_lock_callbacks
|
||||
#define evthread_setup_global_lock_ opal_libevent2022_evthread_setup_global_lock_
|
||||
#define ev_token_bucket_cfg_free opal_libevent2022_ev_token_bucket_cfg_free
|
||||
#define ev_token_bucket_cfg_new opal_libevent2022_ev_token_bucket_cfg_new
|
||||
#define ev_token_bucket_get_tick opal_libevent2022_ev_token_bucket_get_tick
|
||||
#define ev_token_bucket_init opal_libevent2022_ev_token_bucket_init
|
||||
#define ev_token_bucket_update opal_libevent2022_ev_token_bucket_update
|
||||
#define evutil_addrinfo_append opal_libevent2022_evutil_addrinfo_append
|
||||
#define evutil_adjust_hints_for_addrconfig opal_libevent2022_evutil_adjust_hints_for_addrconfig
|
||||
#define evutil_ascii_strcasecmp opal_libevent2022_evutil_ascii_strcasecmp
|
||||
#define evutil_ascii_strncasecmp opal_libevent2022_evutil_ascii_strncasecmp
|
||||
#define evutil_closesocket opal_libevent2022_evutil_closesocket
|
||||
#define evutil_ersatz_socketpair opal_libevent2022_evutil_ersatz_socketpair
|
||||
#define evutil_format_sockaddr_port opal_libevent2022_evutil_format_sockaddr_port
|
||||
#define evutil_freeaddrinfo opal_libevent2022_evutil_freeaddrinfo
|
||||
#define evutil_gai_strerror opal_libevent2022_evutil_gai_strerror
|
||||
#define evutil_getaddrinfo opal_libevent2022_evutil_getaddrinfo
|
||||
#define evutil_getaddrinfo_async opal_libevent2022_evutil_getaddrinfo_async
|
||||
#define evutil_getaddrinfo_common opal_libevent2022_evutil_getaddrinfo_common
|
||||
#define evutil_getenv opal_libevent2022_evutil_getenv
|
||||
#define evutil_hex_char_to_int opal_libevent2022_evutil_hex_char_to_int
|
||||
#define evutil_inet_ntop opal_libevent2022_evutil_inet_ntop
|
||||
#define evutil_inet_pton opal_libevent2022_evutil_inet_pton
|
||||
#define EVUTIL_ISALNUM opal_libevent2022_EVUTIL_ISALNUM
|
||||
#define EVUTIL_ISALPHA opal_libevent2022_EVUTIL_ISALPHA
|
||||
#define EVUTIL_ISDIGIT opal_libevent2022_EVUTIL_ISDIGIT
|
||||
#define EVUTIL_ISLOWER opal_libevent2022_EVUTIL_ISLOWER
|
||||
#define EVUTIL_ISPRINT opal_libevent2022_EVUTIL_ISPRINT
|
||||
#define EVUTIL_ISSPACE opal_libevent2022_EVUTIL_ISSPACE
|
||||
#define EVUTIL_ISUPPER opal_libevent2022_EVUTIL_ISUPPER
|
||||
#define EVUTIL_ISXDIGIT opal_libevent2022_EVUTIL_ISXDIGIT
|
||||
#define evutil_make_listen_socket_reuseable opal_libevent2022_evutil_make_listen_socket_reuseable
|
||||
#define evutil_make_socket_closeonexec opal_libevent2022_evutil_make_socket_closeonexec
|
||||
#define evutil_make_socket_nonblocking opal_libevent2022_evutil_make_socket_nonblocking
|
||||
#define evutil_memclear_ opal_libevent2022_evutil_memclear_
|
||||
#define evutil_new_addrinfo opal_libevent2022_evutil_new_addrinfo
|
||||
#define evutil_open_closeonexec opal_libevent2022_evutil_open_closeonexec
|
||||
#define evutil_parse_sockaddr_port opal_libevent2022_evutil_parse_sockaddr_port
|
||||
#define evutil_read_file opal_libevent2022_evutil_read_file
|
||||
#define evutil_secure_rng_add_bytes opal_libevent2022_evutil_secure_rng_add_bytes
|
||||
#define evutil_secure_rng_get_bytes opal_libevent2022_evutil_secure_rng_get_bytes
|
||||
#define evutil_secure_rng_global_setup_locks_ opal_libevent2022_evutil_secure_rng_global_setup_locks_
|
||||
#define evutil_secure_rng_init opal_libevent2022_evutil_secure_rng_init
|
||||
#define evutil_secure_rng_set_urandom_device_file opal_libevent2022_evutil_secure_rng_set_urandom_device_file
|
||||
#define evutil_set_evdns_getaddrinfo_fn opal_libevent2022_evutil_set_evdns_getaddrinfo_fn
|
||||
#define evutil_snprintf opal_libevent2022_evutil_snprintf
|
||||
#define evutil_sockaddr_cmp opal_libevent2022_evutil_sockaddr_cmp
|
||||
#define evutil_sockaddr_is_loopback opal_libevent2022_evutil_sockaddr_is_loopback
|
||||
#define evutil_socket_connect opal_libevent2022_evutil_socket_connect
|
||||
#define evutil_socket_finished_connecting opal_libevent2022_evutil_socket_finished_connecting
|
||||
#define evutil_socketpair opal_libevent2022_evutil_socketpair
|
||||
#define evutil_strtoll opal_libevent2022_evutil_strtoll
|
||||
#define EVUTIL_TOLOWER opal_libevent2022_EVUTIL_TOLOWER
|
||||
#define EVUTIL_TOUPPER opal_libevent2022_EVUTIL_TOUPPER
|
||||
#define evutil_tv_to_msec opal_libevent2022_evutil_tv_to_msec
|
||||
#define evutil_vsnprintf opal_libevent2022_evutil_vsnprintf
|
||||
#define _evutil_weakrand opal_libevent2022__evutil_weakrand
|
||||
#define _fini opal_libevent2022__fini
|
||||
#define _init opal_libevent2022__init
|
||||
#define evthread_use_pthreads opal_libevent2022_evthread_use_pthreads
|
||||
|
||||
/* eventop */
|
||||
#ifdef _EVENT_HAVE_EVENT_PORTS
|
||||
|
@ -821,7 +821,7 @@ static int cray_store_local(const opal_process_name_t *proc,
|
||||
|
||||
static const char *cray_get_nspace(opal_jobid_t jobid)
|
||||
{
|
||||
return NULL;
|
||||
return "N/A";
|
||||
}
|
||||
|
||||
static void cray_register_jobid(opal_jobid_t jobid, const char *nspace)
|
||||
|
@ -538,8 +538,11 @@ typedef int (*opal_pmix_base_module_resolve_nodes_fn_t)(opal_jobid_t jobid, char
|
||||
* SERVER APIs *
|
||||
************************************************************/
|
||||
|
||||
/* Initialize the server support library */
|
||||
typedef int (*opal_pmix_base_module_server_init_fn_t)(opal_pmix_server_module_t *module);
|
||||
/* Initialize the server support library - must pass the callback
|
||||
* module for the server to use, plus any attributes we want to
|
||||
* pass down to it */
|
||||
typedef int (*opal_pmix_base_module_server_init_fn_t)(opal_pmix_server_module_t *module,
|
||||
opal_list_t *info);
|
||||
|
||||
/* Finalize the server support library */
|
||||
typedef int (*opal_pmix_base_module_server_finalize_fn_t)(void);
|
||||
@ -606,6 +609,13 @@ typedef int (*opal_pmix_base_module_server_register_nspace_fn_t)(opal_jobid_t jo
|
||||
opal_pmix_op_cbfunc_t cbfunc,
|
||||
void *cbdata);
|
||||
|
||||
/* Deregister an nspace. Instruct the PMIx server to purge
|
||||
* all info relating to the provided jobid so that memory
|
||||
* can be freed. Note that the server will automatically
|
||||
* purge all info relating to any clients it has from
|
||||
* this nspace */
|
||||
typedef void (*opal_pmix_base_module_server_deregister_nspace_fn_t)(opal_jobid_t jobid);
|
||||
|
||||
/* Register a client process with the PMIx server library. The
|
||||
* expected user ID and group ID of the child process helps the
|
||||
* server library to properly authenticate clients as they connect
|
||||
@ -625,6 +635,15 @@ typedef int (*opal_pmix_base_module_server_register_client_fn_t)(const opal_proc
|
||||
opal_pmix_op_cbfunc_t cbfunc,
|
||||
void *cbdata);
|
||||
|
||||
/* Deregister a client. Instruct the PMIx server to purge
|
||||
* all info relating to the provided client so that memory
|
||||
* can be freed. As per above note, the server will automatically
|
||||
* free all client-related data when the nspace is deregistered,
|
||||
* so there is no need to call this function during normal
|
||||
* finalize operations. Instead, this is provided for use
|
||||
* during exception operations */
|
||||
typedef void (*opal_pmix_base_module_server_deregister_client_fn_t)(const opal_process_name_t *proc);
|
||||
|
||||
/* Setup the environment of a child process to be forked
|
||||
* by the host so it can correctly interact with the PMIx
|
||||
* server. The PMIx client needs some setup information
|
||||
@ -725,47 +744,49 @@ typedef void (*opal_pmix_base_module_register_jobid_fn_t)(opal_jobid_t jobid, co
|
||||
*/
|
||||
typedef struct {
|
||||
/* client APIs */
|
||||
opal_pmix_base_module_init_fn_t init;
|
||||
opal_pmix_base_module_fini_fn_t finalize;
|
||||
opal_pmix_base_module_initialized_fn_t initialized;
|
||||
opal_pmix_base_module_abort_fn_t abort;
|
||||
opal_pmix_base_module_commit_fn_t commit;
|
||||
opal_pmix_base_module_fence_fn_t fence;
|
||||
opal_pmix_base_module_fence_nb_fn_t fence_nb;
|
||||
opal_pmix_base_module_put_fn_t put;
|
||||
opal_pmix_base_module_get_fn_t get;
|
||||
opal_pmix_base_module_get_nb_fn_t get_nb;
|
||||
opal_pmix_base_module_publish_fn_t publish;
|
||||
opal_pmix_base_module_publish_nb_fn_t publish_nb;
|
||||
opal_pmix_base_module_lookup_fn_t lookup;
|
||||
opal_pmix_base_module_lookup_nb_fn_t lookup_nb;
|
||||
opal_pmix_base_module_unpublish_fn_t unpublish;
|
||||
opal_pmix_base_module_unpublish_nb_fn_t unpublish_nb;
|
||||
opal_pmix_base_module_spawn_fn_t spawn;
|
||||
opal_pmix_base_module_spawn_nb_fn_t spawn_nb;
|
||||
opal_pmix_base_module_connect_fn_t connect;
|
||||
opal_pmix_base_module_connect_nb_fn_t connect_nb;
|
||||
opal_pmix_base_module_disconnect_fn_t disconnect;
|
||||
opal_pmix_base_module_disconnect_nb_fn_t disconnect_nb;
|
||||
opal_pmix_base_module_resolve_peers_fn_t resolve_peers;
|
||||
opal_pmix_base_module_resolve_nodes_fn_t resolve_nodes;
|
||||
opal_pmix_base_module_init_fn_t init;
|
||||
opal_pmix_base_module_fini_fn_t finalize;
|
||||
opal_pmix_base_module_initialized_fn_t initialized;
|
||||
opal_pmix_base_module_abort_fn_t abort;
|
||||
opal_pmix_base_module_commit_fn_t commit;
|
||||
opal_pmix_base_module_fence_fn_t fence;
|
||||
opal_pmix_base_module_fence_nb_fn_t fence_nb;
|
||||
opal_pmix_base_module_put_fn_t put;
|
||||
opal_pmix_base_module_get_fn_t get;
|
||||
opal_pmix_base_module_get_nb_fn_t get_nb;
|
||||
opal_pmix_base_module_publish_fn_t publish;
|
||||
opal_pmix_base_module_publish_nb_fn_t publish_nb;
|
||||
opal_pmix_base_module_lookup_fn_t lookup;
|
||||
opal_pmix_base_module_lookup_nb_fn_t lookup_nb;
|
||||
opal_pmix_base_module_unpublish_fn_t unpublish;
|
||||
opal_pmix_base_module_unpublish_nb_fn_t unpublish_nb;
|
||||
opal_pmix_base_module_spawn_fn_t spawn;
|
||||
opal_pmix_base_module_spawn_nb_fn_t spawn_nb;
|
||||
opal_pmix_base_module_connect_fn_t connect;
|
||||
opal_pmix_base_module_connect_nb_fn_t connect_nb;
|
||||
opal_pmix_base_module_disconnect_fn_t disconnect;
|
||||
opal_pmix_base_module_disconnect_nb_fn_t disconnect_nb;
|
||||
opal_pmix_base_module_resolve_peers_fn_t resolve_peers;
|
||||
opal_pmix_base_module_resolve_nodes_fn_t resolve_nodes;
|
||||
/* server APIs */
|
||||
opal_pmix_base_module_server_init_fn_t server_init;
|
||||
opal_pmix_base_module_server_finalize_fn_t server_finalize;
|
||||
opal_pmix_base_module_generate_regex_fn_t generate_regex;
|
||||
opal_pmix_base_module_generate_ppn_fn_t generate_ppn;
|
||||
opal_pmix_base_module_server_register_nspace_fn_t server_register_nspace;
|
||||
opal_pmix_base_module_server_register_client_fn_t server_register_client;
|
||||
opal_pmix_base_module_server_setup_fork_fn_t server_setup_fork;
|
||||
opal_pmix_base_module_server_dmodex_request_fn_t server_dmodex_request;
|
||||
opal_pmix_base_module_server_notify_error_fn_t server_notify_error;
|
||||
opal_pmix_base_module_server_init_fn_t server_init;
|
||||
opal_pmix_base_module_server_finalize_fn_t server_finalize;
|
||||
opal_pmix_base_module_generate_regex_fn_t generate_regex;
|
||||
opal_pmix_base_module_generate_ppn_fn_t generate_ppn;
|
||||
opal_pmix_base_module_server_register_nspace_fn_t server_register_nspace;
|
||||
opal_pmix_base_module_server_deregister_nspace_fn_t server_deregister_nspace;
|
||||
opal_pmix_base_module_server_register_client_fn_t server_register_client;
|
||||
opal_pmix_base_module_server_deregister_client_fn_t server_deregister_client;
|
||||
opal_pmix_base_module_server_setup_fork_fn_t server_setup_fork;
|
||||
opal_pmix_base_module_server_dmodex_request_fn_t server_dmodex_request;
|
||||
opal_pmix_base_module_server_notify_error_fn_t server_notify_error;
|
||||
/* Utility APIs */
|
||||
opal_pmix_base_module_get_version_fn_t get_version;
|
||||
opal_pmix_base_module_register_fn_t register_errhandler;
|
||||
opal_pmix_base_module_deregister_fn_t deregister_errhandler;
|
||||
opal_pmix_base_module_store_fn_t store_local;
|
||||
opal_pmix_base_module_get_nspace_fn_t get_nspace;
|
||||
opal_pmix_base_module_register_jobid_fn_t register_jobid;
|
||||
opal_pmix_base_module_get_version_fn_t get_version;
|
||||
opal_pmix_base_module_register_fn_t register_errhandler;
|
||||
opal_pmix_base_module_deregister_fn_t deregister_errhandler;
|
||||
opal_pmix_base_module_store_fn_t store_local;
|
||||
opal_pmix_base_module_get_nspace_fn_t get_nspace;
|
||||
opal_pmix_base_module_register_jobid_fn_t register_jobid;
|
||||
} opal_pmix_base_module_t;
|
||||
|
||||
typedef struct {
|
||||
|
@ -37,6 +37,11 @@ endif
|
||||
|
||||
man_MANS = \
|
||||
man/man3/pmix_init.3 \
|
||||
man/man3/pmix_finalize.3 \
|
||||
man/man3/pmix_initialized.3 \
|
||||
man/man3/pmix_abort.3 \
|
||||
man/man3/pmix_put.3 \
|
||||
man/man3/pmix_commit.3 \
|
||||
man/man7/pmix.7 \
|
||||
man/man7/pmix_constants.7
|
||||
|
||||
@ -59,6 +64,8 @@ libpmix_la_LDFLAGS = -version-info $(libpmix_so_version)
|
||||
|
||||
if ! PMIX_EMBEDDED_MODE
|
||||
SUBDIRS = . test examples
|
||||
pmixdir = $(pmixincludedir)/$(subdir)
|
||||
nobase_pmix_HEADERS = $(headers)
|
||||
endif
|
||||
|
||||
nroff:
|
||||
|
@ -30,7 +30,7 @@ greek=a1
|
||||
# command, or with the date (if "git describe" fails) in the form of
|
||||
# "date<date>".
|
||||
|
||||
repo_rev=git69c398e
|
||||
repo_rev=gita4d7e07
|
||||
|
||||
# If tarball_version is not empty, it is used as the version string in
|
||||
# the tarball filename, regardless of all other versions listed in
|
||||
@ -44,7 +44,7 @@ tarball_version=
|
||||
|
||||
# The date when this release was created
|
||||
|
||||
date="Oct 09, 2015"
|
||||
date="Nov 06, 2015"
|
||||
|
||||
# The shared library version of each of PMIx's public libraries.
|
||||
# These versions are maintained in accordance with the "Library
|
||||
|
@ -105,7 +105,6 @@ AC_DEFUN([PMIX_SETUP_CORE],[
|
||||
# replaced, not the entire file.
|
||||
AC_CONFIG_HEADERS(pmix_config_prefix[include/private/autogen/config.h])
|
||||
AC_CONFIG_HEADERS(pmix_config_prefix[include/pmix/autogen/config.h])
|
||||
AC_CONFIG_HEADERS(pmix_config_prefix[include/pmix/pmix_common.h])
|
||||
|
||||
# What prefix are we using?
|
||||
AC_MSG_CHECKING([for pmix symbol prefix])
|
||||
|
@ -173,7 +173,7 @@ int main(int argc, char **argv)
|
||||
fprintf(stderr, "Running version %s\n", PMIx_Get_version());
|
||||
|
||||
/* setup the server library */
|
||||
if (PMIX_SUCCESS != (rc = PMIx_server_init(&mymodule))) {
|
||||
if (PMIX_SUCCESS != (rc = PMIx_server_init(&mymodule, NULL, 0))) {
|
||||
fprintf(stderr, "Init failed with error %d\n", rc);
|
||||
return rc;
|
||||
}
|
||||
|
@ -18,11 +18,19 @@ include_HEADERS = \
|
||||
include/pmix_server.h \
|
||||
include/pmi.h \
|
||||
include/pmi2.h
|
||||
|
||||
headers += \
|
||||
include/private/align.h \
|
||||
include/private/hash_string.h \
|
||||
include/private/pmix_socket_errno.h \
|
||||
include/private/pmix_stdint.h \
|
||||
include/private/prefetch.h \
|
||||
include/private/types.h \
|
||||
include/private/autogen/config.h
|
||||
include_pmixdir = $(includedir)/pmix
|
||||
include_pmix_HEADERS = \
|
||||
include/pmix/rename.h
|
||||
nodist_include_pmix_HEADERS = \
|
||||
include/pmix/pmix_common.h
|
||||
include/pmix/rename.h \
|
||||
include/pmix/pmix_common.h
|
||||
|
||||
include_pmix_autogendir = $(includedir)/pmix/autogen
|
||||
include_pmix_autogen_HEADERS = \
|
||||
@ -31,12 +39,4 @@ include_pmix_autogen_HEADERS = \
|
||||
nodist_include_pmix_autogen_HEADERS = \
|
||||
include/pmix/autogen/config.h
|
||||
|
||||
noinst_HEADERS = \
|
||||
include/private/align.h \
|
||||
include/private/hash_string.h \
|
||||
include/private/pmix_socket_errno.h \
|
||||
include/private/pmix_stdint.h \
|
||||
include/private/prefetch.h \
|
||||
include/private/types.h
|
||||
|
||||
endif ! PMIX_EMBEDDED_MODE
|
||||
|
@ -69,7 +69,7 @@
|
||||
|
||||
/* Maybe before gcc 2.95 too */
|
||||
#ifdef PMIX_HAVE_ATTRIBUTE_UNUSED
|
||||
#define __PMIX_HAVE_ATTRIBUTE_UNUSED PMIX_HAVE_ATTRIBUTE_UNUSED
|
||||
#define __PMIX_HAVE_ATTRIBUTE_UNUSED PMIX_HAVE_ATTRIBUTE_UNUSED
|
||||
#elif defined(__GNUC__)
|
||||
# define __PMIX_HAVE_ATTRIBUTE_UNUSED (GXX_ABOVE_3_4 || GCC_ABOVE_2_95)
|
||||
#else
|
||||
@ -82,7 +82,7 @@
|
||||
#endif
|
||||
|
||||
#ifdef PMIX_HAVE_ATTRIBUTE_MALLOC
|
||||
#define __PMIX_HAVE_ATTRIBUTE_MALLOC PMIX_HAVE_ATTRIBUTE_MALLOC
|
||||
#define __PMIX_HAVE_ATTRIBUTE_MALLOC PMIX_HAVE_ATTRIBUTE_MALLOC
|
||||
#elif defined(__GNUC__)
|
||||
# define __PMIX_HAVE_ATTRIBUTE_MALLOC (GXX_ABOVE_3_4 || GCC_ABOVE_2_96)
|
||||
#else
|
||||
@ -95,7 +95,7 @@
|
||||
#endif
|
||||
|
||||
#ifdef PMIX_HAVE_ATTRIBUTE_CONST
|
||||
#define __PMIX_HAVE_ATTRIBUTE_CONST PMIX_HAVE_ATTRIBUTE_CONST
|
||||
#define __PMIX_HAVE_ATTRIBUTE_CONST PMIX_HAVE_ATTRIBUTE_CONST
|
||||
#elif defined(__GNUC__)
|
||||
# define __PMIX_HAVE_ATTRIBUTE_CONST (GXX_ABOVE_3_4 || GCC_ABOVE_2_95)
|
||||
#else
|
||||
@ -108,7 +108,7 @@
|
||||
#endif
|
||||
|
||||
#ifdef PMIX_HAVE_ATTRIBUTE_PURE
|
||||
#define __PMIX_HAVE_ATTRIBUTE_PURE PMIX_HAVE_ATTRIBUTE_PURE
|
||||
#define __PMIX_HAVE_ATTRIBUTE_PURE PMIX_HAVE_ATTRIBUTE_PURE
|
||||
#elif defined(__GNUC__)
|
||||
# define __PMIX_HAVE_ATTRIBUTE_PURE (GXX_ABOVE_3_4 || GCC_ABOVE_2_96)
|
||||
#else
|
||||
@ -121,7 +121,7 @@
|
||||
#endif
|
||||
|
||||
#ifdef PMIX_HAVE_ATTRIBUTE_DEPRECATED
|
||||
#define __PMIX_HAVE_ATTRIBUTE_DEPRECATED PMIX_HAVE_ATTRIBUTE_DEPRECATED
|
||||
#define __PMIX_HAVE_ATTRIBUTE_DEPRECATED PMIX_HAVE_ATTRIBUTE_DEPRECATED
|
||||
#elif defined(__GNUC__)
|
||||
# define __PMIX_HAVE_ATTRIBUTE_DEPRECATED (GXX_ABOVE_3_4 || GCC_ABOVE_3_3)
|
||||
#else
|
||||
@ -178,6 +178,12 @@
|
||||
/* The pmix symbol prefix in all caps */
|
||||
#undef PMIX_SYM_PREFIX_CAPS
|
||||
|
||||
/* ensure we have the version info available for external users */
|
||||
#undef PMIX_MAJOR_VERSION
|
||||
#undef PMIX_MINOR_VERSION
|
||||
#undef PMIX_RELEASE_VERSION
|
||||
|
||||
|
||||
#undef BEGIN_C_DECLS
|
||||
#undef END_C_DECLS
|
||||
#if defined(c_plusplus) || defined(__cplusplus)
|
||||
|
@ -1,3 +1,4 @@
|
||||
/* include/pmix/pmix_common.h. Generated from pmix_common.h.in by configure. */
|
||||
/*
|
||||
* Copyright (c) 2013-2014 Intel, Inc. All rights reserved
|
||||
*
|
||||
@ -55,25 +56,6 @@
|
||||
#include <sys/time.h> /* for struct timeval */
|
||||
#endif
|
||||
|
||||
#ifndef PMIX_CONFIG_H
|
||||
|
||||
/* ensure we have the version info available for external users */
|
||||
#undef PMIX_MAJOR_VERSION
|
||||
#undef PMIX_MINOR_VERSION
|
||||
#undef PMIX_RELEASE_VERSION
|
||||
|
||||
#endif
|
||||
|
||||
#undef BEGIN_C_DECLS
|
||||
#undef END_C_DECLS
|
||||
#if defined(c_plusplus) || defined(__cplusplus)
|
||||
# define BEGIN_C_DECLS extern "C" {
|
||||
# define END_C_DECLS }
|
||||
#else
|
||||
#define BEGIN_C_DECLS /* empty */
|
||||
#define END_C_DECLS /* empty */
|
||||
#endif
|
||||
|
||||
BEGIN_C_DECLS
|
||||
|
||||
/**** PMIX CONSTANTS ****/
|
||||
@ -418,8 +400,29 @@ typedef struct {
|
||||
/* release the memory in the value struct data field */
|
||||
#define PMIX_VALUE_DESTRUCT(m) \
|
||||
do { \
|
||||
if (PMIX_STRING == (m)->type && NULL != (m)->data.string) { \
|
||||
free((m)->data.string); \
|
||||
if (PMIX_STRING == (m)->type) { \
|
||||
if (NULL != (m)->data.string) { \
|
||||
free((m)->data.string); \
|
||||
} \
|
||||
} else if (PMIX_BYTE_OBJECT == (m)->type) { \
|
||||
if (NULL != (m)->data.bo.bytes) { \
|
||||
free((m)->data.bo.bytes); \
|
||||
} \
|
||||
} else if (PMIX_INFO_ARRAY == (m)->type) { \
|
||||
size_t _n; \
|
||||
pmix_info_t *_p = (pmix_info_t*)((m)->data.array.array); \
|
||||
for (_n=0; _n < (m)->data.array.size; _n++) { \
|
||||
if (PMIX_STRING == _p[_n].value.type) { \
|
||||
if (NULL != _p[_n].value.data.string) { \
|
||||
free(_p[_n].value.data.string); \
|
||||
} \
|
||||
} else if (PMIX_BYTE_OBJECT == _p[_n].value.type) { \
|
||||
if (NULL != _p[_n].value.data.bo.bytes) { \
|
||||
free(_p[_n].value.data.bo.bytes); \
|
||||
} \
|
||||
} \
|
||||
} \
|
||||
free(_p); \
|
||||
} \
|
||||
} while(0);
|
||||
|
@ -308,8 +308,13 @@ typedef struct pmix_server_module_1_0_0_t {
|
||||
|
||||
/* Initialize the server support library, and provide a
|
||||
* pointer to a pmix_server_module_t structure
|
||||
* containing the caller's callback functions */
|
||||
pmix_status_t PMIx_server_init(pmix_server_module_t *module);
|
||||
* containing the caller's callback functions. The
|
||||
* array of pmix_info_t structs is used to pass
|
||||
* additional info that may be required by the server
|
||||
* when initializing - e.g., a user/group ID to set
|
||||
* on the rendezvous file for the Unix Domain Socket */
|
||||
pmix_status_t PMIx_server_init(pmix_server_module_t *module,
|
||||
pmix_info_t info[], size_t ninfo);
|
||||
|
||||
/* Finalize the server support library. If internal comm is
|
||||
* in-use, the server will shut it down at this time. All
|
||||
@ -376,6 +381,13 @@ pmix_status_t PMIx_server_register_nspace(const char nspace[], int nlocalprocs,
|
||||
pmix_info_t info[], size_t ninfo,
|
||||
pmix_op_cbfunc_t cbfunc, void *cbdata);
|
||||
|
||||
/* Deregister an nspace and purge all objects relating to
|
||||
* it, including any client info from that nspace. This is
|
||||
* intended to support persistent PMIx servers by providing
|
||||
* an opportunity for the host RM to tell the PMIx server
|
||||
* library to release all memory for a completed job */
|
||||
void PMIx_server_deregister_nspace(const char nspace[]);
|
||||
|
||||
/* Register a client process with the PMIx server library. The
|
||||
* expected user ID and group ID of the child process helps the
|
||||
* server library to properly authenticate clients as they connect
|
||||
@ -394,6 +406,12 @@ pmix_status_t PMIx_server_register_client(const pmix_proc_t *proc,
|
||||
void *server_object,
|
||||
pmix_op_cbfunc_t cbfunc, void *cbdata);
|
||||
|
||||
/* Deregister a client and purge all data relating to it. The
|
||||
* deregister_nspace API will automatically delete all client
|
||||
* info for that nspace - this API is therefore intended solely
|
||||
* for use in exception cases */
|
||||
void PMIx_server_deregister_client(const pmix_proc_t *proc);
|
||||
|
||||
/* Setup the environment of a child process to be forked
|
||||
* by the host so it can correctly interact with the PMIx
|
||||
* server. The PMIx client needs some setup information
|
||||
|
62
opal/mca/pmix/pmix1xx/pmix/man/man3/pmix_abort.3
Обычный файл
62
opal/mca/pmix/pmix1xx/pmix/man/man3/pmix_abort.3
Обычный файл
@ -0,0 +1,62 @@
|
||||
.TH "pmix_abort" "3" "2015\-10\-25" "PMIx Programmer\[aq]s Manual" "\@VERSION\@"
|
||||
.SH NAME
|
||||
.PP
|
||||
PMIx_Abort \- Abort the specified processes
|
||||
.SH SYNOPSIS
|
||||
.IP
|
||||
.nf
|
||||
\f[C]
|
||||
#include\ <pmix.h>
|
||||
|
||||
pmix_status_t\ PMIx_Abort(int\ status,\ const\ char\ msg[],
|
||||
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ pmix_proc_t\ procs[],\ size_t\ nprocs);
|
||||
\f[]
|
||||
.fi
|
||||
.SH ARGUMENTS
|
||||
.PP
|
||||
\f[I]status\f[] : Status value to be returned.
|
||||
A value of zero is permitted by PMIx, but may not be returned by some
|
||||
resource managers.
|
||||
.PP
|
||||
\f[I]msg\f[] : A string message to be displayed
|
||||
.PP
|
||||
\f[I]procs\f[] : An array of pmix_proc_t structures defining the
|
||||
processes to be aborted.
|
||||
A \f[I]NULL\f[] for the proc array indicates that all processes in the
|
||||
caller\[aq]s nspace are to be aborted.
|
||||
A wildcard value for the rank in any structure indicates that all
|
||||
processes in that nspace are to be aborted.
|
||||
.PP
|
||||
\f[I]nprocs\f[] : Number of pmix_proc_t structures in the \f[I]procs\f[]
|
||||
array
|
||||
.SH DESCRIPTION
|
||||
.PP
|
||||
Request that the provided array of procs be aborted, returning the
|
||||
provided \f[I]status\f[] and printing the provided message.
|
||||
A \f[I]NULL\f[] for the proc array indicates that all processes in the
|
||||
caller\[aq]s nspace are to be aborted.
|
||||
.PP
|
||||
The response to this request is somewhat dependent on the specific
|
||||
resource manager and its configuration (e.g., some resource managers
|
||||
will not abort the application if the provided \f[I]status\f[] is zero
|
||||
unless specifically configured to do so), and thus lies outside the
|
||||
control of PMIx itself.
|
||||
However, the client will inform the RM of the request that the
|
||||
application be aborted, regardless of the value of the provided
|
||||
\f[I]status\f[].
|
||||
.PP
|
||||
Passing a \f[I]NULL\f[] msg parameter is allowed.
|
||||
Note that race conditions caused by multiple processes calling
|
||||
PMIx_Abort are left to the server implementation to resolve with regard
|
||||
to which status is returned and what messages (if any) are printed.
|
||||
.SH RETURN VALUE
|
||||
.PP
|
||||
Returns PMIX_SUCCESS on success.
|
||||
On error, a negative value corresponding to a PMIx errno is returned.
|
||||
.SH ERRORS
|
||||
.PP
|
||||
PMIx errno values are defined in \f[C]pmix_common.h\f[].
|
||||
.SH NOTES
|
||||
.SH SEE ALSO
|
||||
.SH AUTHORS
|
||||
PMIx.
|
35
opal/mca/pmix/pmix1xx/pmix/man/man3/pmix_commit.3
Обычный файл
35
opal/mca/pmix/pmix1xx/pmix/man/man3/pmix_commit.3
Обычный файл
@ -0,0 +1,35 @@
|
||||
.TH "pmix_commit" "3" "2015\-10\-27" "PMIx Programmer\[aq]s Manual" "\@VERSION\@"
|
||||
.SH NAME
|
||||
.PP
|
||||
PMIx_Commit \- Push all previously \f[I]PMIx\f[]Put_ values to the local
|
||||
PMIx server.
|
||||
.SH SYNOPSIS
|
||||
.IP
|
||||
.nf
|
||||
\f[C]
|
||||
#include\ <pmix.h>
|
||||
|
||||
pmix_status_t\ PMIx_Commit(void);
|
||||
\f[]
|
||||
.fi
|
||||
.SH ARGUMENTS
|
||||
.PP
|
||||
\f[I]none\f[]
|
||||
.SH DESCRIPTION
|
||||
.PP
|
||||
This is an asynchronous operation \- the library will immediately return
|
||||
to the caller while the data is transmitted to the local server in the
|
||||
background
|
||||
.SH RETURN VALUE
|
||||
.PP
|
||||
Returns PMIX_SUCCESS on success.
|
||||
On error, a negative value corresponding to a PMIx errno is returned.
|
||||
.SH ERRORS
|
||||
.PP
|
||||
PMIx errno values are defined in \f[C]pmix_common.h\f[].
|
||||
.SH NOTES
|
||||
.SH SEE ALSO
|
||||
.PP
|
||||
\f[C]PMIx_Put\f[](3)
|
||||
.SH AUTHORS
|
||||
PMIx.
|
31
opal/mca/pmix/pmix1xx/pmix/man/man3/pmix_finalize.3
Обычный файл
31
opal/mca/pmix/pmix1xx/pmix/man/man3/pmix_finalize.3
Обычный файл
@ -0,0 +1,31 @@
|
||||
.TH "pmix_finalize" "3" "2015\-10\-27" "PMIx Programmer\[aq]s Manual" "\@VERSION\@"
|
||||
.SH NAME
|
||||
.PP
|
||||
PMIx_Finalize \- Finalize the PMIx Client
|
||||
.SH SYNOPSIS
|
||||
.IP
|
||||
.nf
|
||||
\f[C]
|
||||
#include\ <pmix.h>
|
||||
|
||||
pmix_status_t\ PMIx_Finalize(void);
|
||||
\f[]
|
||||
.fi
|
||||
.SH ARGUMENTS
|
||||
.SH DESCRIPTION
|
||||
.PP
|
||||
Finalize the PMIx client, closing the connection with the local PMIx
|
||||
server.
|
||||
.SH RETURN VALUE
|
||||
.PP
|
||||
Returns PMIX_SUCCESS on success.
|
||||
On error, a negative value corresponding to a PMIx errno is returned.
|
||||
.SH ERRORS
|
||||
.PP
|
||||
PMIx errno values are defined in \f[C]pmix_common.h\f[].
|
||||
.SH NOTES
|
||||
.SH SEE ALSO
|
||||
.PP
|
||||
\f[C]PMIx_Init\f[](3)
|
||||
.SH AUTHORS
|
||||
PMIx.
|
@ -1,4 +1,4 @@
|
||||
.TH "pmix_init" "3" "2015\-09\-09" "PMIx Programmer\[aq]s Manual" "\@VERSION\@"
|
||||
.TH "pmix_init" "3" "2015\-10\-25" "PMIx Programmer\[aq]s Manual" "\@VERSION\@"
|
||||
.SH NAME
|
||||
.PP
|
||||
PMIx_Init \- Initialize the PMIx Client
|
||||
@ -13,7 +13,8 @@ pmix_status_t\ PMIx_Init(pmix_proc_t\ *proc);
|
||||
.fi
|
||||
.SH ARGUMENTS
|
||||
.PP
|
||||
\f[I]proc\f[] : Fabric endpoint on which to initiate atomic operation.
|
||||
\f[I]proc\f[] : Pointer to a pmix_proc_t object in which the
|
||||
client\[aq]s namespace and rank are to be returned.
|
||||
.SH DESCRIPTION
|
||||
.PP
|
||||
Initialize the PMIx client, returning the process identifier assigned to
|
||||
@ -35,67 +36,14 @@ Note that the PMIx client library is referenced counted, and so multiple
|
||||
calls to PMIx_Init are allowed.
|
||||
Thus, one way to obtain the namespace and rank of the process is to
|
||||
simply call PMIx_Init with a non\-NULL parameter.
|
||||
.SS Atomic Data Types
|
||||
.PP
|
||||
Atomic functions may operate on one of the following identified data
|
||||
types.
|
||||
A given atomic function may support any datatype, subject to provider
|
||||
implementation constraints.
|
||||
.PP
|
||||
\f[I]FI_INT8\f[] : Signed 8\-bit integer.
|
||||
.PP
|
||||
\f[I]FI_UINT8\f[] : Unsigned 8\-bit integer.
|
||||
.PP
|
||||
\f[I]FI_INT16\f[] : Signed 16\-bit integer.
|
||||
.PP
|
||||
\f[I]FI_UINT16\f[] : Unsigned 16\-bit integer.
|
||||
.PP
|
||||
\f[I]FI_INT32\f[] : Signed 32\-bit integer.
|
||||
.PP
|
||||
\f[I]FI_UINT32\f[] : Unsigned 32\-bit integer.
|
||||
.PP
|
||||
\f[I]FI_INT64\f[] : Signed 64\-bit integer.
|
||||
.PP
|
||||
\f[I]FI_UINT64\f[] : Unsigned 64\-bit integer.
|
||||
.PP
|
||||
\f[I]FI_FLOAT\f[] : A single\-precision floating point value (IEEE 754).
|
||||
.PP
|
||||
\f[I]FI_DOUBLE\f[] : A double\-precision floating point value (IEEE
|
||||
754).
|
||||
.PP
|
||||
\f[I]FI_FLOAT_COMPLEX\f[] : An ordered pair of single\-precision
|
||||
floating point values (IEEE 754), with the first value representing the
|
||||
real portion of a complex number and the second representing the
|
||||
imaginary portion.
|
||||
.PP
|
||||
\f[I]FI_DOUBLE_COMPLEX\f[] : An ordered pair of double\-precision
|
||||
floating point values (IEEE 754), with the first value representing the
|
||||
real portion of a complex number and the second representing the
|
||||
imaginary portion.
|
||||
.PP
|
||||
\f[I]FI_LONG_DOUBLE\f[] : A double\-extended precision floating point
|
||||
value (IEEE 754).
|
||||
.PP
|
||||
\f[I]FI_LONG_DOUBLE_COMPLEX\f[] : An ordered pair of double\-extended
|
||||
precision floating point values (IEEE 754), with the first value
|
||||
representing the real portion of a complex number and the second
|
||||
representing the imaginary portion.
|
||||
.SH RETURN VALUE
|
||||
.PP
|
||||
Returns PMIX_SUCCESS on success.
|
||||
On error, a negative value corresponding to a PMIx errno is returned.
|
||||
PMIx errno values are defined in \f[C]pmix_common.h\f[].
|
||||
.SH ERRORS
|
||||
.PP
|
||||
\f[I]\-FI_EOPNOTSUPP\f[] : The requested atomic operation is not
|
||||
supported on this endpoint.
|
||||
.PP
|
||||
\f[I]\-FI_EMSGSIZE\f[] : The number of atomic operations in a single
|
||||
request exceeds that supported by the underlying provider.
|
||||
PMIx errno values are defined in \f[C]pmix_common.h\f[].
|
||||
.SH NOTES
|
||||
.SH SEE ALSO
|
||||
.PP
|
||||
\f[C]fi_getinfo\f[](3), \f[C]fi_endpoint\f[](3), \f[C]fi_domain\f[](3),
|
||||
\f[C]fi_cq\f[](3), \f[C]fi_rma\f[](3)
|
||||
.SH AUTHORS
|
||||
PMIx.
|
||||
|
30
opal/mca/pmix/pmix1xx/pmix/man/man3/pmix_initialized.3
Обычный файл
30
opal/mca/pmix/pmix1xx/pmix/man/man3/pmix_initialized.3
Обычный файл
@ -0,0 +1,30 @@
|
||||
.TH "pmix_initialized" "3" "2015\-10\-25" "PMIx Programmer\[aq]s Manual" "\@VERSION\@"
|
||||
.SH NAME
|
||||
.PP
|
||||
PMIx_Initialized \- Check if \f[I]PMIx\f[]Init_ has been called
|
||||
.SH SYNOPSIS
|
||||
.IP
|
||||
.nf
|
||||
\f[C]
|
||||
#include\ <pmix.h>
|
||||
|
||||
int\ PMIx_Initialized(void);
|
||||
\f[]
|
||||
.fi
|
||||
.SH ARGUMENTS
|
||||
.PP
|
||||
\f[I]none\f[]
|
||||
.SH DESCRIPTION
|
||||
.PP
|
||||
Check to see if the PMIx Client library has been intialized
|
||||
.SH RETURN VALUE
|
||||
.PP
|
||||
Returns \f[I]true\f[] if the PMIx Client has been initialized, and
|
||||
\f[I]false\f[] if not.
|
||||
.SH ERRORS
|
||||
.SH NOTES
|
||||
.SH SEE ALSO
|
||||
.PP
|
||||
\f[C]PMIx_Init\f[](3)
|
||||
.SH AUTHORS
|
||||
PMIx.
|
60
opal/mca/pmix/pmix1xx/pmix/man/man3/pmix_put.3
Обычный файл
60
opal/mca/pmix/pmix1xx/pmix/man/man3/pmix_put.3
Обычный файл
@ -0,0 +1,60 @@
|
||||
.TH "pmix_put" "3" "2015\-10\-25" "PMIx Programmer\[aq]s Manual" "\@VERSION\@"
|
||||
.SH NAME
|
||||
.PP
|
||||
PMIx_Put \- Push a value into the client\[aq]s namespace
|
||||
.SH SYNOPSIS
|
||||
.IP
|
||||
.nf
|
||||
\f[C]
|
||||
#include\ <pmix.h>
|
||||
|
||||
pmix_status_t\ PMIx_Init(pmix_scope_t\ scope,\ const\ char\ key[],\ pmix_value_t\ *val);
|
||||
\f[]
|
||||
.fi
|
||||
.SH ARGUMENTS
|
||||
.PP
|
||||
\f[I]scope\f[] : Defines a scope for data "put" by PMI per the
|
||||
following:
|
||||
.IP
|
||||
.nf
|
||||
\f[C]
|
||||
*\ PMI_LOCAL\ \-\ the\ data\ is\ intended\ only\ for\ other\ application
|
||||
\ \ \ \ \ \ \ \ \ \ \ \ \ \ processes\ on\ the\ same\ node.\ Data\ marked\ in\ this\ way
|
||||
\ \ \ \ \ \ \ \ \ \ \ \ \ \ will\ not\ be\ included\ in\ data\ packages\ sent\ to\ remote\ requestors
|
||||
*\ PMI_REMOTE\ \-\ the\ data\ is\ intended\ solely\ for\ applications\ processes\ on
|
||||
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ remote\ nodes.\ Data\ marked\ in\ this\ way\ will\ not\ be\ shared\ with
|
||||
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ other\ processes\ on\ the\ same\ node
|
||||
*\ PMI_GLOBAL\ \-\ the\ data\ is\ to\ be\ shared\ with\ all\ other\ requesting\ processes,
|
||||
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ regardless\ of\ location
|
||||
\f[]
|
||||
.fi
|
||||
.PP
|
||||
\f[I]key\f[] String key identifying the information.
|
||||
This can be either one of the PMIx defined attributes, or a
|
||||
user\-defined value
|
||||
.PP
|
||||
\f[I]val\f[] Pointer to a pmix_value_t structure containing the data to
|
||||
be pushed along with the type of the provided data.
|
||||
.SH DESCRIPTION
|
||||
.PP
|
||||
Push a value into the client\[aq]s namespace.
|
||||
The client library will cache the information locally until
|
||||
\f[I]PMIx\f[]Commit_ is called.
|
||||
The provided scope value is passed to the local PMIx server, which will
|
||||
distribute the data as directed.
|
||||
.SH RETURN VALUE
|
||||
.PP
|
||||
Returns PMIX_SUCCESS on success.
|
||||
On error, a negative value corresponding to a PMIx errno is returned.
|
||||
.SH ERRORS
|
||||
.PP
|
||||
PMIx errno values are defined in \f[C]pmix_common.h\f[].
|
||||
.SH NOTES
|
||||
.PP
|
||||
See \[aq]pmix_common.h\[aq] for definition of the pmix_value_t
|
||||
structure.
|
||||
.SH SEE ALSO
|
||||
.PP
|
||||
\f[C]PMIx_Constants\f[](7), \f[C]PMIx_Structures\f[](7)
|
||||
.SH AUTHORS
|
||||
PMIx.
|
@ -1,241 +1,35 @@
|
||||
.TH "pmix" "7" "2015\-09\-09" "PMIx Programmer\[aq]s Manual" "\@VERSION\@"
|
||||
.TH "pmix" "7" "2015\-10\-29" "PMIx Programmer\[aq]s Manual" "\@VERSION\@"
|
||||
.SH NAME
|
||||
.PP
|
||||
Fabric Interface Library
|
||||
Process Management Interface \- Exascale
|
||||
.SH SYNOPSIS
|
||||
.IP
|
||||
.nf
|
||||
\f[C]
|
||||
#include\ <rdma/fabric.h>
|
||||
#include\ <pmix.h>
|
||||
\f[]
|
||||
.fi
|
||||
.PP
|
||||
Libfabric is a high\-performance fabric software library designed to
|
||||
provide low\-latency interfaces to fabric hardware.
|
||||
.SH OVERVIEW
|
||||
.PP
|
||||
Libfabric provides \[aq]process direct I/O\[aq] to application software
|
||||
communicating across fabric software and hardware.
|
||||
Process direct I/O, historically referred to as RDMA, allows an
|
||||
application to directly access network resources without operating
|
||||
system interventions.
|
||||
Data transfers can occur directly to and from application memory.
|
||||
The Process Management Interface (PMI) has been used for quite some time
|
||||
as a means of exchanging wireup information needed for interprocess
|
||||
communication.
|
||||
Two versions (PMI\-1 and PMI\-2) have been released as part of the MPICH
|
||||
effort.
|
||||
While PMI\-2 demonstrates better scaling properties than its PMI\-1
|
||||
predecessor, attaining rapid launch and wireup of the roughly 1M
|
||||
processes executing across 100k nodes expected for exascale operations
|
||||
remains challenging.
|
||||
.PP
|
||||
There are two components to the libfabric software:
|
||||
.PP
|
||||
\f[I]Fabric Providers\f[] : Conceptually, a fabric provider may be
|
||||
viewed as a local hardware NIC driver, though a provider is not limited
|
||||
by this definition.
|
||||
The first component of libfabric is a general purpose framework that is
|
||||
capable of handling different types of fabric hardware.
|
||||
All fabric hardware devices and their software drivers are required to
|
||||
support this framework.
|
||||
Devices and the drivers that plug into the libfabric framework are
|
||||
referred to as fabric providers, or simply providers.
|
||||
Provider details may be found in \f[C]fi_provider\f[](7).
|
||||
.PP
|
||||
\f[I]Fabric Interfaces\f[] : The second component is a set of
|
||||
communication operations.
|
||||
Libfabric defines several sets of communication functions that providers
|
||||
can support.
|
||||
It is not required that providers implement all the interfaces that are
|
||||
defined; however, providers clearly indicate which interfaces they do
|
||||
support.
|
||||
.SH FABRIC INTERFACES
|
||||
.PP
|
||||
The fabric interfaces are designed such that they are cohesive and not
|
||||
simply a union of disjoint interfaces.
|
||||
The interfaces are logically divided into two groups: control interfaces
|
||||
and communication operations.
|
||||
The control interfaces are a common set of operations that provide
|
||||
access to local communication resources, such as address vectors and
|
||||
event queues.
|
||||
The communication operations expose particular models of communication
|
||||
and fabric functionality, such as message queues, remote memory access,
|
||||
and atomic operations.
|
||||
Communication operations are associated with fabric endpoints.
|
||||
.PP
|
||||
Applications will typically use the control interfaces to discover local
|
||||
capabilities and allocate necessary resources.
|
||||
They will then allocate and configure a communication endpoint to send
|
||||
and receive data, or perform other types of data transfers, with remote
|
||||
endpoints.
|
||||
.SH CONTROL INTERFACES
|
||||
.PP
|
||||
The control interfaces APIs provide applications access to network
|
||||
resources.
|
||||
This involves listing all the interfaces available, obtaining the
|
||||
capabilities of the interfaces and opening a provider.
|
||||
.PP
|
||||
\f[I]fi_getinfo \- Fabric Information\f[] : The fi_getinfo call is the
|
||||
base call used to discover and request fabric services offered by the
|
||||
system.
|
||||
Applications can use this call to indicate the type of communication
|
||||
that they desire.
|
||||
The results from fi_getinfo, fi_info, are used to reserve and configure
|
||||
fabric resources.
|
||||
.PP
|
||||
fi_getinfo returns a list of fi_info structures.
|
||||
Each structure references a single fabric provider, indicating the
|
||||
interfaces that the provider supports, along with a named set of
|
||||
resources.
|
||||
A fabric provider may include multiple fi_info structures in the
|
||||
returned list.
|
||||
.PP
|
||||
\f[I]fi_fabric \- Fabric Domain\f[] : A fabric domain represents a
|
||||
collection of hardware and software resources that access a single
|
||||
physical or virtual network.
|
||||
All network ports on a system that can communicate with each other
|
||||
through the fabric belong to the same fabric domain.
|
||||
A fabric domain shares network addresses and can span multiple
|
||||
providers.
|
||||
libfabric supports systems connected to multiple fabrics.
|
||||
.PP
|
||||
\f[I]fi_domain \- Access Domains\f[] : An access domain represents a
|
||||
single logical connection into a fabric.
|
||||
It may map to a single physical or virtual NIC or a port.
|
||||
An access domain defines the boundary across which fabric resources may
|
||||
be associated.
|
||||
Each access domain belongs to a single fabric domain.
|
||||
.PP
|
||||
\f[I]fi_endpoint \- Fabric Endpoint\f[] : A fabric endpoint is a
|
||||
communication portal.
|
||||
An endpoint may be either active or passive.
|
||||
Passive endpoints are used to listen for connection requests.
|
||||
Active endpoints can perform data transfers.
|
||||
Endpoints are configured with specific communication capabilities and
|
||||
data transfer interfaces.
|
||||
.PP
|
||||
\f[I]fi_eq \- Event Queue\f[] : Event queues, are used to collect and
|
||||
report the completion of asynchronous operations and events.
|
||||
Event queues report events that are not directly associated with data
|
||||
transfer operations.
|
||||
.PP
|
||||
\f[I]fi_cq \- Completion Queue\f[] : Completion queues are
|
||||
high\-performance event queues used to report the completion of data
|
||||
transfer operations.
|
||||
.PP
|
||||
\f[I]fi_cntr \- Event Counters\f[] : Event counters are used to report
|
||||
the number of completed asynchronous operations.
|
||||
Event counters are considered light\-weight, in that a completion simply
|
||||
increments a counter, rather than placing an entry into an event queue.
|
||||
.PP
|
||||
\f[I]fi_mr \- Memory Region\f[] : Memory regions describe application
|
||||
local memory buffers.
|
||||
In order for fabric resources to access application memory, the
|
||||
application must first grant permission to the fabric provider by
|
||||
constructing a memory region.
|
||||
Memory regions are required for specific types of data transfer
|
||||
operations, such as RMA transfers (see below).
|
||||
.PP
|
||||
\f[I]fi_av \- Address Vector\f[] : Address vectors are used to map
|
||||
higher level addresses, such as IP addresses, which may be more natural
|
||||
for an application to use, into fabric specific addresses.
|
||||
The use of address vectors allows providers to reduce the amount of
|
||||
memory required to maintain large address look\-up tables, and eliminate
|
||||
expensive address resolution and look\-up methods during data transfer
|
||||
operations.
|
||||
.SH DATA TRANSFER INTERFACES
|
||||
.PP
|
||||
Fabric endpoints are associated with multiple data transfer interfaces.
|
||||
Each interface set is designed to support a specific style of
|
||||
communication, with an endpoint allowing the different interfaces to be
|
||||
used in conjunction.
|
||||
The following data transfer interfaces are defined by libfabric.
|
||||
.PP
|
||||
\f[I]fi_msg \- Message Queue\f[] : Message queues expose a simple,
|
||||
message\-based FIFO queue interface to the application.
|
||||
Message data transfers allow applications to send and receive data with
|
||||
message boundaries being maintained.
|
||||
.PP
|
||||
\f[I]fi_tagged \- Tagged Message Queues\f[] : Tagged message lists
|
||||
expose send/receive data transfer operations built on the concept of
|
||||
tagged messaging.
|
||||
The tagged message queue is conceptually similar to standard message
|
||||
queues, but with the addition of 64\-bit tags for each message.
|
||||
Sent messages are matched with receive buffers that are tagged with a
|
||||
similar value.
|
||||
.PP
|
||||
\f[I]fi_rma \- Remote Memory Access\f[] : RMA transfers are one\-sided
|
||||
operations that read or write data directly to a remote memory region.
|
||||
Other than defining the appropriate memory region, RMA operations do not
|
||||
require interaction at the target side for the data transfer to
|
||||
complete.
|
||||
.PP
|
||||
\f[I]fi_atomic \- Atomic\f[] : Atomic operations can perform one of
|
||||
several operations on a remote memory region.
|
||||
Atomic operations include well\-known functionality, such as atomic\-add
|
||||
and compare\-and\-swap, plus several other pre\-defined calls.
|
||||
Unlike other data transfer interfaces, atomic operations are aware of
|
||||
the data formatting at the target memory region.
|
||||
.SH LOGGING INTERFACE
|
||||
.PP
|
||||
Logging can be controlled using the FI_LOG_LEVEL, FI_LOG_PROV, and
|
||||
FI_LOG_SUBSYS environment variables.
|
||||
.PP
|
||||
\f[I]FI_LOG_LEVEL\f[] : FI_LOG_LEVEL controls the amount of logging data
|
||||
that is output.
|
||||
The following log levels are defined.
|
||||
.IP \[bu] 2
|
||||
\f[I]Warn\f[] : Warn is the least verbose setting and is intended for
|
||||
reporting errors or warnings.
|
||||
.IP \[bu] 2
|
||||
\f[I]Trace\f[] : Trace is more verbose and is meant to include
|
||||
non\-detailed output helpful to tracing program execution.
|
||||
.IP \[bu] 2
|
||||
\f[I]Info\f[] : Info is high traffic and meant for detailed output.
|
||||
.IP \[bu] 2
|
||||
\f[I]Debug\f[] : Debug is high traffic and is likely to impact
|
||||
application performance.
|
||||
Debug output is only available if the library has been compiled with
|
||||
debugging enabled.
|
||||
.PP
|
||||
\f[I]FI_LOG_PROV\f[] : The FI_LOG_PROV environment variable enables or
|
||||
disables logging from specific providers.
|
||||
Providers can be enabled by listing them in a comma separated fashion.
|
||||
If the list begins with the \[aq]^\[aq] symbol, then the list will be
|
||||
negated.
|
||||
By default all providers are enabled.
|
||||
.PP
|
||||
Example: To enable logging from the psm and sockets provider:
|
||||
FI_LOG_PROV="psm,sockets"
|
||||
.PP
|
||||
Example: To enable logging from providers other than psm:
|
||||
FI_LOG_PROV="^psm"
|
||||
.PP
|
||||
\f[I]FI_LOG_SUBSYS\f[] : The FI_LOG_SUBSYS environment variable enables
|
||||
or disables logging at the subsystem level.
|
||||
The syntax for enabling or disabling subsystems is similar to that used
|
||||
for FI_LOG_PROV.
|
||||
The following subsystems are defined.
|
||||
.IP \[bu] 2
|
||||
\f[I]core\f[] : Provides output related to the core framework and its
|
||||
management of providers.
|
||||
.IP \[bu] 2
|
||||
\f[I]fabric\f[] : Provides output specific to interactions associated
|
||||
with the fabric object.
|
||||
.IP \[bu] 2
|
||||
\f[I]domain\f[] : Provides output specific to interactions associated
|
||||
with the domain object.
|
||||
.IP \[bu] 2
|
||||
\f[I]ep_ctrl\f[] : Provides output specific to endpoint non\-data
|
||||
transfer operations, such as CM operations.
|
||||
.IP \[bu] 2
|
||||
\f[I]ep_data\f[] : Provides output specific to endpoint data transfer
|
||||
operations.
|
||||
.IP \[bu] 2
|
||||
\f[I]av\f[] : Provides output specific to address vector operations.
|
||||
.IP \[bu] 2
|
||||
\f[I]cq\f[] : Provides output specific to completion queue operations.
|
||||
.IP \[bu] 2
|
||||
\f[I]eq\f[] : Provides output specific to event queue operations.
|
||||
.IP \[bu] 2
|
||||
\f[I]mr\f[] : Provides output specific to memory registration.
|
||||
PMI Exascale (PMIx) represents an attempt to resolve these questions by
|
||||
providing an extended version of the PMI standard specifically designed
|
||||
to support clusters up to and including exascale sizes.
|
||||
The overall objective of the project is not to branch the existing
|
||||
pseudo\-standard definitions \- in fact, PMIx fully supports both of the
|
||||
existing PMI\-1 and PMI\-2 APIs \- but rather to (a) augment and extend
|
||||
those APIs to eliminate some current restrictions that impact
|
||||
scalability, and (b) provide a reference implementation of the
|
||||
PMI\-server that demonstrates the desired level of scalability.
|
||||
.SH SEE ALSO
|
||||
.PP
|
||||
\f[C]fi_provider\f[](7), \f[C]fi_getinfo\f[](3),
|
||||
\f[C]fi_endpoint\f[](3), \f[C]fi_domain\f[](3), \f[C]fi_av\f[](3),
|
||||
\f[C]fi_eq\f[](3), \f[C]fi_cq\f[](3), \f[C]fi_cntr\f[](3),
|
||||
\f[C]fi_mr\f[](3)
|
||||
.SH AUTHORS
|
||||
PMIx.
|
||||
|
@ -1,4 +1,4 @@
|
||||
.TH "pmix_constants" "7" "2015\-09\-16" "PMIx Programmer\[aq]s Manual" "\@VERSION\@"
|
||||
.TH "pmix_constants" "7" "2015\-10\-25" "PMIx Programmer\[aq]s Manual" "\@VERSION\@"
|
||||
.SH NAME
|
||||
.PP
|
||||
PMIx Constants
|
||||
@ -87,8 +87,6 @@ Unlike other data transfer interfaces, atomic operations are aware of
|
||||
the data formatting at the target memory region.
|
||||
.SH SEE ALSO
|
||||
.PP
|
||||
\f[C]pmix\f[](7), \f[C]fi_getinfo\f[](3), \f[C]fi_endpoint\f[](3),
|
||||
\f[C]fi_domain\f[](3), \f[C]fi_av\f[](3), \f[C]fi_eq\f[](3),
|
||||
\f[C]fi_cq\f[](3), \f[C]fi_cntr\f[](3), \f[C]fi_mr\f[](3)
|
||||
\f[C]pmix\f[](7)
|
||||
.SH AUTHORS
|
||||
PMIx.
|
||||
|
@ -34,7 +34,7 @@
|
||||
#include "src/class/pmix_object.h"
|
||||
#include "src/class/pmix_pointer_array.h"
|
||||
#include "src/class/pmix_list.h"
|
||||
#include <pmix_common.h>
|
||||
#include <pmix/pmix_common.h>
|
||||
|
||||
BEGIN_C_DECLS
|
||||
|
||||
|
@ -40,7 +40,7 @@
|
||||
|
||||
#include "src/class/pmix_list.h"
|
||||
|
||||
#include <pmix_common.h>
|
||||
#include <pmix/pmix_common.h>
|
||||
|
||||
BEGIN_C_DECLS
|
||||
|
||||
|
@ -30,7 +30,7 @@
|
||||
#endif
|
||||
|
||||
#include "src/class/pmix_object.h"
|
||||
#include <pmix_common.h>
|
||||
#include <pmix/pmix_common.h>
|
||||
|
||||
BEGIN_C_DECLS
|
||||
|
||||
|
@ -507,7 +507,7 @@ int PMI2_Job_Connect(const char jobid[], PMI2_Connect_comm_t *conn)
|
||||
|
||||
PMI2_CHECK();
|
||||
|
||||
if (NULL == jobid || NULL == conn) {
|
||||
if (NULL == conn) {
|
||||
return PMI2_ERR_INVALID_ARGS;
|
||||
}
|
||||
|
||||
@ -524,10 +524,6 @@ int PMI2_Job_Disconnect(const char jobid[])
|
||||
|
||||
PMI2_CHECK();
|
||||
|
||||
if (NULL == jobid) {
|
||||
return PMI2_ERR_INVALID_ARGS;
|
||||
}
|
||||
|
||||
(void)strncpy(proc.nspace, (jobid ? jobid : myproc.nspace), sizeof(myproc.nspace));
|
||||
proc.rank = PMIX_RANK_WILDCARD;
|
||||
rc = PMIx_Disconnect(&proc, 1, NULL, 0);
|
||||
|
@ -14,7 +14,7 @@
|
||||
#include <private/pmix_socket_errno.h>
|
||||
|
||||
#include <pmix.h>
|
||||
#include <pmix_common.h>
|
||||
#include <pmix/pmix_common.h>
|
||||
#include <pmix_server.h>
|
||||
#include "src/include/pmix_globals.h"
|
||||
|
||||
|
@ -30,7 +30,7 @@
|
||||
#endif
|
||||
#include PMIX_EVENT_HEADER
|
||||
|
||||
#include <pmix_common.h>
|
||||
#include <pmix/pmix_common.h>
|
||||
|
||||
#include "src/buffer_ops/types.h"
|
||||
#include "src/class/pmix_hash_table.h"
|
||||
|
@ -12,7 +12,7 @@
|
||||
|
||||
#include <private/autogen/config.h>
|
||||
#include <pmix/rename.h>
|
||||
#include <pmix_common.h>
|
||||
#include <pmix/pmix_common.h>
|
||||
|
||||
#include "src/include/pmix_globals.h"
|
||||
#include "src/util/argv.h"
|
||||
|
@ -10,7 +10,7 @@
|
||||
|
||||
#include <private/autogen/config.h>
|
||||
#include <pmix/rename.h>
|
||||
#include <pmix_common.h>
|
||||
#include <pmix/pmix_common.h>
|
||||
|
||||
#include "src/include/pmix_globals.h"
|
||||
#include "src/util/argv.h"
|
||||
|
@ -13,7 +13,7 @@
|
||||
#include <private/types.h>
|
||||
#include <private/pmix_stdint.h>
|
||||
|
||||
#include <pmix_common.h>
|
||||
#include <pmix/pmix_common.h>
|
||||
#include "src/include/pmix_globals.h"
|
||||
|
||||
#ifdef HAVE_STRING_H
|
||||
|
@ -21,7 +21,7 @@
|
||||
#include <private/pmix_socket_errno.h>
|
||||
|
||||
#include <pmix_server.h>
|
||||
#include <pmix_common.h>
|
||||
#include <pmix/pmix_common.h>
|
||||
#include "src/include/pmix_globals.h"
|
||||
|
||||
#ifdef HAVE_STRING_H
|
||||
@ -44,6 +44,7 @@
|
||||
#include <sys/types.h>
|
||||
#endif
|
||||
#include <ctype.h>
|
||||
#include <sys/stat.h>
|
||||
#include PMIX_EVENT_HEADER
|
||||
|
||||
#include "src/util/argv.h"
|
||||
@ -140,11 +141,13 @@ static void _queue_message(int fd, short args, void *cbdata)
|
||||
{
|
||||
pmix_usock_queue_t *queue = (pmix_usock_queue_t*)cbdata;
|
||||
pmix_usock_send_t *snd;
|
||||
|
||||
pmix_output_verbose(2, pmix_globals.debug_output,
|
||||
"[%s:%d] queue callback called: reply to %s:%d on tag %d",
|
||||
__FILE__, __LINE__,
|
||||
(queue->peer)->info->nptr->nspace,
|
||||
(queue->peer)->info->rank, (queue->tag));
|
||||
|
||||
snd = PMIX_NEW(pmix_usock_send_t);
|
||||
snd->hdr.pindex = pmix_globals.pindex;
|
||||
snd->hdr.tag = (queue->tag);
|
||||
@ -222,12 +225,16 @@ static pmix_status_t initialize_server_base(pmix_server_module_t *module)
|
||||
pmix_globals.myid.rank = strtol(evar, NULL, 10);
|
||||
}
|
||||
|
||||
/* initialize the datatype support */
|
||||
pmix_bfrop_open();
|
||||
|
||||
/* setup the server-specific globals */
|
||||
PMIX_CONSTRUCT(&pmix_server_globals.clients, pmix_pointer_array_t);
|
||||
pmix_pointer_array_init(&pmix_server_globals.clients, 1, INT_MAX, 1);
|
||||
PMIX_CONSTRUCT(&pmix_server_globals.collectives, pmix_list_t);
|
||||
PMIX_CONSTRUCT(&pmix_server_globals.remote_pnd, pmix_list_t);
|
||||
PMIX_CONSTRUCT(&pmix_server_globals.local_reqs, pmix_list_t);
|
||||
PMIX_CONSTRUCT(&pmix_server_globals.gdata, pmix_buffer_t);
|
||||
|
||||
/* see if debug is requested */
|
||||
if (NULL != (evar = getenv("PMIX_DEBUG"))) {
|
||||
@ -243,9 +250,6 @@ static pmix_status_t initialize_server_base(pmix_server_module_t *module)
|
||||
memset(&pmix_host_server, 0, sizeof(pmix_server_module_t));
|
||||
pmix_host_server = *module;
|
||||
|
||||
/* initialize the datatype support */
|
||||
pmix_bfrop_open();
|
||||
|
||||
/* init security */
|
||||
pmix_sec_init();
|
||||
security_mode = strdup(pmix_sec.name);
|
||||
@ -267,17 +271,19 @@ static pmix_status_t initialize_server_base(pmix_server_module_t *module)
|
||||
snprintf(myaddress.sun_path, sizeof(myaddress.sun_path)-1, "%s/pmix-%d", tdir, pid);
|
||||
asprintf(&myuri, "%s:%lu:%s", pmix_globals.myid.nspace, (unsigned long)pmix_globals.myid.rank, myaddress.sun_path);
|
||||
|
||||
|
||||
pmix_output_verbose(2, pmix_globals.debug_output,
|
||||
"pmix:server constructed uri %s", myuri);
|
||||
|
||||
return PMIX_SUCCESS;
|
||||
}
|
||||
|
||||
pmix_status_t PMIx_server_init(pmix_server_module_t *module)
|
||||
pmix_status_t PMIx_server_init(pmix_server_module_t *module,
|
||||
pmix_info_t info[], size_t ninfo)
|
||||
{
|
||||
pmix_usock_posted_recv_t *req;
|
||||
pmix_status_t rc;
|
||||
size_t n;
|
||||
pmix_kval_t kv;
|
||||
|
||||
++pmix_globals.init_cntr;
|
||||
if (1 < pmix_globals.init_cntr) {
|
||||
@ -298,6 +304,34 @@ pmix_status_t PMIx_server_init(pmix_server_module_t *module)
|
||||
if (NULL == (pmix_globals.evbase = pmix_start_progress_thread())) {
|
||||
return PMIX_ERR_INIT;
|
||||
}
|
||||
/* check the info keys for a directive about the uid/gid
|
||||
* to be set for the rendezvous file, and any info we
|
||||
* need to provide to every client */
|
||||
if (NULL != info) {
|
||||
PMIX_CONSTRUCT(&kv, pmix_kval_t);
|
||||
for (n=0; n < ninfo; n++) {
|
||||
if (0 == strcmp(info[n].key, PMIX_USERID)) {
|
||||
/* the userid is in the uint32_t storage */
|
||||
chown(myaddress.sun_path, info[n].value.data.uint32, -1);
|
||||
} else if (0 == strcmp(info[n].key, PMIX_GRPID)) {
|
||||
/* the grpid is in the uint32_t storage */
|
||||
chown(myaddress.sun_path, -1, info[n].value.data.uint32);
|
||||
} else {
|
||||
/* store and pass along to every client */
|
||||
kv.key = info[n].key;
|
||||
kv.value = &info[n].value;
|
||||
if (PMIX_SUCCESS != (rc = pmix_bfrop.pack(&pmix_server_globals.gdata, &kv, 1, PMIX_KVAL))) {
|
||||
PMIX_ERROR_LOG(rc);
|
||||
PMIX_DESTRUCT(&kv);
|
||||
return rc;
|
||||
}
|
||||
}
|
||||
}
|
||||
/* protect the incoming data */
|
||||
kv.key = NULL;
|
||||
kv.value = NULL;
|
||||
PMIX_DESTRUCT(&kv);
|
||||
}
|
||||
|
||||
/* setup the wildcard recv for inbound messages from clients */
|
||||
req = PMIX_NEW(pmix_usock_posted_recv_t);
|
||||
@ -329,10 +363,14 @@ static void cleanup_server_state(void)
|
||||
PMIX_LIST_DESTRUCT(&pmix_server_globals.collectives);
|
||||
PMIX_LIST_DESTRUCT(&pmix_server_globals.remote_pnd);
|
||||
PMIX_LIST_DESTRUCT(&pmix_server_globals.local_reqs);
|
||||
PMIX_DESTRUCT(&pmix_server_globals.gdata);
|
||||
|
||||
if (NULL != myuri) {
|
||||
free(myuri);
|
||||
}
|
||||
if (NULL != security_mode) {
|
||||
free(security_mode);
|
||||
}
|
||||
|
||||
pmix_bfrop_close();
|
||||
pmix_sec_finalize();
|
||||
@ -571,6 +609,45 @@ pmix_status_t PMIx_server_register_nspace(const char nspace[], int nlocalprocs,
|
||||
return PMIX_SUCCESS;
|
||||
}
|
||||
|
||||
static void _deregister_nspace(int sd, short args, void *cbdata)
|
||||
{
|
||||
pmix_setup_caddy_t *cd = (pmix_setup_caddy_t*)cbdata;
|
||||
pmix_nspace_t *tmp;
|
||||
|
||||
pmix_output_verbose(2, pmix_globals.debug_output,
|
||||
"pmix:server _deregister_nspace %s",
|
||||
cd->proc.nspace);
|
||||
|
||||
/* see if we already have this nspace */
|
||||
PMIX_LIST_FOREACH(tmp, &pmix_globals.nspaces, pmix_nspace_t) {
|
||||
if (0 == strcmp(tmp->nspace, cd->proc.nspace)) {
|
||||
pmix_list_remove_item(&pmix_globals.nspaces, &tmp->super);
|
||||
PMIX_RELEASE(tmp);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
PMIX_RELEASE(cd);
|
||||
}
|
||||
|
||||
void PMIx_server_deregister_nspace(const char nspace[])
|
||||
{
|
||||
pmix_setup_caddy_t *cd;
|
||||
|
||||
pmix_output_verbose(2, pmix_globals.debug_output,
|
||||
"pmix:server deregister nspace %s",
|
||||
nspace);
|
||||
|
||||
cd = PMIX_NEW(pmix_setup_caddy_t);
|
||||
(void)strncpy(cd->proc.nspace, nspace, PMIX_MAX_NSLEN);
|
||||
|
||||
/* we have to push this into our event library to avoid
|
||||
* potential threading issues */
|
||||
event_assign(&cd->ev, pmix_globals.evbase, -1,
|
||||
EV_WRITE, _deregister_nspace, cd);
|
||||
event_active(&cd->ev, EV_WRITE, 1);
|
||||
}
|
||||
|
||||
static void _execute_collective(int sd, short args, void *cbdata)
|
||||
{
|
||||
pmix_trkr_caddy_t *tcd = (pmix_trkr_caddy_t*)cbdata;
|
||||
@ -755,6 +832,60 @@ pmix_status_t PMIx_server_register_client(const pmix_proc_t *proc,
|
||||
return PMIX_SUCCESS;
|
||||
}
|
||||
|
||||
static void _deregister_client(int sd, short args, void *cbdata)
|
||||
{
|
||||
pmix_setup_caddy_t *cd = (pmix_setup_caddy_t*)cbdata;
|
||||
pmix_rank_info_t *info;
|
||||
pmix_nspace_t *nptr, *tmp;
|
||||
|
||||
pmix_output_verbose(2, pmix_globals.debug_output,
|
||||
"pmix:server _deregister_client for nspace %s rank %d",
|
||||
cd->proc.nspace, cd->proc.rank);
|
||||
|
||||
/* see if we already have this nspace */
|
||||
nptr = NULL;
|
||||
PMIX_LIST_FOREACH(tmp, &pmix_globals.nspaces, pmix_nspace_t) {
|
||||
if (0 == strcmp(tmp->nspace, cd->proc.nspace)) {
|
||||
nptr = tmp;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (NULL == nptr) {
|
||||
/* nothing to do */
|
||||
goto cleanup;
|
||||
}
|
||||
/* find an remove this client */
|
||||
PMIX_LIST_FOREACH(info, &nptr->server->ranks, pmix_rank_info_t) {
|
||||
if (info->rank == cd->proc.rank) {
|
||||
pmix_list_remove_item(&nptr->server->ranks, &info->super);
|
||||
PMIX_RELEASE(info);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
cleanup:
|
||||
PMIX_RELEASE(cd);
|
||||
}
|
||||
|
||||
void PMIx_server_deregister_client(const pmix_proc_t *proc)
|
||||
{
|
||||
pmix_setup_caddy_t *cd;
|
||||
|
||||
pmix_output_verbose(2, pmix_globals.debug_output,
|
||||
"pmix:server deregister client %s:%d",
|
||||
proc->nspace, proc->rank);
|
||||
|
||||
cd = PMIX_NEW(pmix_setup_caddy_t);
|
||||
(void)strncpy(cd->proc.nspace, proc->nspace, PMIX_MAX_NSLEN);
|
||||
cd->proc.rank = proc->rank;
|
||||
|
||||
/* we have to push this into our event library to avoid
|
||||
* potential threading issues */
|
||||
event_assign(&cd->ev, pmix_globals.evbase, -1,
|
||||
EV_WRITE, _deregister_client, cd);
|
||||
event_active(&cd->ev, EV_WRITE, 1);
|
||||
}
|
||||
|
||||
/* setup the envars for a child process */
|
||||
pmix_status_t PMIx_server_setup_fork(const pmix_proc_t *proc, char ***env)
|
||||
{
|
||||
@ -1940,6 +2071,7 @@ static pmix_status_t server_switchyard(pmix_peer_t *peer, uint32_t tag,
|
||||
if (PMIX_REQ_CMD == cmd) {
|
||||
reply = PMIX_NEW(pmix_buffer_t);
|
||||
pmix_bfrop.copy_payload(reply, &(peer->info->nptr->server->job_info));
|
||||
pmix_bfrop.copy_payload(reply, &(pmix_server_globals.gdata));
|
||||
PMIX_SERVER_QUEUE_REPLY(peer, tag, reply);
|
||||
return PMIX_SUCCESS;
|
||||
}
|
||||
|
@ -20,7 +20,6 @@
|
||||
#include <private/pmix_stdint.h>
|
||||
#include <private/pmix_socket_errno.h>
|
||||
|
||||
#include <pmix_common.h>
|
||||
#include <pmix_server.h>
|
||||
#include "src/include/pmix_globals.h"
|
||||
|
||||
@ -115,7 +114,7 @@ pmix_status_t pmix_server_get(pmix_buffer_t *buf,
|
||||
pmix_nspace_t *ns, *nptr;
|
||||
pmix_info_t *info=NULL;
|
||||
size_t ninfo=0;
|
||||
pmix_dmdx_local_t *lcd, *cd;
|
||||
pmix_dmdx_local_t *lcd;
|
||||
pmix_rank_info_t *iptr;
|
||||
pmix_hash_table_t *ht;
|
||||
bool local;
|
||||
@ -458,7 +457,6 @@ static void _process_dmdx_reply(int fd, short args, void *cbdata)
|
||||
pmix_kval_t *kp;
|
||||
pmix_nspace_t *ns, *nptr;
|
||||
pmix_status_t rc;
|
||||
pmix_buffer_t xfer, pbkt, *xptr;
|
||||
|
||||
pmix_output_verbose(2, pmix_globals.debug_output,
|
||||
"[%s:%d] process dmdx reply from %s:%d",
|
||||
|
@ -41,6 +41,7 @@
|
||||
#include <sys/types.h>
|
||||
#endif
|
||||
#include <ctype.h>
|
||||
#include <sys/stat.h>
|
||||
#include PMIX_EVENT_HEADER
|
||||
#include <pthread.h>
|
||||
|
||||
@ -86,6 +87,11 @@ pmix_status_t pmix_start_listening(struct sockaddr_un *address)
|
||||
printf("%s:%d bind() failed", __FILE__, __LINE__);
|
||||
return PMIX_ERROR;
|
||||
}
|
||||
/* set the mode as required */
|
||||
if (0 != chmod(address->sun_path, S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP)) {
|
||||
pmix_output(0, "CANNOT CHMOD %s", address->sun_path);
|
||||
return PMIX_ERROR;
|
||||
}
|
||||
|
||||
/* setup listen backlog to maximum allowed by kernel */
|
||||
if (listen(pmix_server_globals.listen_socket, SOMAXCONN) < 0) {
|
||||
|
@ -132,7 +132,7 @@ pmix_status_t pmix_server_commit(pmix_peer_t *peer, pmix_buffer_t *buf)
|
||||
pmix_nspace_t *nptr;
|
||||
pmix_rank_info_t *info;
|
||||
pmix_dmdx_remote_t *dcd, *dcdnext;
|
||||
pmix_buffer_t pbkt, xfer;
|
||||
pmix_buffer_t pbkt;
|
||||
pmix_value_t *val;
|
||||
char *data;
|
||||
size_t sz;
|
||||
|
@ -13,7 +13,7 @@
|
||||
|
||||
#include <private/autogen/config.h>
|
||||
#include <pmix/rename.h>
|
||||
#include <pmix_common.h>
|
||||
#include <pmix/pmix_common.h>
|
||||
#include <pmix_server.h>
|
||||
#include "src/usock/usock.h"
|
||||
#include "src/util/hash.h"
|
||||
@ -145,6 +145,7 @@ typedef struct {
|
||||
bool listen_thread_active; // listen thread is running
|
||||
int listen_socket; // socket listener is watching
|
||||
int stop_thread[2]; // pipe used to stop listener thread
|
||||
pmix_buffer_t gdata; // cache of data given to me for passing to all clients
|
||||
} pmix_server_globals_t;
|
||||
|
||||
#define PMIX_PEER_CADDY(c, p, t) \
|
||||
|
@ -32,7 +32,7 @@
|
||||
#include <private/autogen/config.h>
|
||||
#include <pmix/rename.h>
|
||||
#include <private/types.h>
|
||||
#include <pmix_common.h>
|
||||
#include <pmix/pmix_common.h>
|
||||
|
||||
#ifdef HAVE_UNISTD_H
|
||||
#include <unistd.h>
|
||||
|
@ -41,7 +41,7 @@
|
||||
#include <sys/types.h>
|
||||
#endif
|
||||
|
||||
#include <pmix_common.h>
|
||||
#include <pmix/pmix_common.h>
|
||||
|
||||
BEGIN_C_DECLS
|
||||
|
||||
|
@ -31,7 +31,7 @@
|
||||
#include <stdlib.h>
|
||||
#endif
|
||||
|
||||
#include <pmix_common.h>
|
||||
#include <pmix/pmix_common.h>
|
||||
|
||||
#include "src/util/error.h"
|
||||
#include "src/include/pmix_globals.h"
|
||||
|
@ -23,7 +23,7 @@
|
||||
#include <private/autogen/config.h>
|
||||
#include <pmix/rename.h>
|
||||
|
||||
#include <pmix_common.h>
|
||||
#include <pmix/pmix_common.h>
|
||||
#include "src/util/output.h"
|
||||
|
||||
BEGIN_C_DECLS
|
||||
|
@ -14,7 +14,7 @@
|
||||
|
||||
#include <private/autogen/config.h>
|
||||
#include <pmix/rename.h>
|
||||
#include <pmix_common.h>
|
||||
#include <pmix/pmix_common.h>
|
||||
|
||||
#ifdef HAVE_UNISTD_H
|
||||
#include <unistd.h>
|
||||
|
@ -22,7 +22,7 @@
|
||||
|
||||
#include <private/autogen/config.h>
|
||||
#include <pmix/rename.h>
|
||||
#include <pmix_common.h>
|
||||
#include <pmix/pmix_common.h>
|
||||
|
||||
#include <stdio.h>
|
||||
#include <stdarg.h>
|
||||
|
@ -22,7 +22,7 @@
|
||||
|
||||
#include <private/autogen/config.h>
|
||||
#include <pmix/rename.h>
|
||||
#include <pmix_common.h>
|
||||
#include <pmix/pmix_common.h>
|
||||
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
|
@ -37,7 +37,7 @@
|
||||
#include <crt_externs.h>
|
||||
#endif
|
||||
|
||||
#include <pmix_common.h>
|
||||
#include <pmix/pmix_common.h>
|
||||
|
||||
BEGIN_C_DECLS
|
||||
|
||||
|
@ -25,7 +25,7 @@
|
||||
#include "src/util/error.h"
|
||||
#include "src/util/fd.h"
|
||||
|
||||
#include <pmix_common.h>
|
||||
#include <pmix/pmix_common.h>
|
||||
#include "src/util/progress_threads.h"
|
||||
|
||||
static volatile bool evlib_active;
|
||||
|
@ -10,7 +10,7 @@
|
||||
|
||||
#include <private/autogen/config.h>
|
||||
#include <pmix/rename.h>
|
||||
#include <pmix_common.h>
|
||||
#include <pmix/pmix_common.h>
|
||||
|
||||
#include <stdlib.h>
|
||||
#include <stdarg.h>
|
||||
|
@ -336,24 +336,9 @@ static int test_item5(void)
|
||||
static int test_item6(void)
|
||||
{
|
||||
int rc = 0;
|
||||
char nspace[100];
|
||||
|
||||
log_error("pmix does not support this functionality\n");
|
||||
return rc;
|
||||
if (0 == rank) {
|
||||
if (PMI_SUCCESS != (rc = PMI_KVS_Create(nspace, sizeof(nspace)))) {
|
||||
log_fatal("PMI_KVS_Create failed: %d\n", rc);
|
||||
return rc;
|
||||
}
|
||||
log_info("nspace=%s\n", nspace);
|
||||
|
||||
if (PMI_SUCCESS != (rc = PMI_KVS_Destroy(nspace))) {
|
||||
log_fatal("PMI_KVS_Destroy failed: %d\n", rc);
|
||||
return rc;
|
||||
}
|
||||
}
|
||||
|
||||
return rc;
|
||||
}
|
||||
|
||||
static int test_item7(void)
|
||||
|
@ -81,7 +81,7 @@ int main(int argc, char **argv)
|
||||
}
|
||||
|
||||
/* setup the server library */
|
||||
if (PMIX_SUCCESS != (rc = PMIx_server_init(&mymodule))) {
|
||||
if (PMIX_SUCCESS != (rc = PMIx_server_init(&mymodule, NULL, 0))) {
|
||||
TEST_ERROR(("Init failed with error %d", rc));
|
||||
FREE_TEST_PARAMS(params);
|
||||
return rc;
|
||||
|
@ -191,7 +191,7 @@ int main(int argc, char **argv)
|
||||
fprintf(stderr, "Testing version %s\n", PMIx_Get_version());
|
||||
|
||||
/* setup the server library */
|
||||
if (PMIX_SUCCESS != (rc = PMIx_server_init(&mymodule))) {
|
||||
if (PMIX_SUCCESS != (rc = PMIx_server_init(&mymodule, NULL, 0))) {
|
||||
fprintf(stderr, "Init failed with error %d\n", rc);
|
||||
return rc;
|
||||
}
|
||||
|
@ -131,7 +131,8 @@ OPAL_MODULE_DECLSPEC int pmix1_store_local(const opal_process_name_t *proc,
|
||||
opal_value_t *val);
|
||||
|
||||
/**** SERVER SOUTHBOUND FUNCTIONS ****/
|
||||
OPAL_MODULE_DECLSPEC int pmix1_server_init(opal_pmix_server_module_t *module);
|
||||
OPAL_MODULE_DECLSPEC int pmix1_server_init(opal_pmix_server_module_t *module,
|
||||
opal_list_t *info);
|
||||
OPAL_MODULE_DECLSPEC int pmix1_server_finalize(void);
|
||||
OPAL_MODULE_DECLSPEC int pmix1_server_gen_regex(const char *input, char **regex);
|
||||
OPAL_MODULE_DECLSPEC int pmix1_server_gen_ppn(const char *input, char **ppn);
|
||||
@ -140,11 +141,13 @@ OPAL_MODULE_DECLSPEC int pmix1_server_register_nspace(opal_jobid_t jobid,
|
||||
opal_list_t *info,
|
||||
opal_pmix_op_cbfunc_t cbfunc,
|
||||
void *cbdata);
|
||||
OPAL_MODULE_DECLSPEC void pmix1_server_deregister_nspace(opal_jobid_t jobid);
|
||||
OPAL_MODULE_DECLSPEC int pmix1_server_register_client(const opal_process_name_t *proc,
|
||||
uid_t uid, gid_t gid,
|
||||
void *server_object,
|
||||
opal_pmix_op_cbfunc_t cbfunc,
|
||||
void *cbdata);
|
||||
OPAL_MODULE_DECLSPEC void pmix1_server_deregister_client(const opal_process_name_t *proc);
|
||||
OPAL_MODULE_DECLSPEC int pmix1_server_setup_fork(const opal_process_name_t *proc, char ***env);
|
||||
OPAL_MODULE_DECLSPEC int pmix1_server_dmodex(const opal_process_name_t *proc,
|
||||
opal_pmix_modex_cbfunc_t cbfunc, void *cbdata);
|
||||
|
@ -96,19 +96,41 @@ static void errreg_cbfunc(pmix_status_t status,
|
||||
status, errhandler_ref);
|
||||
}
|
||||
|
||||
int pmix1_server_init(opal_pmix_server_module_t *module)
|
||||
int pmix1_server_init(opal_pmix_server_module_t *module,
|
||||
opal_list_t *info)
|
||||
{
|
||||
pmix_status_t rc;
|
||||
int dbg;
|
||||
opal_value_t *kv;
|
||||
pmix_info_t *pinfo;
|
||||
size_t sz, n;
|
||||
|
||||
if (0 < (dbg = opal_output_get_verbosity(opal_pmix_base_framework.framework_output))) {
|
||||
asprintf(&dbgvalue, "PMIX_DEBUG=%d", dbg);
|
||||
putenv(dbgvalue);
|
||||
}
|
||||
|
||||
if (PMIX_SUCCESS != (rc = PMIx_server_init(&mymodule))) {
|
||||
/* convert the list to an array of pmix_info_t */
|
||||
if (NULL != info) {
|
||||
sz = opal_list_get_size(info);
|
||||
PMIX_INFO_CREATE(pinfo, sz);
|
||||
n = 0;
|
||||
OPAL_LIST_FOREACH(kv, info, opal_value_t) {
|
||||
(void)strncpy(pinfo[n].key, kv->key, PMIX_MAX_KEYLEN);
|
||||
pmix1_value_load(&pinfo[n].value, kv);
|
||||
++n;
|
||||
}
|
||||
} else {
|
||||
sz = 0;
|
||||
pinfo = NULL;
|
||||
}
|
||||
|
||||
if (PMIX_SUCCESS != (rc = PMIx_server_init(&mymodule, pinfo, sz))) {
|
||||
PMIX_INFO_FREE(pinfo, sz);
|
||||
return pmix1_convert_rc(rc);
|
||||
}
|
||||
PMIX_INFO_FREE(pinfo, sz);
|
||||
|
||||
/* record the host module */
|
||||
host_module = module;
|
||||
|
||||
@ -225,6 +247,22 @@ int pmix1_server_register_nspace(opal_jobid_t jobid,
|
||||
return pmix1_convert_rc(rc);
|
||||
}
|
||||
|
||||
void pmix1_server_deregister_nspace(opal_jobid_t jobid)
|
||||
{
|
||||
opal_pmix1_jobid_trkr_t *jptr;
|
||||
|
||||
/* if we don't already have it, we can ignore this */
|
||||
OPAL_LIST_FOREACH(jptr, &mca_pmix_pmix1xx_component.jobids, opal_pmix1_jobid_trkr_t) {
|
||||
if (jptr->jobid == jobid) {
|
||||
/* found it - tell the server to deregister */
|
||||
PMIx_server_deregister_nspace(jptr->nspace);
|
||||
/* now get rid of it from our list */
|
||||
opal_list_remove_item(&mca_pmix_pmix1xx_component.jobids, &jptr->super);
|
||||
OBJ_RELEASE(jptr);
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
int pmix1_server_register_client(const opal_process_name_t *proc,
|
||||
uid_t uid, gid_t gid,
|
||||
@ -252,6 +290,23 @@ int pmix1_server_register_client(const opal_process_name_t *proc,
|
||||
return pmix1_convert_rc(rc);
|
||||
}
|
||||
|
||||
void pmix1_server_deregister_client(const opal_process_name_t *proc)
|
||||
{
|
||||
opal_pmix1_jobid_trkr_t *jptr;
|
||||
pmix_proc_t p;
|
||||
|
||||
/* if we don't already have it, we can ignore this */
|
||||
OPAL_LIST_FOREACH(jptr, &mca_pmix_pmix1xx_component.jobids, opal_pmix1_jobid_trkr_t) {
|
||||
if (jptr->jobid == proc->jobid) {
|
||||
/* found it - tell the server to deregister */
|
||||
(void)strncpy(p.nspace, jptr->nspace, PMIX_MAX_NSLEN);
|
||||
p.rank = proc->vpid;
|
||||
PMIx_server_deregister_client(&p);
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
int pmix1_server_setup_fork(const opal_process_name_t *proc, char ***env)
|
||||
{
|
||||
|
@ -49,47 +49,49 @@ static void pmix1_register_jobid(opal_jobid_t jobid, const char *nspace);
|
||||
|
||||
const opal_pmix_base_module_t opal_pmix_pmix1xx_module = {
|
||||
/* client APIs */
|
||||
pmix1_client_init,
|
||||
pmix1_client_finalize,
|
||||
pmix1_initialized,
|
||||
pmix1_abort,
|
||||
pmix1_commit,
|
||||
pmix1_fence,
|
||||
pmix1_fencenb,
|
||||
pmix1_put,
|
||||
pmix1_get,
|
||||
pmix1_getnb,
|
||||
pmix1_publish,
|
||||
pmix1_publishnb,
|
||||
pmix1_lookup,
|
||||
pmix1_lookupnb,
|
||||
pmix1_unpublish,
|
||||
pmix1_unpublishnb,
|
||||
pmix1_spawn,
|
||||
pmix1_spawnnb,
|
||||
pmix1_connect,
|
||||
pmix1_connectnb,
|
||||
pmix1_disconnect,
|
||||
pmix1_disconnectnb,
|
||||
pmix1_resolve_peers,
|
||||
pmix1_resolve_nodes,
|
||||
.init = pmix1_client_init,
|
||||
.finalize = pmix1_client_finalize,
|
||||
.initialized = pmix1_initialized,
|
||||
.abort = pmix1_abort,
|
||||
.commit = pmix1_commit,
|
||||
.fence = pmix1_fence,
|
||||
.fence_nb = pmix1_fencenb,
|
||||
.put = pmix1_put,
|
||||
.get = pmix1_get,
|
||||
.get_nb = pmix1_getnb,
|
||||
.publish = pmix1_publish,
|
||||
.publish_nb = pmix1_publishnb,
|
||||
.lookup = pmix1_lookup,
|
||||
.lookup_nb = pmix1_lookupnb,
|
||||
.unpublish = pmix1_unpublish,
|
||||
.unpublish_nb = pmix1_unpublishnb,
|
||||
.spawn = pmix1_spawn,
|
||||
.spawn_nb = pmix1_spawnnb,
|
||||
.connect = pmix1_connect,
|
||||
.connect_nb = pmix1_connectnb,
|
||||
.disconnect = pmix1_disconnect,
|
||||
.disconnect_nb = pmix1_disconnectnb,
|
||||
.resolve_peers = pmix1_resolve_peers,
|
||||
.resolve_nodes = pmix1_resolve_nodes,
|
||||
/* server APIs */
|
||||
pmix1_server_init,
|
||||
pmix1_server_finalize,
|
||||
pmix1_server_gen_regex,
|
||||
pmix1_server_gen_ppn,
|
||||
pmix1_server_register_nspace,
|
||||
pmix1_server_register_client,
|
||||
pmix1_server_setup_fork,
|
||||
pmix1_server_dmodex,
|
||||
pmix1_server_notify_error,
|
||||
.server_init = pmix1_server_init,
|
||||
.server_finalize = pmix1_server_finalize,
|
||||
.generate_regex = pmix1_server_gen_regex,
|
||||
.generate_ppn = pmix1_server_gen_ppn,
|
||||
.server_register_nspace = pmix1_server_register_nspace,
|
||||
.server_deregister_nspace = pmix1_server_deregister_nspace,
|
||||
.server_register_client = pmix1_server_register_client,
|
||||
.server_deregister_client = pmix1_server_deregister_client,
|
||||
.server_setup_fork = pmix1_server_setup_fork,
|
||||
.server_dmodex_request = pmix1_server_dmodex,
|
||||
.server_notify_error = pmix1_server_notify_error,
|
||||
/* utility APIs */
|
||||
PMIx_Get_version,
|
||||
opal_pmix_base_register_handler,
|
||||
opal_pmix_base_deregister_handler,
|
||||
pmix1_store_local,
|
||||
pmix1_get_nspace,
|
||||
pmix1_register_jobid
|
||||
.get_version = PMIx_Get_version,
|
||||
.register_errhandler = opal_pmix_base_register_handler,
|
||||
.deregister_errhandler = opal_pmix_base_deregister_handler,
|
||||
.store_local = pmix1_store_local,
|
||||
.get_nspace = pmix1_get_nspace,
|
||||
.register_jobid = pmix1_register_jobid
|
||||
};
|
||||
|
||||
static const char *pmix1_get_nspace(opal_jobid_t jobid)
|
||||
@ -455,7 +457,8 @@ int pmix1_value_unload(opal_value_t *kv,
|
||||
case PMIX_BYTE_OBJECT:
|
||||
kv->type = OPAL_BYTE_OBJECT;
|
||||
if (NULL != v->data.bo.bytes && 0 < v->data.bo.size) {
|
||||
kv->data.bo.bytes = (uint8_t*)v->data.bo.bytes;
|
||||
kv->data.bo.bytes = (uint8_t*)malloc(v->data.bo.size);
|
||||
memcpy(kv->data.bo.bytes, v->data.bo.bytes, v->data.bo.size);
|
||||
kv->data.bo.size = (int)v->data.bo.size;
|
||||
} else {
|
||||
kv->data.bo.bytes = NULL;
|
||||
|
@ -53,47 +53,25 @@ static const char *s1_get_nspace(opal_jobid_t jobid);
|
||||
static void s1_register_jobid(opal_jobid_t jobid, const char *nspace);
|
||||
|
||||
const opal_pmix_base_module_t opal_pmix_s1_module = {
|
||||
s1_init,
|
||||
s1_fini,
|
||||
s1_initialized,
|
||||
s1_abort,
|
||||
s1_commit,
|
||||
s1_fence,
|
||||
NULL,
|
||||
s1_put,
|
||||
s1_get,
|
||||
NULL,
|
||||
s1_publish,
|
||||
NULL,
|
||||
s1_lookup,
|
||||
NULL,
|
||||
s1_unpublish,
|
||||
NULL,
|
||||
s1_spawn,
|
||||
NULL,
|
||||
s1_job_connect,
|
||||
NULL,
|
||||
s1_job_disconnect,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
/* server APIs */
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
/* utility APIs */
|
||||
NULL,
|
||||
opal_pmix_base_register_handler,
|
||||
opal_pmix_base_deregister_handler,
|
||||
s1_store_local,
|
||||
s1_get_nspace,
|
||||
s1_register_jobid
|
||||
.init = s1_init,
|
||||
.finalize = s1_fini,
|
||||
.initialized = s1_initialized,
|
||||
.abort = s1_abort,
|
||||
.commit = s1_commit,
|
||||
.fence = s1_fence,
|
||||
.put = s1_put,
|
||||
.get = s1_get,
|
||||
.publish = s1_publish,
|
||||
.lookup = s1_lookup,
|
||||
.unpublish = s1_unpublish,
|
||||
.spawn = s1_spawn,
|
||||
.connect = s1_job_connect,
|
||||
.disconnect = s1_job_disconnect,
|
||||
.register_errhandler = opal_pmix_base_register_handler,
|
||||
.deregister_errhandler = opal_pmix_base_deregister_handler,
|
||||
.store_local = s1_store_local,
|
||||
.get_nspace = s1_get_nspace,
|
||||
.register_jobid = s1_register_jobid
|
||||
};
|
||||
|
||||
// usage accounting
|
||||
@ -650,7 +628,7 @@ static int s1_store_local(const opal_process_name_t *proc,
|
||||
|
||||
static const char *s1_get_nspace(opal_jobid_t jobid)
|
||||
{
|
||||
return NULL;
|
||||
return "N/A";
|
||||
}
|
||||
static void s1_register_jobid(opal_jobid_t jobid, const char *nspace)
|
||||
{
|
||||
|
@ -60,47 +60,25 @@ static const char *s2_get_nspace(opal_jobid_t jobid);
|
||||
static void s2_register_jobid(opal_jobid_t jobid, const char *nspace);
|
||||
|
||||
const opal_pmix_base_module_t opal_pmix_s2_module = {
|
||||
s2_init,
|
||||
s2_fini,
|
||||
s2_initialized,
|
||||
s2_abort,
|
||||
s2_commit,
|
||||
s2_fence,
|
||||
NULL,
|
||||
s2_put,
|
||||
s2_get,
|
||||
NULL,
|
||||
s2_publish,
|
||||
NULL,
|
||||
s2_lookup,
|
||||
NULL,
|
||||
s2_unpublish,
|
||||
NULL,
|
||||
s2_spawn,
|
||||
NULL,
|
||||
s2_job_connect,
|
||||
NULL,
|
||||
s2_job_disconnect,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
/* server APIs */
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
/* utility APIs */
|
||||
NULL,
|
||||
opal_pmix_base_register_handler,
|
||||
opal_pmix_base_deregister_handler,
|
||||
s2_store_local,
|
||||
s2_get_nspace,
|
||||
s2_register_jobid
|
||||
.init = s2_init,
|
||||
.finalize = s2_fini,
|
||||
.initialized = s2_initialized,
|
||||
.abort = s2_abort,
|
||||
.commit = s2_commit,
|
||||
.fence = s2_fence,
|
||||
.put = s2_put,
|
||||
.get = s2_get,
|
||||
.publish = s2_publish,
|
||||
.lookup = s2_lookup,
|
||||
.unpublish = s2_unpublish,
|
||||
.spawn = s2_spawn,
|
||||
.connect = s2_job_connect,
|
||||
.disconnect = s2_job_disconnect,
|
||||
.register_errhandler = opal_pmix_base_register_handler,
|
||||
.deregister_errhandler = opal_pmix_base_deregister_handler,
|
||||
.store_local = s2_store_local,
|
||||
.get_nspace = s2_get_nspace,
|
||||
.register_jobid = s2_register_jobid
|
||||
};
|
||||
|
||||
// usage accounting
|
||||
@ -669,7 +647,7 @@ static int s2_store_local(const opal_process_name_t *proc,
|
||||
|
||||
static const char *s2_get_nspace(opal_jobid_t jobid)
|
||||
{
|
||||
return NULL;
|
||||
return "N/A";
|
||||
}
|
||||
static void s2_register_jobid(opal_jobid_t jobid, const char *nspace)
|
||||
{
|
||||
|
@ -1035,12 +1035,11 @@ void orte_odls_base_default_launch_local(int fd, short sd, void *cbdata)
|
||||
}
|
||||
}
|
||||
|
||||
orte_wait_cb(child, odls_base_default_wait_local_proc, NULL);
|
||||
if (ORTE_SUCCESS != (rc = fork_local(app, child, app->env, jobdat))) {
|
||||
orte_wait_cb_cancel(child);
|
||||
child->exit_code = ORTE_ERR_SILENT; /* error message already output */
|
||||
ORTE_ACTIVATE_PROC_STATE(&child->name, ORTE_PROC_STATE_FAILED_TO_START);
|
||||
}
|
||||
orte_wait_cb(child, odls_base_default_wait_local_proc, NULL);
|
||||
/* if we indexed the argv, we need to restore it to
|
||||
* its original form
|
||||
*/
|
||||
|
@ -1,6 +1,6 @@
|
||||
/*
|
||||
* Copyright (c) 2011-2012 Los Alamos National Security, LLC.
|
||||
* Copyright (c) 2014 Intel, Inc. All rights reserved.
|
||||
* Copyright (c) 2014-2015 Intel, Inc. All rights reserved.
|
||||
* $COPYRIGHT$
|
||||
*
|
||||
* Additional copyrights may follow
|
||||
@ -15,6 +15,7 @@
|
||||
|
||||
#include "opal/class/opal_list.h"
|
||||
#include "opal/mca/event/event.h"
|
||||
#include "opal/mca/pmix/pmix.h"
|
||||
|
||||
#include "orte/runtime/orte_globals.h"
|
||||
#include "orte/mca/errmgr/errmgr.h"
|
||||
@ -709,6 +710,10 @@ void orte_state_base_check_all_complete(int fd, short args, void *cbdata)
|
||||
}
|
||||
OBJ_RELEASE(map);
|
||||
jdata->map = NULL;
|
||||
/* tell the PMIx server to release its data */
|
||||
if (NULL != opal_pmix.server_deregister_nspace) {
|
||||
opal_pmix.server_deregister_nspace(jdata->jobid);
|
||||
}
|
||||
}
|
||||
|
||||
CHECK_ALIVE:
|
||||
|
@ -16,6 +16,7 @@
|
||||
#include <string.h>
|
||||
|
||||
#include "opal/util/output.h"
|
||||
#include "opal/mca/pmix/pmix.h"
|
||||
|
||||
#include "orte/mca/errmgr/errmgr.h"
|
||||
#include "orte/mca/filem/filem.h"
|
||||
@ -381,6 +382,10 @@ void check_complete(int fd, short args, void *cbdata)
|
||||
}
|
||||
OBJ_RELEASE(map);
|
||||
jdata->map = NULL;
|
||||
/* tell the PMIx server to release its data */
|
||||
if (NULL != opal_pmix.server_deregister_nspace) {
|
||||
opal_pmix.server_deregister_nspace(jdata->jobid);
|
||||
}
|
||||
}
|
||||
|
||||
CHECK_ALIVE:
|
||||
|
@ -180,6 +180,7 @@ static void eviction_cbfunc(struct opal_hotel_t *hotel,
|
||||
int pmix_server_init(void)
|
||||
{
|
||||
int rc;
|
||||
opal_list_t info;
|
||||
|
||||
if (orte_pmix_server_globals.initialized) {
|
||||
return ORTE_SUCCESS;
|
||||
@ -215,11 +216,32 @@ int pmix_server_init(void)
|
||||
/* ensure the PMIx server uses the proper rendezvous directory */
|
||||
opal_setenv("PMIX_SERVER_TMPDIR", orte_process_info.proc_session_dir, true, &environ);
|
||||
|
||||
/* pass the server the local topology - we do this so the procs won't read the
|
||||
* topology themselves as this could overwhelm the local
|
||||
* system on large-scale SMPs */
|
||||
OBJ_CONSTRUCT(&info, opal_list_t);
|
||||
if (NULL != opal_hwloc_topology) {
|
||||
char *xmlbuffer=NULL;
|
||||
int len;
|
||||
opal_value_t *kv;
|
||||
kv = OBJ_NEW(opal_value_t);
|
||||
kv->key = strdup(OPAL_PMIX_LOCAL_TOPO);
|
||||
if (0 != hwloc_topology_export_xmlbuffer(opal_hwloc_topology, &xmlbuffer, &len)) {
|
||||
OBJ_RELEASE(kv);
|
||||
OBJ_DESTRUCT(&info);
|
||||
return ORTE_ERROR;
|
||||
}
|
||||
kv->data.string = xmlbuffer;
|
||||
kv->type = OPAL_STRING;
|
||||
opal_list_append(&info, &kv->super);
|
||||
}
|
||||
|
||||
/* setup the local server */
|
||||
if (ORTE_SUCCESS != (rc = opal_pmix.server_init(&pmix_server))) {
|
||||
if (ORTE_SUCCESS != (rc = opal_pmix.server_init(&pmix_server, &info))) {
|
||||
ORTE_ERROR_LOG(rc);
|
||||
/* memory cleanup will occur when finalize is called */
|
||||
}
|
||||
OPAL_LIST_DESTRUCT(&info);
|
||||
|
||||
/* if the universal server wasn't specified, then we use
|
||||
* our own HNP for that purpose */
|
||||
|
@ -42,15 +42,22 @@
|
||||
|
||||
#include "orte/util/name_fns.h"
|
||||
#include "orte/runtime/orte_globals.h"
|
||||
#include "orte/runtime/orte_wait.h"
|
||||
#include "orte/mca/errmgr/errmgr.h"
|
||||
#include "orte/mca/rmaps/rmaps_types.h"
|
||||
|
||||
#include "pmix_server_internal.h"
|
||||
#include "pmix_server.h"
|
||||
|
||||
typedef struct {
|
||||
volatile bool active;
|
||||
opal_list_t *info;
|
||||
} myxfer_t;
|
||||
|
||||
static void opcbfunc(int status, void *cbdata)
|
||||
{
|
||||
opal_list_t *lt = (opal_list_t*)cbdata;
|
||||
myxfer_t *p = (myxfer_t*)cbdata;
|
||||
opal_list_t *lt = p->info;
|
||||
opal_value_t *k1, *k2;
|
||||
opal_list_t *pmap;
|
||||
|
||||
@ -65,6 +72,7 @@ static void opcbfunc(int status, void *cbdata)
|
||||
}
|
||||
OBJ_RELEASE(lt);
|
||||
}
|
||||
p->active = false;
|
||||
}
|
||||
|
||||
/* stuff proc attributes for sending back to a proc */
|
||||
@ -83,6 +91,7 @@ int orte_pmix_server_register_nspace(orte_job_t *jdata)
|
||||
orte_app_context_t *app;
|
||||
uid_t uid;
|
||||
gid_t gid;
|
||||
myxfer_t *p;
|
||||
|
||||
opal_output_verbose(2, orte_pmix_server_globals.output,
|
||||
"%s register nspace for %s",
|
||||
@ -94,23 +103,6 @@ int orte_pmix_server_register_nspace(orte_job_t *jdata)
|
||||
uid = geteuid();
|
||||
gid = getegid();
|
||||
|
||||
/* local topology - we do this so the procs won't read the
|
||||
* topology themselves as this could overwhelm the local
|
||||
* system on large-scale SMPs */
|
||||
if (NULL != opal_hwloc_topology) {
|
||||
char *xmlbuffer=NULL;
|
||||
int len;
|
||||
kv = OBJ_NEW(opal_value_t);
|
||||
kv->key = strdup(OPAL_PMIX_LOCAL_TOPO);
|
||||
if (0 != hwloc_topology_export_xmlbuffer(opal_hwloc_topology, &xmlbuffer, &len)) {
|
||||
OBJ_RELEASE(kv);
|
||||
return OPAL_ERROR;
|
||||
}
|
||||
kv->data.string = xmlbuffer;
|
||||
kv->type = OPAL_STRING;
|
||||
opal_list_append(info, &kv->super);
|
||||
}
|
||||
|
||||
/* jobid */
|
||||
kv = OBJ_NEW(opal_value_t);
|
||||
kv->key = strdup(OPAL_PMIX_JOBID);
|
||||
@ -253,6 +245,7 @@ int orte_pmix_server_register_nspace(orte_job_t *jdata)
|
||||
if (orte_get_attribute(&pptr->attributes, ORTE_PROC_CPU_BITMAP, (void**)&tmp, OPAL_STRING)) {
|
||||
if (NULL != tmp) {
|
||||
opal_argv_append_nosize(&procs, tmp);
|
||||
free(tmp);
|
||||
} else {
|
||||
opal_argv_append_nosize(&procs, "UNBOUND");
|
||||
}
|
||||
@ -406,11 +399,17 @@ int orte_pmix_server_register_nspace(orte_job_t *jdata)
|
||||
orte_set_attribute(&jdata->attributes, ORTE_JOB_NSPACE_REGISTERED, ORTE_ATTR_LOCAL, NULL, OPAL_BOOL);
|
||||
|
||||
/* pass it down */
|
||||
p = (myxfer_t*)malloc(sizeof(myxfer_t));
|
||||
p->active = true;
|
||||
p->info = info;
|
||||
if (OPAL_SUCCESS != opal_pmix.server_register_nspace(jdata->jobid,
|
||||
jdata->num_local_procs,
|
||||
info, opcbfunc, (void*)info)) {
|
||||
rc = ORTE_ERROR;
|
||||
info, opcbfunc, (void*)p)) {
|
||||
OPAL_LIST_RELEASE(info);
|
||||
return ORTE_ERROR;
|
||||
}
|
||||
ORTE_WAIT_FOR_COMPLETION(p->active);
|
||||
free(p);
|
||||
|
||||
return rc;
|
||||
return ORTE_SUCCESS;
|
||||
}
|
||||
|
@ -193,12 +193,12 @@ static opal_cmd_line_init_t cmd_line_init[] = {
|
||||
&myglobals.num_procs, OPAL_CMD_LINE_TYPE_INT,
|
||||
"Number of processes to run" },
|
||||
|
||||
/* uri of Open MPI HNP, or at least where to get it */
|
||||
/* uri of the dvm, or at least where to get it */
|
||||
{ NULL, '\0', "hnp", "hnp", 1,
|
||||
&myglobals.hnp, OPAL_CMD_LINE_TYPE_STRING,
|
||||
"Specify the URI of the Open MPI server, or the name of the file (specified as file:filename) that contains that info" },
|
||||
|
||||
/* uri of Open MPI HNP, or at least where to get it */
|
||||
/* tell the dvm to terminate */
|
||||
{ NULL, '\0', "terminate", "terminate", 0,
|
||||
&myglobals.terminate, OPAL_CMD_LINE_TYPE_BOOL,
|
||||
"Terminate the DVM" },
|
||||
@ -345,7 +345,6 @@ int main(int argc, char *argv[])
|
||||
use it in pretty-print error messages */
|
||||
orte_basename = opal_basename(argv[0]);
|
||||
|
||||
|
||||
opal_cmd_line_create(&cmd_line, cmd_line_init);
|
||||
mca_base_cmd_line_setup(&cmd_line);
|
||||
if (OPAL_SUCCESS != (rc = opal_cmd_line_parse(&cmd_line, true,
|
||||
@ -404,6 +403,12 @@ int main(int argc, char *argv[])
|
||||
exit(1);
|
||||
}
|
||||
|
||||
/* if they didn't point us at an HNP, that's an error */
|
||||
if (NULL == myglobals.hnp) {
|
||||
fprintf(stderr, "orte-submit: required option --hnp not provided\n");
|
||||
exit(1);
|
||||
}
|
||||
|
||||
/* Ensure that enough of OPAL is setup for us to be able to run */
|
||||
/*
|
||||
* NOTE: (JJH)
|
||||
@ -448,12 +453,6 @@ int main(int argc, char *argv[])
|
||||
|
||||
/* Check for some "global" command line params */
|
||||
parse_globals(argc, argv, &cmd_line);
|
||||
|
||||
/* if they didn't point us at an HNP, that's an error */
|
||||
if (NULL == myglobals.hnp) {
|
||||
fprintf(stderr, "orte-submit: required option --hnp not provided\n");
|
||||
exit(1);
|
||||
}
|
||||
OBJ_DESTRUCT(&cmd_line);
|
||||
|
||||
if (0 == strncasecmp(myglobals.hnp, "file", strlen("file"))) {
|
||||
@ -611,6 +610,16 @@ int main(int argc, char *argv[])
|
||||
ORTE_ERROR_LOG(rc);
|
||||
exit(rc);
|
||||
}
|
||||
} else if (myglobals.pernode) {
|
||||
ORTE_SET_MAPPING_POLICY(jdata->map->mapping, ORTE_MAPPING_PPR);
|
||||
ORTE_SET_MAPPING_DIRECTIVE(jdata->map->mapping, ORTE_MAPPING_GIVEN);
|
||||
/* define the ppr */
|
||||
jdata->map->ppr = strdup("1:node");
|
||||
} else if (0 < myglobals.npernode) {
|
||||
ORTE_SET_MAPPING_POLICY(jdata->map->mapping, ORTE_MAPPING_PPR);
|
||||
ORTE_SET_MAPPING_DIRECTIVE(jdata->map->mapping, ORTE_MAPPING_GIVEN);
|
||||
/* define the ppr */
|
||||
(void)asprintf(&jdata->map->ppr, "%d:node", myglobals.npernode);
|
||||
}
|
||||
if (NULL != myglobals.ranking_policy) {
|
||||
if (ORTE_SUCCESS != (rc = orte_rmaps_base_set_ranking_policy(&jdata->map->ranking,
|
||||
@ -701,7 +710,9 @@ int main(int argc, char *argv[])
|
||||
while (myspawn) {
|
||||
opal_event_loop(orte_event_base, OPAL_EVLOOP_ONCE);
|
||||
}
|
||||
opal_output(0, "Job %s has launched", ORTE_JOBID_PRINT(jdata->jobid));
|
||||
if (orte_debug_flag) {
|
||||
opal_output(0, "Job %s has launched", ORTE_JOBID_PRINT(jdata->jobid));
|
||||
}
|
||||
|
||||
waiting:
|
||||
while (mywait) {
|
||||
|
@ -75,7 +75,7 @@ typedef uint32_t orte_proc_type_t;
|
||||
#define ORTE_PROC_IS_DVM (ORTE_PROC_DVM & orte_process_info.proc_type)
|
||||
#define ORTE_PROC_IS_IOF_ENDPT (ORTE_PROC_IOF_ENDPT & orte_process_info.proc_type)
|
||||
#define ORTE_PROC_IS_SCHEDULER (ORTE_PROC_SCHEDULER & orte_process_info.proc_type)
|
||||
#define ORTE_PROC_IS_MASTER (ORTE_PROC_MASTER & orte_process_info.proc_type)
|
||||
#define ORTE_PROC_IS_MASTER (0x4000 & orte_process_info.proc_type)
|
||||
|
||||
|
||||
/**
|
||||
|
Загрузка…
Ссылка в новой задаче
Block a user