[SCM] Samba Shared Repository - branch master updated

Jeremy Allison jra at samba.org
Wed Jul 7 19:09:45 MDT 2010


The branch, master has been updated
       via  90b1a1d... s3: Add SMB2 performance counters.
      from  609b865... s4-dsdb/util: Reorder DSDB_FLAG_* checks

http://gitweb.samba.org/?p=samba.git;a=shortlog;h=master


- Log -----------------------------------------------------------------
commit 90b1a1d29623c6c2abc86e2571b535a7832dd376
Author: Ira Cooper <samba at ira.wakeful.net>
Date:   Thu Jul 1 17:51:41 2010 -0400

    s3: Add SMB2 performance counters.
    
    A performance counter was added for every base type of SMB2 op.

-----------------------------------------------------------------------

Summary of changes:
 source3/include/smbprofile.h   |   87 +++++++++++++++++++++++++++++++++++++++-
 source3/profile/profile.c      |   19 +++++++++
 source3/smbd/smb2_server.c     |   77 ++++++++++++++++++++++++++---------
 source3/utils/status_profile.c |   41 +++++++++++++++++++
 4 files changed, 203 insertions(+), 21 deletions(-)


Changeset truncated at 500 lines:

diff --git a/source3/include/smbprofile.h b/source3/include/smbprofile.h
index 5b52bad..b406c7d 100644
--- a/source3/include/smbprofile.h
+++ b/source3/include/smbprofile.h
@@ -26,7 +26,7 @@
 
 #define PROF_SHMEM_KEY ((key_t)0x07021999)
 #define PROF_SHM_MAGIC 0x6349985
-#define PROF_SHM_VERSION 11
+#define PROF_SHM_VERSION 12
 
 /* time values in the following structure are in microseconds */
 
@@ -756,6 +756,82 @@ enum profile_stats_values
 #define election_count __profile_stats_value(PR_VALUE_ELECTION, count)
 #define election_time __profile_stats_value(PR_VALUE_ELECTION, time)
 
