117 строки
3.6 KiB
C
117 строки
3.6 KiB
C
/* -*- 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$
|
|
*/
|
|
/** @file:
|
|
*
|
|
* The Open RTE Run-Time Control Framework (RTC)
|
|
*
|
|
*/
|
|
|
|
#ifndef ORTE_MCA_RTC_H
|
|
#define ORTE_MCA_RTC_H
|
|
|
|
#include "orte_config.h"
|
|
#include "orte/types.h"
|
|
|
|
#include "orte/mca/mca.h"
|
|
#include "opal/class/opal_list.h"
|
|
|
|
#include "orte/runtime/orte_globals.h"
|
|
|
|
BEGIN_C_DECLS
|
|
|
|
typedef struct {
|
|
opal_list_item_t super;
|
|
char *component;
|
|
char *category;
|
|
opal_value_t control;
|
|
} orte_rtc_resource_t;
|
|
ORTE_DECLSPEC OBJ_CLASS_DECLARATION(orte_rtc_resource_t);
|
|
|
|
/* Assign run-time controls for a given job. This provides each component with
|
|
* an opportunity to insert attributes into the orte_job_t and/or its
|
|
* associated proc structures that will be passed to backend daemons for
|
|
* controlling the job. For example, if the user specified a frequency
|
|
* setting for the job, then the freq component will have an opportunity
|
|
* to add an attribute to the job so the freq component on the remote daemons
|
|
* can "catch" it and perform the desired action
|
|
*/
|
|
typedef void (*orte_rtc_base_module_assign_fn_t)(orte_job_t *jdata);
|
|
|
|
/* Set run-time controls for a given job and/or process. This can include
|
|
* controls for power, binding, memory, and any other resource on the node.
|
|
* Each active plugin will be given a chance to operate on the request, setting
|
|
* whatever controls that lie within its purview.
|
|
*
|
|
* Each module is responsible for reporting errors via the state machine. Thus,
|
|
* no error code is returned. However, warnings and error messages for the user
|
|
* can be output via the provided error_fd */
|
|
typedef void (*orte_rtc_base_module_set_fn_t)(orte_job_t *jdata,
|
|
orte_proc_t *proc,
|
|
char ***env,
|
|
int error_fd);
|
|
|
|
/* Return a list of valid controls values for this component.
|
|
* Each module is responsible for adding its control values
|
|
* to a list of opal_value_t objects.
|
|
*/
|
|
typedef void (*orte_rtc_base_module_get_avail_vals_fn_t)(opal_list_t *vals);
|
|
|
|
/* provide a way for the module to init during selection */
|
|
typedef int (*orte_rtc_base_module_init_fn_t)(void);
|
|
|
|
/* provide a chance for the module to finalize */
|
|
typedef void (*orte_rtc_base_module_fini_fn_t)(void);
|
|
|
|
/*
|
|
* rtc module version 1.0.0
|
|
*/
|
|
typedef struct {
|
|
orte_rtc_base_module_init_fn_t init;
|
|
orte_rtc_base_module_fini_fn_t finalize;
|
|
orte_rtc_base_module_assign_fn_t assign;
|
|
orte_rtc_base_module_set_fn_t set;
|
|
orte_rtc_base_module_get_avail_vals_fn_t get_available_values;
|
|
} orte_rtc_base_module_t;
|
|
|
|
|
|
/* provide a public API version */
|
|
typedef struct {
|
|
orte_rtc_base_module_assign_fn_t assign;
|
|
orte_rtc_base_module_set_fn_t set;
|
|
orte_rtc_base_module_get_avail_vals_fn_t get_available_values;
|
|
} orte_rtc_API_module_t;
|
|
|
|
|
|
/**
|
|
* rtc component version 1.0.0
|
|
*/
|
|
typedef struct orte_rtc_base_component_1_0_0_t {
|
|
/** Base MCA structure */
|
|
mca_base_component_t base_version;
|
|
/** Base MCA data */
|
|
mca_base_component_data_t base_data;
|
|
} orte_rtc_base_component_t;
|
|
|
|
/* declare the struct containing the public API */
|
|
ORTE_DECLSPEC extern orte_rtc_API_module_t orte_rtc;
|
|
|
|
/*
|
|
* Macro for use in components that are of type rtc
|
|
*/
|
|
#define ORTE_RTC_BASE_VERSION_1_0_0 \
|
|
ORTE_MCA_BASE_VERSION_2_1_0("rtc", 1, 0, 0)
|
|
|
|
|
|
END_C_DECLS
|
|
|
|
#endif
|