@@ -138,6 +138,7 @@ typedef struct osm_perfmgr {
atomic32_t outstanding_queries; /* this along with sig_query */
cl_event_t sig_query; /* will throttle our queries */
uint32_t max_outstanding_queries;
+ boolean_t ignore_cas;
cl_qmap_t monitored_map; /* map the nodes being tracked */
monitored_node_t *remove_list;
ib_net64_t port_guid;
@@ -251,6 +251,7 @@ typedef struct osm_subn_opt {
boolean_t perfmgr_redir;
uint16_t perfmgr_sweep_time_s;
uint32_t perfmgr_max_outstanding_queries;
+ boolean_t perfmgr_ignore_cas;
char *event_db_dump_file;
#endif /* ENABLE_OSM_PERF_MGR */
char *event_plugin_name;
@@ -438,6 +438,11 @@ static void collect_guids(cl_map_item_t * p_map_item, void *context)
if (cl_qmap_get(&pm->monitored_map, node_guid)
== cl_qmap_end(&pm->monitored_map)) {
+
+ if (pm->ignore_cas &&
+ (node->node_info.node_type == IB_NODE_TYPE_CA))
+ goto Exit;
+
/* if not already in map add it */
num_ports = osm_node_get_num_physp(node);
mon_node = malloc(sizeof(*mon_node) +
@@ -1349,6 +1354,7 @@ ib_api_status_t osm_perfmgr_init(osm_perfmgr_t * pm, osm_opensm_t * osm,
p_opt->perfmgr ? PERFMGR_STATE_ENABLED : PERFMGR_STATE_DISABLE;
pm->sweep_time_s = p_opt->perfmgr_sweep_time_s;
pm->max_outstanding_queries = p_opt->perfmgr_max_outstanding_queries;
+ pm->ignore_cas = p_opt->perfmgr_ignore_cas;
pm->osm = osm;
pm->local_port = -1;
@@ -491,6 +491,7 @@ static const opt_rec_t opt_tbl[] = {
{ "perfmgr_redir", OPT_OFFSET(perfmgr_redir), opts_parse_boolean, NULL, 0 },
{ "perfmgr_sweep_time_s", OPT_OFFSET(perfmgr_sweep_time_s), opts_parse_uint16, NULL, 0 },
{ "perfmgr_max_outstanding_queries", OPT_OFFSET(perfmgr_max_outstanding_queries), opts_parse_uint32, NULL, 0 },
+ { "perfmgr_ignore_cas", OPT_OFFSET(perfmgr_ignore_cas), opts_parse_boolean, NULL, 0 },
{ "event_db_dump_file", OPT_OFFSET(event_db_dump_file), opts_parse_charp, NULL, 0 },
#endif /* ENABLE_OSM_PERF_MGR */
{ "event_plugin_name", OPT_OFFSET(event_plugin_name), opts_parse_charp, NULL, 0 },
@@ -982,6 +983,7 @@ void osm_subn_set_default_opt(IN osm_subn_opt_t * p_opt)
p_opt->perfmgr_sweep_time_s = OSM_PERFMGR_DEFAULT_SWEEP_TIME_S;
p_opt->perfmgr_max_outstanding_queries =
OSM_PERFMGR_DEFAULT_MAX_OUTSTANDING_QUERIES;
+ p_opt->perfmgr_ignore_cas = FALSE;
p_opt->event_db_dump_file = NULL; /* use default */
#endif /* ENABLE_OSM_PERF_MGR */
@@ -2006,11 +2008,13 @@ int osm_subn_output_conf(FILE *out, IN osm_subn_opt_t * p_opts)
"# sweep time in seconds\n"
"perfmgr_sweep_time_s %u\n\n"
"# Max outstanding queries\n"
- "perfmgr_max_outstanding_queries %u\n\n",
+ "perfmgr_max_outstanding_queries %u\n"
+ "perfmgr_ignore_cas %s\n\n",
p_opts->perfmgr ? "TRUE" : "FALSE",
p_opts->perfmgr_redir ? "TRUE" : "FALSE",
p_opts->perfmgr_sweep_time_s,
- p_opts->perfmgr_max_outstanding_queries);
+ p_opts->perfmgr_max_outstanding_queries,
+ p_opts->perfmgr_ignore_cas ? "TRUE" : "FALSE");
fprintf(out,
"#\n# Event DB Options\n#\n"
On many fabrics nodes have monitoring software which can querry counters on the nodes (CA's) themselves. In this case it may be more efficient to keep this perfmgr traffic off the subnet. Signed-off-by: Ira Weiny <weiny2@llnl.gov> --- include/opensm/osm_perfmgr.h | 1 + include/opensm/osm_subnet.h | 1 + opensm/osm_perfmgr.c | 6 ++++++ opensm/osm_subnet.c | 8 ++++++-- 4 files changed, 14 insertions(+), 2 deletions(-)