+	PR_VALUE_SMB2_NEGPROT,
+#define smb2_negprot_count __profile_stats_value(PR_VALUE_SMB2_NEGPROT, count)
+#define smb2_negprot_time __profile_stats_value(PR_VALUE_SMB2_NEGPROT, time)
+
+	PR_VALUE_SMB2_SESSSETUP,
+#define smb2_sesssetup_count __profile_stats_value(PR_VALUE_SMB2_SESSSETUP, count)
+#define smb2_sesssetup_time __profile_stats_value(PR_VALUE_SMB2_SESSSETUP, time)
+
+	PR_VALUE_SMB2_LOGOFF,
+#define smb2_logoff_count __profile_stats_value(PR_VALUE_SMB2_LOGOFF, count)
+#define smb2_logoff_time __profile_stats_value(PR_VALUE_SMB2_LOGOFF, time)
+
+	PR_VALUE_SMB2_TCON,
+#define smb2_tcon_count __profile_stats_value(PR_VALUE_SMB2_TCON, count)
+#define smb2_tcon_time __profile_stats_value(PR_VALUE_SMB2_TCON, time)
+
+	PR_VALUE_SMB2_TDIS,
+#define smb2_tdis_count __profile_stats_value(PR_VALUE_SMB2_TDIS, count)
+#define smb2_tdis_time __profile_stats_value(PR_VALUE_SMB2_TDIS, time)
+
+	PR_VALUE_SMB2_CREATE,
+#define smb2_create_count __profile_stats_value(PR_VALUE_SMB2_CREATE, count)
+#define smb2_create_time __profile_stats_value(PR_VALUE_SMB2_CREATE, time)
+
+	PR_VALUE_SMB2_CLOSE,
+#define smb2_close_count __profile_stats_value(PR_VALUE_SMB2_CLOSE, count)
+#define smb2_close_time __profile_stats_value(PR_VALUE_SMB2_CLOSE, time)
+
+	PR_VALUE_SMB2_FLUSH,
+#define smb2_flush_count __profile_stats_value(PR_VALUE_SMB2_FLUSH, count)
+#define smb2_flush_time __profile_stats_value(PR_VALUE_SMB2_FLUSH, time)
+
+	PR_VALUE_SMB2_READ,
+#define smb2_read_count __profile_stats_value(PR_VALUE_SMB2_READ, count)
+#define smb2_read_time __profile_stats_value(PR_VALUE_SMB2_READ, time)
+
+	PR_VALUE_SMB2_WRITE,
+#define smb2_write_count __profile_stats_value(PR_VALUE_SMB2_WRITE, count)
+#define smb2_write_time __profile_stats_value(PR_VALUE_SMB2_WRITE, time)
+
+	PR_VALUE_SMB2_LOCK,
+#define smb2_lock_count __profile_stats_value(PR_VALUE_SMB2_LOCK, count)
+#define smb2_lock_time __profile_stats_value(PR_VALUE_SMB2_LOCK, time)
+
+	PR_VALUE_SMB2_IOCTL,
+#define smb2_ioctl_count __profile_stats_value(PR_VALUE_SMB2_IOCTL, count)
+#define smb2_ioctl_time __profile_stats_value(PR_VALUE_SMB2_IOCTL, time)
+
+	PR_VALUE_SMB2_CANCEL,
+#define smb2_cancel_count __profile_stats_value(PR_VALUE_SMB2_CANCEL, count)
+#define smb2_cancel_time __profile_stats_value(PR_VALUE_SMB2_CANCEL, time)
+
+	PR_VALUE_SMB2_KEEPALIVE,
+#define smb2_keepalive_count __profile_stats_value(PR_VALUE_SMB2_KEEPALIVE, count)
+#define smb2_keepalive_time __profile_stats_value(PR_VALUE_SMB2_KEEPALIVE, time)
+
+	PR_VALUE_SMB2_FIND,
+#define smb2_find_count __profile_stats_value(PR_VALUE_SMB2_FIND, count)
+#define smb2_find_time __profile_stats_value(PR_VALUE_SMB2_FIND, time)
+
+	PR_VALUE_SMB2_NOTIFY,
+#define smb2_notify_count __profile_stats_value(PR_VALUE_SMB2_NOTIFY, count)
+#define smb2_notify_time __profile_stats_value(PR_VALUE_SMB2_NOTIFY, time)
+
+	PR_VALUE_SMB2_GETINFO,
+#define smb2_getinfo_count __profile_stats_value(PR_VALUE_SMB2_GETINFO, count)
+#define smb2_getinfo_time __profile_stats_value(PR_VALUE_SMB2_GETINFO, time)
+
+	PR_VALUE_SMB2_SETINFO,
+#define smb2_setinfo_count __profile_stats_value(PR_VALUE_SMB2_SETINFO, count)
+#define smb2_setinfo_time __profile_stats_value(PR_VALUE_SMB2_SETINFO, time)
+
+	PR_VALUE_SMB2_BREAK,
+#define smb2_break_count __profile_stats_value(PR_VALUE_SMB2_BREAK, count)
+#define smb2_break_time __profile_stats_value(PR_VALUE_SMB2_BREAK, time)
+
 	/* This mist remain the last value. */
 	PR_VALUE_MAX
 }; /* enum profile_stats_values */
@@ -890,6 +966,13 @@ static inline uint64_t profile_timestamp(void)
 		    profile_timestamp() - __profstamp_##x); \
 	}
 
+#define PROFILE_AND_RETURN(x,t,c) { \
+	t __return_value; \
+	START_PROFILE(x); \
+	__return_value = (c); \
+	END_PROFILE(x); \
+	return __return_value; \
+}
 
 #else /* WITH_PROFILE */
 
@@ -900,7 +983,7 @@ static inline uint64_t profile_timestamp(void)
 #define START_PROFILE(x)
 #define START_PROFILE_BYTES(x,n)
 #define END_PROFILE(x)
-
+#define PROFILE_AND_RETURN(x,t,c) return (c);
 #endif /* WITH_PROFILE */
 
 #endif
