Merge pull request #3213 from hppritcha/topic/remove_loadleveer
orte/ras: remove loadleveler support
Этот коммит содержится в:
Коммит
3918b7a796
4
README
4
README
@ -988,10 +988,6 @@ RUN-TIME SYSTEM SUPPORT
|
||||
Force the building of for the Cray Alps run-time environment. If
|
||||
Alps support cannot be found, configure will abort.
|
||||
|
||||
--with-loadleveler
|
||||
Force the building of LoadLeveler scheduler support. If LoadLeveler
|
||||
support cannot be found, configure will abort.
|
||||
|
||||
--with-lsf=<directory>
|
||||
Specify the directory where the LSF libraries and header files are
|
||||
located. This option is generally only necessary if the LSF headers
|
||||
|
@ -1,53 +0,0 @@
|
||||
# -*- shell-script -*-
|
||||
#
|
||||
# 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 (c) 2006-2009 Cisco Systems, Inc. All rights reserved.
|
||||
# Copyright (c) 2011 IBM Corporation. All rights reserved.
|
||||
# $COPYRIGHT$
|
||||
#
|
||||
# Additional copyrights may follow
|
||||
#
|
||||
# $HEADER$
|
||||
#
|
||||
|
||||
# 1. if --with-loadleveler is given, always build
|
||||
# 2. if --without-loadleveler is given, never build
|
||||
# 3. if neither is given, build if-and-only-if the OS is Linux or AIX
|
||||
|
||||
# ORTE_CHECK_LOADLEVELER(prefix, [action-if-found], [action-if-not-found])
|
||||
# --------------------------------------------------------
|
||||
AC_DEFUN([ORTE_CHECK_LOADLEVELER],[
|
||||
AC_ARG_WITH([loadleveler],
|
||||
[AC_HELP_STRING([--with-loadleveler],
|
||||
[Build LoadLeveler scheduler component (default: yes)])])
|
||||
|
||||
if test "$with_loadleveler" = "no" ; then
|
||||
orte_check_loadleveler_happy="no"
|
||||
elif test "$with_loadleveler" = "" ; then
|
||||
# unless user asked, only build LoadLeveler component on Linux
|
||||
# and AIX (these are the platforms that LoadLeveler supports)
|
||||
case $host in
|
||||
*-linux*|*-aix*)
|
||||
orte_check_loadleveler_happy="yes"
|
||||
;;
|
||||
*)
|
||||
orte_check_loadleveler_happy="no"
|
||||
;;
|
||||
esac
|
||||
else
|
||||
orte_check_loadleveler_happy="yes"
|
||||
fi
|
||||
|
||||
AS_IF([test "$orte_check_loadleveler_happy" = "yes"],
|
||||
[$2],
|
||||
[$3])
|
||||
])
|
@ -22,7 +22,6 @@ with_devel_headers=yes
|
||||
with_alps=no
|
||||
with_ftb=no
|
||||
with_sge=no
|
||||
with_loadleveler=no
|
||||
with_xgrid=no
|
||||
with_slurm=no
|
||||
with_tm=no
|
||||
|
@ -22,7 +22,6 @@ with_devel_headers=yes
|
||||
with_alps=no
|
||||
with_ftb=no
|
||||
with_sge=no
|
||||
with_loadleveler=no
|
||||
with_xgrid=no
|
||||
with_slurm=no
|
||||
with_tm=no
|
||||
|
@ -1,53 +0,0 @@
|
||||
#
|
||||
# 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 (c) 2010 Cisco Systems, Inc. All rights reserved.
|
||||
# $COPYRIGHT$
|
||||
#
|
||||
# Additional copyrights may follow
|
||||
#
|
||||
# $HEADER$
|
||||
#
|
||||
|
||||
AM_CPPFLAGS = $(ras_loadleveler_CPPFLAGS)
|
||||
|
||||
sources = \
|
||||
ras_loadleveler.h \
|
||||
ras_loadleveler_component.c \
|
||||
ras_loadleveler_module.c
|
||||
|
||||
|
||||
# Make the output library in this directory, and name it either
|
||||
# mca_<type>_<name>.la (for DSO builds) or libmca_<type>_<name>.la
|
||||
# (for static builds).
|
||||
|
||||
if MCA_BUILD_orte_ras_loadleveler_DSO
|
||||
lib =
|
||||
lib_sources =
|
||||
component = mca_ras_loadleveler.la
|
||||
component_sources = $(sources)
|
||||
else
|
||||
lib = libmca_ras_loadleveler.la
|
||||
lib_sources = $(sources)
|
||||
component =
|
||||
component_sources =
|
||||
endif
|
||||
|
||||
mcacomponentdir = $(ortelibdir)
|
||||
mcacomponent_LTLIBRARIES = $(component)
|
||||
mca_ras_loadleveler_la_SOURCES = $(component_sources)
|
||||
mca_ras_loadleveler_la_LDFLAGS = -module -avoid-version $(ras_loadleveler_LDFLAGS)
|
||||
mca_ras_loadleveler_la_LIBADD = $(ras_loadleveler_LIBS)
|
||||
|
||||
noinst_LTLIBRARIES = $(lib)
|
||||
libmca_ras_loadleveler_la_SOURCES = $(lib_sources)
|
||||
libmca_ras_loadleveler_la_LDFLAGS = -module -avoid-version $(ras_loadleveler_LDFLAGS)
|
||||
libmca_ras_loadleveler_la_LIBADD = $(ras_loadleveler_LIBS)
|
@ -1,40 +0,0 @@
|
||||
# -*- shell-script -*-
|
||||
#
|
||||
# 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 (c) 2009-2010 Cisco Systems, Inc. All rights reserved.
|
||||
# Copyright (c) 2011-2013 Los Alamos National Security, LLC.
|
||||
# All rights reserved.
|
||||
# $COPYRIGHT$
|
||||
#
|
||||
# Additional copyrights may follow
|
||||
#
|
||||
# $HEADER$
|
||||
#
|
||||
|
||||
# MCA_ras_loadleveler_CONFIG([action-if-found], [action-if-not-found])
|
||||
# -----------------------------------------------------------
|
||||
AC_DEFUN([MCA_orte_ras_loadleveler_CONFIG],[
|
||||
AC_CONFIG_FILES([orte/mca/ras/loadleveler/Makefile])
|
||||
|
||||
ORTE_CHECK_LOADLEVELER([ras_loadleveler], [ras_loadleveler_good=1], [ras_loadleveler_good=0])
|
||||
|
||||
# if check worked, set wrapper flags if so.
|
||||
# Evaluate succeed / fail
|
||||
AS_IF([test "$ras_loadleveler_good" = "1"],
|
||||
[$1],
|
||||
[$2])
|
||||
|
||||
# set build flags to use in makefile
|
||||
AC_SUBST([ras_loadleveler_CPPFLAGS])
|
||||
AC_SUBST([ras_loadleveler_LDFLAGS])
|
||||
AC_SUBST([ras_loadleveler_LIBS])
|
||||
])dnl
|
@ -1,7 +0,0 @@
|
||||
#
|
||||
# owner/status file
|
||||
# owner: institution that is responsible for this package
|
||||
# status: e.g. active, maintenance, unmaintained
|
||||
#
|
||||
owner: IBM
|
||||
status: maintenance
|
@ -1,37 +0,0 @@
|
||||
/*
|
||||
* 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$
|
||||
*/
|
||||
/**
|
||||
* @file
|
||||
*
|
||||
* Resource Allocation (Loadleveler)
|
||||
*/
|
||||
#ifndef ORTE_RAS_LOADLEVELER_H
|
||||
#define ORTE_RAS_LOADLEVELER_H
|
||||
|
||||
#include "orte_config.h"
|
||||
#include "orte/mca/ras/ras.h"
|
||||
#include "orte/mca/ras/base/base.h"
|
||||
|
||||
BEGIN_C_DECLS
|
||||
|
||||
ORTE_DECLSPEC extern orte_ras_base_component_t mca_ras_loadleveler_component;
|
||||
ORTE_DECLSPEC extern orte_ras_base_module_t orte_ras_loadleveler_module;
|
||||
|
||||
END_C_DECLS
|
||||
|
||||
#endif
|
@ -1,105 +0,0 @@
|
||||
/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil -*- */
|
||||
/*
|
||||
* Copyright (c) 2004-2008 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 (c) 2015 Los Alamos National Security, LLC. All rights
|
||||
* reserved.
|
||||
* $COPYRIGHT$
|
||||
*
|
||||
* Additional copyrights may follow
|
||||
*
|
||||
* $HEADER$
|
||||
*/
|
||||
|
||||
#include "orte_config.h"
|
||||
|
||||
#include "opal/mca/base/base.h"
|
||||
#include "orte/runtime/orte_globals.h"
|
||||
#include "orte/util/name_fns.h"
|
||||
|
||||
#include "orte/mca/ras/base/ras_private.h"
|
||||
#include "ras_loadleveler.h"
|
||||
|
||||
|
||||
/*
|
||||
* Local variables
|
||||
*/
|
||||
static int param_priority;
|
||||
|
||||
|
||||
/*
|
||||
* Local functions
|
||||
*/
|
||||
static int orte_ras_loadleveler_register(void);
|
||||
static int orte_ras_loadleveler_open(void);
|
||||
static int orte_ras_loadleveler_component_query(mca_base_module_t **module, int *priority);
|
||||
|
||||
orte_ras_base_component_t mca_ras_loadleveler_component = {
|
||||
/* First, the mca_base_component_t struct containing meta
|
||||
information about the component itself */
|
||||
.base_version = {
|
||||
ORTE_RAS_BASE_VERSION_2_0_0,
|
||||
|
||||
/* Component name and version */
|
||||
.mca_component_name = "loadleveler",
|
||||
MCA_BASE_MAKE_VERSION(component, ORTE_MAJOR_VERSION, ORTE_MINOR_VERSION,
|
||||
ORTE_RELEASE_VERSION),
|
||||
|
||||
/* Component open and close functions */
|
||||
.mca_open_component = orte_ras_loadleveler_open,
|
||||
.mca_query_component = orte_ras_loadleveler_component_query,
|
||||
.mca_register_component_params = orte_ras_loadleveler_register,
|
||||
},
|
||||
.base_data = {
|
||||
/* The component is checkpoint ready */
|
||||
MCA_BASE_METADATA_PARAM_CHECKPOINT
|
||||
},
|
||||
};
|
||||
|
||||
static int orte_ras_loadleveler_register(void)
|
||||
{
|
||||
/* for now we set the priority lower then the priority of the POE RAS
|
||||
* so that it is used whenever the LOADL_PROCESSOR_LIST is actually set */
|
||||
param_priority = 90;
|
||||
(void) mca_base_component_var_register(&mca_ras_loadleveler_component.base_version,
|
||||
"priority", "Priority of the loadleveler ras component",
|
||||
MCA_BASE_VAR_TYPE_INT, NULL, 0, 0,
|
||||
OPAL_INFO_LVL_9,
|
||||
MCA_BASE_VAR_SCOPE_READONLY, ¶m_priority);
|
||||
|
||||
return ORTE_SUCCESS;
|
||||
}
|
||||
|
||||
static int orte_ras_loadleveler_open(void)
|
||||
{
|
||||
return ORTE_SUCCESS;
|
||||
}
|
||||
|
||||
static int orte_ras_loadleveler_component_query(mca_base_module_t **module, int *priority)
|
||||
{
|
||||
/* Are we running under a LOADLEVELER job? */
|
||||
if (NULL != getenv("LOADL_STEP_ID")) {
|
||||
*priority = param_priority;
|
||||
OPAL_OUTPUT_VERBOSE((2, orte_ras_base_framework.framework_output,
|
||||
"%s ras:loadleveler: available for selection",
|
||||
ORTE_NAME_PRINT(ORTE_PROC_MY_NAME)));
|
||||
*module = (mca_base_module_t *) &orte_ras_loadleveler_module;
|
||||
return ORTE_SUCCESS;
|
||||
}
|
||||
|
||||
/* Sadly, no */
|
||||
OPAL_OUTPUT_VERBOSE((2, orte_ras_base_framework.framework_output,
|
||||
"%s ras:loadleveler: NOT available for selection",
|
||||
ORTE_NAME_PRINT(ORTE_PROC_MY_NAME)));
|
||||
*module = NULL;
|
||||
return ORTE_ERROR;
|
||||
}
|
||||
|
@ -1,191 +0,0 @@
|
||||
/*
|
||||
* Copyright (c) 2004-2009 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 (c) 2006 Cisco Systems, Inc. All rights reserved.
|
||||
* Copyright (c) 2010-2016 IBM Corporation. All rights reserved.
|
||||
* $COPYRIGHT$
|
||||
*
|
||||
* Additional copyrights may follow
|
||||
*
|
||||
* $HEADER$
|
||||
*/
|
||||
|
||||
#include "orte_config.h"
|
||||
|
||||
#include <errno.h>
|
||||
#include <unistd.h>
|
||||
#include <string.h>
|
||||
|
||||
#include "opal/util/argv.h"
|
||||
#include "opal/util/output.h"
|
||||
#include "opal/util/net.h"
|
||||
|
||||
#include "orte/mca/errmgr/errmgr.h"
|
||||
#include "orte/runtime/orte_globals.h"
|
||||
#include "orte/constants.h"
|
||||
|
||||
#include "orte/mca/ras/base/ras_private.h"
|
||||
#include "ras_loadleveler.h"
|
||||
|
||||
|
||||
/*
|
||||
* Local functions
|
||||
*/
|
||||
static int orte_ras_loadleveler_allocate(orte_job_t *jdata, opal_list_t *nodes);
|
||||
static int orte_ras_loadleveler_finalize(void);
|
||||
|
||||
static int orte_ras_loadleveler_discover(opal_list_t *nodelist);
|
||||
static int ll_getline(FILE *fp, char *input);
|
||||
|
||||
#define LL_FILE_MAX_LINE_LENGTH 512
|
||||
|
||||
/*
|
||||
* Global variable
|
||||
*/
|
||||
orte_ras_base_module_t orte_ras_loadleveler_module = {
|
||||
NULL,
|
||||
orte_ras_loadleveler_allocate,
|
||||
NULL,
|
||||
orte_ras_loadleveler_finalize
|
||||
};
|
||||
|
||||
|
||||
/*
|
||||
* Discover available (pre-allocated) nodes. Allocate the
|
||||
* requested number of nodes/process slots to the job.
|
||||
*/
|
||||
static int orte_ras_loadleveler_allocate(orte_job_t *jdata, opal_list_t *nodes)
|
||||
{
|
||||
int ret = ORTE_SUCCESS;
|
||||
|
||||
if (ORTE_SUCCESS != (ret = orte_ras_loadleveler_discover(nodes))) {
|
||||
ORTE_ERROR_LOG(ret);
|
||||
return ret;
|
||||
}
|
||||
|
||||
/* If we didn't find anything, then this
|
||||
* is an unrecoverable error - report it
|
||||
*/
|
||||
if (opal_list_is_empty(nodes)) {
|
||||
opal_output(orte_ras_base_framework.framework_output,
|
||||
"ras:loadleveler:allocate: No nodes were found in the LOADL_HOSTFILE - %s",
|
||||
getenv("LOADL_HOSTFILE"));
|
||||
return ORTE_ERR_NOT_FOUND;
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
/*
|
||||
* There's really nothing to do here
|
||||
*/
|
||||
static int orte_ras_loadleveler_finalize(void)
|
||||
{
|
||||
OPAL_OUTPUT_VERBOSE((1, orte_ras_base_framework.framework_output,
|
||||
"ras:loadleveler:finalize: success (nothing to do)"));
|
||||
return ORTE_SUCCESS;
|
||||
}
|
||||
|
||||
/**
|
||||
* Discover the available resources. Obtain directly from LoadLeveler (and
|
||||
* therefore have no need to validate) -- ignore hostfile or any other
|
||||
* user-specified parameters.
|
||||
*/
|
||||
static int orte_ras_loadleveler_discover(opal_list_t* nodelist)
|
||||
{
|
||||
orte_node_t *node;
|
||||
opal_list_item_t* item;
|
||||
FILE *fp;
|
||||
char *hostname;
|
||||
char *filename;
|
||||
char input[LL_FILE_MAX_LINE_LENGTH];
|
||||
char *ptr;
|
||||
|
||||
/* Ignore anything that the user already specified -- we're
|
||||
getting nodes only from LoadLeveler. */
|
||||
filename = getenv("LOADL_HOSTFILE");
|
||||
if(NULL == filename) {
|
||||
opal_output(orte_ras_base_framework.framework_output,
|
||||
"ras:loadleveler:allocate:discover: LOADL_HOSTFILE not set. "
|
||||
"Unable to discover allocated nodes.");
|
||||
return ORTE_ERROR;
|
||||
}
|
||||
fp = fopen(filename, "r");
|
||||
if (NULL == fp) {
|
||||
ORTE_ERROR_LOG(ORTE_ERR_FILE_OPEN_FAILURE);
|
||||
return ORTE_ERR_FILE_OPEN_FAILURE;
|
||||
}
|
||||
|
||||
/* Iterate through all the nodes and make an entry for each */
|
||||
while (0 != ll_getline(fp, input)) {
|
||||
hostname = strdup(input);
|
||||
if( !orte_keep_fqdn_hostnames && !opal_net_isaddr(hostname) ) {
|
||||
if (NULL != (ptr = strchr(hostname, '.'))) {
|
||||
*ptr = '\0';
|
||||
}
|
||||
}
|
||||
|
||||
OPAL_OUTPUT_VERBOSE((1, orte_ras_base_framework.framework_output,
|
||||
"%s ras:loadleveler:allocate:discover: got hostname %s",
|
||||
ORTE_NAME_PRINT(ORTE_PROC_MY_NAME), hostname));
|
||||
|
||||
/* Remember that LoadLeveler may list the same node more than once.
|
||||
So we have to check for duplicates. */
|
||||
for (item = opal_list_get_first(nodelist);
|
||||
opal_list_get_end(nodelist) != item;
|
||||
item = opal_list_get_next(item)) {
|
||||
node = (orte_node_t*) item;
|
||||
if (0 == strcmp(node->name, hostname)) {
|
||||
++node->slots;
|
||||
|
||||
OPAL_OUTPUT_VERBOSE((1, orte_ras_base_framework.framework_output,
|
||||
"%s ras:loadleveler:allocate:discover: found -- bumped slots to %d",
|
||||
ORTE_NAME_PRINT(ORTE_PROC_MY_NAME), node->slots));
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
/* Did we find it? */
|
||||
if (opal_list_get_end(nodelist) == item) {
|
||||
/* Nope -- didn't find it, so add a new item to the list */
|
||||
OPAL_OUTPUT_VERBOSE((1, orte_ras_base_framework.framework_output,
|
||||
"%s ras:loadleveler:allocate:discover: not found -- added to list",
|
||||
ORTE_NAME_PRINT(ORTE_PROC_MY_NAME)));
|
||||
|
||||
node = OBJ_NEW(orte_node_t);
|
||||
node->name = hostname;
|
||||
node->state = ORTE_NODE_STATE_UP;
|
||||
node->slots_inuse = 0;
|
||||
node->slots_max = 0;
|
||||
node->slots = 1;
|
||||
opal_list_append(nodelist, &node->super);
|
||||
} else {
|
||||
/* Yes, so we need to free the hostname that came back */
|
||||
free(hostname);
|
||||
}
|
||||
}
|
||||
fclose(fp);
|
||||
|
||||
return ORTE_SUCCESS;
|
||||
}
|
||||
|
||||
static int ll_getline(FILE *fp, char *input)
|
||||
{
|
||||
char *ret;
|
||||
|
||||
ret = fgets(input, LL_FILE_MAX_LINE_LENGTH, fp);
|
||||
if (NULL != ret) {
|
||||
input[strlen(input)-1] = '\0'; /* remove newline */
|
||||
return 1;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
Загрузка…
Ссылка в новой задаче
Block a user