public inbox for linux-rdma@vger.kernel.org
 help / color / mirror / Atom feed
From: Yevgeny Kliteynik <kliteyn-LDSdmyG8hGV8YrgS2mwiifqBs+8SCbDb@public.gmane.org>
To: Sasha Khapyorsky <sashak-smomgflXvOZWk0Htik3J/w@public.gmane.org>
Cc: Linux RDMA <linux-rdma-u79uwXL29TY76Z2rM5mHXA@public.gmane.org>
Subject: [PATCH v2] opensm/osmeventplugin: added couple of events to monitor SM
Date: Wed, 07 Apr 2010 12:20:11 +0300	[thread overview]
Message-ID: <4BBC4E4B.7080705@dev.mellanox.co.il> (raw)
In-Reply-To: <4B587AFA.9020102-LDSdmyG8hGV8YrgS2mwiifqBs+8SCbDb@public.gmane.org>

Hi Sasha,

I've added a couple of new events that allow event
plug-in to see what SM is doing, when it is sweeping
and when it updates dump files:

  OSM_EVENT_ID_L_SWEEP_STARTED,
  OSM_EVENT_ID_L_SWEEP_DONE,
  OSM_EVENT_ID_H_SWEEP_STARTED,
  OSM_EVENT_ID_H_SWEEP_DONE,
  OSM_EVENT_ID_REROUTE_DONE,
  OSM_EVENT_ID_ENTERING_STANDBY,
  OSM_EVENT_ID_SM_PORT_DOWN,
  OSM_EVENT_ID_SA_DB_DUMPED

The last event is reported when SA DB was actually dumped.
I'm thinking of similar optimization for guid2lid file - it
doesn't have to be dumped at the end of each heavy sweep,
as many heavy sweeps don't really happen because of nodes
appearing/disappearing.

Signed-off-by: Yevgeny Kliteynik <kliteyn-LDSdmyG8hGV8YrgS2mwiifqBs+8SCbDb@public.gmane.org>
---

Changes from V1:
  - added reporting OSM_EVENT_ID_H_SWEEP_DONE event
  - rebased to latest master

 opensm/include/opensm/osm_event_plugin.h   |   10 +++++++++-
 opensm/opensm/osm_state_mgr.c              |   22 +++++++++++++++++++++-
 opensm/osmeventplugin/src/osmeventplugin.c |   24 ++++++++++++++++++++++++
 3 files changed, 54 insertions(+), 2 deletions(-)

diff --git a/opensm/include/opensm/osm_event_plugin.h b/opensm/include/opensm/osm_event_plugin.h
index 33d1920..f5a57d7 100644
--- a/opensm/include/opensm/osm_event_plugin.h
+++ b/opensm/include/opensm/osm_event_plugin.h
@@ -72,7 +72,15 @@ typedef enum {
 	OSM_EVENT_ID_PORT_SELECT,
 	OSM_EVENT_ID_TRAP,
 	OSM_EVENT_ID_SUBNET_UP,
-	OSM_EVENT_ID_MAX
+	OSM_EVENT_ID_MAX,
+	OSM_EVENT_ID_L_SWEEP_STARTED,
+	OSM_EVENT_ID_L_SWEEP_DONE,
+	OSM_EVENT_ID_H_SWEEP_STARTED,
+	OSM_EVENT_ID_H_SWEEP_DONE,
+	OSM_EVENT_ID_REROUTE_DONE,
+	OSM_EVENT_ID_ENTERING_STANDBY,
+	OSM_EVENT_ID_SM_PORT_DOWN,
+	OSM_EVENT_ID_SA_DB_DUMPED
 } osm_epi_event_id_t;

 typedef struct osm_epi_port_id {
diff --git a/opensm/opensm/osm_state_mgr.c b/opensm/opensm/osm_state_mgr.c
index e43463f..d5dff14 100644
--- a/opensm/opensm/osm_state_mgr.c
+++ b/opensm/opensm/osm_state_mgr.c
@@ -1076,6 +1076,9 @@ static void do_sweep(osm_sm_t * sm)
 	    sm->p_subn->sm_state != IB_SMINFO_STATE_DISCOVERING)
 		return;

+	osm_opensm_report_event(sm->p_subn->p_osm,
+				OSM_EVENT_ID_L_SWEEP_STARTED, NULL);
+
 	if (sm->p_subn->coming_out_of_standby)
 		/*
 		 * Need to force re-write of sm_base_lid to all ports
@@ -1111,6 +1114,8 @@ static void do_sweep(osm_sm_t * sm)
 				osm_sa_db_file_dump(sm->p_subn->p_osm);
 			OSM_LOG_MSG_BOX(sm->p_log, OSM_LOG_VERBOSE,
 					"LIGHT SWEEP COMPLETE");
+			osm_opensm_report_event(sm->p_subn->p_osm,
+				OSM_EVENT_ID_L_SWEEP_DONE, NULL);
 			return;
 		}
 	}
@@ -1151,6 +1156,8 @@ static void do_sweep(osm_sm_t * sm)
 		if (!sm->p_subn->subnet_initialization_error) {
 			OSM_LOG_MSG_BOX(sm->p_log, OSM_LOG_VERBOSE,
 					"REROUTE COMPLETE");
+			osm_opensm_report_event(sm->p_subn->p_osm,
+				OSM_EVENT_ID_REROUTE_DONE, NULL);
 			return;
 		}
 	}
@@ -1158,6 +1165,9 @@ static void do_sweep(osm_sm_t * sm)
 	/* go to heavy sweep */
 repeat_discovery:

