1
1

Opal: Add a new MCA variable type "version_string". Also add a

new flag to ompi_info that allows a user to print all MCA variables of a specific type.  

 --type version_string

This command will print all MCA variables of type version_string.

This feature was developed by Elena Shipunova and was reviewed by Josh Ladd.

This commit was SVN r32166.
Этот коммит содержится в:
Joshua Ladd 2014-07-09 01:37:23 +00:00
родитель cde2b67284
Коммит 057370364d
9 изменённых файлов: 100 добавлений и 14 удалений

Просмотреть файл

@ -1411,7 +1411,7 @@ static int fca_register(void)
(void) mca_base_component_var_register(c, (void) mca_base_component_var_register(c,
MCA_COMPILETIME_VER, MCA_COMPILETIME_VER,
"Version of the libfca library ompi compiled with", "Version of the libfca library ompi compiled with",
MCA_BASE_VAR_TYPE_STRING, MCA_BASE_VAR_TYPE_VERSION_STRING,
NULL, 0, 0, NULL, 0, 0,
OPAL_INFO_LVL_3, OPAL_INFO_LVL_3,
MCA_BASE_VAR_SCOPE_READONLY, MCA_BASE_VAR_SCOPE_READONLY,
@ -1420,7 +1420,7 @@ static int fca_register(void)
(void) mca_base_component_var_register(c, (void) mca_base_component_var_register(c,
MCA_RUNTIME_VER, MCA_RUNTIME_VER,
"Version of the libfca library ompi run with", "Version of the libfca library ompi run with",
MCA_BASE_VAR_TYPE_STRING, MCA_BASE_VAR_TYPE_VERSION_STRING,
NULL, 0, 0, NULL, 0, 0,
OPAL_INFO_LVL_3, OPAL_INFO_LVL_3,
MCA_BASE_VAR_SCOPE_READONLY, MCA_BASE_VAR_SCOPE_READONLY,

Просмотреть файл

@ -211,7 +211,7 @@ static int hcoll_register(void)
mca_base_component_var_register(&mca_coll_hcoll_component.super.collm_version, mca_base_component_var_register(&mca_coll_hcoll_component.super.collm_version,
MCA_COMPILETIME_VER, MCA_COMPILETIME_VER,
"Version of the libhcoll library ompi compiled with", "Version of the libhcoll library ompi compiled with",
MCA_BASE_VAR_TYPE_STRING, MCA_BASE_VAR_TYPE_VERSION_STRING,
NULL, 0, 0, NULL, 0, 0,
OPAL_INFO_LVL_3, OPAL_INFO_LVL_3,
MCA_BASE_VAR_SCOPE_READONLY, MCA_BASE_VAR_SCOPE_READONLY,
@ -220,7 +220,7 @@ static int hcoll_register(void)
mca_base_component_var_register(&mca_coll_hcoll_component.super.collm_version, mca_base_component_var_register(&mca_coll_hcoll_component.super.collm_version,
MCA_RUNTIME_VER, MCA_RUNTIME_VER,
"Version of the libhcoll library ompi run with", "Version of the libhcoll library ompi run with",
MCA_BASE_VAR_TYPE_STRING, MCA_BASE_VAR_TYPE_VERSION_STRING,
NULL, 0, 0, NULL, 0, 0,
OPAL_INFO_LVL_3, OPAL_INFO_LVL_3,
MCA_BASE_VAR_SCOPE_READONLY, MCA_BASE_VAR_SCOPE_READONLY,

Просмотреть файл

@ -96,7 +96,7 @@ static int ompi_mtl_mxm_component_register(void)
(void) mca_base_component_var_register(c, (void) mca_base_component_var_register(c,
MCA_COMPILETIME_VER, MCA_COMPILETIME_VER,
"Version of the libmxm library ompi compiled with", "Version of the libmxm library ompi compiled with",
MCA_BASE_VAR_TYPE_STRING, MCA_BASE_VAR_TYPE_VERSION_STRING,
NULL, 0, 0, NULL, 0, 0,
OPAL_INFO_LVL_3, OPAL_INFO_LVL_3,
MCA_BASE_VAR_SCOPE_READONLY, MCA_BASE_VAR_SCOPE_READONLY,
@ -115,7 +115,7 @@ static int ompi_mtl_mxm_component_register(void)
(void) mca_base_component_var_register(c, (void) mca_base_component_var_register(c,
MCA_RUNTIME_VER, MCA_RUNTIME_VER,
"Version of the libmxm library ompi run with", "Version of the libmxm library ompi run with",
MCA_BASE_VAR_TYPE_STRING, MCA_BASE_VAR_TYPE_VERSION_STRING,
NULL, 0, 0, NULL, 0, 0,
OPAL_INFO_LVL_3, OPAL_INFO_LVL_3,
MCA_BASE_VAR_SCOPE_READONLY, MCA_BASE_VAR_SCOPE_READONLY,

Просмотреть файл

@ -83,6 +83,12 @@ Show MCA parameters. The first parameter is the type of the component
to display; the second parameter is the specific component to display to display; the second parameter is the specific component to display
(or the keyword "all", meaning "display all components of this type"). (or the keyword "all", meaning "display all components of this type").
.TP 8 .TP 8
.I \-t|\-\-type
Show MCA parameters of the type specified in the parameter. Accepts the
following parameters: unsigned_int, unsigned_long, unsigned_long_long,
size_t, string, version_string, bool, double. By default level
is 9 unless it is specified with \-\-level.
.TP 8
.I \-\-parsable .I \-\-parsable
When used in conjunction with other parameters, the output is When used in conjunction with other parameters, the output is
displayed in a machine-parsable format displayed in a machine-parsable format
@ -243,6 +249,12 @@ machine-parsable format.
. .
. .
.TP .TP
ompi_info --type string --pretty-print --level 3
Show the level 3 MCA parameters of string type in a human-readable /
prettyprint format.
.
.
.TP
ompi_info --path bindir ompi_info --path bindir
Show the "bindir" that Open MPI was configured with. Show the "bindir" that Open MPI was configured with.
. .

Просмотреть файл

@ -158,6 +158,10 @@ int main(int argc, char *argv[])
&mca_types, ompi_info_cmd_line); &mca_types, ompi_info_cmd_line);
acted = true; acted = true;
} }
if (opal_cmd_line_is_taken(ompi_info_cmd_line, "type")) {
opal_info_do_type(ompi_info_cmd_line);
acted = true;
}
/* If no command line args are specified, show default set */ /* If no command line args are specified, show default set */

Просмотреть файл

@ -73,11 +73,12 @@ static opal_hash_table_t mca_base_var_index_hash;
const char *var_type_names[] = { const char *var_type_names[] = {
"int", "int",
"unsigned", "unsigned_int",
"unsigned long", "unsigned_long",
"unsigned long long", "unsigned_long_long",
"size_t", "size_t",
"string", "string",
"version_string",
"bool", "bool",
"double" "double"
}; };
@ -89,6 +90,7 @@ const size_t var_type_sizes[] = {
sizeof (unsigned long long), sizeof (unsigned long long),
sizeof (size_t), sizeof (size_t),
sizeof (char), sizeof (char),
sizeof (char),
sizeof (bool), sizeof (bool),
sizeof (double) sizeof (double)
}; };
@ -653,6 +655,7 @@ static int var_set_from_string (mca_base_var_t *var, char *src)
dst->lfval = strtod (src, NULL); dst->lfval = strtod (src, NULL);
break; break;
case MCA_BASE_VAR_TYPE_STRING: case MCA_BASE_VAR_TYPE_STRING:
case MCA_BASE_VAR_TYPE_VERSION_STRING:
var_set_string (var, src); var_set_string (var, src);
break; break;
case MCA_BASE_VAR_TYPE_MAX: case MCA_BASE_VAR_TYPE_MAX:
@ -693,7 +696,7 @@ int mca_base_var_set_value (int vari, const void *value, size_t size, mca_base_v
} }
} }
if (MCA_BASE_VAR_TYPE_STRING != var->mbv_type) { if (MCA_BASE_VAR_TYPE_STRING != var->mbv_type && MCA_BASE_VAR_TYPE_VERSION_STRING != var->mbv_type) {
memmove (var->mbv_storage, value, var_type_sizes[var->mbv_type]); memmove (var->mbv_storage, value, var_type_sizes[var->mbv_type]);
} else { } else {
var_set_string (var, (char *) value); var_set_string (var, (char *) value);
@ -735,7 +738,7 @@ int mca_base_var_deregister(int vari)
} }
/* Release the current value if it is a string. */ /* Release the current value if it is a string. */
if (MCA_BASE_VAR_TYPE_STRING == var->mbv_type && if ((MCA_BASE_VAR_TYPE_STRING == var->mbv_type || MCA_BASE_VAR_TYPE_VERSION_STRING == var->mbv_type) &&
var->mbv_storage->stringval) { var->mbv_storage->stringval) {
free (var->mbv_storage->stringval); free (var->mbv_storage->stringval);
var->mbv_storage->stringval = NULL; var->mbv_storage->stringval = NULL;
@ -935,7 +938,7 @@ int mca_base_var_build_env(char ***env, int *num_env, bool internal)
continue; continue;
} }
if (MCA_BASE_VAR_TYPE_STRING == var->mbv_type && if ((MCA_BASE_VAR_TYPE_STRING == var->mbv_type || MCA_BASE_VAR_TYPE_VERSION_STRING == var->mbv_type) &&
NULL == var->mbv_storage->stringval) { NULL == var->mbv_storage->stringval) {
continue; continue;
} }
@ -1327,7 +1330,7 @@ static int register_variable (const char *project_name, const char *framework_na
var->mbv_storage = storage; var->mbv_storage = storage;
/* make a copy of the default string value */ /* make a copy of the default string value */
if (MCA_BASE_VAR_TYPE_STRING == type && NULL != ((char **)storage)[0]) { if ((MCA_BASE_VAR_TYPE_STRING == type || MCA_BASE_VAR_TYPE_VERSION_STRING == type) && NULL != ((char **)storage)[0]) {
((char **)storage)[0] = strdup (((char **)storage)[0]); ((char **)storage)[0] = strdup (((char **)storage)[0]);
} }
} }
@ -1655,7 +1658,8 @@ static void var_constructor(mca_base_var_t *var)
*/ */
static void var_destructor(mca_base_var_t *var) static void var_destructor(mca_base_var_t *var)
{ {
if (MCA_BASE_VAR_TYPE_STRING == var->mbv_type && if ((MCA_BASE_VAR_TYPE_STRING == var->mbv_type ||
MCA_BASE_VAR_TYPE_VERSION_STRING == var->mbv_type) &&
NULL != var->mbv_storage && NULL != var->mbv_storage &&
NULL != var->mbv_storage->stringval) { NULL != var->mbv_storage->stringval) {
free (var->mbv_storage->stringval); free (var->mbv_storage->stringval);
@ -1759,6 +1763,7 @@ static int var_value_string (mca_base_var_t *var, char **value_string)
ret = asprintf (value_string, "%" PRIsize_t, value->sizetval); ret = asprintf (value_string, "%" PRIsize_t, value->sizetval);
break; break;
case MCA_BASE_VAR_TYPE_STRING: case MCA_BASE_VAR_TYPE_STRING:
case MCA_BASE_VAR_TYPE_VERSION_STRING:
ret = asprintf (value_string, "%s", ret = asprintf (value_string, "%s",
value->stringval ? value->stringval : ""); value->stringval ? value->stringval : "");
break; break;
@ -2054,3 +2059,4 @@ int mca_base_var_dump(int vari, char ***out, mca_base_var_dump_type_t output_typ
return OPAL_SUCCESS; return OPAL_SUCCESS;
} }

Просмотреть файл

@ -84,6 +84,8 @@ typedef enum {
MCA_BASE_VAR_TYPE_SIZE_T, MCA_BASE_VAR_TYPE_SIZE_T,
/** The variable is of type string. */ /** The variable is of type string. */
MCA_BASE_VAR_TYPE_STRING, MCA_BASE_VAR_TYPE_STRING,
/** The variable is of type string and contains version. */
MCA_BASE_VAR_TYPE_VERSION_STRING,
/** The variable is of type bool */ /** The variable is of type bool */
MCA_BASE_VAR_TYPE_BOOL, MCA_BASE_VAR_TYPE_BOOL,
/** The variable is of type double */ /** The variable is of type double */
@ -92,6 +94,7 @@ typedef enum {
MCA_BASE_VAR_TYPE_MAX MCA_BASE_VAR_TYPE_MAX
} mca_base_var_type_t; } mca_base_var_type_t;
extern const char *var_type_names[];
/** /**
* Source of an MCA variable's value * Source of an MCA variable's value

Просмотреть файл

@ -138,6 +138,8 @@ int opal_info_init(int argc, char **argv,
"Show architecture Open MPI was compiled on"); "Show architecture Open MPI was compiled on");
opal_cmd_line_make_opt3(opal_info_cmd_line, 'c', NULL, "config", 0, opal_cmd_line_make_opt3(opal_info_cmd_line, 'c', NULL, "config", 0,
"Show configuration options"); "Show configuration options");
opal_cmd_line_make_opt3(opal_info_cmd_line, 't', NULL, "type", 1,
"Show internal MCA parameters with the type specified in parameter.");
opal_cmd_line_make_opt3(opal_info_cmd_line, 'h', NULL, "help", 0, opal_cmd_line_make_opt3(opal_info_cmd_line, 'h', NULL, "help", 0,
"Show this help message"); "Show this help message");
opal_cmd_line_make_opt3(opal_info_cmd_line, '\0', NULL, "pretty-print", 0, opal_cmd_line_make_opt3(opal_info_cmd_line, '\0', NULL, "pretty-print", 0,
@ -532,6 +534,63 @@ void opal_info_err_params(opal_pointer_array_t *component_map)
return; return;
} }
void opal_info_do_type(opal_cmd_line_t *opal_info_cmd_line)
{
mca_base_var_info_lvl_t max_level = OPAL_INFO_LVL_9;
int count;
char *type, *component, *str;
bool found;
int i, j, k, len, ret;
char *p;
const mca_base_var_t *var;
char** strings, *message;
const mca_base_var_group_t *group;
p = "type";
if (NULL != (str = opal_cmd_line_get_param (opal_info_cmd_line, "level", 0, 0))) {
char *tmp;
errno = 0;
max_level = strtol (str, &tmp, 10) + OPAL_INFO_LVL_1 - 1;
if (0 != errno || '\0' != tmp[0] || max_level < OPAL_INFO_LVL_1 || max_level > OPAL_INFO_LVL_9) {
char *usage = opal_cmd_line_get_usage_msg(opal_info_cmd_line);
opal_show_help("help-opal_info.txt", "invalid-level", true, str);
free(usage);
exit(1);
}
}
count = opal_cmd_line_get_ninsts(opal_info_cmd_line, p);
len = mca_base_var_get_count ();
for (k = 0; k < count; ++k) {
type = opal_cmd_line_get_param(opal_info_cmd_line, p, k, 0);
for (i = 0; i < len; ++i) {
ret = mca_base_var_get (i, &var);
if (OPAL_SUCCESS != ret) {
continue;
}
if (0 == strcmp(type, var_type_names[var->mbv_type]) && (var->mbv_info_lvl <= max_level)) {
ret = mca_base_var_dump(var->mbv_index, &strings, !opal_info_pretty ? MCA_BASE_VAR_DUMP_PARSABLE : MCA_BASE_VAR_DUMP_READABLE);
if (OPAL_SUCCESS != ret) {
continue;
}
(void) mca_base_var_group_get(var->mbv_group_index, &group);
for (j = 0 ; strings[j] ; ++j) {
if (0 == j && opal_info_pretty) {
asprintf (&message, "MCA %s", group->group_framework);
opal_info_out(message, message, strings[j]);
free(message);
} else {
opal_info_out("", "", strings[j]);
}
free(strings[j]);
}
free(strings);
}
}
}
}
static void opal_info_show_mca_group_params(const mca_base_var_group_t *group, mca_base_var_info_lvl_t max_level, bool want_internal) static void opal_info_show_mca_group_params(const mca_base_var_group_t *group, mca_base_var_info_lvl_t max_level, bool want_internal)
{ {

Просмотреть файл

@ -98,6 +98,8 @@ OPAL_DECLSPEC void opal_info_do_arch(void);
OPAL_DECLSPEC void opal_info_do_hostname(void); OPAL_DECLSPEC void opal_info_do_hostname(void);
OPAL_DECLSPEC void opal_info_do_type(opal_cmd_line_t *opal_info_cmd_line);
OPAL_DECLSPEC void opal_info_out(const char *pretty_message, const char *plain_message, const char *value); OPAL_DECLSPEC void opal_info_out(const char *pretty_message, const char *plain_message, const char *value);
OPAL_DECLSPEC void opal_info_out_int(const char *pretty_message, OPAL_DECLSPEC void opal_info_out_int(const char *pretty_message,