diff --git a/orte/mca/iof/base/iof_base_frame.c b/orte/mca/iof/base/iof_base_frame.c index 92c4cafdeb..10b8335a78 100644 --- a/orte/mca/iof/base/iof_base_frame.c +++ b/orte/mca/iof/base/iof_base_frame.c @@ -268,8 +268,7 @@ static int orte_iof_base_open(mca_base_open_flag_t flags) } /* daemons do not need to do this as they do not write out stdout/err */ - if (!ORTE_PROC_IS_DAEMON || - (ORTE_PROC_IS_DAEMON && ORTE_PROC_IS_CM)) { + if (!ORTE_PROC_IS_DAEMON) { if (orte_xml_output) { if (NULL != orte_xml_fp) { /* user wants all xml-formatted output sent to file */ diff --git a/orte/mca/iof/base/iof_base_select.c b/orte/mca/iof/base/iof_base_select.c index 3cfbc883d0..851cd7ea92 100644 --- a/orte/mca/iof/base/iof_base_select.c +++ b/orte/mca/iof/base/iof_base_select.c @@ -49,11 +49,7 @@ int orte_iof_base_select(void) &orte_iof_base_framework.framework_components, (mca_base_module_t **) &best_module, (mca_base_component_t **) &best_component, NULL) ) { - /* it is okay to not find a module if we are a CM process */ - if (ORTE_PROC_IS_CM) { - return ORTE_SUCCESS; - } - /* otherwise, this is a problem */ + /* this is a problem */ return ORTE_ERR_NOT_FOUND; } diff --git a/orte/mca/oob/tcp/oob_tcp_listener.c b/orte/mca/oob/tcp/oob_tcp_listener.c index f6dd7b64e8..9bd653f07c 100644 --- a/orte/mca/oob/tcp/oob_tcp_listener.c +++ b/orte/mca/oob/tcp/oob_tcp_listener.c @@ -192,7 +192,7 @@ static int create_listen(void) * port in the range. Otherwise, tcp_port_min will be 0, which * means "pick any port" */ - if (ORTE_PROC_IS_DAEMON || ORTE_PROC_IS_AGGREGATOR) { + if (ORTE_PROC_IS_DAEMON) { if (NULL != mca_oob_tcp_component.tcp_static_ports) { /* if static ports were provided, take the * first entry in the list @@ -209,7 +209,7 @@ static int create_listen(void) opal_argv_append_nosize(&ports, "0"); orte_static_ports = false; } - } else if (ORTE_PROC_IS_HNP || ORTE_PROC_IS_SCHEDULER) { + } else if (ORTE_PROC_IS_HNP) { if (NULL != mca_oob_tcp_component.tcp_static_ports) { /* if static ports were provided, take the * first entry in the list diff --git a/orte/mca/plm/base/plm_base_launch_support.c b/orte/mca/plm/base/plm_base_launch_support.c index 78d1662f86..d9b3a45633 100644 --- a/orte/mca/plm/base/plm_base_launch_support.c +++ b/orte/mca/plm/base/plm_base_launch_support.c @@ -1321,11 +1321,10 @@ int orte_plm_base_orted_append_basic_args(int *argc, char ***argv, opal_argv_append(argc, argv, "orte_report_bindings"); opal_argv_append(argc, argv, "1"); } - if (!ORTE_PROC_IS_CM) { - /* pass our topology signature */ - opal_argv_append(argc, argv, "--hnp-topo-sig"); - opal_argv_append(argc, argv, orte_topo_signature); - } + /* pass our topology signature */ + opal_argv_append(argc, argv, "--hnp-topo-sig"); + opal_argv_append(argc, argv, orte_topo_signature); + if (orte_hetero_nodes) { opal_argv_append(argc, argv, "-"OPAL_MCA_CMD_LINE_ID); opal_argv_append(argc, argv, "orte_hetero_nodes"); diff --git a/orte/mca/plm/rsh/plm_rsh_module.c b/orte/mca/plm/rsh/plm_rsh_module.c index 2513626004..65651fa32b 100644 --- a/orte/mca/plm/rsh/plm_rsh_module.c +++ b/orte/mca/plm/rsh/plm_rsh_module.c @@ -606,17 +606,10 @@ static int setup_launch(int *argcptr, char ***argvptr, * Add the basic arguments to the orted command line, including * all debug options */ - if (ORTE_PROC_IS_CM) { - orte_plm_base_orted_append_basic_args(&argc, &argv, - NULL, - proc_vpid_index, - NULL); - } else { - orte_plm_base_orted_append_basic_args(&argc, &argv, - "env", - proc_vpid_index, - NULL); - } + orte_plm_base_orted_append_basic_args(&argc, &argv, + "env", + proc_vpid_index, + NULL); /* ensure that only the ssh plm is selected on the remote daemon */ opal_argv_append_nosize(&argv, "-"OPAL_MCA_CMD_LINE_ID); diff --git a/orte/mca/rtc/freq/Makefile.am b/orte/mca/rtc/freq/Makefile.am deleted file mode 100644 index 029271ccda..0000000000 --- a/orte/mca/rtc/freq/Makefile.am +++ /dev/null @@ -1,36 +0,0 @@ -# -# Copyright (c) 2014 Intel, Inc. All rights reserved -# $COPYRIGHT$ -# -# Additional copyrights may follow -# -# $HEADER$ -# - -dist_ortedata_DATA = help-rtc-freq.txt - -sources = \ - rtc_freq.c \ - rtc_freq.h \ - rtc_freq_component.c - -# Make the output library in this directory, and name it either -# mca__.la (for DSO builds) or libmca__.la -# (for static builds). - -if MCA_BUILD_orte_rtc_freq_DSO -component_noinst = -component_install = mca_rtc_freq.la -else -component_noinst = libmca_rtc_freq.la -component_install = -endif - -mcacomponentdir = $(ortelibdir) -mcacomponent_LTLIBRARIES = $(component_install) -mca_rtc_freq_la_SOURCES = $(sources) -mca_rtc_freq_la_LDFLAGS = -module -avoid-version - -noinst_LTLIBRARIES = $(component_noinst) -libmca_rtc_freq_la_SOURCES =$(sources) -libmca_rtc_freq_la_LDFLAGS = -module -avoid-version diff --git a/orte/mca/rtc/freq/configure.m4 b/orte/mca/rtc/freq/configure.m4 deleted file mode 100644 index cf19531e9e..0000000000 --- a/orte/mca/rtc/freq/configure.m4 +++ /dev/null @@ -1,23 +0,0 @@ -dnl -*- shell-script -*- -dnl -dnl Copyright (c) 2014 Intel, Inc. All rights reserved. -dnl $COPYRIGHT$ -dnl -dnl Additional copyrights may follow -dnl -dnl $HEADER$ -dnl - -# MCA_rtc_freq_CONFIG([action-if-found], [action-if-not-found]) -# ----------------------------------------------------------- -AC_DEFUN([MCA_orte_rtc_freq_CONFIG], [ - AC_CONFIG_FILES([orte/mca/rtc/freq/Makefile]) - - # do not build if not on linux - AC_MSG_CHECKING([for freq control support]) - AS_IF([test "$opal_found_linux" = "yes"], - [AC_MSG_RESULT([yes]) - $1], - [AC_MSG_RESULT([only supported on Linux systems]) - $2]) -])dnl diff --git a/orte/mca/rtc/freq/help-rtc-freq.txt b/orte/mca/rtc/freq/help-rtc-freq.txt deleted file mode 100644 index 466a50b0dd..0000000000 --- a/orte/mca/rtc/freq/help-rtc-freq.txt +++ /dev/null @@ -1,62 +0,0 @@ -# Copyright (c) 2014 Intel, Inc. All rights reserved. -# $COPYRIGHT$ -# -# Additional copyrights may follow -# -# $HEADER$ -# -[conflict-freq] -A specific frequency was given along with either or both a maximum -and minimum frequency. If a specific frequency is given, then the -max/min cannot be specified as well. - - Freq: %s - Max freq: %s - Min freq: %s - -Please correct the situation and try again. -# -[req-dir-not-found] -The frequency control component cannot function as a required directory -was not found on at least one node: - - Node: %s - Dir: %s - -The component cannot operate and has been disabled. -# -[no-cores-found] -The frequency control component did not find any cores on at least one node: - - Node: %s - -The component cannot operate and has been disabled. -# -[unsupported-governor] -A frequency governor was specified that is not supported on at least -one node: - - Node: %s - Governor: %s - Available: %s - -Please select one of the available governors and try again. -# -[permission-denied] -An attempt to open a file required for setting the specified -%s value has failed on at least one node: - - Node: %s - Filename: %s - -Check file permissions and try again. -# -[unsupported-freq] -A frequency was specified that is not supported on at least -one node: - - Node: %s - Freq: %s - Available: %s - -Please select one of the available frequencies and try again. diff --git a/orte/mca/rtc/freq/owner.txt b/orte/mca/rtc/freq/owner.txt deleted file mode 100644 index 4ad6f408ca..0000000000 --- a/orte/mca/rtc/freq/owner.txt +++ /dev/null @@ -1,7 +0,0 @@ -# -# owner/status file -# owner: institution that is responsible for this package -# status: e.g. active, maintenance, unmaintained -# -owner: INTEL -status: maintenance diff --git a/orte/mca/rtc/freq/rtc_freq.c b/orte/mca/rtc/freq/rtc_freq.c deleted file mode 100644 index 4955c404bf..0000000000 --- a/orte/mca/rtc/freq/rtc_freq.c +++ /dev/null @@ -1,610 +0,0 @@ -/* - * Copyright (c) 2014 Intel, Inc. All rights reserved - * Copyright (c) 2014 Research Organization for Information Science - * and Technology (RIST). All rights reserved. - * $COPYRIGHT$ - * - * Additional copyrights may follow - * - * $HEADER$ - */ - -#include "orte_config.h" -#include "orte/constants.h" -#include "orte/types.h" - -#include -#ifdef HAVE_UNISTD_H -#include -#endif /* HAVE_UNISTD_H */ -#include -#ifdef HAVE_DIRENT_H -#include -#endif /* HAVE_DIRENT_H */ -#include - -#include "opal/class/opal_list.h" -#include "opal/util/argv.h" -#include "opal/util/opal_environ.h" -#include "opal/util/os_path.h" -#include "opal/util/output.h" -#include "opal/util/os_dirpath.h" - -#include "orte/util/show_help.h" -#include "orte/util/error_strings.h" -#include "orte/runtime/orte_globals.h" -#include "orte/mca/errmgr/errmgr.h" -#include "orte/mca/rmaps/rmaps_types.h" - -#include "orte/mca/rtc/base/base.h" -#include "rtc_freq.h" - -static int init(void); -static void finalize(void); -static void assign(orte_job_t *jdata); -static void set(orte_job_t *jdata, - orte_proc_t *proc, - char ***environ_copy, - int write_fd); -static void getvals(opal_list_t *vals); - -orte_rtc_base_module_t orte_rtc_freq_module = { - init, - finalize, - assign, - set, - getvals -}; - -typedef struct { - opal_list_item_t super; - int core; - char *directory; - /* save the system settings so we can restore them when we die */ - char *system_governor; - float system_max_freq; - float system_min_freq; - /* save the current settings so we only change them when required */ - char *current_governor; - float current_max_freq; - float current_min_freq; - /* keep a list of allowed values */ - opal_list_t governors; - opal_list_t frequencies; - /* mark if setspeed is supported */ - bool setspeed; -} rtefreq_tracker_t; -static void ctr_con(rtefreq_tracker_t *trk) -{ - trk->directory = NULL; - trk->system_governor = NULL; - trk->current_governor = NULL; - OBJ_CONSTRUCT(&trk->governors, opal_list_t); - OBJ_CONSTRUCT(&trk->frequencies, opal_list_t); - trk->setspeed = false; -} -static void ctr_des(rtefreq_tracker_t *trk) -{ - if (NULL != trk->directory) { - free(trk->directory); - } - if (NULL != trk->system_governor) { - free(trk->system_governor); - } - if (NULL != trk->current_governor) { - free(trk->current_governor); - } - OPAL_LIST_DESTRUCT(&trk->governors); - OPAL_LIST_DESTRUCT(&trk->frequencies); -} -OBJ_CLASS_INSTANCE(rtefreq_tracker_t, - opal_list_item_t, - ctr_con, ctr_des); - -static char *orte_getline(FILE *fp) -{ - char *ret, *buff; - char input[1024]; - int k; - - ret = fgets(input, 1024, fp); - if (NULL != ret) { - /* trim the end of the line */ - for (k=strlen(input)-1; 0 < k && isspace(input[k]); k--) { - input[k] = '\0'; - } - buff = strdup(input); - return buff; - } - - return NULL; -} - -static opal_list_t tracking; - -static int init(void) -{ - int k; - DIR *cur_dirp = NULL; - struct dirent *entry; - char *filename, *tmp, **vals; - FILE *fp; - rtefreq_tracker_t *trk; - opal_value_t *kv; - - /* always construct this so we don't segfault in finalize */ - OBJ_CONSTRUCT(&tracking, opal_list_t); - - /* - * Open up the base directory so we can get a listing - */ - if (NULL == (cur_dirp = opendir("/sys/devices/system/cpu"))) { - OBJ_DESTRUCT(&tracking); - if (4 < opal_output_get_verbosity(orte_rtc_base_framework.framework_output)) { - orte_show_help("help-rtc-freq.txt", "req-dir-not-found", - true, orte_process_info.nodename, - "/sys/devices/system/cpu"); - } - return ORTE_ERROR; - } - - /* - * For each directory - */ - while (NULL != (entry = readdir(cur_dirp))) { - - /* - * Skip the obvious - */ - if (0 == strncmp(entry->d_name, ".", strlen(".")) || - 0 == strncmp(entry->d_name, "..", strlen(".."))) { - continue; - } - - /* look for cpu directories */ - if (0 != strncmp(entry->d_name, "cpu", strlen("cpu"))) { - /* cannot be a cpu directory */ - continue; - } - /* if it ends in other than a digit, then it isn't a cpu directory */ - if (!isdigit(entry->d_name[strlen(entry->d_name)-1])) { - continue; - } - - /* track the info for this core */ - trk = OBJ_NEW(rtefreq_tracker_t); - /* trailing digits are the core id */ - for (k=strlen(entry->d_name)-1; 0 <= k; k--) { - if (!isdigit(entry->d_name[k])) { - break; - } - } - trk->core = strtoul(&entry->d_name[k], NULL, 10); - trk->directory = opal_os_path(false, "/sys/devices/system/cpu", entry->d_name, "cpufreq", NULL); - - /* read/save the current settings */ - filename = opal_os_path(false, trk->directory, "scaling_governor", NULL); - if (NULL == (fp = fopen(filename, "rw"))) { - free(filename); - OBJ_RELEASE(trk); - continue; - } - trk->system_governor = orte_getline(fp); - trk->current_governor = strdup(trk->system_governor); - fclose(fp); - free(filename); - - filename = opal_os_path(false, trk->directory, "scaling_max_freq", NULL); - if (NULL == (fp = fopen(filename, "rw"))) { - free(filename); - OBJ_RELEASE(trk); - continue; - } - tmp = orte_getline(fp); - fclose(fp); - trk->system_max_freq = strtoul(tmp, NULL, 10) / 1000000.0; - trk->current_max_freq = trk->system_max_freq; - free(filename); - free(tmp); - - filename = opal_os_path(false, trk->directory, "scaling_min_freq", NULL); - if (NULL == (fp = fopen(filename, "rw"))) { - free(filename); - OBJ_RELEASE(trk); - continue; - } - tmp = orte_getline(fp); - fclose(fp); - trk->system_min_freq = strtoul(tmp, NULL, 10) / 1000000.0; - trk->current_min_freq = trk->system_min_freq; - free(filename); - free(tmp); - - /* get the list of available governors */ - filename = opal_os_path(false, trk->directory, "scaling_available_governors", NULL); - if (NULL == (fp = fopen(filename, "r"))) { - free(filename); - OBJ_RELEASE(trk); - continue; - } - tmp = orte_getline(fp); - fclose(fp); - free(filename); - if (NULL != tmp) { - vals = opal_argv_split(tmp, ' '); - free(tmp); - for (k=0; NULL != vals[k]; k++) { - kv = OBJ_NEW(opal_value_t); - kv->type = OPAL_STRING; - kv->data.string = strdup(vals[k]); - opal_list_append(&trk->governors, &kv->super); - } - opal_argv_free(vals); - } - - /* get the list of available frequencies */ - filename = opal_os_path(false, trk->directory, "scaling_available_frequencies", NULL); - if (NULL == (fp = fopen(filename, "r"))) { - free(filename); - OBJ_RELEASE(trk); - continue; - } - tmp = orte_getline(fp); - fclose(fp); - free(filename); - if (NULL != tmp) { - vals = opal_argv_split(tmp, ' '); - free(tmp); - for (k=0; NULL != vals[k]; k++) { - kv = OBJ_NEW(opal_value_t); - kv->type = OPAL_FLOAT; - kv->data.fval = strtoul(vals[k], NULL, 10) / 1000000.0; - opal_list_append(&trk->frequencies, &kv->super); - } - opal_argv_free(vals); - } - - /* see if setspeed is supported */ - filename = opal_os_path(false, trk->directory, "scaling_setspeed", NULL); - if (NULL != (fp = fopen(filename, "rw"))) { - trk->setspeed = true; - fclose(fp); - } - free(filename); - - /* add to our list */ - opal_list_append(&tracking, &trk->super); - } - closedir(cur_dirp); - - if (0 == opal_list_get_size(&tracking)) { - /* nothing to read */ - if (0 < opal_output_get_verbosity(orte_rtc_base_framework.framework_output)) { - orte_show_help("help-rtc-freq.txt", "no-cores-found", - true, orte_process_info.nodename); - } - OPAL_LIST_DESTRUCT(&tracking); - return ORTE_ERROR; - } - - /* report out the results, if requested */ - if (9 < opal_output_get_verbosity(orte_rtc_base_framework.framework_output)) { - OPAL_LIST_FOREACH(trk, &tracking, rtefreq_tracker_t) { - opal_output(0, "%s\tCore: %d Governor: %s MaxFreq: %f MinFreq: %f\n", - ORTE_NAME_PRINT(ORTE_PROC_MY_NAME), trk->core, - trk->system_governor, trk->system_max_freq, trk->system_min_freq); - OPAL_LIST_FOREACH(kv, &trk->governors, opal_value_t) { - opal_output(0, "%s\t\tGovernor: %s", - ORTE_NAME_PRINT(ORTE_PROC_MY_NAME), kv->data.string); - } - OPAL_LIST_FOREACH(kv, &trk->frequencies, opal_value_t) { - opal_output(0, "%s\t\tFrequency: %f", - ORTE_NAME_PRINT(ORTE_PROC_MY_NAME), kv->data.fval); - } - } - } - - return ORTE_SUCCESS; -} - -static void finalize(void) -{ - OPAL_LIST_DESTRUCT(&tracking); - - return; -} - -static void assign(orte_job_t *jdata) -{ - bool freq_given = false; - - opal_output_verbose(2, orte_rtc_base_framework.framework_output, - "%s Assigning freq controls to job %s", - ORTE_NAME_PRINT(ORTE_PROC_MY_NAME), - ORTE_JOBID_PRINT(jdata->jobid)); - - /* see if the job already has the max freq attribute set */ - if (orte_get_attribute(&jdata->attributes, ORTE_JOB_MAX_FREQ, NULL, OPAL_STRING)) { - opal_output_verbose(2, orte_rtc_base_framework.framework_output, - "%s Assigning max freq given for job %s", - ORTE_NAME_PRINT(ORTE_PROC_MY_NAME), - ORTE_JOBID_PRINT(jdata->jobid)); - freq_given = true; - } else if (NULL != mca_rtc_freq_component.max_freq) { - /* if not, set the default value if provided */ - opal_output_verbose(2, orte_rtc_base_framework.framework_output, - "%s Assigning default max freq control to job %s", - ORTE_NAME_PRINT(ORTE_PROC_MY_NAME), - ORTE_JOBID_PRINT(jdata->jobid)); - orte_set_attribute(&jdata->attributes, ORTE_JOB_MAX_FREQ, ORTE_ATTR_GLOBAL, - mca_rtc_freq_component.max_freq, OPAL_STRING); - freq_given = true; - } - - /* see if the job already has the min freq attribute set */ - if (orte_get_attribute(&jdata->attributes, ORTE_JOB_MIN_FREQ, NULL, OPAL_STRING)) { - opal_output_verbose(2, orte_rtc_base_framework.framework_output, - "%s Assigning min freq controls to job %s", - ORTE_NAME_PRINT(ORTE_PROC_MY_NAME), - ORTE_JOBID_PRINT(jdata->jobid)); - freq_given = true; - } else if (NULL != mca_rtc_freq_component.min_freq) { - /* if not, set the default value if provided */ - opal_output_verbose(2, orte_rtc_base_framework.framework_output, - "%s Assigning default minfreq controls to job %s", - ORTE_NAME_PRINT(ORTE_PROC_MY_NAME), - ORTE_JOBID_PRINT(jdata->jobid)); - orte_set_attribute(&jdata->attributes, ORTE_JOB_MIN_FREQ, ORTE_ATTR_GLOBAL, - mca_rtc_freq_component.min_freq, OPAL_STRING); - freq_given = true; - } - - /* see if the job has a governor attribute set */ - if (!orte_get_attribute(&jdata->attributes, ORTE_JOB_GOVERNOR, NULL, OPAL_STRING)) { - opal_output_verbose(2, orte_rtc_base_framework.framework_output, - "%s Assigning freq governor to job %s", - ORTE_NAME_PRINT(ORTE_PROC_MY_NAME), - ORTE_JOBID_PRINT(jdata->jobid)); - /* if not, was a default value provided? */ - if (NULL != mca_rtc_freq_component.governor) { - /* set it */ - opal_output_verbose(2, orte_rtc_base_framework.framework_output, - "%s Assigning default freq governor to job %s", - ORTE_NAME_PRINT(ORTE_PROC_MY_NAME), - ORTE_JOBID_PRINT(jdata->jobid)); - orte_set_attribute(&jdata->attributes, ORTE_JOB_GOVERNOR, ORTE_ATTR_GLOBAL, - mca_rtc_freq_component.governor, OPAL_STRING); - } else if (freq_given) { - /* if the user specified a frequency, then we should default - * to the userspace governor to ensure we can set it */ - opal_output_verbose(2, orte_rtc_base_framework.framework_output, - "%s Assigning default userspace governor to job %s", - ORTE_NAME_PRINT(ORTE_PROC_MY_NAME), - ORTE_JOBID_PRINT(jdata->jobid)); - orte_set_attribute(&jdata->attributes, ORTE_JOB_GOVERNOR, ORTE_ATTR_GLOBAL, - "userspace", OPAL_STRING); - } - } -} - -static void set(orte_job_t *jdata, - orte_proc_t *child, - char ***environ_copy, - int write_fd) -{ - char *governor, *tmp, **vals; - rtefreq_tracker_t *trk; - opal_value_t *kv; - float freq, *fptr, minfreq; - bool setspeed_used = false; - bool allowed; - char *filename; - FILE *fp; - - opal_output_verbose(2, orte_rtc_base_framework.framework_output, - "%s Setting freq controls for job %s", - ORTE_NAME_PRINT(ORTE_PROC_MY_NAME), - ORTE_JOBID_PRINT(jdata->jobid)); - - /* see if the job has the governor attribute set */ - governor = NULL; - if (orte_get_attribute(&jdata->attributes, ORTE_JOB_GOVERNOR, (void**)&governor, OPAL_STRING)) { - /* loop thru all the cpus on this node */ - OPAL_LIST_FOREACH(trk, &tracking, rtefreq_tracker_t) { - /* does the requested value match the current setting? */ - if (0 == strcmp(trk->current_governor, governor)) { - continue; - } - /* is the specified governor among those allowed? */ - allowed = false; - OPAL_LIST_FOREACH(kv, &trk->governors, opal_value_t) { - if (0 == strcmp(kv->data.string, governor)) { - allowed = true; - break; - } - } - if (!allowed) { - vals = NULL; - OPAL_LIST_FOREACH(kv, &trk->governors, opal_value_t) { - opal_argv_append_nosize(&vals, kv->data.string); - } - tmp = opal_argv_join(vals, ','); - opal_argv_free(vals); - orte_show_help("help-rtc-freq.txt", "unsupported-governor", true, - orte_process_info.nodename, governor, tmp); - free(tmp); - /* generate an error so the errmgr can resolve it */ - return; - } - /* attempt to set the value */ - filename = opal_os_path(false, trk->directory, "scaling_governor", NULL); - if (NULL == (fp = fopen(filename, "w"))) { - /* not allowed - report the error */ - orte_show_help("help-rtc-freq.txt", "permission-denied", true, - "governor", orte_process_info.nodename, filename); - free(filename); - return; - } - opal_output_verbose(2, orte_rtc_base_framework.framework_output, - "%s Setting governor %s for job %s", - ORTE_NAME_PRINT(ORTE_PROC_MY_NAME), governor, - ORTE_JOBID_PRINT(jdata->jobid)); - fprintf(fp, "%s\n", governor); - fclose(fp); - free(filename); - } - } - - /* see if the job has the min freq attribute set */ - fptr = &minfreq; - if (!orte_get_attribute(&jdata->attributes, ORTE_JOB_MIN_FREQ, (void**)&fptr, OPAL_FLOAT)) { - minfreq = -1.0; - } - - /* see if the job has the max freq attribute set */ - fptr = &freq; - if (orte_get_attribute(&jdata->attributes, ORTE_JOB_MAX_FREQ, (void**)&fptr, OPAL_FLOAT)) { - /* loop thru all the cpus on this node */ - OPAL_LIST_FOREACH(trk, &tracking, rtefreq_tracker_t) { - /* does the requested value match the current setting? */ - if (trk->current_max_freq == freq) { - continue; - } - /* is the specified frequency among those allowed? */ - allowed = false; - OPAL_LIST_FOREACH(kv, &trk->frequencies, opal_value_t) { - if (kv->data.fval == freq) { - allowed = true; - break; - } - } - if (!allowed) { - vals = NULL; - OPAL_LIST_FOREACH(kv, &trk->frequencies, opal_value_t) { - asprintf(&tmp, "%f", kv->data.fval); - opal_argv_append_nosize(&vals, tmp); - free(tmp); - } - tmp = opal_argv_join(vals, ','); - opal_argv_free(vals); - orte_show_help("help-rtc-freq.txt", "unsupported-freq", true, freq, tmp); - free(tmp); - /* generate an error so the errmgr can resolve it */ - return; - } - /* if we got a min freq and the two are the same, then use setspeed if supported */ - if (minfreq == freq && trk->setspeed) { - filename = opal_os_path(false, trk->directory, "scaling_setspeed", NULL); - setspeed_used = true; - } else { - filename = opal_os_path(false, trk->directory, "scaling_max_freq", NULL); - } - /* attempt to set the value */ - if (NULL == (fp = fopen(filename, "w"))) { - /* not allowed - report the error */ - orte_show_help("help-rtc-freq.txt", "permission-denied", true, - "max freq", orte_process_info.nodename, filename); - free(filename); - return; - } - opal_output_verbose(2, orte_rtc_base_framework.framework_output, - "%s Setting %s freq controls to %ld for job %s", - ORTE_NAME_PRINT(ORTE_PROC_MY_NAME), - setspeed_used ? "cpu" : "max", - (unsigned long)(freq * 1000000.0), - ORTE_JOBID_PRINT(jdata->jobid)); - fprintf(fp, "%ld\n", (unsigned long)(freq * 1000000.0)); - fclose(fp); - free(filename); - } - } - - if (!setspeed_used && 0.0 < minfreq) { - /* need to process the min freq value - loop thru all the cpus on this node */ - OPAL_LIST_FOREACH(trk, &tracking, rtefreq_tracker_t) { - /* does the requested value match the current setting? */ - if (trk->current_min_freq == minfreq) { - continue; - } - /* is the specified frequency among those allowed? */ - allowed = false; - OPAL_LIST_FOREACH(kv, &trk->frequencies, opal_value_t) { - if (kv->data.fval == minfreq) { - allowed = true; - break; - } - } - if (!allowed) { - vals = NULL; - OPAL_LIST_FOREACH(kv, &trk->frequencies, opal_value_t) { - asprintf(&tmp, "%f", kv->data.fval); - opal_argv_append_nosize(&vals, tmp); - free(tmp); - } - tmp = opal_argv_join(vals, ','); - opal_argv_free(vals); - orte_show_help("help-rtc-freq.txt", "unsupported-freq", true, minfreq, tmp); - free(tmp); - /* generate an error so the errmgr can resolve it */ - return; - } - filename = opal_os_path(false, trk->directory, "scaling_min_freq", NULL); - /* attempt to set the value */ - if (NULL == (fp = fopen(filename, "w"))) { - /* not allowed - report the error */ - orte_show_help("help-rtc-freq.txt", "permission-denied", true, - "min freq", orte_process_info.nodename, filename); - free(filename); - return; - } - opal_output_verbose(2, orte_rtc_base_framework.framework_output, - "%s Setting min freq controls to %ld for job %s", - ORTE_NAME_PRINT(ORTE_PROC_MY_NAME), - (unsigned long)(minfreq * 1000000.0), - ORTE_JOBID_PRINT(jdata->jobid)); - fprintf(fp, "%ld\n", (unsigned long)(minfreq * 1000000.0)); - fclose(fp); - free(filename); - } - } -} - -static void getvals(opal_list_t *vals) -{ - rtefreq_tracker_t *trk; - orte_rtc_resource_t *res; - opal_value_t *kv; - char *tmp, **args; - - res = OBJ_NEW(orte_rtc_resource_t); - - OPAL_LIST_FOREACH(trk, &tracking, rtefreq_tracker_t) { - res = OBJ_NEW(orte_rtc_resource_t); - res->component = strdup(mca_rtc_freq_component.super.base_version.mca_component_name); - asprintf(&res->category, "core-%d", trk->core); - opal_list_append(vals, &res->super); - args = NULL; - OPAL_LIST_FOREACH(kv, &trk->governors, opal_value_t) { - opal_argv_append_nosize(&args, kv->data.string); - } - res->control.key = strdup("governors"); - res->control.type = OPAL_STRING; - res->control.data.string = opal_argv_join(args, ','); - opal_argv_free(args); - - res = OBJ_NEW(orte_rtc_resource_t); - res->component = strdup(mca_rtc_freq_component.super.base_version.mca_component_name); - asprintf(&res->category, "core-%d", trk->core); - opal_list_append(vals, &res->super); - args = NULL; - OPAL_LIST_FOREACH(kv, &trk->frequencies, opal_value_t) { - asprintf(&tmp, "%f", kv->data.fval); - opal_argv_append_nosize(&args, tmp); - free(tmp); - } - res->control.key = strdup("frequencies"); - res->control.type = OPAL_STRING; - res->control.data.string = opal_argv_join(args, ','); - opal_argv_free(args); - } -} diff --git a/orte/mca/rtc/freq/rtc_freq.h b/orte/mca/rtc/freq/rtc_freq.h deleted file mode 100644 index 844c668cac..0000000000 --- a/orte/mca/rtc/freq/rtc_freq.h +++ /dev/null @@ -1,34 +0,0 @@ -/* - * Copyright (c) 2014 Intel, Inc. All rights reserved - * $COPYRIGHT$ - * - * Additional copyrights may follow - * - * $HEADER$ - */ -/** - * @file - */ -#ifndef ORTE_RTC_FREQ_H -#define ORTE_RTC_FREQ_H - -#include "orte_config.h" - -#include "orte/mca/rtc/rtc.h" - -BEGIN_C_DECLS - -typedef struct { - orte_rtc_base_component_t super; - char *governor; - char *max_freq; - char *min_freq; -} orte_rtc_freq_component_t; -ORTE_MODULE_DECLSPEC extern orte_rtc_freq_component_t mca_rtc_freq_component; - -extern orte_rtc_base_module_t orte_rtc_freq_module; - - -END_C_DECLS - -#endif /* ORTE_RTC_FREQ_H */ diff --git a/orte/mca/rtc/freq/rtc_freq_component.c b/orte/mca/rtc/freq/rtc_freq_component.c deleted file mode 100644 index 069e364ab3..0000000000 --- a/orte/mca/rtc/freq/rtc_freq_component.c +++ /dev/null @@ -1,122 +0,0 @@ -/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil -*- */ -/* - * Copyright (c) 2014 Intel, Inc. All rights reserved - * Copyright (c) 2015 Los Alamos National Security, LLC. All rights - * reserved. - * $COPYRIGHT$ - * - * Additional copyrights may follow - * - * $HEADER$ - */ - -#include "orte_config.h" -#include "orte/constants.h" - -#include "opal/mca/base/base.h" - -#include "orte/util/show_help.h" - -#include "rtc_freq.h" - -/* - * Local functions - */ - -static int rtc_freq_query(mca_base_module_t **module, int *priority); -static int rtc_freq_register(void); - -static int my_priority; - -orte_rtc_freq_component_t mca_rtc_freq_component = { - { - .base_version = { - ORTE_RTC_BASE_VERSION_1_0_0, - - .mca_component_name = "freq", - MCA_BASE_MAKE_VERSION(component, ORTE_MAJOR_VERSION, ORTE_MINOR_VERSION, - ORTE_RELEASE_VERSION), - .mca_query_component = rtc_freq_query, - .mca_register_component_params = rtc_freq_register, - }, - .base_data = { - /* The component is checkpoint ready */ - MCA_BASE_METADATA_PARAM_CHECKPOINT - }, - } -}; - -static char *freq; - -static int rtc_freq_register(void) -{ - mca_base_component_t *c = &mca_rtc_freq_component.super.base_version; - - /* ordering here doesn't really matter */ - my_priority = 50; - (void) mca_base_component_var_register (c, "priority", "Priority of the FREQ rtc component", - MCA_BASE_VAR_TYPE_INT, NULL, 0, 0, - OPAL_INFO_LVL_9, - MCA_BASE_VAR_SCOPE_READONLY, - &my_priority); - - mca_rtc_freq_component.governor = NULL; - (void) mca_base_component_var_register (c, "governor", "Governor to be used by default (default: system setting)", - MCA_BASE_VAR_TYPE_STRING, NULL, 0, 0, - OPAL_INFO_LVL_9, - MCA_BASE_VAR_SCOPE_READONLY, - &mca_rtc_freq_component.governor); - - mca_rtc_freq_component.max_freq = NULL; - (void) mca_base_component_var_register (c, "max", "Max frequency to be used by default (default: system setting)", - MCA_BASE_VAR_TYPE_STRING, NULL, 0, 0, - OPAL_INFO_LVL_9, - MCA_BASE_VAR_SCOPE_READONLY, - &mca_rtc_freq_component.max_freq); - - mca_rtc_freq_component.min_freq = NULL; - (void) mca_base_component_var_register (c, "min", "Min frequency to be used by default (default: system setting)", - MCA_BASE_VAR_TYPE_STRING, NULL, 0, 0, - OPAL_INFO_LVL_9, - MCA_BASE_VAR_SCOPE_READONLY, - &mca_rtc_freq_component.min_freq); - - freq = NULL; - (void) mca_base_component_var_register (c, NULL, "Specific frequency to be used by default", - MCA_BASE_VAR_TYPE_STRING, NULL, 0, 0, - OPAL_INFO_LVL_9, - MCA_BASE_VAR_SCOPE_READONLY, - &freq); - - if (NULL != freq) { - /* if a max/min was also given, then that is an error */ - if (NULL != mca_rtc_freq_component.max_freq || - NULL != mca_rtc_freq_component.min_freq) { - orte_show_help("help-rtc-freq.txt", "conflict-freq", true, freq, - (NULL == mca_rtc_freq_component.max_freq) ? "NULL" : mca_rtc_freq_component.max_freq, - (NULL == mca_rtc_freq_component.min_freq) ? "NULL" : mca_rtc_freq_component.min_freq); - return ORTE_ERR_SILENT; - } - /* set the max/min to the given value */ - mca_rtc_freq_component.max_freq = strdup(freq); - mca_rtc_freq_component.min_freq = strdup(freq); - } - - return ORTE_SUCCESS; -} - - -static int rtc_freq_query(mca_base_module_t **module, int *priority) -{ - /* in general, only root can change the frequency setting - * of a node. However, if the sys admin has configured the - * remote node with the "userspace" governor, then individual - * users will be able to do so. Hence, we allow this component - * to always be selected, and will instead error out if the - * remote node cannot support the desired setting - */ - *priority = my_priority; - *module = (mca_base_module_t *)&orte_rtc_freq_module; - - return ORTE_SUCCESS; -} diff --git a/orte/mca/state/orted/state_orted_component.c b/orte/mca/state/orted/state_orted_component.c index 252447aaf5..0dbbc459a0 100644 --- a/orte/mca/state/orted/state_orted_component.c +++ b/orte/mca/state/orted/state_orted_component.c @@ -71,7 +71,7 @@ static int state_orted_close(void) static int state_orted_component_query(mca_base_module_t **module, int *priority) { - if (ORTE_PROC_IS_DAEMON && !ORTE_PROC_IS_CM) { + if (ORTE_PROC_IS_DAEMON) { /* set our priority high as we are the default for orteds */ *priority = my_priority; *module = (mca_base_module_t *)&orte_state_orted_module; diff --git a/orte/runtime/orte_globals.h b/orte/runtime/orte_globals.h index 693cbfa17a..9eaba3a054 100644 --- a/orte/runtime/orte_globals.h +++ b/orte/runtime/orte_globals.h @@ -96,9 +96,6 @@ ORTE_DECLSPEC extern orte_process_name_t orte_name_invalid; /** instantiated in /* define the name of my daemon */ #define ORTE_PROC_MY_DAEMON (&orte_process_info.my_daemon) -/* define the name of my scheduler */ -#define ORTE_PROC_MY_SCHEDULER (&orte_process_info.my_scheduler) - ORTE_DECLSPEC extern bool orte_in_parallel_debugger; /* error manager callback function */ diff --git a/orte/util/proc_info.c b/orte/util/proc_info.c index e226fcc67c..277afa2bc4 100644 --- a/orte/util/proc_info.c +++ b/orte/util/proc_info.c @@ -59,7 +59,6 @@ ORTE_DECLSPEC orte_proc_info_t orte_process_info = { .my_hnp = ORTE_NAME_INVALID, .my_hnp_uri = NULL, .my_parent = ORTE_NAME_INVALID, - .my_scheduler = ORTE_NAME_INVALID, .hnp_pid = 0, .app_num = 0, .num_procs = 1, @@ -182,10 +181,10 @@ int orte_proc_info(void) orte_strip_prefix = NULL; (void) mca_base_var_register ("orte", "orte", NULL, "strip_prefix", - "Prefix(es) to match when deciding whether to strip leading characters and zeroes from " - "node names returned by daemons", MCA_BASE_VAR_TYPE_STRING, NULL, 0, 0, - OPAL_INFO_LVL_9, MCA_BASE_VAR_SCOPE_READONLY, - &orte_strip_prefix); + "Prefix(es) to match when deciding whether to strip leading characters and zeroes from " + "node names returned by daemons", MCA_BASE_VAR_TYPE_STRING, NULL, 0, 0, + OPAL_INFO_LVL_9, MCA_BASE_VAR_SCOPE_READONLY, + &orte_strip_prefix); /* we have to strip node names here, if user directs, to ensure that * the names exchanged in the modex match the names found locally diff --git a/orte/util/proc_info.h b/orte/util/proc_info.h index c4cd6207c7..ace299370d 100644 --- a/orte/util/proc_info.h +++ b/orte/util/proc_info.h @@ -54,11 +54,8 @@ typedef uint32_t orte_proc_type_t; #define ORTE_PROC_NON_MPI 0x0010 #define ORTE_PROC_MPI 0x0020 #define ORTE_PROC_APP 0x0030 -#define ORTE_PROC_CM 0x0040 -#define ORTE_PROC_AGGREGATOR 0x0080 #define ORTE_PROC_DVM 0x0102 // DVM + daemon #define ORTE_PROC_IOF_ENDPT 0x1000 -#define ORTE_PROC_SCHEDULER 0x2000 #define ORTE_PROC_MASTER_ACTUAL 0x4000 #define ORTE_PROC_MASTER (ORTE_PROC_MASTER_ACTUAL + ORTE_PROC_HNP) @@ -69,11 +66,8 @@ typedef uint32_t orte_proc_type_t; #define ORTE_PROC_IS_NON_MPI (ORTE_PROC_NON_MPI & orte_process_info.proc_type) #define ORTE_PROC_IS_MPI (ORTE_PROC_MPI & orte_process_info.proc_type) #define ORTE_PROC_IS_APP (ORTE_PROC_APP & orte_process_info.proc_type) -#define ORTE_PROC_IS_CM (ORTE_PROC_CM & orte_process_info.proc_type) -#define ORTE_PROC_IS_AGGREGATOR (ORTE_PROC_AGGREGATOR & orte_process_info.proc_type) #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_ACTUAL & orte_process_info.proc_type) @@ -94,7 +88,6 @@ struct orte_proc_info_t { orte_process_name_t my_hnp; /**< Name of my hnp */ char *my_hnp_uri; /**< Contact info for my hnp */ orte_process_name_t my_parent; /**< Name of my parent (or my HNP if no parent was specified) */ - orte_process_name_t my_scheduler; /**< name of the scheduler for this system */ pid_t hnp_pid; /**< hnp pid - used if singleton */ orte_app_idx_t app_num; /**< our index into the app_context array */ orte_vpid_t num_procs; /**< number of processes in this job */