This source file includes following definitions.
- mca_osc_monitoring_component_init
- mca_osc_monitoring_component_finish
- mca_osc_monitoring_component_register
- mca_osc_monitoring_component_query
- ompi_mca_osc_monitoring_set_template
- mca_osc_monitoring_component_select
1
2
3
4
5
6
7
8
9
10 #include <ompi_config.h>
11 #include <string.h>
12 #include "osc_monitoring.h"
13 #include <ompi/constants.h>
14 #include <ompi/communicator/communicator.h>
15 #include <ompi/info/info.h>
16 #include <ompi/win/win.h>
17 #include <ompi/info/info.h>
18 #include <ompi/mca/osc/osc.h>
19 #include <ompi/mca/osc/base/base.h>
20 #include <opal/mca/base/mca_base_component_repository.h>
21
22
23
24
25 #include "osc_monitoring_template_gen.h"
26
27
28
29 static int mca_osc_monitoring_component_init(bool enable_progress_threads,
30 bool enable_mpi_threads)
31 {
32 OPAL_MONITORING_PRINT_INFO("osc_component_init");
33 return mca_common_monitoring_init();
34 }
35
36 static int mca_osc_monitoring_component_finish(void)
37 {
38 OPAL_MONITORING_PRINT_INFO("osc_component_finish");
39 mca_common_monitoring_finalize();
40 return OMPI_SUCCESS;
41 }
42
43 static int mca_osc_monitoring_component_register(void)
44 {
45 return OMPI_SUCCESS;
46 }
47
48 static int mca_osc_monitoring_component_query(struct ompi_win_t *win, void **base, size_t size, int disp_unit,
49 struct ompi_communicator_t *comm, struct opal_info_t *info,
50 int flavor)
51 {
52 OPAL_MONITORING_PRINT_INFO("osc_component_query");
53 return mca_osc_monitoring_component.priority;
54 }
55
56 static inline int
57 ompi_mca_osc_monitoring_set_template(ompi_osc_base_component_t *best_component,
58 ompi_osc_base_module_t *module)
59 {
60 osc_monitoring_components_list_t comp = osc_monitoring_components_list[0];
61 for (unsigned i = 0; NULL != comp.name; comp = osc_monitoring_components_list[++i]) {
62 if ( 0 == strcmp(comp.name, best_component->osc_version.mca_component_name) ) {
63 comp.fct(module);
64 return OMPI_SUCCESS;
65 }
66 }
67 return OMPI_ERR_NOT_SUPPORTED;
68 }
69
70 static int mca_osc_monitoring_component_select(struct ompi_win_t *win, void **base, size_t size, int disp_unit,
71 struct ompi_communicator_t *comm, struct opal_info_t *info,
72 int flavor, int *model)
73 {
74 OPAL_MONITORING_PRINT_INFO("osc_component_select");
75 opal_list_item_t *item;
76 ompi_osc_base_component_t *best_component = NULL;
77 int best_priority = -1, priority, ret = OMPI_SUCCESS;
78
79
80 for (item = opal_list_get_first(&ompi_osc_base_framework.framework_components) ;
81 item != opal_list_get_end(&ompi_osc_base_framework.framework_components) ;
82 item = opal_list_get_next(item)) {
83 ompi_osc_base_component_t *component = (ompi_osc_base_component_t*)
84 ((mca_base_component_list_item_t*) item)->cli_component;
85
86 if( component == (ompi_osc_base_component_t*)(&mca_osc_monitoring_component) )
87 continue;
88
89 priority = component->osc_query(win, base, size, disp_unit, comm, info, flavor);
90 if (priority < 0) {
91 if (MPI_WIN_FLAVOR_SHARED == flavor && OMPI_ERR_RMA_SHARED == priority) {
92
93 return OMPI_ERR_RMA_SHARED;
94 }
95 continue;
96 }
97
98 if (priority > best_priority) {
99 best_component = component;
100 best_priority = priority;
101 }
102 }
103
104 if (NULL == best_component) return OMPI_ERR_NOT_SUPPORTED;
105 OPAL_MONITORING_PRINT_INFO("osc: chosen one: %s", best_component->osc_version.mca_component_name);
106 ret = best_component->osc_select(win, base, size, disp_unit, comm, info, flavor, model);
107 if( OMPI_SUCCESS == ret ) {
108
109 ret = ompi_mca_osc_monitoring_set_template(best_component, win->w_osc_module);
110 if (OMPI_ERR_NOT_SUPPORTED == ret) {
111 OPAL_MONITORING_PRINT_WARN("osc: monitoring disabled: no module for this component "
112 "(%s)", best_component->osc_version.mca_component_name);
113 return OMPI_SUCCESS;
114 }
115 }
116 return ret;
117 }
118
119 ompi_osc_monitoring_component_t mca_osc_monitoring_component = {
120 .super = {
121
122
123 .osc_version = {
124 OMPI_OSC_BASE_VERSION_3_0_0,
125
126 .mca_component_name = "monitoring",
127 MCA_MONITORING_MAKE_VERSION,
128 .mca_register_component_params = mca_osc_monitoring_component_register
129 },
130 .osc_data = {
131
132 MCA_BASE_METADATA_PARAM_CHECKPOINT
133 },
134
135 .osc_init = mca_osc_monitoring_component_init,
136 .osc_finalize = mca_osc_monitoring_component_finish,
137 .osc_query = mca_osc_monitoring_component_query,
138 .osc_select = mca_osc_monitoring_component_select
139 },
140 .priority = INT_MAX
141 };