1
1
openmpi/orte/mca/pls/base/pls_private.h
Ralph Castain 85df3bd92f Bring in the generalized xcast communication system along with the correspondingly revised orted launch. I will send a message out to developers explaining the basic changes. In brief:
1. generalize orte_rml.xcast to become a general broadcast-like messaging system. Messages can now be sent to any tag on the daemons or processes. Note that any message sent via xcast will be delivered to ALL processes in the specified job - you don't get to pick and choose. At a later date, we will introduce an augmented capability that will use the daemons as relays, but will allow you to send to a specified array of process names.

2. extended orte_rml.xcast so it supports more scalable message routing methodologies. At the moment, we support three: (a) direct, which sends the message directly to all recipients; (b) linear, which sends the message to the local daemon on each node, which then relays it to its own local procs; and (b) binomial, which sends the message via a binomial algo across all the daemons, each of which then relays to its own local procs. The crossover points between the algos are adjustable via MCA param, or you can simply demand that a specific algo be used.

3. orteds no longer exhibit two types of behavior: bootproxy or VM. Orteds now always behave like they are part of a virtual machine - they simply launch a job if mpirun tells them to do so. This is another step towards creating an "orteboot" functionality, but also provided a clean system for supporting message relaying.

Note one major impact of this commit: multiple daemons on a node cannot be supported any longer! Only a single daemon/node is now allowed.

This commit is known to break support for the following environments: POE, Xgrid, Xcpu, Windows. It has been tested on rsh, SLURM, and Bproc. Modifications for TM support have been made but could not be verified due to machine problems at LANL. Modifications for SGE have been made but could not be verified. The developers for the non-verified environments will be separately notified along with suggestions on how to fix the problems.

This commit was SVN r15007.
2007-06-12 13:28:54 +00:00

124 строки
4.1 KiB
C

/*
* Copyright (c) 2004-2006 The Trustees of Indiana University and Indiana
* University Research and Technology
* Corporation. All rights reserved.
* Copyright (c) 2004-2006 The University of Tennessee and The University
* of Tennessee Research Foundation. All rights
* reserved.
* Copyright (c) 2004-2005 High Performance Computing Center Stuttgart,
* University of Stuttgart. All rights reserved.
* Copyright (c) 2004-2005 The Regents of the University of California.
* All rights reserved.
* $COPYRIGHT$
*
* Additional copyrights may follow
*
* $HEADER$
*/
/** @file:
*/
#ifndef MCA_PLS_PRIVATE_H
#define MCA_PLS_PRIVATE_H
/*
* includes
*/
#include "orte_config.h"
#ifdef HAVE_SYS_TIME_H
#include <sys/time.h>
#endif
#include "opal/class/opal_list.h"
#include "orte/dss/dss_types.h"
#include "orte/mca/gpr/gpr_types.h"
#include "orte/mca/ns/ns_types.h"
#include "orte/mca/ras/ras_types.h"
#include "orte/mca/rmaps/rmaps_types.h"
#include "orte/mca/rmgr/rmgr_types.h"
#include "orte/mca/rml/rml_types.h"
#if defined(c_plusplus) || defined(__cplusplus)
extern "C" {
#endif
/*
* pls proxy commands
*/
typedef uint8_t orte_pls_cmd_flag_t;
#define ORTE_PLS_CMD ORTE_UINT8
#define ORTE_PLS_LAUNCH_JOB_CMD 1
#define ORTE_PLS_TERMINATE_JOB_CMD 2
#define ORTE_PLS_TERMINATE_PROC_CMD 3
#define ORTE_PLS_SIGNAL_JOB_CMD 4
#define ORTE_PLS_SIGNAL_PROC_CMD 5
#define ORTE_PLS_TERMINATE_ORTEDS_CMD 6
/*
* object for daemon information
*/
typedef struct orte_pls_daemon_info_t {
opal_list_item_t super;
orte_cellid_t cell;
char *nodename;
orte_process_name_t *name;
orte_jobid_t active_job;
} orte_pls_daemon_info_t;
ORTE_DECLSPEC OBJ_CLASS_DECLARATION(orte_pls_daemon_info_t);
/**
* Utility routine to set progress engine schedule
*/
ORTE_DECLSPEC int orte_pls_base_set_progress_sched(int sched);
/**
* Utilities for pls components that use proxy daemons
*/
ORTE_DECLSPEC int orte_pls_base_orted_cancel_operation(void);
ORTE_DECLSPEC int orte_pls_base_orted_exit(struct timeval *timeout, opal_list_t *attrs);
ORTE_DECLSPEC int orte_pls_base_orted_kill_local_procs(orte_jobid_t job, struct timeval *timeout, opal_list_t *attrs);
ORTE_DECLSPEC int orte_pls_base_orted_signal_local_procs(orte_jobid_t job, int32_t signal, opal_list_t *attrs);
ORTE_DECLSPEC int orte_pls_base_orted_add_local_procs(orte_gpr_notify_data_t *ndat);
ORTE_DECLSPEC int orte_pls_base_get_active_daemons(opal_list_t *daemons, orte_jobid_t job, opal_list_t *attrs);
ORTE_DECLSPEC int orte_pls_base_store_active_daemons(opal_list_t *daemons);
ORTE_DECLSPEC int orte_pls_base_remove_daemon(orte_pls_daemon_info_t *info);
int orte_pls_base_check_avail_daemons(opal_list_t *daemons, orte_jobid_t job);
ORTE_DECLSPEC int orte_pls_base_launch_on_existing_daemons(orte_job_map_t *map);
/*
* communications utilities
*/
ORTE_DECLSPEC int orte_pls_base_comm_start(void);
ORTE_DECLSPEC int orte_pls_base_comm_stop(void);
void orte_pls_base_recv(int status, orte_process_name_t* sender,
orte_buffer_t* buffer, orte_rml_tag_t tag,
void* cbdata);
/*
* general utilities
*/
ORTE_DECLSPEC int orte_pls_base_mca_argv(int *argc, char ***argv);
void orte_pls_base_purge_mca_params(char ***env);
/**
* Construct basic ORTE Daemon command line arguments
*/
ORTE_DECLSPEC int orte_pls_base_orted_append_basic_args(
int *argc,
char ***argv,
int *proc_name_index,
int *node_name_index,
orte_std_cntr_t num_procs);
#if defined(c_plusplus) || defined(__cplusplus)
}
#endif
#endif