diff --git a/source3/profile/profile.c b/source3/profile/profile.c
index 817bbb6..c8e7c38 100644
--- a/source3/profile/profile.c
+++ b/source3/profile/profile.c
@@ -455,6 +455,25 @@ bool profile_setup(struct messaging_context *msg_ctx, bool rdonly)
 	    "sync_browse_lists",	/* PR_VALUE_SYNC_BROWSE_LISTS */
 	    "run_elections",		/* PR_VALUE_RUN_ELECTIONS */
 	    "election",			/* PR_VALUE_ELECTION */
+	    "smb2_negprot",		/* PR_VALUE_SMB2_NEGPROT */
+	    "smb2_sesssetup",		/* PR_VALUE_SMB2_SESSETUP */
+	    "smb2_logoff",		/* PR_VALUE_SMB2_LOGOFF */
+	    "smb2_tcon",		/* PR_VALUE_SMB2_TCON */
+	    "smb2_tdis",		/* PR_VALUE_SMB2_TDIS */
+	    "smb2_create",		/* PR_VALUE_SMB2_CREATE */
+	    "smb2_close",		/* PR_VALUE_SMB2_CLOSE */
+	    "smb2_flush",		/* PR_VALUE_SMB2_FLUSH */
+	    "smb2_read",		/* PR_VALUE_SMB2_READ */
+	    "smb2_write",		/* PR_VALUE_SMB2_WRITE */
+	    "smb2_lock",		/* PR_VALUE_SMB2_LOCK */
+	    "smb2_ioctl",		/* PR_VALUE_SMB2_IOCTL */
+	    "smb2_cancel",		/* PR_VALUE_SMB2_CANCEL */
+	    "smb2_keepalive",		/* PR_VALUE_SMB2_KEEPALIVE */
+	    "smb2_find",		/* PR_VALUE_SMB2_FIND */
+	    "smb2_notify",		/* PR_VALUE_SMB2_NOTIFY */
+	    "smb2_getinfo",		/* PR_VALUE_SMB2_GETINFO */
+	    "smb2_setinfo"		/* PR_VALUE_SMB2_SETINFO */
+	    "smb2_break",		/* PR_VALUE_SMB2_BREAK */
 	    "" /* PR_VALUE_MAX */
 	};
 
