1
1
openmpi/opal/mca/sysinfo/base/sysinfo_base_open.c
Ralph Castain a0d5c80ce0 Add a new framework for discovering local resource information such as cpu type/model, #cpus, available physical memory, etc. Two initial components (darwin and linux) are provided. This is needed to support bootstrap operations where daemons are started at node boot, and applications where initial knowledge of cpu identification is needed to guide framework component selection.
Add orte configuration option to control the use of the framework in the system. Although the code will build, it will not be active unless configured with --enable-bootstrap.

If bootstrap is enabled and the new opal_sysinfo framework can successfully determine the cpu model, pass that info to the application as an MCA param to support some work at Sun.

Also, have daemons report back the resources they find to guide process mapping in bootstrap operations (i.e., where the daemon starts at node boot as opposed to being launched at application start).

Adjust some platform files to enable these capabilities.

This commit was SVN r22244.
2009-11-30 23:11:25 +00:00

111 строки
2.8 KiB
C

/*
* Copyright (c) 2009 Cisco Systems, Inc. All rights reserved.
*
* $COPYRIGHT$
*
* Additional copyrights may follow
*
* $HEADER$
*/
#include "opal_config.h"
#include "opal/constants.h"
#include "opal/util/output.h"
#include "opal/mca/mca.h"
#include "opal/mca/base/base.h"
#include "opal/mca/base/mca_base_param.h"
#include "opal/mca/sysinfo/sysinfo.h"
#include "opal/mca/sysinfo/base/base.h"
/*
* The following file was created by configure. It contains extern
* statements and the definition of an array of pointers to each
* component's public mca_base_component_t struct.
*/
#include "opal/mca/sysinfo/base/static-components.h"
/* unsupported functions */
static int opal_sysinfo_base_query(char **keys, opal_list_t *values);
/*
* Globals
*/
int opal_sysinfo_base_output = -1;
opal_list_t opal_sysinfo_base_components_opened;
opal_list_t opal_sysinfo_avail_modules;
opal_sysinfo_API_module_t opal_sysinfo = {
opal_sysinfo_base_query
};
/*
* Function for finding and opening either all MCA components, or the one
* that was specifically requested via a MCA parameter.
*/
int opal_sysinfo_base_open(void)
{
opal_sysinfo_base_output = opal_output_open(NULL);
/* init the list of available modules */
OBJ_CONSTRUCT(&opal_sysinfo_avail_modules, opal_list_t);
/* Open up all available components */
OBJ_CONSTRUCT( &opal_sysinfo_base_components_opened, opal_list_t );
if (OPAL_SUCCESS !=
mca_base_components_open("sysinfo", opal_sysinfo_base_output,
mca_sysinfo_base_static_components,
&opal_sysinfo_base_components_opened,
true)) {
return OPAL_ERROR;
}
/* All done */
return OPAL_SUCCESS;
}
static int opal_sysinfo_base_query(char **keys, opal_list_t *values)
{
opal_list_item_t *item;
opal_sysinfo_module_t *mod;
/* query all the available modules */
for (item = opal_list_get_first(&opal_sysinfo_avail_modules);
item != opal_list_get_end(&opal_sysinfo_avail_modules);
item = opal_list_get_next(item)) {
mod = (opal_sysinfo_module_t*)item;
if (NULL != mod->module->query) {
mod->module->query(keys, values);
}
}
return OPAL_SUCCESS;
}
/**** SETUP SYSINFO MODULE OBJECTS ****/
static void mod_constructor(opal_sysinfo_module_t *ptr)
{
ptr->module = NULL;
}
OBJ_CLASS_INSTANCE(opal_sysinfo_module_t,
opal_list_item_t,
mod_constructor, NULL);
static void val_constructor(opal_sysinfo_value_t *ptr)
{
ptr->key = NULL;
}
static void val_destructor(opal_sysinfo_value_t *ptr)
{
if (NULL != ptr->key) {
free(ptr->key);
}
}
OBJ_CLASS_INSTANCE(opal_sysinfo_value_t,
opal_list_item_t,
val_constructor, val_destructor);