mirror of
https://github.com/samba-team/samba.git
synced 2025-02-01 05:47:28 +03:00
s3: Add SMB2 performance counters.
A performance counter was added for every base type of SMB2 op.
This commit is contained in:
parent
609b865691
commit
90b1a1d296
@ -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
|
||||
|
@ -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 */
|
||||
};
|
||||
|
||||
|
@ -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);
|
||||
|
@ -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 */
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user