diff --git a/source3/smbd/smb2_server.c b/source3/smbd/smb2_server.c
index c977653..85310c4 100644
--- a/source3/smbd/smb2_server.c
+++ b/source3/smbd/smb2_server.c
@@ -1018,16 +1018,22 @@ NTSTATUS smbd_smb2_request_dispatch(struct smbd_smb2_request *req)
 
 	switch (opcode) {
 	case SMB2_OP_NEGPROT:
-		return smbd_smb2_request_process_negprot(req);
+		PROFILE_AND_RETURN(smb2_negprot,
+				   NTSTATUS,
+				   smbd_smb2_request_process_negprot(req));
 
 	case SMB2_OP_SESSSETUP:
-		return smbd_smb2_request_process_sesssetup(req);
+		PROFILE_AND_RETURN(smb2_sesssetup,
+				   NTSTATUS,
+				   smbd_smb2_request_process_sesssetup(req));
 
 	case SMB2_OP_LOGOFF:
 		if (!NT_STATUS_IS_OK(session_status)) {
 			return smbd_smb2_request_error(req, session_status);
 		}
-		return smbd_smb2_request_process_logoff(req);
+		PROFILE_AND_RETURN(smb2_logoff,
+				   NTSTATUS,
+				   smbd_smb2_request_process_logoff(req));
 
 	case SMB2_OP_TCON:
 		if (!NT_STATUS_IS_OK(session_status)) {
@@ -1037,7 +1043,9 @@ NTSTATUS smbd_smb2_request_dispatch(struct smbd_smb2_request *req)
 		if (!NT_STATUS_IS_OK(status)) {
 			return smbd_smb2_request_error(req, status);
 		}
-		return smbd_smb2_request_process_tcon(req);
+		PROFILE_AND_RETURN(smb2_tcon,
+				   NTSTATUS,
+				   smbd_smb2_request_process_tcon(req));
 
 	case SMB2_OP_TDIS:
 		if (!NT_STATUS_IS_OK(session_status)) {
@@ -1047,7 +1055,9 @@ NTSTATUS smbd_smb2_request_dispatch(struct smbd_smb2_request *req)
 		if (!NT_STATUS_IS_OK(status)) {
 			return smbd_smb2_request_error(req, status);
 		}
-		return smbd_smb2_request_process_tdis(req);
+		PROFILE_AND_RETURN(smb2_tdis,
+				   NTSTATUS,
+				   smbd_smb2_request_process_tdis(req));
 
 	case SMB2_OP_CREATE:
 		if (!NT_STATUS_IS_OK(session_status)) {
@@ -1057,7 +1067,9 @@ NTSTATUS smbd_smb2_request_dispatch(struct smbd_smb2_request *req)
 		if (!NT_STATUS_IS_OK(status)) {
 			return smbd_smb2_request_error(req, status);
 		}
-		return smbd_smb2_request_process_create(req);
+		PROFILE_AND_RETURN(smb2_create,
+				   NTSTATUS,
+				   smbd_smb2_request_process_create(req));
 
 	case SMB2_OP_CLOSE:
 		if (!NT_STATUS_IS_OK(session_status)) {
@@ -1067,7 +1079,9 @@ NTSTATUS smbd_smb2_request_dispatch(struct smbd_smb2_request *req)
 		if (!NT_STATUS_IS_OK(status)) {
 			return smbd_smb2_request_error(req, status);
 		}
-		return smbd_smb2_request_process_close(req);
+		PROFILE_AND_RETURN(smb2_close,
+				   NTSTATUS,
+				   smbd_smb2_request_process_close(req));
 
 	case SMB2_OP_FLUSH:
 		if (!NT_STATUS_IS_OK(session_status)) {
@@ -1077,7 +1091,9 @@ NTSTATUS smbd_smb2_request_dispatch(struct smbd_smb2_request *req)
 		if (!NT_STATUS_IS_OK(status)) {
 			return smbd_smb2_request_error(req, status);
 		}
-		return smbd_smb2_request_process_flush(req);
+		PROFILE_AND_RETURN(smb2_flush,
+				   NTSTATUS,
+				   smbd_smb2_request_process_flush(req));
 
 	case SMB2_OP_READ:
 		if (!NT_STATUS_IS_OK(session_status)) {
@@ -1087,7 +1103,9 @@ NTSTATUS smbd_smb2_request_dispatch(struct smbd_smb2_request *req)
 		if (!NT_STATUS_IS_OK(status)) {
 			return smbd_smb2_request_error(req, status);
 		}
-		return smbd_smb2_request_process_read(req);
+		PROFILE_AND_RETURN(smb2_read,
+				   NTSTATUS,
+				   smbd_smb2_request_process_read(req));
 
 	case SMB2_OP_WRITE:
 		if (!NT_STATUS_IS_OK(session_status)) {
@@ -1097,7 +1115,9 @@ NTSTATUS smbd_smb2_request_dispatch(struct smbd_smb2_request *req)
 		if (!NT_STATUS_IS_OK(status)) {
 			return smbd_smb2_request_error(req, status);
 		}
-		return smbd_smb2_request_process_write(req);
+		PROFILE_AND_RETURN(smb2_write,
+				   NTSTATUS,
+				   smbd_smb2_request_process_write(req));
 
 	case SMB2_OP_LOCK:
 		if (!NT_STATUS_IS_OK(session_status)) {
@@ -1115,7 +1135,9 @@ NTSTATUS smbd_smb2_request_dispatch(struct smbd_smb2_request *req)
 			}
 			return smbd_smb2_request_error(req, status);
 		}
-		return smbd_smb2_request_process_lock(req);
+		PROFILE_AND_RETURN(smb2_lock,
+				   NTSTATUS,
+				   smbd_smb2_request_process_lock(req));
 
 	case SMB2_OP_IOCTL:
 		if (!NT_STATUS_IS_OK(session_status)) {
@@ -1125,13 +1147,20 @@ NTSTATUS smbd_smb2_request_dispatch(struct smbd_smb2_request *req)
 		if (!NT_STATUS_IS_OK(status)) {
 			return smbd_smb2_request_error(req, status);
 		}
-		return smbd_smb2_request_process_ioctl(req);
+		PROFILE_AND_RETURN(smb2_ioctl,
+				   NTSTATUS,
+				   smbd_smb2_request_process_ioctl(req));
 
 	case SMB2_OP_CANCEL:
-		return smbd_smb2_request_process_cancel(req);
+		PROFILE_AND_RETURN(smb2_cancel,
+				   NTSTATUS,
+				   smbd_smb2_request_process_cancel(req));
 
 	case SMB2_OP_KEEPALIVE:
-		return smbd_smb2_request_process_keepalive(req);
+		PROFILE_AND_RETURN(smb2_keepalive,
+				   NTSTATUS,
+				   smbd_smb2_request_process_keepalive(req));
+
 
 	case SMB2_OP_FIND:
 		if (!NT_STATUS_IS_OK(session_status)) {
@@ -1141,7 +1170,9 @@ NTSTATUS smbd_smb2_request_dispatch(struct smbd_smb2_request *req)
 		if (!NT_STATUS_IS_OK(status)) {
 			return smbd_smb2_request_error(req, status);
 		}
-		return smbd_smb2_request_process_find(req);
+		PROFILE_AND_RETURN(smb2_find,
+				   NTSTATUS,
+				   smbd_smb2_request_process_find(req));
 
 	case SMB2_OP_NOTIFY:
 		if (!NT_STATUS_IS_OK(session_status)) {
@@ -1151,7 +1182,9 @@ NTSTATUS smbd_smb2_request_dispatch(struct smbd_smb2_request *req)
 		if (!NT_STATUS_IS_OK(status)) {
 			return smbd_smb2_request_error(req, status);
 		}
-		return smbd_smb2_request_process_notify(req);
+		PROFILE_AND_RETURN(smb2_notify,
+				   NTSTATUS,
+				   smbd_smb2_request_process_notify(req));
 
 	case SMB2_OP_GETINFO:
 		if (!NT_STATUS_IS_OK(session_status)) {
@@ -1161,7 +1194,9 @@ NTSTATUS smbd_smb2_request_dispatch(struct smbd_smb2_request *req)
 		if (!NT_STATUS_IS_OK(status)) {
 			return smbd_smb2_request_error(req, status);
 		}
-		return smbd_smb2_request_process_getinfo(req);
+		PROFILE_AND_RETURN(smb2_getinfo,
+				   NTSTATUS,
+				   smbd_smb2_request_process_getinfo(req));
 
 	case SMB2_OP_SETINFO:
 		if (!NT_STATUS_IS_OK(session_status)) {
@@ -1171,7 +1206,9 @@ NTSTATUS smbd_smb2_request_dispatch(struct smbd_smb2_request *req)
 		if (!NT_STATUS_IS_OK(status)) {
 			return smbd_smb2_request_error(req, status);
 		}
-		return smbd_smb2_request_process_setinfo(req);
+		PROFILE_AND_RETURN(smb2_setinfo,
+				   NTSTATUS,
+				   smbd_smb2_request_process_setinfo(req));
 
 	case SMB2_OP_BREAK:
 		if (!NT_STATUS_IS_OK(session_status)) {
@@ -1181,7 +1218,9 @@ NTSTATUS smbd_smb2_request_dispatch(struct smbd_smb2_request *req)
 		if (!NT_STATUS_IS_OK(status)) {
 			return smbd_smb2_request_error(req, status);
 		}
-		return smbd_smb2_request_process_break(req);
+		PROFILE_AND_RETURN(smb2_break,
+				   NTSTATUS,
+				   smbd_smb2_request_process_break(req));
 	}
 
 	return smbd_smb2_request_error(req, NT_STATUS_INVALID_PARAMETER);
diff --git a/source3/utils/status_profile.c b/source3/utils/status_profile.c
index a51537d..d39ae2d 100644
--- a/source3/utils/status_profile.c
+++ b/source3/utils/status_profile.c
@@ -400,7 +400,48 @@ bool status_profile_dump(bool verbose)
 	d_printf("run_elections_time:             %u\n", profile_p->run_elections_time);
 	d_printf("election_count:                 %u\n", profile_p->election_count);
 	d_printf("election_time:                  %u\n", profile_p->election_time);
+	profile_separator("SMB2 Calls");
+	d_printf("smb2_negprot_count:             %u\n", profile_p->smb2_negprot_count);
+	d_printf("smb2_negprot_time:              %u\n", profile_p->smb2_negprot_time);
+	d_printf("smb2_sesssetup_count:           %u\n", profile_p->smb2_sesssetup_count);
+	d_printf("smb2_sesssetup_time:            %u\n", profile_p->smb2_sesssetup_time);
+	d_printf("smb2_logoff_count:              %u\n", profile_p->smb2_logoff_count);
+	d_printf("smb2_logoff_time:               %u\n", profile_p->smb2_logoff_time);
+	d_printf("smb2_tcon_count:                %u\n", profile_p->smb2_tcon_count);
+	d_printf("smb2_tcon_time:                 %u\n", profile_p->smb2_tcon_time);
+	d_printf("smb2_tdis_count:                %u\n", profile_p->smb2_tdis_count);
+	d_printf("smb2_tdis_time:                 %u\n", profile_p->smb2_tdis_time);
+	d_printf("smb2_create_count:              %u\n", profile_p->smb2_create_count);
+	d_printf("smb2_create_time:               %u\n", profile_p->smb2_create_time);
+	d_printf("smb2_close_count:               %u\n", profile_p->smb2_close_count);
+	d_printf("smb2_close_time:                %u\n", profile_p->smb2_close_time);
+	d_printf("smb2_flush_count:               %u\n", profile_p->smb2_flush_count);
+	d_printf("smb2_flush_time:                %u\n", profile_p->smb2_flush_time);
+	d_printf("smb2_read_count:                %u\n", profile_p->smb2_read_count);
+	d_printf("smb2_read_time:                 %u\n", profile_p->smb2_read_time);
+	d_printf("smb2_write_count:               %u\n", profile_p->smb2_write_count);
+	d_printf("smb2_write_time:                %u\n", profile_p->smb2_write_time);
+	d_printf("smb2_lock_count:                %u\n", profile_p->smb2_lock_count);
+	d_printf("smb2_lock_time:                 %u\n", profile_p->smb2_lock_time);
+	d_printf("smb2_ioctl_count:               %u\n", profile_p->smb2_ioctl_count);
+	d_printf("smb2_ioctl_time:                %u\n", profile_p->smb2_ioctl_time);
+	d_printf("smb2_cancel_count:              %u\n", profile_p->smb2_cancel_count);
+	d_printf("smb2_cancel_time:               %u\n", profile_p->smb2_cancel_time);
+	d_printf("smb2_keepalive_count:           %u\n", profile_p->smb2_keepalive_count);
+	d_printf("smb2_keepalive_time:            %u\n", profile_p->smb2_keepalive_time);
+	d_printf("smb2_find_count:                %u\n", profile_p->smb2_find_count);
+	d_printf("smb2_find_time:                 %u\n", profile_p->smb2_find_time);
+	d_printf("smb2_notify_count:              %u\n", profile_p->smb2_notify_count);
+	d_printf("smb2_notify_time:               %u\n", profile_p->smb2_notify_time);
+	d_printf("smb2_getinfo_count:             %u\n", profile_p->smb2_getinfo_count);
+	d_printf("smb2_getinfo_time:              %u\n", profile_p->smb2_getinfo_time);
+	d_printf("smb2_setinfo_count:             %u\n", profile_p->smb2_setinfo_count);
+	d_printf("smb2_setinfo_time:              %u\n", profile_p->smb2_setinfo_time);
+	d_printf("smb2_break_count:               %u\n", profile_p->smb2_break_count);
+	d_printf("smb2_break_time:                %u\n", profile_p->smb2_break_time);
+
 #else /* WITH_PROFILE */
+
 	fprintf(stderr, "Profile data unavailable\n");
 #endif /* WITH_PROFILE */
 


-- 
Samba Shared Repository


More information about the samba-cvs mailing list