Restore the paffinity capability, along with all the required logic to ensure we "do the right thing" when the user gives us inaccurate information about the number of slots on a remote node.
This commit was SVN r12780.
Этот коммит содержится в:
родитель
b1e16fffac
Коммит
d4bd60c9fe
@ -119,15 +119,17 @@ int orte_odls_default_subscribe_launch_data(orte_jobid_t job, orte_gpr_notify_cb
|
||||
char *glob_keys[] = {
|
||||
ORTE_JOB_APP_CONTEXT_KEY,
|
||||
ORTE_JOB_VPID_START_KEY,
|
||||
ORTE_JOB_VPID_RANGE_KEY
|
||||
ORTE_JOB_VPID_RANGE_KEY,
|
||||
ORTE_JOB_OVERSUBSCRIBE_OVERRIDE_KEY
|
||||
};
|
||||
int num_glob_keys = 3;
|
||||
int num_glob_keys = 4;
|
||||
char* keys[] = {
|
||||
ORTE_PROC_NAME_KEY,
|
||||
ORTE_PROC_APP_CONTEXT_KEY,
|
||||
ORTE_NODE_NAME_KEY,
|
||||
ORTE_NODE_OVERSUBSCRIBED_KEY
|
||||
};
|
||||
int num_keys = 3;
|
||||
int num_keys = 4;
|
||||
int i, rc;
|
||||
|
||||
/* get the job segment name */
|
||||
@ -749,7 +751,22 @@ static int odls_default_fork_local_proc(
|
||||
opal_unsetenv(param, &environ_copy);
|
||||
free(param);
|
||||
|
||||
/* Handle processor affinity */
|
||||
/* setup yield schedule and processor affinity
|
||||
* We default here to always setting the affinity processor if we want
|
||||
* it. The processor affinity system then determines
|
||||
* if processor affinity is enabled/requested - if so, it then uses
|
||||
* this value to select the process to which the proc is "assigned".
|
||||
* Otherwise, the paffinity subsystem just ignores this value anyway
|
||||
*/
|
||||
if (oversubscribed) {
|
||||
param = mca_base_param_environ_variable("mpi", NULL, "yield_when_idle");
|
||||
opal_setenv(param, "1", true, &environ_copy);
|
||||
} else {
|
||||
param = mca_base_param_environ_variable("mpi", NULL, "yield_when_idle");
|
||||
opal_setenv(param, "0", true, &environ_copy);
|
||||
}
|
||||
free(param);
|
||||
|
||||
if (want_processor) {
|
||||
param = mca_base_param_environ_variable("mpi", NULL,
|
||||
"paffinity_processor");
|
||||
@ -757,15 +774,11 @@ static int odls_default_fork_local_proc(
|
||||
opal_setenv(param, param2, true, &environ_copy);
|
||||
free(param);
|
||||
free(param2);
|
||||
}
|
||||
|
||||
/* handle oversubscription - setup yield schedule */
|
||||
if (oversubscribed) {
|
||||
param = mca_base_param_environ_variable("mpi", NULL, "yield_when_idle");
|
||||
opal_setenv(param, "1", true, &environ_copy);
|
||||
} else {
|
||||
param = mca_base_param_environ_variable("mpi", NULL, "yield_when_idle");
|
||||
opal_setenv(param, "0", true, &environ_copy);
|
||||
param = mca_base_param_environ_variable("mpi", NULL,
|
||||
"paffinity_processor");
|
||||
opal_unsetenv(param, &environ_copy);
|
||||
free(param);
|
||||
}
|
||||
|
||||
/* setup universe info */
|
||||
@ -910,8 +923,8 @@ int orte_odls_default_launch_local_procs(orte_gpr_notify_data_t *data, char **ba
|
||||
opal_list_t app_context_list;
|
||||
orte_odls_child_t *child;
|
||||
odls_default_app_context_t *app_item;
|
||||
size_t num_processors;
|
||||
bool want_processor=false, oversubscribed;
|
||||
int num_processors;
|
||||
bool oversubscribed=false, want_processor, *bptr, override_oversubscribed=false;
|
||||
opal_list_item_t *item, *item2;
|
||||
|
||||
/* parse the returned data to create the required structures
|
||||
@ -992,6 +1005,15 @@ int orte_odls_default_launch_local_procs(orte_gpr_notify_data_t *data, char **ba
|
||||
opal_list_append(&app_context_list, &app_item->super);
|
||||
kval->value->data = NULL; /* protect the data storage from later release */
|
||||
}
|
||||
if (strcmp(kval->key, ORTE_JOB_OVERSUBSCRIBE_OVERRIDE_KEY) == 0) {
|
||||
/* this can only occur once, so just store it */
|
||||
if (ORTE_SUCCESS != (rc = orte_dss.get((void**)&bptr, kval->value, ORTE_BOOL))) {
|
||||
ORTE_ERROR_LOG(rc);
|
||||
return rc;
|
||||
}
|
||||
override_oversubscribed = *bptr;
|
||||
continue;
|
||||
}
|
||||
} /* end for loop to process global data */
|
||||
} else {
|
||||
/* this must have come from one of the process containers, so it must
|
||||
@ -1030,6 +1052,14 @@ int orte_odls_default_launch_local_procs(orte_gpr_notify_data_t *data, char **ba
|
||||
child->app_idx = *sptr; /* save the index into the app_context objects */
|
||||
continue;
|
||||
}
|
||||
if(strcmp(kval->key, ORTE_NODE_OVERSUBSCRIBED_KEY) == 0) {
|
||||
if (ORTE_SUCCESS != (rc = orte_dss.get((void**)&bptr, kval->value, ORTE_BOOL))) {
|
||||
ORTE_ERROR_LOG(rc);
|
||||
return rc;
|
||||
}
|
||||
oversubscribed = *bptr;
|
||||
continue;
|
||||
}
|
||||
} /* kv2 */
|
||||
/* protect operation on the global list of children */
|
||||
OPAL_THREAD_LOCK(&orte_odls_default.mutex);
|
||||
@ -1044,13 +1074,52 @@ int orte_odls_default_launch_local_procs(orte_gpr_notify_data_t *data, char **ba
|
||||
} /* for j */
|
||||
}
|
||||
|
||||
/* determine if we are oversubscribed */
|
||||
oversubscribed = false; /* default to being a hog */
|
||||
opal_paffinity_base_get_num_processors(&rc);
|
||||
num_processors = (size_t)rc;
|
||||
if (opal_list_get_size(&orte_odls_default.children) > num_processors) { /* oversubscribed */
|
||||
oversubscribed = true;
|
||||
/* setup for processor affinity. If there are enough physical processors on this node, then
|
||||
* we indicate which processor each process should be assigned to, IFF the user has requested
|
||||
* processor affinity be used - the paffinity subsystem will make that final determination. All
|
||||
* we do here is indicate that we should do the definitions just in case paffinity is active
|
||||
*/
|
||||
if (ORTE_SUCCESS != opal_paffinity_base_get_num_processors(&num_processors)) {
|
||||
/* if we cannot find the number of local processors, then default to conservative
|
||||
* settings
|
||||
*/
|
||||
want_processor = false; /* default to not being a hog */
|
||||
/* leave oversubscribed alone */
|
||||
opal_output(orte_odls_globals.output,
|
||||
"odls: could not get number of processors - using conservative settings");
|
||||
} else {
|
||||
/* only do this if we can actually get info on the number of processors */
|
||||
if (opal_list_get_size(&orte_odls_default.children) > (size_t)num_processors) {
|
||||
want_processor = false;
|
||||
} else {
|
||||
want_processor = true;
|
||||
}
|
||||
|
||||
/* now let's deal with the oversubscribed flag - and the use-case where a hostfile or some
|
||||
* other non-guaranteed-accurate method was used to inform us about our allocation. Since
|
||||
* the information on the number of slots on this node could have been incorrect, we need
|
||||
* to check it against the local number of processors to ensure we don't overload them
|
||||
*/
|
||||
if (override_oversubscribed) {
|
||||
opal_output(orte_odls_globals.output, "odls: overriding oversubscription");
|
||||
if (opal_list_get_size(&orte_odls_default.children) > (size_t)num_processors) {
|
||||
/* if the #procs > #processors, declare us oversubscribed regardless
|
||||
* of what the mapper claimed - the user may have told us something
|
||||
* incorrect
|
||||
*/
|
||||
oversubscribed = true;
|
||||
} else {
|
||||
/* likewise, if there are more processors here than we were told,
|
||||
* declare us to not be oversubscribed so we can be aggressive. This
|
||||
* covers the case where the user didn't tell us anything about the
|
||||
* number of available slots, so we defaulted to a value of 1
|
||||
*/
|
||||
oversubscribed = false;
|
||||
}
|
||||
}
|
||||
}
|
||||
opal_output(orte_odls_globals.output, "odls: oversubscribed set to %s want_processor set to %s",
|
||||
oversubscribed ? "true" : "false", want_processor ? "true" : "false");
|
||||
|
||||
/* okay, now let's launch our local procs using a fork/exec */
|
||||
i = 0;
|
||||
|
@ -30,6 +30,7 @@ libmca_ras_la_SOURCES += \
|
||||
base/ras_base_no_ops.c \
|
||||
base/ras_base_open.c \
|
||||
base/ras_base_receive.c \
|
||||
base/ras_base_support_fns.c \
|
||||
base/data_type_support/ras_data_type_compare_fns.c \
|
||||
base/data_type_support/ras_data_type_copy_fns.c \
|
||||
base/data_type_support/ras_data_type_packing_fns.c \
|
||||
|
66
orte/mca/ras/base/ras_base_support_fns.c
Обычный файл
66
orte/mca/ras/base/ras_base_support_fns.c
Обычный файл
@ -0,0 +1,66 @@
|
||||
/*
|
||||
* Copyright (c) 2004-2005 The Trustees of Indiana University and Indiana
|
||||
* University Research and Technology
|
||||
* Corporation. All rights reserved.
|
||||
* Copyright (c) 2004-2005 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$
|
||||
*/
|
||||
|
||||
|
||||
#include "orte_config.h"
|
||||
#include "orte/orte_constants.h"
|
||||
|
||||
#include "orte/dss/dss_types.h"
|
||||
#include "orte/mca/errmgr/errmgr.h"
|
||||
#include "orte/mca/gpr/gpr.h"
|
||||
#include "orte/mca/schema/schema_types.h"
|
||||
|
||||
#include "orte/mca/ras/base/ras_private.h"
|
||||
|
||||
/*
|
||||
* Indicate that the allocation for this job is uncertain - therefore,
|
||||
* the oversubscribed condition that might results should be overridden
|
||||
* locally based on the actual available hardware on the node
|
||||
*/
|
||||
int orte_ras_base_set_oversubscribe_override(orte_jobid_t job)
|
||||
{
|
||||
orte_gpr_addr_mode_t addr_mode;
|
||||
char *segment;
|
||||
char *tokens[] = {
|
||||
ORTE_JOB_GLOBALS,
|
||||
NULL
|
||||
};
|
||||
orte_data_value_t val = ORTE_DATA_VALUE_EMPTY;
|
||||
bool trueval = true;
|
||||
int rc;
|
||||
|
||||
addr_mode = ORTE_GPR_OVERWRITE | ORTE_GPR_TOKENS_OR | ORTE_GPR_KEYS_OR;
|
||||
|
||||
/* get the job segment name */
|
||||
if (ORTE_SUCCESS != (rc = orte_schema.get_job_segment_name(&segment, job))) {
|
||||
ORTE_ERROR_LOG(rc);
|
||||
return rc;
|
||||
}
|
||||
|
||||
/* setup the value to be true */
|
||||
val.type = ORTE_BOOL;
|
||||
val.data = &trueval;
|
||||
|
||||
if (ORTE_SUCCESS != (rc = orte_gpr.put_1(addr_mode, segment, tokens,
|
||||
ORTE_JOB_OVERSUBSCRIBE_OVERRIDE_KEY, &val))) {
|
||||
ORTE_ERROR_LOG(rc);
|
||||
}
|
||||
free(segment);
|
||||
|
||||
return rc;
|
||||
}
|
@ -80,6 +80,8 @@ ORTE_DECLSPEC int orte_ras_base_allocate_nodes(orte_jobid_t jobid,
|
||||
ORTE_DECLSPEC int orte_ras_base_reallocate(orte_jobid_t parent_jobid,
|
||||
orte_jobid_t child_jobid);
|
||||
|
||||
ORTE_DECLSPEC int orte_ras_base_set_oversubscribe_override(orte_jobid_t job);
|
||||
|
||||
/*
|
||||
* Query the registry for all available nodes
|
||||
*/
|
||||
|
@ -166,6 +166,15 @@ static int orte_ras_dash_host_allocate(orte_jobid_t jobid, opal_list_t *attribut
|
||||
(rc = orte_ras_base_allocate_nodes(jobid, &nodes))) {
|
||||
goto cleanup;
|
||||
}
|
||||
|
||||
/* now indicate that there is uncertainty about the number of slots here,
|
||||
* so the launcher should use knowledge of the local number of processors to
|
||||
* override any oversubscription flags
|
||||
*/
|
||||
rc = orte_ras_base_set_oversubscribe_override(jobid);
|
||||
if (ORTE_SUCCESS != rc) {
|
||||
goto cleanup;
|
||||
}
|
||||
}
|
||||
|
||||
cleanup:
|
||||
|
@ -119,7 +119,16 @@ static int orte_ras_localhost_allocate(orte_jobid_t jobid, opal_list_t *attribut
|
||||
goto cleanup;
|
||||
}
|
||||
|
||||
cleanup:
|
||||
/* now indicate that there is uncertainty about the number of slots here,
|
||||
* so the launcher should use knowledge of the local number of processors to
|
||||
* override any oversubscription flags
|
||||
*/
|
||||
ret = orte_ras_base_set_oversubscribe_override(jobid);
|
||||
if (ORTE_SUCCESS != ret) {
|
||||
goto cleanup;
|
||||
}
|
||||
|
||||
cleanup:
|
||||
item = opal_list_remove_first(&nodes);
|
||||
OBJ_RELEASE(item);
|
||||
OBJ_DESTRUCT(&nodes);
|
||||
|
@ -28,7 +28,7 @@
|
||||
|
||||
#include "orte/mca/rds/base/rds_private.h"
|
||||
|
||||
int orte_rds_base_no_op_query(void)
|
||||
int orte_rds_base_no_op_query(orte_jobid_t job)
|
||||
{
|
||||
return ORTE_ERR_NOT_SUPPORTED;
|
||||
}
|
||||
|
@ -30,7 +30,7 @@
|
||||
/**
|
||||
* Function for querying all loaded components.
|
||||
*/
|
||||
int orte_rds_base_query(void)
|
||||
int orte_rds_base_query(orte_jobid_t job)
|
||||
{
|
||||
opal_list_item_t* item;
|
||||
|
||||
@ -39,7 +39,7 @@ int orte_rds_base_query(void)
|
||||
item != opal_list_get_end(&orte_rds_base.rds_selected);
|
||||
item = opal_list_get_next(item)) {
|
||||
orte_rds_base_selected_t* selected = (orte_rds_base_selected_t*)item;
|
||||
int rc = selected->module->query();
|
||||
int rc = selected->module->query(job);
|
||||
if(rc != ORTE_SUCCESS)
|
||||
return rc;
|
||||
}
|
||||
|
@ -92,6 +92,7 @@ void orte_rds_base_recv(int status, orte_process_name_t* sender,
|
||||
{
|
||||
orte_buffer_t answer;
|
||||
orte_rds_cmd_flag_t command;
|
||||
orte_jobid_t job;
|
||||
orte_std_cntr_t count;
|
||||
int rc;
|
||||
|
||||
@ -105,11 +106,17 @@ void orte_rds_base_recv(int status, orte_process_name_t* sender,
|
||||
|
||||
switch (command) {
|
||||
case ORTE_RDS_QUERY_CMD:
|
||||
if (ORTE_SUCCESS != (rc = orte_dss.pack(&answer, &command, 1, ORTE_RDS_CMD))) {
|
||||
count = 1;
|
||||
if (ORTE_SUCCESS != (rc = orte_dss.unpack(buffer, &job, &count, ORTE_JOBID))) {
|
||||
ORTE_ERROR_LOG(rc);
|
||||
return;
|
||||
}
|
||||
|
||||
if (ORTE_SUCCESS != (rc = orte_dss.pack(&answer, &command, 1, ORTE_RDS_CMD))) {
|
||||
ORTE_ERROR_LOG(rc);
|
||||
}
|
||||
|
||||
if (ORTE_SUCCESS != (rc = orte_rds_base_query())) {
|
||||
if (ORTE_SUCCESS != (rc = orte_rds_base_query(job))) {
|
||||
ORTE_ERROR_LOG(rc);
|
||||
}
|
||||
|
||||
|
@ -46,7 +46,7 @@ typedef uint8_t orte_rds_cmd_flag_t;
|
||||
/*
|
||||
* API function definitions
|
||||
*/
|
||||
ORTE_DECLSPEC int orte_rds_base_query(void);
|
||||
ORTE_DECLSPEC int orte_rds_base_query(orte_jobid_t job);
|
||||
|
||||
/*
|
||||
* oob interface
|
||||
@ -65,7 +65,7 @@ ORTE_DECLSPEC int orte_rds_base_store_resource(opal_list_t *resource_list);
|
||||
/*
|
||||
* the "null" component functions
|
||||
*/
|
||||
int orte_rds_base_no_op_query(void);
|
||||
int orte_rds_base_no_op_query(orte_jobid_t job);
|
||||
int orte_rds_base_no_op_store_resource(opal_list_t *resource_list);
|
||||
|
||||
#if defined(c_plusplus) || defined(__cplusplus)
|
||||
|
@ -372,7 +372,7 @@ unlock:
|
||||
* rds_hostfile_path, and add the nodes to the registry.
|
||||
*/
|
||||
|
||||
static int orte_rds_hostfile_query(void)
|
||||
static int orte_rds_hostfile_query(orte_jobid_t job)
|
||||
{
|
||||
opal_list_t existing;
|
||||
opal_list_t updates, rds_updates;
|
||||
@ -501,6 +501,18 @@ static int orte_rds_hostfile_query(void)
|
||||
if (ORTE_SUCCESS != rc) {
|
||||
goto cleanup;
|
||||
}
|
||||
|
||||
/* and now, indicate that ORTE should override any oversubscribed conditions
|
||||
* based on local hardware limits since the user (a) might not have
|
||||
* provided us any info on the #slots for a node, and (b) the user
|
||||
* might have been wrong! If we don't check the number of local physical
|
||||
* processors, then we could be too aggressive on our sched_yield setting
|
||||
* and cause performance problems.
|
||||
*/
|
||||
rc = orte_ras_base_set_oversubscribe_override(job);
|
||||
if (ORTE_SUCCESS != rc) {
|
||||
goto cleanup;
|
||||
}
|
||||
}
|
||||
|
||||
cleanup:
|
||||
|
@ -41,7 +41,7 @@
|
||||
* functions
|
||||
*/
|
||||
|
||||
int orte_rds_proxy_query(void)
|
||||
int orte_rds_proxy_query(orte_jobid_t job)
|
||||
{
|
||||
orte_buffer_t* cmd;
|
||||
orte_buffer_t* answer;
|
||||
@ -63,6 +63,12 @@ int orte_rds_proxy_query(void)
|
||||
return rc;
|
||||
}
|
||||
|
||||
if (ORTE_SUCCESS != (rc = orte_dss.pack(cmd, &job, 1, ORTE_JOBID))) {
|
||||
ORTE_ERROR_LOG(rc);
|
||||
OBJ_RELEASE(cmd);
|
||||
return rc;
|
||||
}
|
||||
|
||||
if (0 > orte_rml.send_buffer(orte_rds_proxy_replica, cmd, ORTE_RML_TAG_RDS, 0)) {
|
||||
ORTE_ERROR_LOG(ORTE_ERR_COMM_FAILURE);
|
||||
OBJ_RELEASE(cmd);
|
||||
|
@ -47,7 +47,7 @@ int orte_rds_proxy_finalize(void);
|
||||
/*
|
||||
* proxy function prototypes
|
||||
*/
|
||||
int orte_rds_proxy_query(void);
|
||||
int orte_rds_proxy_query(orte_jobid_t job);
|
||||
|
||||
|
||||
#if defined(c_plusplus) || defined(__cplusplus)
|
||||
|
@ -147,7 +147,7 @@ extern "C" {
|
||||
* return_value = orte_rmgr.query();
|
||||
* @endcode
|
||||
*/
|
||||
typedef int (*orte_rds_base_module_query_fn_t)(void);
|
||||
typedef int (*orte_rds_base_module_query_fn_t)(orte_jobid_t job);
|
||||
|
||||
/**
|
||||
* Add a list of resources to the Resource Segment
|
||||
|
@ -223,7 +223,7 @@ static int orte_rds_resfile_parse_site(char *site, FILE *fp)
|
||||
}
|
||||
|
||||
|
||||
int orte_rds_resfile_query(void)
|
||||
int orte_rds_resfile_query(orte_jobid_t job)
|
||||
{
|
||||
int fileid, rc;
|
||||
FILE *fp;
|
||||
|
@ -36,7 +36,7 @@ extern "C" {
|
||||
/*
|
||||
* RDS Resource file functions
|
||||
*/
|
||||
int orte_rds_resfile_query(void);
|
||||
int orte_rds_resfile_query(orte_jobid_t job);
|
||||
|
||||
int orte_rds_resfile_finalize(void);
|
||||
|
||||
|
@ -384,14 +384,6 @@ static int orte_rmgr_proxy_spawn_job(
|
||||
flags = 0xff;
|
||||
}
|
||||
|
||||
/*
|
||||
* Perform resource discovery.
|
||||
*/
|
||||
if (ORTE_SUCCESS != (rc = orte_rds.query())) {
|
||||
ORTE_ERROR_LOG(rc);
|
||||
return rc;
|
||||
}
|
||||
|
||||
/*
|
||||
* Setup job and allocate resources
|
||||
*/
|
||||
@ -403,6 +395,13 @@ static int orte_rmgr_proxy_spawn_job(
|
||||
}
|
||||
}
|
||||
|
||||
if (flags & ORTE_RMGR_RES_DISC) {
|
||||
if (ORTE_SUCCESS != (rc = orte_rds.query(*jobid))) {
|
||||
ORTE_ERROR_LOG(rc);
|
||||
return rc;
|
||||
}
|
||||
}
|
||||
|
||||
if (flags & ORTE_RMGR_ALLOC) {
|
||||
if (ORTE_SUCCESS != (rc = orte_ras.allocate_job(*jobid, attributes))) {
|
||||
ORTE_ERROR_LOG(rc);
|
||||
|
@ -56,10 +56,11 @@ ORTE_DECLSPEC OBJ_CLASS_DECLARATION(orte_attribute_t);
|
||||
* procedure.
|
||||
*/
|
||||
#define ORTE_RMGR_SETUP 0x01
|
||||
#define ORTE_RMGR_ALLOC 0x02
|
||||
#define ORTE_RMGR_MAP 0x04
|
||||
#define ORTE_RMGR_SETUP_TRIGS 0x08
|
||||
#define ORTE_RMGR_LAUNCH 0x10
|
||||
#define ORTE_RMGR_RES_DISC 0x02
|
||||
#define ORTE_RMGR_ALLOC 0x04
|
||||
#define ORTE_RMGR_MAP 0x08
|
||||
#define ORTE_RMGR_SETUP_TRIGS 0x10
|
||||
#define ORTE_RMGR_LAUNCH 0x20
|
||||
|
||||
/* direct the RMGR spawn procedure to use the provided jobid
|
||||
* instead of getting a new one
|
||||
|
@ -336,14 +336,6 @@ static int orte_rmgr_urm_spawn_job(
|
||||
flags = 0xff;
|
||||
}
|
||||
|
||||
/*
|
||||
* Perform resource discovery.
|
||||
*/
|
||||
if (ORTE_SUCCESS != (rc = orte_rds.query())) {
|
||||
ORTE_ERROR_LOG(rc);
|
||||
return rc;
|
||||
}
|
||||
|
||||
/*
|
||||
* Initialize job segment and allocate resources
|
||||
*/ /* JJH Insert C/N mapping stuff here */
|
||||
@ -359,6 +351,13 @@ static int orte_rmgr_urm_spawn_job(
|
||||
}
|
||||
}
|
||||
|
||||
if (flags & ORTE_RMGR_RES_DISC) {
|
||||
if (ORTE_SUCCESS != (rc = orte_rds.query(*jobid))) {
|
||||
ORTE_ERROR_LOG(rc);
|
||||
return rc;
|
||||
}
|
||||
}
|
||||
|
||||
if (flags & ORTE_RMGR_ALLOC) {
|
||||
if (ORTE_SUCCESS != (rc = orte_ras.allocate_job(*jobid, attributes))) {
|
||||
ORTE_ERROR_LOG(rc);
|
||||
|
@ -58,46 +58,47 @@
|
||||
* ORTE-wide key names for storing/retrieving data from the registry.
|
||||
* Subsystem-specific keys will be defined in each=/ subsystem's xxx_types.h file.
|
||||
*/
|
||||
#define ORTE_CELLID_KEY "orte-cellid"
|
||||
#define ORTE_JOBGRP_KEY "orte-jobgrp"
|
||||
#define ORTE_JOBID_KEY "orte-jobid"
|
||||
#define ORTE_VPID_KEY "orte-vpid"
|
||||
#define ORTE_NODE_NAME_KEY "orte-node-name"
|
||||
#define ORTE_NODE_ARCH_KEY "orte-node-arch"
|
||||
#define ORTE_NODE_STATE_KEY "orte-node-state"
|
||||
#define ORTE_NODE_SLOTS_KEY "orte-node-slots"
|
||||
#define ORTE_NODE_SLOTS_ALLOC_KEY "orte-node-slots-alloc"
|
||||
#define ORTE_NODE_SLOTS_IN_USE_KEY "orte-node-slots-in-use"
|
||||
#define ORTE_NODE_SLOTS_MAX_KEY "orte-node-slots-max"
|
||||
#define ORTE_NODE_ALLOC_KEY "orte-node-alloc"
|
||||
#define ORTE_NODE_BOOTPROXY_KEY "orte-node-bootproxy"
|
||||
#define ORTE_NODE_USERNAME_KEY "orte-node-username"
|
||||
#define ORTE_NODE_OVERSUBSCRIBED_KEY "orte-node-oversubscribed"
|
||||
#define ORTE_JOB_APP_CONTEXT_KEY "orte-job-app-context"
|
||||
#define ORTE_JOB_SLOTS_KEY "orte-job-slots" /**< number of procs in job */
|
||||
#define ORTE_JOB_VPID_START_KEY "orte-job-vpid-start"
|
||||
#define ORTE_JOB_VPID_RANGE_KEY "orte-job-vpid-range"
|
||||
#define ORTE_JOB_IOF_KEY "orte-job-iof"
|
||||
#define ORTE_JOB_STATE_KEY "orte-job-state"
|
||||
#define ORTE_PROC_NAME_KEY "orte-proc-name"
|
||||
#define ORTE_PROC_RANK_KEY "orte-proc-rank"
|
||||
#define ORTE_PROC_PID_KEY "orte-proc-pid"
|
||||
#define ORTE_PROC_LOCAL_PID_KEY "orte-proc-local-pid"
|
||||
#define ORTE_PROC_STATE_KEY "orte-proc-state"
|
||||
#define ORTE_PROC_APP_CONTEXT_KEY "orte-proc-app-context"
|
||||
#define ORTE_PROC_EXIT_CODE_KEY "orte-proc-exit-code"
|
||||
#define ORTE_PROC_NUM_ALIVE "orte-proc-num-alive"
|
||||
#define ORTE_PROC_NUM_ABORTED "orte-proc-num-aborted"
|
||||
#define ORTE_PROC_NUM_FAILED_START "orte-proc-num-failed-start"
|
||||
#define ORTE_PROC_NUM_AT_INIT "orte-proc-num-init"
|
||||
#define ORTE_PROC_NUM_LAUNCHED "orte-proc-num-launched"
|
||||
#define ORTE_PROC_NUM_RUNNING "orte-proc-num-running"
|
||||
#define ORTE_PROC_NUM_AT_STG1 "orte-proc-num-stg1"
|
||||
#define ORTE_PROC_NUM_AT_STG2 "orte-proc-num-stg2"
|
||||
#define ORTE_PROC_NUM_AT_STG3 "orte-proc-num-stg3"
|
||||
#define ORTE_PROC_NUM_FINALIZED "orte-proc-num-finalized"
|
||||
#define ORTE_PROC_NUM_TERMINATED "orte-proc-num-terminated"
|
||||
#define ORTE_PROC_RML_IP_ADDRESS_KEY "orte-proc-rml-ip-addr"
|
||||
#define ORTE_CELLID_KEY "orte-cellid"
|
||||
#define ORTE_JOBGRP_KEY "orte-jobgrp"
|
||||
#define ORTE_JOBID_KEY "orte-jobid"
|
||||
#define ORTE_VPID_KEY "orte-vpid"
|
||||
#define ORTE_NODE_NAME_KEY "orte-node-name"
|
||||
#define ORTE_NODE_ARCH_KEY "orte-node-arch"
|
||||
#define ORTE_NODE_STATE_KEY "orte-node-state"
|
||||
#define ORTE_NODE_SLOTS_KEY "orte-node-slots"
|
||||
#define ORTE_NODE_SLOTS_ALLOC_KEY "orte-node-slots-alloc"
|
||||
#define ORTE_NODE_SLOTS_IN_USE_KEY "orte-node-slots-in-use"
|
||||
#define ORTE_NODE_SLOTS_MAX_KEY "orte-node-slots-max"
|
||||
#define ORTE_NODE_ALLOC_KEY "orte-node-alloc"
|
||||
#define ORTE_NODE_BOOTPROXY_KEY "orte-node-bootproxy"
|
||||
#define ORTE_NODE_USERNAME_KEY "orte-node-username"
|
||||
#define ORTE_NODE_OVERSUBSCRIBED_KEY "orte-node-oversubscribed"
|
||||
#define ORTE_JOB_APP_CONTEXT_KEY "orte-job-app-context"
|
||||
#define ORTE_JOB_SLOTS_KEY "orte-job-slots" /**< number of procs in job */
|
||||
#define ORTE_JOB_VPID_START_KEY "orte-job-vpid-start"
|
||||
#define ORTE_JOB_VPID_RANGE_KEY "orte-job-vpid-range"
|
||||
#define ORTE_JOB_OVERSUBSCRIBE_OVERRIDE_KEY "orte-job-override-oversubscribe"
|
||||
#define ORTE_JOB_IOF_KEY "orte-job-iof"
|
||||
#define ORTE_JOB_STATE_KEY "orte-job-state"
|
||||
#define ORTE_PROC_NAME_KEY "orte-proc-name"
|
||||
#define ORTE_PROC_RANK_KEY "orte-proc-rank"
|
||||
#define ORTE_PROC_PID_KEY "orte-proc-pid"
|
||||
#define ORTE_PROC_LOCAL_PID_KEY "orte-proc-local-pid"
|
||||
#define ORTE_PROC_STATE_KEY "orte-proc-state"
|
||||
#define ORTE_PROC_APP_CONTEXT_KEY "orte-proc-app-context"
|
||||
#define ORTE_PROC_EXIT_CODE_KEY "orte-proc-exit-code"
|
||||
#define ORTE_PROC_NUM_ALIVE "orte-proc-num-alive"
|
||||
#define ORTE_PROC_NUM_ABORTED "orte-proc-num-aborted"
|
||||
#define ORTE_PROC_NUM_FAILED_START "orte-proc-num-failed-start"
|
||||
#define ORTE_PROC_NUM_AT_INIT "orte-proc-num-init"
|
||||
#define ORTE_PROC_NUM_LAUNCHED "orte-proc-num-launched"
|
||||
#define ORTE_PROC_NUM_RUNNING "orte-proc-num-running"
|
||||
#define ORTE_PROC_NUM_AT_STG1 "orte-proc-num-stg1"
|
||||
#define ORTE_PROC_NUM_AT_STG2 "orte-proc-num-stg2"
|
||||
#define ORTE_PROC_NUM_AT_STG3 "orte-proc-num-stg3"
|
||||
#define ORTE_PROC_NUM_FINALIZED "orte-proc-num-finalized"
|
||||
#define ORTE_PROC_NUM_TERMINATED "orte-proc-num-terminated"
|
||||
#define ORTE_PROC_RML_IP_ADDRESS_KEY "orte-proc-rml-ip-addr"
|
||||
|
||||
/*
|
||||
* ORTE-wide names for specific system triggers and subscriptions
|
||||
|
Загрузка…
Ссылка в новой задаче
Block a user