+	osm_opensm_report_event(sm->p_subn->p_osm,
+				OSM_EVENT_ID_H_SWEEP_STARTED, NULL);
+
 	/* First of all - unset all flags */
 	sm->p_subn->force_heavy_sweep = FALSE;
 	sm->p_subn->force_reroute = FALSE;
@@ -1185,6 +1195,8 @@ repeat_discovery:

 		/* Move to DISCOVERING state */
 		osm_sm_state_mgr_process(sm, OSM_SM_SIGNAL_DISCOVER);
+		osm_opensm_report_event(sm->p_subn->p_osm,
+					OSM_EVENT_ID_SM_PORT_DOWN, NULL);
 		return;
 	}

@@ -1205,6 +1217,8 @@ repeat_discovery:
 				"ENTERING STANDBY STATE");
 		/* notify master SM about us */
 		osm_send_trap144(sm, 0);
+		osm_opensm_report_event(sm->p_subn->p_osm,
+				OSM_EVENT_ID_ENTERING_STANDBY, NULL);
 		return;
 	}

@@ -1212,6 +1226,9 @@ repeat_discovery:
 	if (sm->p_subn->force_heavy_sweep)
 		goto repeat_discovery;

+	osm_opensm_report_event(sm->p_subn->p_osm,
+				OSM_EVENT_ID_H_SWEEP_DONE, NULL);
+
 	OSM_LOG_MSG_BOX(sm->p_log, OSM_LOG_VERBOSE, "HEAVY SWEEP COMPLETE");

 	/* If we are MASTER - get the highest remote_sm, and
@@ -1375,7 +1392,10 @@ repeat_discovery:

 		if (osm_log_is_active(sm->p_log, OSM_LOG_VERBOSE) ||
 		    sm->p_subn->opt.sa_db_dump)
-			osm_sa_db_file_dump(sm->p_subn->p_osm);
+			if (!osm_sa_db_file_dump(sm->p_subn->p_osm))
+				osm_opensm_report_event(sm->p_subn->p_osm,
+					OSM_EVENT_ID_SA_DB_DUMPED, NULL);
+
 	}

 	/*
diff --git a/opensm/osmeventplugin/src/osmeventplugin.c b/opensm/osmeventplugin/src/osmeventplugin.c
index b4d9ce9..5029be2 100644
--- a/opensm/osmeventplugin/src/osmeventplugin.c
+++ b/opensm/osmeventplugin/src/osmeventplugin.c
@@ -176,6 +176,30 @@ static void report(void *_log, osm_epi_event_id_t event_id, void *event_data)
 	case OSM_EVENT_ID_SUBNET_UP:
 		fprintf(log->log_file, "Subnet up reported\n");
 		break;
+	case OSM_EVENT_ID_L_SWEEP_STARTED:
+		fprintf(log->log_file, "Light sweep started\n");
+		break;
+	case OSM_EVENT_ID_L_SWEEP_DONE:
+		fprintf(log->log_file, "Light sweep completed\n");
+		break;
+	case OSM_EVENT_ID_H_SWEEP_STARTED:
+		fprintf(log->log_file, "Heavy sweep started\n");
+		break;
+	case OSM_EVENT_ID_H_SWEEP_DONE:
+		fprintf(log->log_file, "Heavy sweep completed\n");
+		break;
+	case OSM_EVENT_ID_REROUTE_DONE:
+		fprintf(log->log_file, "Re-route completed\n");
+		break;
+	case OSM_EVENT_ID_ENTERING_STANDBY:
+		fprintf(log->log_file, "Entering stand-by state\n");
+		break;
+	case OSM_EVENT_ID_SM_PORT_DOWN:
+		fprintf(log->log_file, "SM port is down\n");
+		break;
+	case OSM_EVENT_ID_SA_DB_DUMPED:
+		fprintf(log->log_file, "SA DB dump file updated\n");
+		break;
 	case OSM_EVENT_ID_MAX:
 	default:
 		osm_log(log->osmlog, OSM_LOG_ERROR,
-- 
1.5.1.4


--
To unsubscribe from this list: send the line "unsubscribe linux-rdma" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

  parent reply	other threads:[~2010-04-07  9:20 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2010-01-21 16:04 [PATCH] opensm/osmeventplugin: added couple of events to monitor SM Yevgeny Kliteynik
     [not found] ` <4B587AFA.9020102-LDSdmyG8hGV8YrgS2mwiifqBs+8SCbDb@public.gmane.org>
2010-04-07  9:20   ` Yevgeny Kliteynik [this message]
     [not found]     ` <4BBC4E4B.7080705-LDSdmyG8hGV8YrgS2mwiifqBs+8SCbDb@public.gmane.org>
2010-06-01 18:37       ` [PATCH v2] " Sasha Khapyorsky

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=4BBC4E4B.7080705@dev.mellanox.co.il \
    --to=kliteyn-ldsdmyg8hgv8yrgs2mwiifqbs+8scbdb@public.gmane.org \
    --cc=linux-rdma-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
    --cc=sashak-smomgflXvOZWk0Htik3J/w@public.gmane.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox