Lines Matching refs:pm

126 static inline void __init_monitored_nodes(osm_perfmgr_t * pm)
128 cl_qmap_init(&pm->monitored_map);
129 pm->remove_list = NULL;
130 cl_event_construct(&pm->sig_query);
131 cl_event_init(&pm->sig_query, FALSE);
135 __mark_for_removal(osm_perfmgr_t * pm, __monitored_node_t * node)
137 if (pm->remove_list) {
138 node->next = pm->remove_list;
139 pm->remove_list = node;
142 pm->remove_list = node;
146 static inline void __remove_marked_nodes(osm_perfmgr_t * pm)
148 while (pm->remove_list) {
149 __monitored_node_t *next = pm->remove_list->next;
151 cl_qmap_remove_item(&(pm->monitored_map),
152 (cl_map_item_t *) (pm->remove_list));
154 if (pm->remove_list->name)
155 free(pm->remove_list->name);
156 free(pm->remove_list);
157 pm->remove_list = next;
161 static inline void __decrement_outstanding_queries(osm_perfmgr_t * pm)
163 cl_atomic_dec(&(pm->outstanding_queries));
164 cl_event_signal(&(pm->sig_query));
175 osm_perfmgr_t *pm = (osm_perfmgr_t *) bind_context;
177 OSM_LOG_ENTER(pm->log);
180 osm_mad_pool_put(pm->mad_pool, p_req_madw);
182 __decrement_outstanding_queries(pm);
185 if (cl_disp_post(pm->pc_disp_h, OSM_MSG_MAD_PORT_COUNTERS,
187 OSM_LOG(pm->log, OSM_LOG_ERROR, "ERR 4C01: "
189 osm_mad_pool_put(pm->mad_pool, p_madw);
191 OSM_LOG_EXIT(pm->log);
200 osm_perfmgr_t *pm = (osm_perfmgr_t *) bind_context;
207 OSM_LOG_ENTER(pm->log);
212 if ((p_node = cl_qmap_get(&(pm->monitored_map), node_guid)) ==
213 cl_qmap_end(&(pm->monitored_map))) {
214 OSM_LOG(pm->log, OSM_LOG_ERROR, "ERR 4C15: GUID 0x%016"
221 OSM_LOG(pm->log, OSM_LOG_ERROR, "ERR 4C02: %s (0x%" PRIx64
224 if (pm->subn->opt.perfmgr_redir && p_madw->status == IB_TIMEOUT) {
226 cl_plock_acquire(pm->lock);
229 cl_plock_release(pm->lock);
230 OSM_LOG(pm->log, OSM_LOG_ERROR, "ERR 4C16: "
239 cl_plock_release(pm->lock);
243 osm_mad_pool_put(pm->mad_pool, p_madw);
245 __decrement_outstanding_queries(pm);
247 OSM_LOG_EXIT(pm->log);
254 osm_perfmgr_bind(osm_perfmgr_t * const pm, const ib_net64_t port_guid)
259 OSM_LOG_ENTER(pm->log);
261 if (pm->bind_handle != OSM_BIND_INVALID_HANDLE) {
262 OSM_LOG(pm->log, OSM_LOG_ERROR,
277 OSM_LOG(pm->log, OSM_LOG_VERBOSE,
280 pm->bind_handle = osm_vendor_bind(pm->vendor,
282 pm->mad_pool,
285 pm);
287 if (pm->bind_handle == OSM_BIND_INVALID_HANDLE) {
289 OSM_LOG(pm->log, OSM_LOG_ERROR,
296 OSM_LOG_EXIT(pm->log);
303 static void osm_perfmgr_mad_unbind(osm_perfmgr_t * const pm)
305 OSM_LOG_ENTER(pm->log);
306 if (pm->bind_handle == OSM_BIND_INVALID_HANDLE) {
307 OSM_LOG(pm->log, OSM_LOG_ERROR, "ERR 4C05: No previous bind\n");
310 osm_vendor_unbind(pm->bind_handle);
312 OSM_LOG_EXIT(pm->log);
433 osm_perfmgr_t *pm = (osm_perfmgr_t *) context;
437 OSM_LOG_ENTER(pm->log);
439 if (cl_qmap_get(&(pm->monitored_map), node_guid)
440 == cl_qmap_end(&(pm->monitored_map))) {
445 OSM_LOG(pm->log, OSM_LOG_ERROR, "PerfMgr: ERR 4C06: "
454 cl_qmap_insert(&(pm->monitored_map), node_guid,
459 OSM_LOG_EXIT(pm->log);
470 osm_perfmgr_t *pm = (osm_perfmgr_t *) context;
478 OSM_LOG_ENTER(pm->log);
480 cl_plock_acquire(pm->lock);
481 node = osm_get_node_by_guid(pm->subn, cl_hton64(mon_node->guid));
483 OSM_LOG(pm->log, OSM_LOG_ERROR,
487 __mark_for_removal(pm, mon_node);
495 if (perfmgr_db_create_entry(pm->db, node_guid, num_ports,
498 OSM_LOG(pm->log, OSM_LOG_ERROR,
520 OSM_LOG(pm->log, OSM_LOG_DEBUG, "WARN: node 0x%" PRIx64
535 OSM_LOG(pm->log, OSM_LOG_VERBOSE, "Getting stats for node 0x%"
539 osm_perfmgr_send_pc_mad(pm, lid, remote_qp, port,
542 OSM_LOG(pm->log, OSM_LOG_ERROR, "ERR 4C09: "
549 cl_plock_release(pm->lock);
550 OSM_LOG_EXIT(pm->log);
775 void osm_perfmgr_process(osm_perfmgr_t * pm)
781 if (pm->state != PERFMGR_STATE_ENABLED)
784 if (pm->subn->sm_state == IB_SMINFO_STATE_STANDBY ||
785 pm->subn->sm_state == IB_SMINFO_STATE_NOTACTIVE)
786 perfmgr_discovery(pm->subn->p_osm);
791 pm->sweep_state = PERFMGR_SWEEP_ACTIVE;
796 OSM_LOG(pm->log, OSM_LOG_VERBOSE, "Gathering PerfMgr stats\n");
797 cl_plock_acquire(pm->lock);
798 cl_qmap_apply_func(&(pm->subn->node_guid_tbl),
799 __collect_guids, (void *)pm);
800 cl_plock_release(pm->lock);
803 cl_qmap_apply_func(&(pm->monitored_map),
804 __osm_perfmgr_query_counters, (void *)pm);
809 __remove_marked_nodes(pm);
813 while (pm->outstanding_queries > 0)
814 cl_event_wait_on(&pm->sig_sweep, 1000, TRUE);
818 osm_log(pm->log, OSM_LOG_INFO,
829 pm->sweep_state = PERFMGR_SWEEP_SLEEP;
838 osm_perfmgr_t *pm = arg;
840 if (pm->state == PERFMGR_STATE_ENABLED)
841 osm_sm_signal(pm->sm, OSM_SIGNAL_PERFMGR_SWEEP);
842 cl_timer_start(&pm->sweep_timer, pm->sweep_time_s * 1000);
847 void osm_perfmgr_shutdown(osm_perfmgr_t * const pm)
849 OSM_LOG_ENTER(pm->log);
850 cl_timer_stop(&pm->sweep_timer);
851 osm_perfmgr_mad_unbind(pm);
852 OSM_LOG_EXIT(pm->log);
857 void osm_perfmgr_destroy(osm_perfmgr_t * const pm)
859 OSM_LOG_ENTER(pm->log);
860 perfmgr_db_destroy(pm->db);
861 cl_timer_destroy(&pm->sweep_timer);
862 OSM_LOG_EXIT(pm->log);
875 osm_perfmgr_check_oob_clear(osm_perfmgr_t * pm, __monitored_node_t *mon_node,
882 if (perfmgr_db_get_prev_err(pm->db, mon_node->guid, port, &prev_err)
884 OSM_LOG(pm->log, OSM_LOG_VERBOSE, "Failed to find previous "
902 OSM_LOG(pm->log, OSM_LOG_ERROR, "PerfMgr: ERR 4C0A: "
906 perfmgr_db_clear_prev_err(pm->db, mon_node->guid, port);
910 if (perfmgr_db_get_prev_dc(pm->db, mon_node->guid, port, &prev_dc)
912 OSM_LOG(pm->log, OSM_LOG_VERBOSE,
923 OSM_LOG(pm->log, OSM_LOG_ERROR,
927 perfmgr_db_clear_prev_dc(pm->db, mon_node->guid, port);
959 osm_perfmgr_check_overflow(osm_perfmgr_t * pm, __monitored_node_t *mon_node,
966 OSM_LOG_ENTER(pm->log);
987 osm_log(pm->log, OSM_LOG_VERBOSE,
992 cl_plock_acquire(pm->lock);
993 p_node = osm_get_node_by_guid(pm->subn, cl_hton64(mon_node->guid));
995 cl_plock_release(pm->lock);
997 OSM_LOG(pm->log, OSM_LOG_ERROR, "PerfMgr: ERR 4C0C: "
1011 osm_perfmgr_send_pc_mad(pm, lid, remote_qp, port,
1014 OSM_LOG(pm->log, OSM_LOG_ERROR, "PerfMgr: ERR 4C11: "
1019 perfmgr_db_clear_prev_dc(pm->db, mon_node->guid, port);
1023 OSM_LOG_EXIT(pm->log);
1030 osm_perfmgr_log_events(osm_perfmgr_t * pm, __monitored_node_t *mon_node, uint8_t port,
1036 perfmgr_db_get_prev_err(pm->db, mon_node->guid, port, &prev_read);
1039 OSM_LOG(pm->log, OSM_LOG_VERBOSE, "Failed to find previous "
1049 OSM_LOG(pm->log, OSM_LOG_ERROR, "ERR 4C0D: "
1056 OSM_LOG(pm->log, OSM_LOG_ERROR, "ERR 4C0E: "
1063 OSM_LOG(pm->log, OSM_LOG_ERROR, "ERR 4C0F: "
1076 osm_perfmgr_t *const pm = (osm_perfmgr_t *) context;
1090 OSM_LOG_ENTER(pm->log);
1095 if ((p_node = cl_qmap_get(&(pm->monitored_map), node_guid)) ==
1096 cl_qmap_end(&(pm->monitored_map))) {
1097 OSM_LOG(pm->log, OSM_LOG_ERROR, "ERR 4C12: GUID 0x%016"
1104 OSM_LOG(pm->log, OSM_LOG_VERBOSE,
1116 OSM_LOG(pm->log, OSM_LOG_VERBOSE,
1126 OSM_LOG(pm->log, OSM_LOG_VERBOSE,
1131 if (!pm->subn->opt.perfmgr_redir) {
1132 OSM_LOG(pm->log, OSM_LOG_ERROR, "ERR 4C16: "
1138 cl_plock_acquire(pm->lock);
1141 cl_plock_release(pm->lock);
1142 OSM_LOG(pm->log, OSM_LOG_ERROR, "ERR 4C13: "
1150 cl_plock_release(pm->lock);
1154 osm_perfmgr_send_pc_mad(pm, cpi->redir_lid, cpi->redir_qp,
1159 OSM_LOG(pm->log, OSM_LOG_ERROR, "ERR 4C14: "
1177 osm_perfmgr_check_oob_clear(pm, p_mon_node, port,
1181 osm_perfmgr_log_events(pm, p_mon_node, port, &err_reading);
1184 perfmgr_db_add_err_reading(pm->db, node_guid, port,
1186 perfmgr_db_add_dc_reading(pm->db, node_guid, port,
1189 perfmgr_db_clear_prev_err(pm->db, node_guid, port);
1190 perfmgr_db_clear_prev_dc(pm->db, node_guid, port);
1193 osm_perfmgr_check_overflow(pm, p_mon_node, port, wire_read);
1206 osm_mad_pool_put(pm->mad_pool, p_madw);
1208 OSM_LOG_EXIT(pm->log);
1215 osm_perfmgr_init(osm_perfmgr_t * const pm, osm_opensm_t *osm,
1224 memset(pm, 0, sizeof(*pm));
1226 cl_event_construct(&pm->sig_sweep);
1227 cl_event_init(&pm->sig_sweep, FALSE);
1228 pm->subn = &osm->subn;
1229 pm->sm = &osm->sm;
1230 pm->log = &osm->log;
1231 pm->mad_pool = &osm->mad_pool;
1232 pm->vendor = osm->p_vendor;
1233 pm->trans_id = OSM_PERFMGR_INITIAL_TID_VALUE;
1234 pm->lock = &osm->lock;
1235 pm->state =
1237 pm->sweep_time_s = p_opt->perfmgr_sweep_time_s;
1238 pm->max_outstanding_queries = p_opt->perfmgr_max_outstanding_queries;
1239 pm->osm = osm;
1241 status = cl_timer_init(&pm->sweep_timer, perfmgr_sweep, pm);
1245 pm->db = perfmgr_db_construct(pm);
1246 if (!pm->db) {
1247 pm->state = PERFMGR_STATE_NO_DB;
1251 pm->pc_disp_h = cl_disp_register(&osm->disp, OSM_MSG_MAD_PORT_COUNTERS,
1252 osm_pc_rcv_process, pm);
1253 if (pm->pc_disp_h == CL_DISP_INVALID_HANDLE)
1256 __init_monitored_nodes(pm);
1258 cl_timer_start(&pm->sweep_timer, pm->sweep_time_s * 1000);
1261 OSM_LOG_EXIT(pm->log);
1268 void osm_perfmgr_clear_counters(osm_perfmgr_t * pm)
1273 perfmgr_db_clear_counters(pm->db);
1274 osm_log(pm->log, OSM_LOG_INFO, "PerfMgr counters cleared\n");
1280 void osm_perfmgr_dump_counters(osm_perfmgr_t * pm, perfmgr_db_dump_t dump_type)
1284 if (pm->subn->opt.event_db_dump_file)
1285 file_name = pm->subn->opt.event_db_dump_file;
1288 pm->subn->opt.dump_files_dir,
1292 if (perfmgr_db_dump(pm->db, file_name, dump_type) != 0)
1293 OSM_LOG(pm->log, OSM_LOG_ERROR, "Failed to dump file %s : %s",
1301 osm_perfmgr_print_counters(osm_perfmgr_t *pm, char *nodename, FILE *fp)
1305 perfmgr_db_print_by_name(pm->db, nodename, fp);
1307 perfmgr_db_print_by_guid(pm->db, guid, fp);