diff options
author | Stefan Metzmacher <metze@samba.org> | 2014-10-23 18:06:15 +0200 |
---|---|---|
committer | Jeremy Allison <jra@samba.org> | 2014-11-19 20:51:37 +0100 |
commit | cee1b4b0532d6271c2fc90fc2f82e9693a43d8ad (patch) | |
tree | 58e0eabc9a3ee346d80d67e5497129d43afc633c | |
parent | 9813f56178870b9081c7521ca2e3137473950497 (diff) | |
download | samba-cee1b4b0532d6271c2fc90fc2f82e9693a43d8ad.tar.gz |
s3:smbprofile: rewrite the internal macros
We now autogenerate a lot of code using
SMBPROFILE_STATS_ALL_SECTIONS macro which expands to
different SMBPROFILE_STATS_{COUNT,BASIC,BYTES,IOBYTES} macros.
This also allows async profiling using:
struct mystate {
...
SMBPROFILE_BASIC_ASYNC_STATE(profile_state);
...
};
...
SMBPROFILE_BASIC_ASYNC_START(SMB2_negotiate, profile_p, mystate->profile_state);
...
SMBPROFILE_BYTES_ASYNC_SET_IDLE(mystate->profile_state);
...
SMBPROFILE_BYTES_ASYNC_SET_BUSY(mystate->profile_state);
...
SMBPROFILE_BASIC_ASYNC_END(mystate->profile_state);
The current START_PROFILE*()/END_PROFILE*() are implemented as legacy wrappers.
Signed-off-by: Stefan Metzmacher <metze@samba.org>
-rw-r--r-- | source3/include/smbprofile.h | 1296 | ||||
-rw-r--r-- | source3/profile/profile.c | 189 | ||||
-rw-r--r-- | source3/utils/status_profile.c | 929 |
3 files changed, 686 insertions, 1728 deletions
diff --git a/source3/include/smbprofile.h b/source3/include/smbprofile.h index 9f7b3a2a806..bae691b52b2 100644 --- a/source3/include/smbprofile.h +++ b/source3/include/smbprofile.h @@ -23,804 +23,449 @@ #ifdef WITH_PROFILE +#define SMBPROFILE_STATS_ALL_SECTIONS \ + SMBPROFILE_STATS_START \ + \ + SMBPROFILE_STATS_SECTION_START("SMBD loop") \ + SMBPROFILE_STATS_COUNT(smb_count) \ + SMBPROFILE_STATS_COUNT(uid_changes) \ + SMBPROFILE_STATS_BASIC(smbd_idle) \ + SMBPROFILE_STATS_SECTION_END \ + \ + SMBPROFILE_STATS_SECTION_START("System Calls") \ + SMBPROFILE_STATS_BASIC(syscall_opendir) \ + SMBPROFILE_STATS_BASIC(syscall_fdopendir) \ + SMBPROFILE_STATS_BASIC(syscall_readdir) \ + SMBPROFILE_STATS_BASIC(syscall_seekdir) \ + SMBPROFILE_STATS_BASIC(syscall_telldir) \ + SMBPROFILE_STATS_BASIC(syscall_rewinddir) \ + SMBPROFILE_STATS_BASIC(syscall_mkdir) \ + SMBPROFILE_STATS_BASIC(syscall_rmdir) \ + SMBPROFILE_STATS_BASIC(syscall_closedir) \ + SMBPROFILE_STATS_BASIC(syscall_open) \ + SMBPROFILE_STATS_BASIC(syscall_createfile) \ + SMBPROFILE_STATS_BASIC(syscall_close) \ + SMBPROFILE_STATS_BYTES(syscall_read) \ + SMBPROFILE_STATS_BYTES(syscall_pread) \ + SMBPROFILE_STATS_BYTES(syscall_write) \ + SMBPROFILE_STATS_BYTES(syscall_pwrite) \ + SMBPROFILE_STATS_BASIC(syscall_lseek) \ + SMBPROFILE_STATS_BYTES(syscall_sendfile) \ + SMBPROFILE_STATS_BYTES(syscall_recvfile) \ + SMBPROFILE_STATS_BASIC(syscall_rename) \ + SMBPROFILE_STATS_BASIC(syscall_rename_at) \ + SMBPROFILE_STATS_BASIC(syscall_fsync) \ + SMBPROFILE_STATS_BASIC(syscall_stat) \ + SMBPROFILE_STATS_BASIC(syscall_fstat) \ + SMBPROFILE_STATS_BASIC(syscall_lstat) \ + SMBPROFILE_STATS_BASIC(syscall_get_alloc_size) \ + SMBPROFILE_STATS_BASIC(syscall_unlink) \ + SMBPROFILE_STATS_BASIC(syscall_chmod) \ + SMBPROFILE_STATS_BASIC(syscall_fchmod) \ + SMBPROFILE_STATS_BASIC(syscall_chown) \ + SMBPROFILE_STATS_BASIC(syscall_fchown) \ + SMBPROFILE_STATS_BASIC(syscall_lchown) \ + SMBPROFILE_STATS_BASIC(syscall_chdir) \ + SMBPROFILE_STATS_BASIC(syscall_getwd) \ + SMBPROFILE_STATS_BASIC(syscall_ntimes) \ + SMBPROFILE_STATS_BASIC(syscall_ftruncate) \ + SMBPROFILE_STATS_BASIC(syscall_fallocate) \ + SMBPROFILE_STATS_BASIC(syscall_fcntl_lock) \ + SMBPROFILE_STATS_BASIC(syscall_kernel_flock) \ + SMBPROFILE_STATS_BASIC(syscall_linux_setlease) \ + SMBPROFILE_STATS_BASIC(syscall_fcntl_getlock) \ + SMBPROFILE_STATS_BASIC(syscall_readlink) \ + SMBPROFILE_STATS_BASIC(syscall_symlink) \ + SMBPROFILE_STATS_BASIC(syscall_link) \ + SMBPROFILE_STATS_BASIC(syscall_mknod) \ + SMBPROFILE_STATS_BASIC(syscall_realpath) \ + SMBPROFILE_STATS_BASIC(syscall_get_quota) \ + SMBPROFILE_STATS_BASIC(syscall_set_quota) \ + SMBPROFILE_STATS_BASIC(syscall_get_sd) \ + SMBPROFILE_STATS_BASIC(syscall_set_sd) \ + SMBPROFILE_STATS_BASIC(syscall_brl_lock) \ + SMBPROFILE_STATS_BASIC(syscall_brl_unlock) \ + SMBPROFILE_STATS_BASIC(syscall_brl_cancel) \ + SMBPROFILE_STATS_SECTION_END \ + \ + SMBPROFILE_STATS_SECTION_START("ACL Calls") \ + SMBPROFILE_STATS_BASIC(get_nt_acl) \ + SMBPROFILE_STATS_BASIC(fget_nt_acl) \ + SMBPROFILE_STATS_BASIC(fset_nt_acl) \ + SMBPROFILE_STATS_BASIC(chmod_acl) \ + SMBPROFILE_STATS_BASIC(fchmod_acl) \ + SMBPROFILE_STATS_SECTION_END \ + \ + SMBPROFILE_STATS_SECTION_START("Stat Cache") \ + SMBPROFILE_STATS_COUNT(statcache_lookups) \ + SMBPROFILE_STATS_COUNT(statcache_misses) \ + SMBPROFILE_STATS_COUNT(statcache_hits) \ + SMBPROFILE_STATS_SECTION_END \ + \ + SMBPROFILE_STATS_SECTION_START("Write Cache") \ + SMBPROFILE_STATS_COUNT(writecache_allocations) \ + SMBPROFILE_STATS_COUNT(writecache_deallocations) \ + SMBPROFILE_STATS_COUNT(writecache_cached_reads) \ + SMBPROFILE_STATS_COUNT(writecache_total_writes) \ + SMBPROFILE_STATS_COUNT(writecache_init_writes) \ + SMBPROFILE_STATS_COUNT(writecache_abutted_writes) \ + SMBPROFILE_STATS_COUNT(writecache_non_oplock_writes) \ + SMBPROFILE_STATS_COUNT(writecache_direct_writes) \ + SMBPROFILE_STATS_COUNT(writecache_cached_writes) \ + SMBPROFILE_STATS_COUNT(writecache_perfect_writes) \ + SMBPROFILE_STATS_COUNT(writecache_flush_reason_seek) \ + SMBPROFILE_STATS_COUNT(writecache_flush_reason_read) \ + SMBPROFILE_STATS_COUNT(writecache_flush_reason_readraw) \ + SMBPROFILE_STATS_COUNT(writecache_flush_reason_write) \ + SMBPROFILE_STATS_COUNT(writecache_flush_reason_oplock) \ + SMBPROFILE_STATS_COUNT(writecache_flush_reason_close) \ + SMBPROFILE_STATS_COUNT(writecache_flush_reason_sync) \ + SMBPROFILE_STATS_COUNT(writecache_flush_reason_sizechange) \ + SMBPROFILE_STATS_SECTION_END \ + \ + SMBPROFILE_STATS_SECTION_START("SMB Calls") \ + SMBPROFILE_STATS_BASIC(SMBmkdir) \ + SMBPROFILE_STATS_BASIC(SMBrmdir) \ + SMBPROFILE_STATS_BASIC(SMBopen) \ + SMBPROFILE_STATS_BASIC(SMBcreate) \ + SMBPROFILE_STATS_BASIC(SMBclose) \ + SMBPROFILE_STATS_BASIC(SMBflush) \ + SMBPROFILE_STATS_BASIC(SMBunlink) \ + SMBPROFILE_STATS_BASIC(SMBmv) \ + SMBPROFILE_STATS_BASIC(SMBgetatr) \ + SMBPROFILE_STATS_BASIC(SMBsetatr) \ + SMBPROFILE_STATS_BASIC(SMBread) \ + SMBPROFILE_STATS_BASIC(SMBwrite) \ + SMBPROFILE_STATS_BASIC(SMBlock) \ + SMBPROFILE_STATS_BASIC(SMBunlock) \ + SMBPROFILE_STATS_BASIC(SMBctemp) \ + SMBPROFILE_STATS_BASIC(SMBmknew) \ + SMBPROFILE_STATS_BASIC(SMBcheckpath) \ + SMBPROFILE_STATS_BASIC(SMBexit) \ + SMBPROFILE_STATS_BASIC(SMBlseek) \ + SMBPROFILE_STATS_BASIC(SMBlockread) \ + SMBPROFILE_STATS_BASIC(SMBwriteunlock) \ + SMBPROFILE_STATS_BASIC(SMBreadbraw) \ + SMBPROFILE_STATS_BASIC(SMBreadBmpx) \ + SMBPROFILE_STATS_BASIC(SMBreadBs) \ + SMBPROFILE_STATS_BASIC(SMBwritebraw) \ + SMBPROFILE_STATS_BASIC(SMBwriteBmpx) \ + SMBPROFILE_STATS_BASIC(SMBwriteBs) \ + SMBPROFILE_STATS_BASIC(SMBwritec) \ + SMBPROFILE_STATS_BASIC(SMBsetattrE) \ + SMBPROFILE_STATS_BASIC(SMBgetattrE) \ + SMBPROFILE_STATS_BASIC(SMBlockingX) \ + SMBPROFILE_STATS_BASIC(SMBtrans) \ + SMBPROFILE_STATS_BASIC(SMBtranss) \ + SMBPROFILE_STATS_BASIC(SMBioctl) \ + SMBPROFILE_STATS_BASIC(SMBioctls) \ + SMBPROFILE_STATS_BASIC(SMBcopy) \ + SMBPROFILE_STATS_BASIC(SMBmove) \ + SMBPROFILE_STATS_BASIC(SMBecho) \ + SMBPROFILE_STATS_BASIC(SMBwriteclose) \ + SMBPROFILE_STATS_BASIC(SMBopenX) \ + SMBPROFILE_STATS_BASIC(SMBreadX) \ + SMBPROFILE_STATS_BASIC(SMBwriteX) \ + SMBPROFILE_STATS_BASIC(SMBtrans2) \ + SMBPROFILE_STATS_BASIC(SMBtranss2) \ + SMBPROFILE_STATS_BASIC(SMBfindclose) \ + SMBPROFILE_STATS_BASIC(SMBfindnclose) \ + SMBPROFILE_STATS_BASIC(SMBtcon) \ + SMBPROFILE_STATS_BASIC(SMBtdis) \ + SMBPROFILE_STATS_BASIC(SMBnegprot) \ + SMBPROFILE_STATS_BASIC(SMBsesssetupX) \ + SMBPROFILE_STATS_BASIC(SMBulogoffX) \ + SMBPROFILE_STATS_BASIC(SMBtconX) \ + SMBPROFILE_STATS_BASIC(SMBdskattr) \ + SMBPROFILE_STATS_BASIC(SMBsearch) \ + SMBPROFILE_STATS_BASIC(SMBffirst) \ + SMBPROFILE_STATS_BASIC(SMBfunique) \ + SMBPROFILE_STATS_BASIC(SMBfclose) \ + SMBPROFILE_STATS_BASIC(SMBnttrans) \ + SMBPROFILE_STATS_BASIC(SMBnttranss) \ + SMBPROFILE_STATS_BASIC(SMBntcreateX) \ + SMBPROFILE_STATS_BASIC(SMBntcancel) \ + SMBPROFILE_STATS_BASIC(SMBntrename) \ + SMBPROFILE_STATS_BASIC(SMBsplopen) \ + SMBPROFILE_STATS_BASIC(SMBsplwr) \ + SMBPROFILE_STATS_BASIC(SMBsplclose) \ + SMBPROFILE_STATS_BASIC(SMBsplretq) \ + SMBPROFILE_STATS_BASIC(SMBsends) \ + SMBPROFILE_STATS_BASIC(SMBsendb) \ + SMBPROFILE_STATS_BASIC(SMBfwdname) \ + SMBPROFILE_STATS_BASIC(SMBcancelf) \ + SMBPROFILE_STATS_BASIC(SMBgetmac) \ + SMBPROFILE_STATS_BASIC(SMBsendstrt) \ + SMBPROFILE_STATS_BASIC(SMBsendend) \ + SMBPROFILE_STATS_BASIC(SMBsendtxt) \ + SMBPROFILE_STATS_BASIC(SMBinvalid) \ + SMBPROFILE_STATS_SECTION_END \ + \ + SMBPROFILE_STATS_SECTION_START("Trans2 Calls") \ + SMBPROFILE_STATS_BASIC(Trans2_open) \ + SMBPROFILE_STATS_BASIC(Trans2_findfirst) \ + SMBPROFILE_STATS_BASIC(Trans2_findnext) \ + SMBPROFILE_STATS_BASIC(Trans2_qfsinfo) \ + SMBPROFILE_STATS_BASIC(Trans2_setfsinfo) \ + SMBPROFILE_STATS_BASIC(Trans2_qpathinfo) \ + SMBPROFILE_STATS_BASIC(Trans2_setpathinfo) \ + SMBPROFILE_STATS_BASIC(Trans2_qfileinfo) \ + SMBPROFILE_STATS_BASIC(Trans2_setfileinfo) \ + SMBPROFILE_STATS_BASIC(Trans2_fsctl) \ + SMBPROFILE_STATS_BASIC(Trans2_ioctl) \ + SMBPROFILE_STATS_BASIC(Trans2_findnotifyfirst) \ + SMBPROFILE_STATS_BASIC(Trans2_findnotifynext) \ + SMBPROFILE_STATS_BASIC(Trans2_mkdir) \ + SMBPROFILE_STATS_BASIC(Trans2_session_setup) \ + SMBPROFILE_STATS_BASIC(Trans2_get_dfs_referral) \ + SMBPROFILE_STATS_BASIC(Trans2_report_dfs_inconsistancy) \ + SMBPROFILE_STATS_SECTION_END \ + \ + SMBPROFILE_STATS_SECTION_START("NT Transact Calls") \ + SMBPROFILE_STATS_BASIC(NT_transact_create) \ + SMBPROFILE_STATS_BASIC(NT_transact_ioctl) \ + SMBPROFILE_STATS_BASIC(NT_transact_set_security_desc) \ + SMBPROFILE_STATS_BASIC(NT_transact_notify_change) \ + SMBPROFILE_STATS_BASIC(NT_transact_rename) \ + SMBPROFILE_STATS_BASIC(NT_transact_query_security_desc) \ + SMBPROFILE_STATS_BASIC(NT_transact_get_user_quota) \ + SMBPROFILE_STATS_BASIC(NT_transact_set_user_quota) \ + SMBPROFILE_STATS_SECTION_END \ + \ + SMBPROFILE_STATS_SECTION_START("SMB2 Calls") \ + SMBPROFILE_STATS_BASIC(smb2_negprot) \ + SMBPROFILE_STATS_BASIC(smb2_sesssetup) \ + SMBPROFILE_STATS_BASIC(smb2_logoff) \ + SMBPROFILE_STATS_BASIC(smb2_tcon) \ + SMBPROFILE_STATS_BASIC(smb2_tdis) \ + SMBPROFILE_STATS_BASIC(smb2_create) \ + SMBPROFILE_STATS_BASIC(smb2_close) \ + SMBPROFILE_STATS_BASIC(smb2_flush) \ + SMBPROFILE_STATS_BASIC(smb2_read) \ + SMBPROFILE_STATS_BASIC(smb2_write) \ + SMBPROFILE_STATS_BASIC(smb2_lock) \ + SMBPROFILE_STATS_BASIC(smb2_ioctl) \ + SMBPROFILE_STATS_BASIC(smb2_cancel) \ + SMBPROFILE_STATS_BASIC(smb2_keepalive) \ + SMBPROFILE_STATS_BASIC(smb2_find) \ + SMBPROFILE_STATS_BASIC(smb2_notify) \ + SMBPROFILE_STATS_BASIC(smb2_getinfo) \ + SMBPROFILE_STATS_BASIC(smb2_setinfo) \ + SMBPROFILE_STATS_BASIC(smb2_break) \ + SMBPROFILE_STATS_SECTION_END \ + \ + SMBPROFILE_STATS_END + /* this file defines the profile structure in the profile shared memory area */ /* time values in the following structure are in microseconds */ -#define __profile_stats_value(which, domain) domain[which] - -enum profile_stats_values -{ - PR_VALUE_SMBD_IDLE = 0, -#define smbd_idle_count __profile_stats_value(PR_VALUE_SMBD_IDLE, count) -#define smbd_idle_time __profile_stats_value(PR_VALUE_SMBD_IDLE, time) - -/* system call counters */ - PR_VALUE_SYSCALL_OPENDIR, -#define syscall_opendir_count __profile_stats_value(PR_VALUE_SYSCALL_OPENDIR, count) -#define syscall_opendir_time __profile_stats_value(PR_VALUE_SYSCALL_OPENDIR, time) - - PR_VALUE_SYSCALL_FDOPENDIR, -#define syscall_fdopendir_count __profile_stats_value(PR_VALUE_SYSCALL_FDOPENDIR, count) -#define syscall_fdopendir_time __profile_stats_value(PR_VALUE_SYSCALL_FDOPENDIR, time) - - PR_VALUE_SYSCALL_READDIR, -#define syscall_readdir_count __profile_stats_value(PR_VALUE_SYSCALL_READDIR, count) -#define syscall_readdir_time __profile_stats_value(PR_VALUE_SYSCALL_READDIR, time) - - PR_VALUE_SYSCALL_SEEKDIR, -#define syscall_seekdir_count __profile_stats_value(PR_VALUE_SYSCALL_SEEKDIR, count) -#define syscall_seekdir_time __profile_stats_value(PR_VALUE_SYSCALL_SEEKDIR, time) - - PR_VALUE_SYSCALL_TELLDIR, -#define syscall_telldir_count __profile_stats_value(PR_VALUE_SYSCALL_TELLDIR, count) -#define syscall_telldir_time __profile_stats_value(PR_VALUE_SYSCALL_TELLDIR, time) - - PR_VALUE_SYSCALL_REWINDDIR, -#define syscall_rewinddir_count __profile_stats_value(PR_VALUE_SYSCALL_REWINDDIR, count) -#define syscall_rewinddir_time __profile_stats_value(PR_VALUE_SYSCALL_REWINDDIR, time) - - PR_VALUE_SYSCALL_MKDIR, -#define syscall_mkdir_count __profile_stats_value(PR_VALUE_SYSCALL_MKDIR, count) -#define syscall_mkdir_time __profile_stats_value(PR_VALUE_SYSCALL_MKDIR, time) - - PR_VALUE_SYSCALL_RMDIR, -#define syscall_rmdir_count __profile_stats_value(PR_VALUE_SYSCALL_RMDIR, count) -#define syscall_rmdir_time __profile_stats_value(PR_VALUE_SYSCALL_RMDIR, time) - - PR_VALUE_SYSCALL_CLOSEDIR, -#define syscall_closedir_count __profile_stats_value(PR_VALUE_SYSCALL_CLOSEDIR, count) -#define syscall_closedir_time __profile_stats_value(PR_VALUE_SYSCALL_CLOSEDIR, time) - - PR_VALUE_SYSCALL_OPEN, -#define syscall_open_count __profile_stats_value(PR_VALUE_SYSCALL_OPEN, count) -#define syscall_open_time __profile_stats_value(PR_VALUE_SYSCALL_OPEN, time) - - PR_VALUE_SYSCALL_CREATEFILE, -#define syscall_createfile_count __profile_stats_value(PR_VALUE_SYSCALL_CREATEFILE, count) -#define syscall_createfile_time __profile_stats_value(PR_VALUE_SYSCALL_CREATEFILE, time) - - PR_VALUE_SYSCALL_CLOSE, -#define syscall_close_count __profile_stats_value(PR_VALUE_SYSCALL_CLOSE, count) -#define syscall_close_time __profile_stats_value(PR_VALUE_SYSCALL_CLOSE, time) - - PR_VALUE_SYSCALL_READ, -#define syscall_read_count __profile_stats_value(PR_VALUE_SYSCALL_READ, count) -#define syscall_read_time __profile_stats_value(PR_VALUE_SYSCALL_READ, time) - - PR_VALUE_SYSCALL_PREAD, -#define syscall_pread_count __profile_stats_value(PR_VALUE_SYSCALL_PREAD, count) -#define syscall_pread_time __profile_stats_value(PR_VALUE_SYSCALL_PREAD, time) - - PR_VALUE_SYSCALL_WRITE, -#define syscall_write_count __profile_stats_value(PR_VALUE_SYSCALL_WRITE, count) -#define syscall_write_time __profile_stats_value(PR_VALUE_SYSCALL_WRITE, time) - - PR_VALUE_SYSCALL_PWRITE, -#define syscall_pwrite_count __profile_stats_value(PR_VALUE_SYSCALL_PWRITE, count) -#define syscall_pwrite_time __profile_stats_value(PR_VALUE_SYSCALL_PWRITE, time) - - PR_VALUE_SYSCALL_LSEEK, -#define syscall_lseek_count __profile_stats_value(PR_VALUE_SYSCALL_LSEEK, count) -#define syscall_lseek_time __profile_stats_value(PR_VALUE_SYSCALL_LSEEK, time) - - PR_VALUE_SYSCALL_SENDFILE, -#define syscall_sendfile_count __profile_stats_value(PR_VALUE_SYSCALL_SENDFILE, count) -#define syscall_sendfile_time __profile_stats_value(PR_VALUE_SYSCALL_SENDFILE, time) - - PR_VALUE_SYSCALL_RECVFILE, -#define syscall_recvfile_count __profile_stats_value(PR_VALUE_SYSCALL_RECVFILE, count) -#define syscall_recvfile_time __profile_stats_value(PR_VALUE_SYSCALL_RECVFILE, time) - - PR_VALUE_SYSCALL_RENAME, -#define syscall_rename_count __profile_stats_value(PR_VALUE_SYSCALL_RENAME, count) -#define syscall_rename_time __profile_stats_value(PR_VALUE_SYSCALL_RENAME, time) - - PR_VALUE_SYSCALL_RENAME_AT, -#define syscall_rename_at_count __profile_stats_value(PR_VALUE_SYSCALL_RENAME_AT, count) -#define syscall_rename_at_time __profile_stats_value(PR_VALUE_SYSCALL_RENAME_AT, time) - - PR_VALUE_SYSCALL_FSYNC, -#define syscall_fsync_count __profile_stats_value(PR_VALUE_SYSCALL_FSYNC, count) -#define syscall_fsync_time __profile_stats_value(PR_VALUE_SYSCALL_FSYNC, time) - - PR_VALUE_SYSCALL_STAT, -#define syscall_stat_count __profile_stats_value(PR_VALUE_SYSCALL_STAT, count) -#define syscall_stat_time __profile_stats_value(PR_VALUE_SYSCALL_STAT, time) - - PR_VALUE_SYSCALL_FSTAT, -#define syscall_fstat_count __profile_stats_value(PR_VALUE_SYSCALL_FSTAT, count) -#define syscall_fstat_time __profile_stats_value(PR_VALUE_SYSCALL_FSTAT, time) - - PR_VALUE_SYSCALL_LSTAT, -#define syscall_lstat_count __profile_stats_value(PR_VALUE_SYSCALL_LSTAT, count) -#define syscall_lstat_time __profile_stats_value(PR_VALUE_SYSCALL_LSTAT, time) - - PR_VALUE_SYSCALL_GET_ALLOC_SIZE, -#define syscall_get_alloc_size_count __profile_stats_value(PR_VALUE_SYSCALL_GET_ALLOC_SIZE, count) -#define syscall_get_alloc_size_time __profile_stats_value(PR_VALUE_SYSCALL_GET_ALLOC_SIZE, time) - - PR_VALUE_SYSCALL_UNLINK, -#define syscall_unlink_count __profile_stats_value(PR_VALUE_SYSCALL_UNLINK, count) -#define syscall_unlink_time __profile_stats_value(PR_VALUE_SYSCALL_UNLINK, time) - - PR_VALUE_SYSCALL_CHMOD, -#define syscall_chmod_count __profile_stats_value(PR_VALUE_SYSCALL_CHMOD, count) -#define syscall_chmod_time __profile_stats_value(PR_VALUE_SYSCALL_CHMOD, time) - - PR_VALUE_SYSCALL_FCHMOD, -#define syscall_fchmod_count __profile_stats_value(PR_VALUE_SYSCALL_FCHMOD, count) -#define syscall_fchmod_time __profile_stats_value(PR_VALUE_SYSCALL_FCHMOD, time) - - PR_VALUE_SYSCALL_CHOWN, -#define syscall_chown_count __profile_stats_value(PR_VALUE_SYSCALL_CHOWN, count) -#define syscall_chown_time __profile_stats_value(PR_VALUE_SYSCALL_CHOWN, time) - - PR_VALUE_SYSCALL_FCHOWN, -#define syscall_fchown_count __profile_stats_value(PR_VALUE_SYSCALL_FCHOWN, count) -#define syscall_fchown_time __profile_stats_value(PR_VALUE_SYSCALL_FCHOWN, time) - - PR_VALUE_SYSCALL_LCHOWN, -#define syscall_lchown_count __profile_stats_value(PR_VALUE_SYSCALL_LCHOWN, count) -#define syscall_lchown_time __profile_stats_value(PR_VALUE_SYSCALL_LCHOWN, time) - - PR_VALUE_SYSCALL_CHDIR, -#define syscall_chdir_count __profile_stats_value(PR_VALUE_SYSCALL_CHDIR, count) -#define syscall_chdir_time __profile_stats_value(PR_VALUE_SYSCALL_CHDIR, time) - - PR_VALUE_SYSCALL_GETWD, -#define syscall_getwd_count __profile_stats_value(PR_VALUE_SYSCALL_GETWD, count) -#define syscall_getwd_time __profile_stats_value(PR_VALUE_SYSCALL_GETWD, time) - - PR_VALUE_SYSCALL_NTIMES, -#define syscall_ntimes_count __profile_stats_value(PR_VALUE_SYSCALL_NTIMES, count) -#define syscall_ntimes_time __profile_stats_value(PR_VALUE_SYSCALL_NTIMES, time) - - PR_VALUE_SYSCALL_FTRUNCATE, -#define syscall_ftruncate_count __profile_stats_value(PR_VALUE_SYSCALL_FTRUNCATE, count) -#define syscall_ftruncate_time __profile_stats_value(PR_VALUE_SYSCALL_FTRUNCATE, time) - - PR_VALUE_SYSCALL_FALLOCATE, -#define syscall_fallocate_count __profile_stats_value(PR_VALUE_SYSCALL_FALLOCATE, count) -#define syscall_fallocate_time __profile_stats_value(PR_VALUE_SYSCALL_FALLOCATE, time) - - PR_VALUE_SYSCALL_FCNTL_LOCK, -#define syscall_fcntl_lock_count __profile_stats_value(PR_VALUE_SYSCALL_FCNTL_LOCK, count) -#define syscall_fcntl_lock_time __profile_stats_value(PR_VALUE_SYSCALL_FCNTL_LOCK, time) - - PR_VALUE_SYSCALL_KERNEL_FLOCK, -#define syscall_kernel_flock_count __profile_stats_value(PR_VALUE_SYSCALL_KERNEL_FLOCK, count) -#define syscall_kernel_flock_time __profile_stats_value(PR_VALUE_SYSCALL_KERNEL_FLOCK, time) - - PR_VALUE_SYSCALL_LINUX_SETLEASE, -#define syscall_linux_setlease_count __profile_stats_value(PR_VALUE_SYSCALL_LINUX_SETLEASE, count) -#define syscall_linux_setlease_time __profile_stats_value(PR_VALUE_SYSCALL_LINUX_SETLEASE, time) - - PR_VALUE_SYSCALL_FCNTL_GETLOCK, -#define syscall_fcntl_getlock_count __profile_stats_value(PR_VALUE_SYSCALL_FCNTL_GETLOCK, count) -#define syscall_fcntl_getlock_time __profile_stats_value(PR_VALUE_SYSCALL_FCNTL_GETLOCK, time) - - PR_VALUE_SYSCALL_READLINK, -#define syscall_readlink_count __profile_stats_value(PR_VALUE_SYSCALL_READLINK, count) -#define syscall_readlink_time __profile_stats_value(PR_VALUE_SYSCALL_READLINK, time) - - PR_VALUE_SYSCALL_SYMLINK, -#define syscall_symlink_count __profile_stats_value(PR_VALUE_SYSCALL_SYMLINK, count) -#define syscall_symlink_time __profile_stats_value(PR_VALUE_SYSCALL_SYMLINK, time) - - PR_VALUE_SYSCALL_LINK, -#define syscall_link_count __profile_stats_value(PR_VALUE_SYSCALL_LINK, count) -#define syscall_link_time __profile_stats_value(PR_VALUE_SYSCALL_LINK, time) - - PR_VALUE_SYSCALL_MKNOD, -#define syscall_mknod_count __profile_stats_value(PR_VALUE_SYSCALL_MKNOD, count) -#define syscall_mknod_time __profile_stats_value(PR_VALUE_SYSCALL_MKNOD, time) - - PR_VALUE_SYSCALL_REALPATH, -#define syscall_realpath_count __profile_stats_value(PR_VALUE_SYSCALL_REALPATH, count) -#define syscall_realpath_time __profile_stats_value(PR_VALUE_SYSCALL_REALPATH, time) - - PR_VALUE_SYSCALL_GET_QUOTA, -#define syscall_get_quota_count __profile_stats_value(PR_VALUE_SYSCALL_GET_QUOTA, count) -#define syscall_get_quota_time __profile_stats_value(PR_VALUE_SYSCALL_GET_QUOTA, time) - - PR_VALUE_SYSCALL_SET_QUOTA, -#define syscall_set_quota_count __profile_stats_value(PR_VALUE_SYSCALL_SET_QUOTA, count) -#define syscall_set_quota_time __profile_stats_value(PR_VALUE_SYSCALL_SET_QUOTA, time) - - PR_VALUE_SYSCALL_GET_SD, -#define syscall_get_sd_count __profile_stats_value(PR_VALUE_SYSCALL_GET_SD, count) -#define syscall_get_sd_time __profile_stats_value(PR_VALUE_SYSCALL_GET_SD, time) - - PR_VALUE_SYSCALL_SET_SD, -#define syscall_set_sd_count __profile_stats_value(PR_VALUE_SYSCALL_SET_SD, count) -#define syscall_set_sd_time __profile_stats_value(PR_VALUE_SYSCALL_SET_SD, time) - - PR_VALUE_SYSCALL_BRL_LOCK, -#define syscall_brl_lock_count __profile_stats_value(PR_VALUE_SYSCALL_BRL_LOCK, count) -#define syscall_brl_lock_time __profile_stats_value(PR_VALUE_SYSCALL_BRL_LOCK, time) - - PR_VALUE_SYSCALL_BRL_UNLOCK, -#define syscall_brl_unlock_count __profile_stats_value(PR_VALUE_SYSCALL_BRL_UNLOCK, count) -#define syscall_brl_unlock_time __profile_stats_value(PR_VALUE_SYSCALL_BRL_UNLOCK, time) - - PR_VALUE_SYSCALL_BRL_CANCEL, -#define syscall_brl_cancel_count __profile_stats_value(PR_VALUE_SYSCALL_BRL_CANCEL, count) -#define syscall_brl_cancel_time __profile_stats_value(PR_VALUE_SYSCALL_BRL_CANCEL, time) - - PR_VALUE_SYSCALL_STRICT_LOCK, -#define syscall_strict_lock_count __profile_stats_value(PR_VALUE_SYSCALL_STRICT_LOCK, count) -#define syscall_strict_lock_time __profile_stats_value(PR_VALUE_SYSCALL_STRICT_LOCK, time) - - PR_VALUE_SYSCALL_STRICT_UNLOCK, -#define syscall_strict_unlock_count __profile_stats_value(PR_VALUE_SYSCALL_STRICT_UNLOCK, count) -#define syscall_strict_unlock_time __profile_stats_value(PR_VALUE_SYSCALL_STRICT_UNLOCK, time) - -/* counters for individual SMB types */ - PR_VALUE_SMBMKDIR, -#define SMBmkdir_count __profile_stats_value(PR_VALUE_SMBMKDIR, count) -#define SMBmkdir_time __profile_stats_value(PR_VALUE_SMBMKDIR, time) - - PR_VALUE_SMBRMDIR, -#define SMBrmdir_count __profile_stats_value(PR_VALUE_SMBRMDIR, count) -#define SMBrmdir_time __profile_stats_value(PR_VALUE_SMBRMDIR, time) - - PR_VALUE_SMBOPEN, -#define SMBopen_count __profile_stats_value(PR_VALUE_SMBOPEN, count) -#define SMBopen_time __profile_stats_value(PR_VALUE_SMBOPEN, time) - - PR_VALUE_SMBCREATE, -#define SMBcreate_count __profile_stats_value(PR_VALUE_SMBCREATE, count) -#define SMBcreate_time __profile_stats_value(PR_VALUE_SMBCREATE, time) - - PR_VALUE_SMBCLOSE, -#define SMBclose_count __profile_stats_value(PR_VALUE_SMBCLOSE, count) -#define SMBclose_time __profile_stats_value(PR_VALUE_SMBCLOSE, time) - - PR_VALUE_SMBFLUSH, -#define SMBflush_count __profile_stats_value(PR_VALUE_SMBFLUSH, count) -#define SMBflush_time __profile_stats_value(PR_VALUE_SMBFLUSH, time) - - PR_VALUE_SMBUNLINK, -#define SMBunlink_count __profile_stats_value(PR_VALUE_SMBUNLINK, count) -#define SMBunlink_time __profile_stats_value(PR_VALUE_SMBUNLINK, time) - - PR_VALUE_SMBMV, -#define SMBmv_count __profile_stats_value(PR_VALUE_SMBMV, count) -#define SMBmv_time __profile_stats_value(PR_VALUE_SMBMV, time) - - PR_VALUE_SMBGETATR, -#define SMBgetatr_count __profile_stats_value(PR_VALUE_SMBGETATR, count) -#define SMBgetatr_time __profile_stats_value(PR_VALUE_SMBGETATR, time) - - PR_VALUE_SMBSETATR, -#define SMBsetatr_count __profile_stats_value(PR_VALUE_SMBSETATR, count) -#define SMBsetatr_time __profile_stats_value(PR_VALUE_SMBSETATR, time) - - PR_VALUE_SMBREAD, -#define SMBread_count __profile_stats_value(PR_VALUE_SMBREAD, count) -#define SMBread_time __profile_stats_value(PR_VALUE_SMBREAD, time) - - PR_VALUE_SMBWRITE, -#define SMBwrite_count __profile_stats_value(PR_VALUE_SMBWRITE, count) -#define SMBwrite_time __profile_stats_value(PR_VALUE_SMBWRITE, time) - - PR_VALUE_SMBLOCK, -#define SMBlock_count __profile_stats_value(PR_VALUE_SMBLOCK, count) -#define SMBlock_time __profile_stats_value(PR_VALUE_SMBLOCK, time) - - PR_VALUE_SMBUNLOCK, -#define SMBunlock_count __profile_stats_value(PR_VALUE_SMBUNLOCK, count) -#define SMBunlock_time __profile_stats_value(PR_VALUE_SMBUNLOCK, time) - - PR_VALUE_SMBCTEMP, -#define SMBctemp_count __profile_stats_value(PR_VALUE_SMBCTEMP, count) -#define SMBctemp_time __profile_stats_value(PR_VALUE_SMBCTEMP, time) - - /* SMBmknew stats are currently combined with SMBcreate */ - PR_VALUE_SMBMKNEW, -#define SMBmknew_count __profile_stats_value(PR_VALUE_SMBMKNEW, count) -#define SMBmknew_time __profile_stats_value(PR_VALUE_SMBMKNEW, time) - - PR_VALUE_SMBCHECKPATH, -#define SMBcheckpath_count __profile_stats_value(PR_VALUE_SMBCHECKPATH, count) -#define SMBcheckpath_time __profile_stats_value(PR_VALUE_SMBCHECKPATH, time) - - PR_VALUE_SMBEXIT, -#define SMBexit_count __profile_stats_value(PR_VALUE_SMBEXIT, count) -#define SMBexit_time __profile_stats_value(PR_VALUE_SMBEXIT, time) - - PR_VALUE_SMBLSEEK, -#define SMBlseek_count __profile_stats_value(PR_VALUE_SMBLSEEK, count) -#define SMBlseek_time __profile_stats_value(PR_VALUE_SMBLSEEK, time) - - PR_VALUE_SMBLOCKREAD, -#define SMBlockread_count __profile_stats_value(PR_VALUE_SMBLOCKREAD, count) -#define SMBlockread_time __profile_stats_value(PR_VALUE_SMBLOCKREAD, time) - - PR_VALUE_SMBWRITEUNLOCK, -#define SMBwriteunlock_count __profile_stats_value(PR_VALUE_SMBWRITEUNLOCK, count) -#define SMBwriteunlock_time __profile_stats_value(PR_VALUE_SMBWRITEUNLOCK, time) - - PR_VALUE_SMBREADBRAW, -#define SMBreadbraw_count __profile_stats_value(PR_VALUE_SMBREADBRAW, count) -#define SMBreadbraw_time __profile_stats_value(PR_VALUE_SMBREADBRAW, time) - - PR_VALUE_SMBREADBMPX, -#define SMBreadBmpx_count __profile_stats_value(PR_VALUE_SMBREADBMPX, count) -#define SMBreadBmpx_time __profile_stats_value(PR_VALUE_SMBREADBMPX, time) - - PR_VALUE_SMBREADBS, -#define SMBreadBs_count __profile_stats_value(PR_VALUE_SMBREADBS, count) -#define SMBreadBs_time __profile_stats_value(PR_VALUE_SMBREADBS, time) - - PR_VALUE_SMBWRITEBRAW, -#define SMBwritebraw_count __profile_stats_value(PR_VALUE_SMBWRITEBRAW, count) -#define SMBwritebraw_time __profile_stats_value(PR_VALUE_SMBWRITEBRAW, time) - - PR_VALUE_SMBWRITEBMPX, -#define SMBwriteBmpx_count __profile_stats_value(PR_VALUE_SMBWRITEBMPX, count) -#define SMBwriteBmpx_time __profile_stats_value(PR_VALUE_SMBWRITEBMPX, time) - - PR_VALUE_SMBWRITEBS, -#define SMBwriteBs_count __profile_stats_value(PR_VALUE_SMBWRITEBS, count) -#define SMBwriteBs_time __profile_stats_value(PR_VALUE_SMBWRITEBS, time) - - PR_VALUE_SMBWRITEC, -#define SMBwritec_count __profile_stats_value(PR_VALUE_SMBWRITEC, count) -#define SMBwritec_time __profile_stats_value(PR_VALUE_SMBWRITEC, time) - - PR_VALUE_SMBSETATTRE, -#define SMBsetattrE_count __profile_stats_value(PR_VALUE_SMBSETATTRE, count) -#define SMBsetattrE_time __profile_stats_value(PR_VALUE_SMBSETATTRE, time) - - PR_VALUE_SMBGETATTRE, -#define SMBgetattrE_count __profile_stats_value(PR_VALUE_SMBGETATTRE, count) -#define SMBgetattrE_time __profile_stats_value(PR_VALUE_SMBGETATTRE, time) - - PR_VALUE_SMBLOCKINGX, -#define SMBlockingX_count __profile_stats_value(PR_VALUE_SMBLOCKINGX, count) -#define SMBlockingX_time __profile_stats_value(PR_VALUE_SMBLOCKINGX, time) - - PR_VALUE_SMBTRANS, -#define SMBtrans_count __profile_stats_value(PR_VALUE_SMBTRANS, count) -#define SMBtrans_time __profile_stats_value(PR_VALUE_SMBTRANS, time) - - PR_VALUE_SMBTRANSS, -#define SMBtranss_count __profile_stats_value(PR_VALUE_SMBTRANSS, count) -#define SMBtranss_time __profile_stats_value(PR_VALUE_SMBTRANSS, time) - - PR_VALUE_SMBIOCTL, -#define SMBioctl_count __profile_stats_value(PR_VALUE_SMBIOCTL, count) -#define SMBioctl_time __profile_stats_value(PR_VALUE_SMBIOCTL, time) - - PR_VALUE_SMBIOCTLS, -#define SMBioctls_count __profile_stats_value(PR_VALUE_SMBIOCTLS, count) -#define SMBioctls_time __profile_stats_value(PR_VALUE_SMBIOCTLS, time) - - PR_VALUE_SMBCOPY, -#define SMBcopy_count __profile_stats_value(PR_VALUE_SMBCOPY, count) -#define SMBcopy_time __profile_stats_value(PR_VALUE_SMBCOPY, time) - - PR_VALUE_SMBMOVE, -#define SMBmove_count __profile_stats_value(PR_VALUE_SMBMOVE, count) -#define SMBmove_time __profile_stats_value(PR_VALUE_SMBMOVE, time) - - PR_VALUE_SMBECHO, -#define SMBecho_count __profile_stats_value(PR_VALUE_SMBECHO, count) -#define SMBecho_time __profile_stats_value(PR_VALUE_SMBECHO, time) - - PR_VALUE_SMBWRITECLOSE, -#define SMBwriteclose_count __profile_stats_value(PR_VALUE_SMBWRITECLOSE, count) -#define SMBwriteclose_time __profile_stats_value(PR_VALUE_SMBWRITECLOSE, time) - - PR_VALUE_SMBOPENX, -#define SMBopenX_count __profile_stats_value(PR_VALUE_SMBOPENX, count) -#define SMBopenX_time __profile_stats_value(PR_VALUE_SMBOPENX, time) - - PR_VALUE_SMBREADX, -#define SMBreadX_count __profile_stats_value(PR_VALUE_SMBREADX, count) -#define SMBreadX_time __profile_stats_value(PR_VALUE_SMBREADX, time) - - PR_VALUE_SMBWRITEX, -#define SMBwriteX_count __profile_stats_value(PR_VALUE_SMBWRITEX, count) -#define SMBwriteX_time __profile_stats_value(PR_VALUE_SMBWRITEX, time) - - PR_VALUE_SMBTRANS2, -#define SMBtrans2_count __profile_stats_value(PR_VALUE_SMBTRANS2, count) -#define SMBtrans2_time __profile_stats_value(PR_VALUE_SMBTRANS2, time) - - PR_VALUE_SMBTRANSS2, -#define SMBtranss2_count __profile_stats_value(PR_VALUE_SMBTRANSS2, count) -#define SMBtranss2_time __profile_stats_value(PR_VALUE_SMBTRANSS2, time) - - PR_VALUE_SMBFINDCLOSE, -#define SMBfindclose_count __profile_stats_value(PR_VALUE_SMBFINDCLOSE, count) -#define SMBfindclose_time __profile_stats_value(PR_VALUE_SMBFINDCLOSE, time) - - PR_VALUE_SMBFINDNCLOSE, -#define SMBfindnclose_count __profile_stats_value(PR_VALUE_SMBFINDNCLOSE, count) -#define SMBfindnclose_time __profile_stats_value(PR_VALUE_SMBFINDNCLOSE, time) - - PR_VALUE_SMBTCON, -#define SMBtcon_count __profile_stats_value(PR_VALUE_SMBTCON, count) -#define SMBtcon_time __profile_stats_value(PR_VALUE_SMBTCON, time) - - PR_VALUE_SMBTDIS, -#define SMBtdis_count __profile_stats_value(PR_VALUE_SMBTDIS, count) -#define SMBtdis_time __profile_stats_value(PR_VALUE_SMBTDIS, time) - - PR_VALUE_SMBNEGPROT, -#define SMBnegprot_count __profile_stats_value(PR_VALUE_SMBNEGPROT, count) -#define SMBnegprot_time __profile_stats_value(PR_VALUE_SMBNEGPROT, time) - - PR_VALUE_SMBSESSSETUPX, -#define SMBsesssetupX_count __profile_stats_value(PR_VALUE_SMBSESSSETUPX, count) -#define SMBsesssetupX_time __profile_stats_value(PR_VALUE_SMBSESSSETUPX, time) - - PR_VALUE_SMBULOGOFFX, -#define SMBulogoffX_count __profile_stats_value(PR_VALUE_SMBULOGOFFX, count) -#define SMBulogoffX_time __profile_stats_value(PR_VALUE_SMBULOGOFFX, time) - - PR_VALUE_SMBTCONX, -#define SMBtconX_count __profile_stats_value(PR_VALUE_SMBTCONX, count) -#define SMBtconX_time __profile_stats_value(PR_VALUE_SMBTCONX, time) - - PR_VALUE_SMBDSKATTR, -#define SMBdskattr_count __profile_stats_value(PR_VALUE_SMBDSKATTR, count) -#define SMBdskattr_time __profile_stats_value(PR_VALUE_SMBDSKATTR, time) - - PR_VALUE_SMBSEARCH, -#define SMBsearch_count __profile_stats_value(PR_VALUE_SMBSEARCH, count) -#define SMBsearch_time __profile_stats_value(PR_VALUE_SMBSEARCH, time) - - /* SBMffirst stats combined with SMBsearch */ - PR_VALUE_SMBFFIRST, -#define SMBffirst_count __profile_stats_value(PR_VALUE_SMBFFIRST, count) -#define SMBffirst_time __profile_stats_value(PR_VALUE_SMBFFIRST, time) - - /* SBMfunique stats combined with SMBsearch */ - PR_VALUE_SMBFUNIQUE, -#define SMBfunique_count __profile_stats_value(PR_VALUE_SMBFUNIQUE, count) -#define SMBfunique_time __profile_stats_value(PR_VALUE_SMBFUNIQUE, time) - - PR_VALUE_SMBFCLOSE, -#define SMBfclose_count __profile_stats_value(PR_VALUE_SMBFCLOSE, count) -#define SMBfclose_time __profile_stats_value(PR_VALUE_SMBFCLOSE, time) - - PR_VALUE_SMBNTTRANS, -#define SMBnttrans_count __profile_stats_value(PR_VALUE_SMBNTTRANS, count) -#define SMBnttrans_time __profile_stats_value(PR_VALUE_SMBNTTRANS, time) - - PR_VALUE_SMBNTTRANSS, -#define SMBnttranss_count __profile_stats_value(PR_VALUE_SMBNTTRANSS, count) -#define SMBnttranss_time __profile_stats_value(PR_VALUE_SMBNTTRANSS, time) - - PR_VALUE_SMBNTCREATEX, -#define SMBntcreateX_count __profile_stats_value(PR_VALUE_SMBNTCREATEX, count) -#define SMBntcreateX_time __profile_stats_value(PR_VALUE_SMBNTCREATEX, time) - - PR_VALUE_SMBNTCANCEL, -#define SMBntcancel_count __profile_stats_value(PR_VALUE_SMBNTCANCEL, count) -#define SMBntcancel_time __profile_stats_value(PR_VALUE_SMBNTCANCEL, time) - - PR_VALUE_SMBNTRENAME, -#define SMBntrename_count __profile_stats_value(PR_VALUE_SMBNTRENAME, count) -#define SMBntrename_time __profile_stats_value(PR_VALUE_SMBNTRENAME, time) - - PR_VALUE_SMBSPLOPEN, -#define SMBsplopen_count __profile_stats_value(PR_VALUE_SMBSPLOPEN, count) -#define SMBsplopen_time __profile_stats_value(PR_VALUE_SMBSPLOPEN, time) - - PR_VALUE_SMBSPLWR, -#define SMBsplwr_count __profile_stats_value(PR_VALUE_SMBSPLWR, count) -#define SMBsplwr_time __profile_stats_value(PR_VALUE_SMBSPLWR, time) - - PR_VALUE_SMBSPLCLOSE, -#define SMBsplclose_count __profile_stats_value(PR_VALUE_SMBSPLCLOSE, count) -#define SMBsplclose_time __profile_stats_value(PR_VALUE_SMBSPLCLOSE, time) - - PR_VALUE_SMBSPLRETQ, -#define SMBsplretq_count __profile_stats_value(PR_VALUE_SMBSPLRETQ, count) -#define SMBsplretq_time __profile_stats_value(PR_VALUE_SMBSPLRETQ, time) - - PR_VALUE_SMBSENDS, -#define SMBsends_count __profile_stats_value(PR_VALUE_SMBSENDS, count) -#define SMBsends_time __profile_stats_value(PR_VALUE_SMBSENDS, time) - - PR_VALUE_SMBSENDB, -#define SMBsendb_count __profile_stats_value(PR_VALUE_SMBSENDB, count) -#define SMBsendb_time __profile_stats_value(PR_VALUE_SMBSENDB, time) - - PR_VALUE_SMBFWDNAME, -#define SMBfwdname_count __profile_stats_value(PR_VALUE_SMBFWDNAME, count) -#define SMBfwdname_time __profile_stats_value(PR_VALUE_SMBFWDNAME, time) - - PR_VALUE_SMBCANCELF, -#define SMBcancelf_count __profile_stats_value(PR_VALUE_SMBCANCELF, count) -#define SMBcancelf_time __profile_stats_value(PR_VALUE_SMBCANCELF, time) - - PR_VALUE_SMBGETMAC, -#define SMBgetmac_count __profile_stats_value(PR_VALUE_SMBGETMAC, count) -#define SMBgetmac_time __profile_stats_value(PR_VALUE_SMBGETMAC, time) - - PR_VALUE_SMBSENDSTRT, -#define SMBsendstrt_count __profile_stats_value(PR_VALUE_SMBSENDSTRT, count) -#define SMBsendstrt_time __profile_stats_value(PR_VALUE_SMBSENDSTRT, time) - - PR_VALUE_SMBSENDEND, -#define SMBsendend_count __profile_stats_value(PR_VALUE_SMBSENDEND, count) -#define SMBsendend_time __profile_stats_value(PR_VALUE_SMBSENDEND, time) - - PR_VALUE_SMBSENDTXT, -#define SMBsendtxt_count __profile_stats_value(PR_VALUE_SMBSENDTXT, count) -#define SMBsendtxt_time __profile_stats_value(PR_VALUE_SMBSENDTXT, time) - - PR_VALUE_SMBINVALID, -#define SMBinvalid_count __profile_stats_value(PR_VALUE_SMBINVALID, count) -#define SMBinvalid_time __profile_stats_value(PR_VALUE_SMBINVALID, time) - -/* These are the TRANS2 sub commands */ - PR_VALUE_TRANS2_OPEN, -#define Trans2_open_count __profile_stats_value(PR_VALUE_TRANS2_OPEN, count) -#define Trans2_open_time __profile_stats_value(PR_VALUE_TRANS2_OPEN, time) - - PR_VALUE_TRANS2_FINDFIRST, -#define Trans2_findfirst_count __profile_stats_value(PR_VALUE_TRANS2_FINDFIRST, count) -#define Trans2_findfirst_time __profile_stats_value(PR_VALUE_TRANS2_FINDFIRST, time) - - PR_VALUE_TRANS2_FINDNEXT, -#define Trans2_findnext_count __profile_stats_value(PR_VALUE_TRANS2_FINDNEXT, count) -#define Trans2_findnext_time __profile_stats_value(PR_VALUE_TRANS2_FINDNEXT, time) - - PR_VALUE_TRANS2_QFSINFO, -#define Trans2_qfsinfo_count __profile_stats_value(PR_VALUE_TRANS2_QFSINFO, count) -#define Trans2_qfsinfo_time __profile_stats_value(PR_VALUE_TRANS2_QFSINFO, time) - - PR_VALUE_TRANS2_SETFSINFO, -#define Trans2_setfsinfo_count __profile_stats_value(PR_VALUE_TRANS2_SETFSINFO, count) -#define Trans2_setfsinfo_time __profile_stats_value(PR_VALUE_TRANS2_SETFSINFO, time) - - PR_VALUE_TRANS2_QPATHINFO, -#define Trans2_qpathinfo_count __profile_stats_value(PR_VALUE_TRANS2_QPATHINFO, count) -#define Trans2_qpathinfo_time __profile_stats_value(PR_VALUE_TRANS2_QPATHINFO, time) - - PR_VALUE_TRANS2_SETPATHINFO, -#define Trans2_setpathinfo_count __profile_stats_value(PR_VALUE_TRANS2_SETPATHINFO, count) -#define Trans2_setpathinfo_time __profile_stats_value(PR_VALUE_TRANS2_SETPATHINFO, time) - - PR_VALUE_TRANS2_QFILEINFO, -#define Trans2_qfileinfo_count __profile_stats_value(PR_VALUE_TRANS2_QFILEINFO, count) -#define Trans2_qfileinfo_time __profile_stats_value(PR_VALUE_TRANS2_QFILEINFO, time) - - PR_VALUE_TRANS2_SETFILEINFO, -#define Trans2_setfileinfo_count __profile_stats_value(PR_VALUE_TRANS2_SETFILEINFO, count) -#define Trans2_setfileinfo_time __profile_stats_value(PR_VALUE_TRANS2_SETFILEINFO, time) - - PR_VALUE_TRANS2_FSCTL, -#define Trans2_fsctl_count __profile_stats_value(PR_VALUE_TRANS2_FSCTL, count) -#define Trans2_fsctl_time __profile_stats_value(PR_VALUE_TRANS2_FSCTL, time) - - PR_VALUE_TRANS2_IOCTL, -#define Trans2_ioctl_count __profile_stats_value(PR_VALUE_TRANS2_IOCTL, count) -#define Trans2_ioctl_time __profile_stats_value(PR_VALUE_TRANS2_IOCTL, time) - - PR_VALUE_TRANS2_FINDNOTIFYFIRST, -#define Trans2_findnotifyfirst_count __profile_stats_value(PR_VALUE_TRANS2_FINDNOTIFYFIRST, count) -#define Trans2_findnotifyfirst_time __profile_stats_value(PR_VALUE_TRANS2_FINDNOTIFYFIRST, time) - - PR_VALUE_TRANS2_FINDNOTIFYNEXT, -#define Trans2_findnotifynext_count __profile_stats_value(PR_VALUE_TRANS2_FINDNOTIFYNEXT, count) -#define Trans2_findnotifynext_time __profile_stats_value(PR_VALUE_TRANS2_FINDNOTIFYNEXT, time) - - PR_VALUE_TRANS2_MKDIR, -#define Trans2_mkdir_count __profile_stats_value(PR_VALUE_TRANS2_MKDIR, count) -#define Trans2_mkdir_time __profile_stats_value(PR_VALUE_TRANS2_MKDIR, time) - - PR_VALUE_TRANS2_SESSION_SETUP, -#define Trans2_session_setup_count __profile_stats_value(PR_VALUE_TRANS2_SESSION_SETUP, count) -#define Trans2_session_setup_time __profile_stats_value(PR_VALUE_TRANS2_SESSION_SETUP, time) - - PR_VALUE_TRANS2_GET_DFS_REFERRAL, -#define Trans2_get_dfs_referral_count __profile_stats_value(PR_VALUE_TRANS2_GET_DFS_REFERRAL, count) -#define Trans2_get_dfs_referral_time __profile_stats_value(PR_VALUE_TRANS2_GET_DFS_REFERRAL, time) - - PR_VALUE_TRANS2_REPORT_DFS_INCONSISTANCY, -#define Trans2_report_dfs_inconsistancy_count __profile_stats_value(PR_VALUE_TRANS2_REPORT_DFS_INCONSISTANCY, count) -#define Trans2_report_dfs_inconsistancy_time __profile_stats_value(PR_VALUE_TRANS2_REPORT_DFS_INCONSISTANCY, time) - -/* These are the NT transact sub commands. */ - PR_VALUE_NT_TRANSACT_CREATE, -#define NT_transact_create_count __profile_stats_value(PR_VALUE_NT_TRANSACT_CREATE, count) -#define NT_transact_create_time __profile_stats_value(PR_VALUE_NT_TRANSACT_CREATE, time) - - PR_VALUE_NT_TRANSACT_IOCTL, -#define NT_transact_ioctl_count __profile_stats_value(PR_VALUE_NT_TRANSACT_IOCTL, count) -#define NT_transact_ioctl_time __profile_stats_value(PR_VALUE_NT_TRANSACT_IOCTL, time) - - PR_VALUE_NT_TRANSACT_SET_SECURITY_DESC, -#define NT_transact_set_security_desc_count __profile_stats_value(PR_VALUE_NT_TRANSACT_SET_SECURITY_DESC, count) -#define NT_transact_set_security_desc_time __profile_stats_value(PR_VALUE_NT_TRANSACT_SET_SECURITY_DESC, time) - - PR_VALUE_NT_TRANSACT_NOTIFY_CHANGE, -#define NT_transact_notify_change_count __profile_stats_value(PR_VALUE_NT_TRANSACT_NOTIFY_CHANGE, count) -#define NT_transact_notify_change_time __profile_stats_value(PR_VALUE_NT_TRANSACT_NOTIFY_CHANGE, time) - - PR_VALUE_NT_TRANSACT_RENAME, -#define NT_transact_rename_count __profile_stats_value(PR_VALUE_NT_TRANSACT_RENAME, count) -#define NT_transact_rename_time __profile_stats_value(PR_VALUE_NT_TRANSACT_RENAME, time) - - PR_VALUE_NT_TRANSACT_QUERY_SECURITY_DESC, -#define NT_transact_query_security_desc_count __profile_stats_value(PR_VALUE_NT_TRANSACT_QUERY_SECURITY_DESC, count) -#define NT_transact_query_security_desc_time __profile_stats_value(PR_VALUE_NT_TRANSACT_QUERY_SECURITY_DESC, time) - - PR_VALUE_NT_TRANSACT_GET_USER_QUOTA, -#define NT_transact_get_user_quota_count __profile_stats_value(PR_VALUE_NT_TRANSACT_GET_USER_QUOTA, count) -#define NT_transact_get_user_quota_time __profile_stats_value(PR_VALUE_NT_TRANSACT_GET_USER_QUOTA, time) - - PR_VALUE_NT_TRANSACT_SET_USER_QUOTA, -#define NT_transact_set_user_quota_count __profile_stats_value(PR_VALUE_NT_TRANSACT_SET_USER_QUOTA, count) -#define NT_transact_set_user_quota_time __profile_stats_value(PR_VALUE_NT_TRANSACT_SET_USER_QUOTA, time) - -/* These are ACL manipulation calls */ - PR_VALUE_GET_NT_ACL, -#define get_nt_acl_count __profile_stats_value(PR_VALUE_GET_NT_ACL, count) -#define get_nt_acl_time __profile_stats_value(PR_VALUE_GET_NT_ACL, time) - - PR_VALUE_FGET_NT_ACL, -#define fget_nt_acl_count __profile_stats_value(PR_VALUE_FGET_NT_ACL, count) -#define fget_nt_acl_time __profile_stats_value(PR_VALUE_FGET_NT_ACL, time) - - PR_VALUE_FSET_NT_ACL, -#define fset_nt_acl_count __profile_stats_value(PR_VALUE_FSET_NT_ACL, count) -#define fset_nt_acl_time __profile_stats_value(PR_VALUE_FSET_NT_ACL, time) - - PR_VALUE_CHMOD_ACL, -#define chmod_acl_count __profile_stats_value(PR_VALUE_CHMOD_ACL, count) -#define chmod_acl_time __profile_stats_value(PR_VALUE_CHMOD_ACL, time) - - PR_VALUE_FCHMOD_ACL, -#define fchmod_acl_count __profile_stats_value(PR_VALUE_FCHMOD_ACL, count) -#define fchmod_acl_time __profile_stats_value(PR_VALUE_FCHMOD_ACL, 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) +struct smbprofile_stats_count { + uint64_t count; /* number of events */ +}; - 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) +struct smbprofile_stats_time { + uint64_t time; /* microseconds */ +}; - 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) +struct smbprofile_stats_time_async { + uint64_t start; + struct smbprofile_stats_time *stats; +}; - 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) +struct smbprofile_stats_basic { + uint64_t count; /* number of events */ + uint64_t time; /* microseconds */ +}; - 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) +struct smbprofile_stats_basic_async { + uint64_t start; + struct smbprofile_stats_basic *stats; +}; - 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) +struct smbprofile_stats_bytes { + uint64_t count; /* number of events */ + uint64_t time; /* microseconds */ + uint64_t idle; /* idle time compared to 'time' microseconds */ + uint64_t bytes; /* bytes */ +}; - 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) +struct smbprofile_stats_bytes_async { + uint64_t start; + uint64_t idle_start; + uint64_t idle_time; + struct smbprofile_stats_bytes *stats; +}; - /* This must remain the last value. */ - PR_VALUE_MAX -}; /* enum profile_stats_values */ +struct smbprofile_stats_iobytes { + uint64_t count; /* number of events */ + uint64_t time; /* microseconds */ + uint64_t idle; /* idle time compared to 'time' microseconds */ + uint64_t inbytes; /* bytes read */ + uint64_t outbytes; /* bytes written */ +}; -const char * profile_value_name(enum profile_stats_values val); +struct smbprofile_stats_iobytes_async { + uint64_t start; + uint64_t idle_start; + uint64_t idle_time; + struct smbprofile_stats_iobytes *stats; +}; struct profile_stats { -/* general counters */ - unsigned smb_count; /* how many SMB packets we have processed */ - unsigned uid_changes; /* how many times we change our effective uid */ - -/* system call and protocol operation counters and cumulative times */ - unsigned count[PR_VALUE_MAX]; - unsigned time[PR_VALUE_MAX]; - -/* cumulative byte counts */ - unsigned syscall_pread_bytes; - unsigned syscall_pwrite_bytes; - unsigned syscall_read_bytes; - unsigned syscall_write_bytes; - unsigned syscall_sendfile_bytes; - unsigned syscall_recvfile_bytes; - -/* stat cache counters */ - unsigned statcache_lookups; - unsigned statcache_misses; - unsigned statcache_hits; - -/* write cache counters */ - unsigned writecache_allocations; - unsigned writecache_deallocations; - unsigned writecache_cached_reads; - unsigned writecache_total_writes; - unsigned writecache_init_writes; - unsigned writecache_abutted_writes; - unsigned writecache_non_oplock_writes; - unsigned writecache_direct_writes; - unsigned writecache_cached_writes; - unsigned writecache_perfect_writes; - unsigned writecache_flush_reason_seek; - unsigned writecache_flush_reason_read; - unsigned writecache_flush_reason_readraw; - unsigned writecache_flush_reason_write; - unsigned writecache_flush_reason_oplock; - unsigned writecache_flush_reason_close; - unsigned writecache_flush_reason_sync; - unsigned writecache_flush_reason_sizechange; +#define SMBPROFILE_STATS_START +#define SMBPROFILE_STATS_SECTION_START(name) +#define SMBPROFILE_STATS_COUNT(name) \ + struct smbprofile_stats_count name##_stats; +#define SMBPROFILE_STATS_TIME(name) \ + struct smbprofile_stats_time name##_stats; +#define SMBPROFILE_STATS_BASIC(name) \ + struct smbprofile_stats_basic name##_stats; +#define SMBPROFILE_STATS_BYTES(name) \ + struct smbprofile_stats_bytes name##_stats; +#define SMBPROFILE_STATS_IOBYTES(name) \ + struct smbprofile_stats_iobytes name##_stats; +#define SMBPROFILE_STATS_SECTION_END +#define SMBPROFILE_STATS_END + SMBPROFILE_STATS_ALL_SECTIONS +#undef SMBPROFILE_STATS_START +#undef SMBPROFILE_STATS_SECTION_START +#undef SMBPROFILE_STATS_COUNT +#undef SMBPROFILE_STATS_TIME +#undef SMBPROFILE_STATS_BASIC +#undef SMBPROFILE_STATS_BYTES +#undef SMBPROFILE_STATS_IOBYTES +#undef SMBPROFILE_STATS_SECTION_END +#undef SMBPROFILE_STATS_END }; +#define _SMBPROFILE_COUNT_INCREMENT(_stats, _area, _v) do { \ + if (do_profile_flag) { \ + (_area)->_stats.count += (_v); \ + } \ +} while(0) +#define SMBPROFILE_COUNT_INCREMENT(_name, _area, _v) \ + _SMBPROFILE_COUNT_INCREMENT(_name##_stats, _area, _v) + +#define SMBPROFILE_TIME_ASYNC_STATE(_async_name) \ + struct smbprofile_stats_time_async _async_name; +#define _SMBPROFILE_TIME_ASYNC_START(_stats, _area, _async) do { \ + (_async) = (struct smbprofile_stats_time_async) {}; \ + if (smbprofile_state.config.do_times) { \ + (_async).stats = &((_area)->_stats), \ + (_async).start = profile_timestamp(); \ + } \ +} while(0) +#define SMBPROFILE_TIME_ASYNC_START(_name, _area, _async) \ + _SMBPROFILE_TIME_ASYNC_START(_name##_stats, _area, _async) +#define SMBPROFILE_TIME_ASYNC_END(_async) do { \ + if ((_async).start != 0) { \ + (_async).stats->time += profile_timestamp() - (_async).start; \ + (_async) = (struct smbprofile_stats_basic_async) {}; \ + } \ +} while(0) + +#define SMBPROFILE_BASIC_ASYNC_STATE(_async_name) \ + struct smbprofile_stats_basic_async _async_name; +#define _SMBPROFILE_BASIC_ASYNC_START(_stats, _area, _async) do { \ + (_async) = (struct smbprofile_stats_basic_async) {}; \ + if (do_profile_flag) { \ + if (do_profile_times) { \ + (_async).start = profile_timestamp(); \ + (_async).stats = &((_area)->_stats); \ + } \ + (_area)->_stats.count += 1; \ + } \ +} while(0) +#define SMBPROFILE_BASIC_ASYNC_START(_name, _area, _async) \ + _SMBPROFILE_BASIC_ASYNC_START(_name##_stats, _area, _async) +#define SMBPROFILE_BASIC_ASYNC_END(_async) do { \ + if ((_async).start != 0) { \ + (_async).stats->time += profile_timestamp() - (_async).start; \ + (_async) = (struct smbprofile_stats_basic_async) {}; \ + } \ +} while(0) + +#define _SMBPROFILE_TIMER_ASYNC_START(_stats, _area, _async) do { \ + (_async).stats = &((_area)->_stats); \ + if (do_profile_times) { \ + (_async).start = profile_timestamp(); \ + } \ +} while(0) +#define _SMBPROFILE_TIMER_ASYNC_SET_IDLE(_async) do { \ + if ((_async).start != 0) { \ + if ((_async).idle_start == 0) { \ + (_async).idle_start = profile_timestamp(); \ + } \ + } \ +} while(0) +#define _SMBPROFILE_TIMER_ASYNC_SET_BUSY(_async) do { \ + if ((_async).idle_start != 0) { \ + (_async).idle_time += \ + profile_timestamp() - (_async).idle_start; \ + (_async).idle_start = 0; \ + } \ +} while(0) +#define _SMBPROFILE_TIMER_ASYNC_END(_async) do { \ + if ((_async).start != 0) { \ + _SMBPROFILE_TIMER_ASYNC_SET_BUSY(_async); \ + (_async).stats->time += profile_timestamp() - (_async).start; \ + (_async).stats->idle += (_async).idle_time; \ + } \ +} while(0) + +#define SMBPROFILE_BYTES_ASYNC_STATE(_async_name) \ + struct smbprofile_stats_bytes_async _async_name; +#define _SMBPROFILE_BYTES_ASYNC_START(_stats, _area, _async, _bytes) do { \ + (_async) = (struct smbprofile_stats_bytes_async) {}; \ + if (do_profile_flag) { \ + _SMBPROFILE_TIMER_ASYNC_START(_stats, _area, _async); \ + (_area)->_stats.count += 1; \ + (_area)->_stats.bytes += (_bytes); \ + } \ +} while(0) +#define SMBPROFILE_BYTES_ASYNC_START(_name, _area, _async, _bytes) \ + _SMBPROFILE_BYTES_ASYNC_START(_name##_stats, _area, _async, _bytes) +#define SMBPROFILE_BYTES_ASYNC_SET_IDLE(_async) \ + _SMBPROFILE_TIMER_ASYNC_SET_IDLE(_async) +#define SMBPROFILE_BYTES_ASYNC_SET_BUSY(_async) \ + _SMBPROFILE_TIMER_ASYNC_SET_BUSY(_async) +#define SMBPROFILE_BYTES_ASYNC_END(_async) do { \ + if ((_async).stats != NULL) { \ + _SMBPROFILE_TIMER_ASYNC_END(_async); \ + (_async) = (struct smbprofile_stats_bytes_async) {}; \ + } \ +} while(0) + +#define SMBPROFILE_IOBYTES_ASYNC_STATE(_async_name) \ + struct smbprofile_stats_iobytes_async _async_name; +#define _SMBPROFILE_IOBYTES_ASYNC_START(_stats, _area, _async, _inbytes) do { \ + (_async) = (struct smbprofile_stats_iobytes_async) {}; \ + if (do_profile_flag) { \ + _SMBPROFILE_TIMER_ASYNC_START(_stats, _area, _async); \ + (_area)->_stats.count += 1; \ + (_area)->_stats.inbytes += (_inbytes); \ + } \ +} while(0) +#define SMBPROFILE_IOBYTES_ASYNC_START(_name, _area, _async, _inbytes) \ + _SMBPROFILE_IOBYTES_ASYNC_START(_name##_stats, _area, _async, _inbytes) +#define SMBPROFILE_IOBYTES_ASYNC_SET_IDLE(_async) \ + _SMBPROFILE_TIMER_ASYNC_SET_IDLE(_async) +#define SMBPROFILE_IOBYTES_ASYNC_SET_BUSY(_async) \ + _SMBPROFILE_TIMER_ASYNC_SET_BUSY(_async) +#define SMBPROFILE_IOBYTES_ASYNC_END(_async, _outbytes) do { \ + if ((_async).stats != NULL) { \ + (_async).stats->outbytes += (_outbytes); \ + _SMBPROFILE_TIMER_ASYNC_END(_async); \ + (_async) = (struct smbprofile_stats_iobytes_async) {}; \ + } \ +} while(0) + extern struct profile_stats *profile_p; extern bool do_profile_flag; extern bool do_profile_times; -/* these are helper macros - do not call them directly in the code - * use the DO_PROFILE_* START_PROFILE and END_PROFILE ones - * below which test for the profile flags first - */ -#define INC_PROFILE_COUNT(x) profile_p->x++ -#define DEC_PROFILE_COUNT(x) profile_p->x-- -#define ADD_PROFILE_COUNT(x,y) profile_p->x += (y) - static inline uint64_t profile_timestamp(void) { struct timespec ts; @@ -831,72 +476,65 @@ static inline uint64_t profile_timestamp(void) return (ts.tv_sec * 1000000) + (ts.tv_nsec / 1000); /* usec */ } -/* end of helper macros */ - #define DO_PROFILE_INC(x) \ - if (do_profile_flag) { \ - INC_PROFILE_COUNT(x); \ - } + _SMBPROFILE_COUNT_INCREMENT(x##_stats, profile_p, 1); \ -#define DO_PROFILE_DEC(x) \ - if (do_profile_flag) { \ - DEC_PROFILE_COUNT(x); \ - } - -#define DO_PROFILE_DEC_INC(x,y) \ - if (do_profile_flag) { \ - DEC_PROFILE_COUNT(x); \ - INC_PROFILE_COUNT(y); \ - } - -#define DO_PROFILE_ADD(x,n) \ - if (do_profile_flag) { \ - ADD_PROFILE_COUNT(x,n); \ - } - -#define START_PROFILE_RAW(x, _stamp, _count) \ - _stamp = 0; \ - if (do_profile_flag) { \ - _stamp = do_profile_times ? profile_timestamp() : 0;\ - INC_PROFILE_COUNT(_count); \ - } - -#define START_PROFILE_STAMP(x, _stamp) \ - START_PROFILE_RAW(x, _stamp, x##_count) +#define START_PROFILE_STAMP(x, _stamp) do { \ + struct smbprofile_stats_basic_async __profasync_##x = {}; \ + _SMBPROFILE_BASIC_ASYNC_START(x##_stats, profile_p, __profasync_##x); \ + _stamp = __profasync_##x.start; \ +} while(0) #define START_PROFILE(x) \ - uint64_t __profstamp_##x = 0; \ - START_PROFILE_RAW(x, __profstamp_##x, x##_count) + struct smbprofile_stats_basic_async __profasync_##x = {}; \ + _SMBPROFILE_BASIC_ASYNC_START(x##_stats, profile_p, __profasync_##x); #define START_PROFILE_BYTES(x,n) \ - uint64_t __profstamp_##x = 0; \ - if (do_profile_flag) { \ - __profstamp_##x = do_profile_times ? profile_timestamp() : 0;\ - INC_PROFILE_COUNT(x##_count); \ - ADD_PROFILE_COUNT(x##_bytes, n); \ - } - -#define END_PROFILE_RAW(x, _stamp, _time) \ - if (do_profile_times) { \ - ADD_PROFILE_COUNT(_time, \ - profile_timestamp() - _stamp); \ - } - -#define END_PROFILE_STAMP(x, _stamp) \ - END_PROFILE_RAW(x, _stamp, x##_time) + struct smbprofile_stats_bytes_async __profasync_##x = {}; \ + _SMBPROFILE_BYTES_ASYNC_START(x##_stats, profile_p, __profasync_##x, n); + +#define END_PROFILE_STAMP(x, _stamp) do { \ + struct smbprofile_stats_basic_async __profasync_##x = {}; \ + if (do_profile_flag && do_profile_times) { \ + __profasync_##x = (struct smbprofile_stats_basic_async) { \ + .start = (_stamp), \ + .stats = &(profile_p->x##_stats), \ + }; \ + } \ + SMBPROFILE_BASIC_ASYNC_END(__profasync_##x); \ +} while(0) #define END_PROFILE(x) \ - END_PROFILE_RAW(x, __profstamp_##x, x##_time) + SMBPROFILE_BASIC_ASYNC_END(__profasync_##x) #define END_PROFILE_BYTES(x) \ - END_PROFILE_RAW(x, __profstamp_##x, x##_time) + SMBPROFILE_BYTES_ASYNC_END(__profasync_##x) #else /* WITH_PROFILE */ +#define SMBPROFILE_COUNT_INCREMENT(_name, _area, _v) + +#define SMBPROFILE_TIME_ASYNC_STATE(_async_name) +#define SMBPROFILE_TIME_ASYNC_START(_name, _area, _async) +#define SMBPROFILE_TIME_ASYNC_END(_async) + +#define SMBPROFILE_BASIC_ASYNC_STATE(_async_name) +#define SMBPROFILE_BASIC_ASYNC_START(_name, _area, _async) +#define SMBPROFILE_BASIC_ASYNC_END(_async) + +#define SMBPROFILE_BYTES_ASYNC_STATE(_async_name) +#define SMBPROFILE_BYTES_ASYNC_START(_name, _area, _async, _inbytes) +#define SMBPROFILE_BYTES_ASYNC_SET_IDLE(_async) +#define SMBPROFILE_BYTES_ASYNC_SET_BUSY(_async) +#define SMBPROFILE_BYTES_ASYNC_END(_async) + +#define SMBPROFILE_IOBYTES_ASYNC_STATE(_async_name) +#define SMBPROFILE_IOBYTES_ASYNC_START(_name, _area, _async, _inbytes) +#define SMBPROFILE_IOBYTES_ASYNC_SET_IDLE(_async) +#define SMBPROFILE_IOBYTES_ASYNC_SET_BUSY(_async) +#define SMBPROFILE_IOBYTES_ASYNC_END(_async, _outbytes) + #define DO_PROFILE_INC(x) -#define DO_PROFILE_DEC(x) -#define DO_PROFILE_DEC_INC(x,y) -#define DO_PROFILE_ADD(x,n) #define START_PROFILE_STAMP(x, _stamp) #define START_PROFILE(x) #define START_PROFILE_BYTES(x,n) diff --git a/source3/profile/profile.c b/source3/profile/profile.c index faeae7abb58..c7206385027 100644 --- a/source3/profile/profile.c +++ b/source3/profile/profile.c @@ -27,7 +27,7 @@ #define PROF_SHMEM_KEY ((key_t)0x07021999) #define PROF_SHM_MAGIC 0x6349985 -#define PROF_SHM_VERSION 14 +#define PROF_SHM_VERSION 15 #define IPC_PERMS ((S_IRUSR | S_IWUSR) | S_IRGRP | S_IROTH) @@ -194,190 +194,3 @@ bool profile_setup(struct messaging_context *msg_ctx, bool rdonly) } return True; } - - const char * profile_value_name(enum profile_stats_values val) -{ - static const char * valnames[PR_VALUE_MAX + 1] = - { - "smbd_idle", /* PR_VALUE_SMBD_IDLE */ - "syscall_opendir", /* PR_VALUE_SYSCALL_OPENDIR */ - "syscall_readdir", /* PR_VALUE_SYSCALL_READDIR */ - "syscall_seekdir", /* PR_VALUE_SYSCALL_SEEKDIR */ - "syscall_telldir", /* PR_VALUE_SYSCALL_TELLDIR */ - "syscall_rewinddir", /* PR_VALUE_SYSCALL_REWINDDIR */ - "syscall_mkdir", /* PR_VALUE_SYSCALL_MKDIR */ - "syscall_rmdir", /* PR_VALUE_SYSCALL_RMDIR */ - "syscall_closedir", /* PR_VALUE_SYSCALL_CLOSEDIR */ - "syscall_open", /* PR_VALUE_SYSCALL_OPEN */ - "syscall_createfile", /* PR_VALUE_SYSCALL_CREATEFILE */ - "syscall_close", /* PR_VALUE_SYSCALL_CLOSE */ - "syscall_read", /* PR_VALUE_SYSCALL_READ */ - "syscall_pread", /* PR_VALUE_SYSCALL_PREAD */ - "syscall_write", /* PR_VALUE_SYSCALL_WRITE */ - "syscall_pwrite", /* PR_VALUE_SYSCALL_PWRITE */ - "syscall_lseek", /* PR_VALUE_SYSCALL_LSEEK */ - "syscall_sendfile", /* PR_VALUE_SYSCALL_SENDFILE */ - "syscall_recvfile", /* PR_VALUE_SYSCALL_RECVFILE */ - "syscall_rename", /* PR_VALUE_SYSCALL_RENAME */ - "syscall_rename_at", /* PR_VALUE_SYSCALL_RENAME_AT */ - "syscall_fsync", /* PR_VALUE_SYSCALL_FSYNC */ - "syscall_stat", /* PR_VALUE_SYSCALL_STAT */ - "syscall_fstat", /* PR_VALUE_SYSCALL_FSTAT */ - "syscall_lstat", /* PR_VALUE_SYSCALL_LSTAT */ - "syscall_unlink", /* PR_VALUE_SYSCALL_UNLINK */ - "syscall_chmod", /* PR_VALUE_SYSCALL_CHMOD */ - "syscall_fchmod", /* PR_VALUE_SYSCALL_FCHMOD */ - "syscall_chown", /* PR_VALUE_SYSCALL_CHOWN */ - "syscall_fchown", /* PR_VALUE_SYSCALL_FCHOWN */ - "syscall_chdir", /* PR_VALUE_SYSCALL_CHDIR */ - "syscall_getwd", /* PR_VALUE_SYSCALL_GETWD */ - "syscall_ntimes", /* PR_VALUE_SYSCALL_NTIMES */ - "syscall_ftruncate", /* PR_VALUE_SYSCALL_FTRUNCATE */ - "syscall_fallocate", /* PR_VALUE_SYSCALL_FALLOCATE */ - "syscall_fcntl_lock", /* PR_VALUE_SYSCALL_FCNTL_LOCK */ - "syscall_kernel_flock", /* PR_VALUE_SYSCALL_KERNEL_FLOCK */ - "syscall_linux_setlease", /* PR_VALUE_SYSCALL_LINUX_SETLEASE */ - "syscall_fcntl_getlock", /* PR_VALUE_SYSCALL_FCNTL_GETLOCK */ - "syscall_readlink", /* PR_VALUE_SYSCALL_READLINK */ - "syscall_symlink", /* PR_VALUE_SYSCALL_SYMLINK */ - "syscall_link", /* PR_VALUE_SYSCALL_LINK */ - "syscall_mknod", /* PR_VALUE_SYSCALL_MKNOD */ - "syscall_realpath", /* PR_VALUE_SYSCALL_REALPATH */ - "syscall_get_quota", /* PR_VALUE_SYSCALL_GET_QUOTA */ - "syscall_set_quota", /* PR_VALUE_SYSCALL_SET_QUOTA */ - "syscall_get_sd", /* PR_VALUE_SYSCALL_GET_SD */ - "syscall_set_sd", /* PR_VALUE_SYSCALL_SET_SD */ - "syscall_brl_lock", /* PR_VALUE_SYSCALL_BRL_LOCK */ - "syscall_brl_unlock", /* PR_VALUE_SYSCALL_BRL_UNLOCK */ - "syscall_brl_cancel", /* PR_VALUE_SYSCALL_BRL_CANCEL */ - "SMBmkdir", /* PR_VALUE_SMBMKDIR */ - "SMBrmdir", /* PR_VALUE_SMBRMDIR */ - "SMBopen", /* PR_VALUE_SMBOPEN */ - "SMBcreate", /* PR_VALUE_SMBCREATE */ - "SMBclose", /* PR_VALUE_SMBCLOSE */ - "SMBflush", /* PR_VALUE_SMBFLUSH */ - "SMBunlink", /* PR_VALUE_SMBUNLINK */ - "SMBmv", /* PR_VALUE_SMBMV */ - "SMBgetatr", /* PR_VALUE_SMBGETATR */ - "SMBsetatr", /* PR_VALUE_SMBSETATR */ - "SMBread", /* PR_VALUE_SMBREAD */ - "SMBwrite", /* PR_VALUE_SMBWRITE */ - "SMBlock", /* PR_VALUE_SMBLOCK */ - "SMBunlock", /* PR_VALUE_SMBUNLOCK */ - "SMBctemp", /* PR_VALUE_SMBCTEMP */ - "SMBmknew", /* PR_VALUE_SMBMKNEW */ - "SMBcheckpath", /* PR_VALUE_SMBCHECKPATH */ - "SMBexit", /* PR_VALUE_SMBEXIT */ - "SMBlseek", /* PR_VALUE_SMBLSEEK */ - "SMBlockread", /* PR_VALUE_SMBLOCKREAD */ - "SMBwriteunlock", /* PR_VALUE_SMBWRITEUNLOCK */ - "SMBreadbraw", /* PR_VALUE_SMBREADBRAW */ - "SMBreadBmpx", /* PR_VALUE_SMBREADBMPX */ - "SMBreadBs", /* PR_VALUE_SMBREADBS */ - "SMBwritebraw", /* PR_VALUE_SMBWRITEBRAW */ - "SMBwriteBmpx", /* PR_VALUE_SMBWRITEBMPX */ - "SMBwriteBs", /* PR_VALUE_SMBWRITEBS */ - "SMBwritec", /* PR_VALUE_SMBWRITEC */ - "SMBsetattrE", /* PR_VALUE_SMBSETATTRE */ - "SMBgetattrE", /* PR_VALUE_SMBGETATTRE */ - "SMBlockingX", /* PR_VALUE_SMBLOCKINGX */ - "SMBtrans", /* PR_VALUE_SMBTRANS */ - "SMBtranss", /* PR_VALUE_SMBTRANSS */ - "SMBioctl", /* PR_VALUE_SMBIOCTL */ - "SMBioctls", /* PR_VALUE_SMBIOCTLS */ - "SMBcopy", /* PR_VALUE_SMBCOPY */ - "SMBmove", /* PR_VALUE_SMBMOVE */ - "SMBecho", /* PR_VALUE_SMBECHO */ - "SMBwriteclose", /* PR_VALUE_SMBWRITECLOSE */ - "SMBopenX", /* PR_VALUE_SMBOPENX */ - "SMBreadX", /* PR_VALUE_SMBREADX */ - "SMBwriteX", /* PR_VALUE_SMBWRITEX */ - "SMBtrans2", /* PR_VALUE_SMBTRANS2 */ - "SMBtranss2", /* PR_VALUE_SMBTRANSS2 */ - "SMBfindclose", /* PR_VALUE_SMBFINDCLOSE */ - "SMBfindnclose", /* PR_VALUE_SMBFINDNCLOSE */ - "SMBtcon", /* PR_VALUE_SMBTCON */ - "SMBtdis", /* PR_VALUE_SMBTDIS */ - "SMBnegprot", /* PR_VALUE_SMBNEGPROT */ - "SMBsesssetupX", /* PR_VALUE_SMBSESSSETUPX */ - "SMBulogoffX", /* PR_VALUE_SMBULOGOFFX */ - "SMBtconX", /* PR_VALUE_SMBTCONX */ - "SMBdskattr", /* PR_VALUE_SMBDSKATTR */ - "SMBsearch", /* PR_VALUE_SMBSEARCH */ - "SMBffirst", /* PR_VALUE_SMBFFIRST */ - "SMBfunique", /* PR_VALUE_SMBFUNIQUE */ - "SMBfclose", /* PR_VALUE_SMBFCLOSE */ - "SMBnttrans", /* PR_VALUE_SMBNTTRANS */ - "SMBnttranss", /* PR_VALUE_SMBNTTRANSS */ - "SMBntcreateX", /* PR_VALUE_SMBNTCREATEX */ - "SMBntcancel", /* PR_VALUE_SMBNTCANCEL */ - "SMBntrename", /* PR_VALUE_SMBNTRENAME */ - "SMBsplopen", /* PR_VALUE_SMBSPLOPEN */ - "SMBsplwr", /* PR_VALUE_SMBSPLWR */ - "SMBsplclose", /* PR_VALUE_SMBSPLCLOSE */ - "SMBsplretq", /* PR_VALUE_SMBSPLRETQ */ - "SMBsends", /* PR_VALUE_SMBSENDS */ - "SMBsendb", /* PR_VALUE_SMBSENDB */ - "SMBfwdname", /* PR_VALUE_SMBFWDNAME */ - "SMBcancelf", /* PR_VALUE_SMBCANCELF */ - "SMBgetmac", /* PR_VALUE_SMBGETMAC */ - "SMBsendstrt", /* PR_VALUE_SMBSENDSTRT */ - "SMBsendend", /* PR_VALUE_SMBSENDEND */ - "SMBsendtxt", /* PR_VALUE_SMBSENDTXT */ - "SMBinvalid", /* PR_VALUE_SMBINVALID */ - "Trans2_open", /* PR_VALUE_TRANS2_OPEN */ - "Trans2_findfirst", /* PR_VALUE_TRANS2_FINDFIRST */ - "Trans2_findnext", /* PR_VALUE_TRANS2_FINDNEXT */ - "Trans2_qfsinfo", /* PR_VALUE_TRANS2_QFSINFO */ - "Trans2_setfsinfo", /* PR_VALUE_TRANS2_SETFSINFO */ - "Trans2_qpathinfo", /* PR_VALUE_TRANS2_QPATHINFO */ - "Trans2_setpathinfo", /* PR_VALUE_TRANS2_SETPATHINFO */ - "Trans2_qfileinfo", /* PR_VALUE_TRANS2_QFILEINFO */ - "Trans2_setfileinfo", /* PR_VALUE_TRANS2_SETFILEINFO */ - "Trans2_fsctl", /* PR_VALUE_TRANS2_FSCTL */ - "Trans2_ioctl", /* PR_VALUE_TRANS2_IOCTL */ - "Trans2_findnotifyfirst", /* PR_VALUE_TRANS2_FINDNOTIFYFIRST */ - "Trans2_findnotifynext", /* PR_VALUE_TRANS2_FINDNOTIFYNEXT */ - "Trans2_mkdir", /* PR_VALUE_TRANS2_MKDIR */ - "Trans2_session_setup", /* PR_VALUE_TRANS2_SESSION_SETUP */ - "Trans2_get_dfs_referral", /* PR_VALUE_TRANS2_GET_DFS_REFERRAL */ - "Trans2_report_dfs_inconsistancy", /* PR_VALUE_TRANS2_REPORT_DFS_INCONSISTANCY */ - "NT_transact_create", /* PR_VALUE_NT_TRANSACT_CREATE */ - "NT_transact_ioctl", /* PR_VALUE_NT_TRANSACT_IOCTL */ - "NT_transact_set_security_desc", /* PR_VALUE_NT_TRANSACT_SET_SECURITY_DESC */ - "NT_transact_notify_change",/* PR_VALUE_NT_TRANSACT_NOTIFY_CHANGE */ - "NT_transact_rename", /* PR_VALUE_NT_TRANSACT_RENAME */ - "NT_transact_query_security_desc", /* PR_VALUE_NT_TRANSACT_QUERY_SECURITY_DESC */ - "NT_transact_get_user_quota",/* PR_VALUE_NT_TRANSACT_GET_USER_QUOTA */ - "NT_transact_set_user_quota",/* PR_VALUE_NT_TRANSACT_SET_USER_QUOTA */ - "get_nt_acl", /* PR_VALUE_GET_NT_ACL */ - "fget_nt_acl", /* PR_VALUE_FGET_NT_ACL */ - "fset_nt_acl", /* PR_VALUE_FSET_NT_ACL */ - "chmod_acl", /* PR_VALUE_CHMOD_ACL */ - "fchmod_acl", /* PR_VALUE_FCHMOD_ACL */ - "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 */ - }; - - SMB_ASSERT(val >= 0); - SMB_ASSERT(val < PR_VALUE_MAX); - return valnames[val]; -} diff --git a/source3/utils/status_profile.c b/source3/utils/status_profile.c index 059d321780e..f0cf405e185 100644 --- a/source3/utils/status_profile.c +++ b/source3/utils/status_profile.c @@ -47,686 +47,49 @@ bool status_profile_dump(bool verbose) return False; } - d_printf("smb_count: %u\n", - profile_p->smb_count); - d_printf("uid_changes: %u\n", - profile_p->uid_changes); - - profile_separator("System Calls"); - d_printf("opendir_count: %u\n", - profile_p->syscall_opendir_count); - d_printf("opendir_time: %u\n", - profile_p->syscall_opendir_time); - d_printf("fdopendir_count: %u\n", - profile_p->syscall_fdopendir_count); - d_printf("fdopendir_time: %u\n", - profile_p->syscall_fdopendir_time); - d_printf("readdir_count: %u\n", - profile_p->syscall_readdir_count); - d_printf("readdir_time: %u\n", - profile_p->syscall_readdir_time); - d_printf("mkdir_count: %u\n", - profile_p->syscall_mkdir_count); - d_printf("mkdir_time: %u\n", - profile_p->syscall_mkdir_time); - d_printf("rmdir_count: %u\n", - profile_p->syscall_rmdir_count); - d_printf("rmdir_time: %u\n", - profile_p->syscall_rmdir_time); - d_printf("closedir_count: %u\n", - profile_p->syscall_closedir_count); - d_printf("closedir_time: %u\n", - profile_p->syscall_closedir_time); - d_printf("open_count: %u\n", - profile_p->syscall_open_count); - d_printf("open_time: %u\n", - profile_p->syscall_open_time); - d_printf("close_count: %u\n", - profile_p->syscall_close_count); - d_printf("close_time: %u\n", - profile_p->syscall_close_time); - d_printf("read_count: %u\n", - profile_p->syscall_read_count); - d_printf("read_time: %u\n", - profile_p->syscall_read_time); - d_printf("read_bytes: %u\n", - profile_p->syscall_read_bytes); - d_printf("write_count: %u\n", - profile_p->syscall_write_count); - d_printf("write_time: %u\n", - profile_p->syscall_write_time); - d_printf("write_bytes: %u\n", - profile_p->syscall_write_bytes); - d_printf("pread_count: %u\n", - profile_p->syscall_pread_count); - d_printf("pread_time: %u\n", - profile_p->syscall_pread_time); - d_printf("pread_bytes: %u\n", - profile_p->syscall_pread_bytes); - d_printf("pwrite_count: %u\n", - profile_p->syscall_pwrite_count); - d_printf("pwrite_time: %u\n", - profile_p->syscall_pwrite_time); - d_printf("pwrite_bytes: %u\n", - profile_p->syscall_pwrite_bytes); - d_printf("sendfile_count: %u\n", - profile_p->syscall_sendfile_count); - d_printf("sendfile_time: %u\n", - profile_p->syscall_sendfile_time); - d_printf("sendfile_bytes: %u\n", - profile_p->syscall_sendfile_bytes); - d_printf("lseek_count: %u\n", - profile_p->syscall_lseek_count); - d_printf("lseek_time: %u\n", - profile_p->syscall_lseek_time); - d_printf("rename_count: %u\n", - profile_p->syscall_rename_count); - d_printf("rename_time: %u\n", - profile_p->syscall_rename_time); - d_printf("fsync_count: %u\n", - profile_p->syscall_fsync_count); - d_printf("fsync_time: %u\n", - profile_p->syscall_fsync_time); - d_printf("stat_count: %u\n", - profile_p->syscall_stat_count); - d_printf("stat_time: %u\n", - profile_p->syscall_stat_time); - d_printf("fstat_count: %u\n", - profile_p->syscall_fstat_count); - d_printf("fstat_time: %u\n", - profile_p->syscall_fstat_time); - d_printf("lstat_count: %u\n", - profile_p->syscall_lstat_count); - d_printf("lstat_time: %u\n", - profile_p->syscall_lstat_time); - d_printf("unlink_count: %u\n", - profile_p->syscall_unlink_count); - d_printf("unlink_time: %u\n", - profile_p->syscall_unlink_time); - d_printf("chmod_count: %u\n", - profile_p->syscall_chmod_count); - d_printf("chmod_time: %u\n", - profile_p->syscall_chmod_time); - d_printf("fchmod_count: %u\n", - profile_p->syscall_fchmod_count); - d_printf("fchmod_time: %u\n", - profile_p->syscall_fchmod_time); - d_printf("chown_count: %u\n", - profile_p->syscall_chown_count); - d_printf("chown_time: %u\n", - profile_p->syscall_chown_time); - d_printf("fchown_count: %u\n", - profile_p->syscall_fchown_count); - d_printf("fchown_time: %u\n", - profile_p->syscall_fchown_time); - d_printf("chdir_count: %u\n", - profile_p->syscall_chdir_count); - d_printf("chdir_time: %u\n", - profile_p->syscall_chdir_time); - d_printf("getwd_count: %u\n", - profile_p->syscall_getwd_count); - d_printf("getwd_time: %u\n", - profile_p->syscall_getwd_time); - d_printf("ntimes_count: %u\n", - profile_p->syscall_ntimes_count); - d_printf("ntimes_time: %u\n", - profile_p->syscall_ntimes_time); - d_printf("ftruncate_count: %u\n", - profile_p->syscall_ftruncate_count); - d_printf("ftruncate_time: %u\n", - profile_p->syscall_ftruncate_time); - d_printf("fcntl_lock_count: %u\n", - profile_p->syscall_fcntl_lock_count); - d_printf("fcntl_lock_time: %u\n", - profile_p->syscall_fcntl_lock_time); - d_printf("readlink_count: %u\n", - profile_p->syscall_readlink_count); - d_printf("readlink_time: %u\n", - profile_p->syscall_readlink_time); - d_printf("symlink_count: %u\n", - profile_p->syscall_symlink_count); - d_printf("symlink_time: %u\n", - profile_p->syscall_symlink_time); - - profile_separator("Stat Cache"); - d_printf("lookups: %u\n", - profile_p->statcache_lookups); - d_printf("misses: %u\n", - profile_p->statcache_misses); - d_printf("hits: %u\n", - profile_p->statcache_hits); - - profile_separator("Write Cache"); - d_printf("allocations: %u\n", - profile_p->writecache_allocations); - d_printf("deallocations: %u\n", - profile_p->writecache_deallocations); - d_printf("cached_reads: %u\n", - profile_p->writecache_cached_reads); - d_printf("total_writes: %u\n", - profile_p->writecache_total_writes); - d_printf("init_writes: %u\n", - profile_p->writecache_init_writes); - d_printf("abutted_writes: %u\n", - profile_p->writecache_abutted_writes); - d_printf("non_oplock_writes: %u\n", - profile_p->writecache_non_oplock_writes); - d_printf("direct_writes: %u\n", - profile_p->writecache_direct_writes); - d_printf("cached_writes: %u\n", - profile_p->writecache_cached_writes); - d_printf("perfect_writes: %u\n", - profile_p->writecache_perfect_writes); - d_printf("flush_reason_seek: %u\n", - profile_p->writecache_flush_reason_seek); - d_printf("flush_reason_read: %u\n", - profile_p->writecache_flush_reason_read); - d_printf("flush_reason_readraw: %u\n", - profile_p->writecache_flush_reason_readraw); - d_printf("flush_reason_write: %u\n", - profile_p->writecache_flush_reason_write); - d_printf("flush_reason_oplock: %u\n", - profile_p->writecache_flush_reason_oplock); - d_printf("flush_reason_close: %u\n", - profile_p->writecache_flush_reason_close); - d_printf("flush_reason_sync: %u\n", - profile_p->writecache_flush_reason_sync); - d_printf("flush_reason_sizechange: %u\n", - profile_p->writecache_flush_reason_sizechange); - - profile_separator("SMB Calls"); - d_printf("mkdir_count: %u\n", - profile_p->SMBmkdir_count); - d_printf("mkdir_time: %u\n", - profile_p->SMBmkdir_time); - d_printf("rmdir_count: %u\n", - profile_p->SMBrmdir_count); - d_printf("rmdir_time: %u\n", - profile_p->SMBrmdir_time); - d_printf("open_count: %u\n", - profile_p->SMBopen_count); - d_printf("open_time: %u\n", - profile_p->SMBopen_time); - d_printf("create_count: %u\n", - profile_p->SMBcreate_count); - d_printf("create_time: %u\n", - profile_p->SMBcreate_time); - d_printf("close_count: %u\n", - profile_p->SMBclose_count); - d_printf("close_time: %u\n", - profile_p->SMBclose_time); - d_printf("flush_count: %u\n", - profile_p->SMBflush_count); - d_printf("flush_time: %u\n", - profile_p->SMBflush_time); - d_printf("unlink_count: %u\n", - profile_p->SMBunlink_count); - d_printf("unlink_time: %u\n", - profile_p->SMBunlink_time); - d_printf("mv_count: %u\n", - profile_p->SMBmv_count); - d_printf("mv_time: %u\n", - profile_p->SMBmv_time); - d_printf("getatr_count: %u\n", - profile_p->SMBgetatr_count); - d_printf("getatr_time: %u\n", - profile_p->SMBgetatr_time); - d_printf("setatr_count: %u\n", - profile_p->SMBsetatr_count); - d_printf("setatr_time: %u\n", - profile_p->SMBsetatr_time); - d_printf("read_count: %u\n", - profile_p->SMBread_count); - d_printf("read_time: %u\n", - profile_p->SMBread_time); - d_printf("write_count: %u\n", - profile_p->SMBwrite_count); - d_printf("write_time: %u\n", - profile_p->SMBwrite_time); - d_printf("lock_count: %u\n", - profile_p->SMBlock_count); - d_printf("lock_time: %u\n", - profile_p->SMBlock_time); - d_printf("unlock_count: %u\n", - profile_p->SMBunlock_count); - d_printf("unlock_time: %u\n", - profile_p->SMBunlock_time); - d_printf("ctemp_count: %u\n", - profile_p->SMBctemp_count); - d_printf("ctemp_time: %u\n", - profile_p->SMBctemp_time); - d_printf("mknew_count: %u\n", - profile_p->SMBmknew_count); - d_printf("mknew_time: %u\n", - profile_p->SMBmknew_time); - d_printf("checkpath_count: %u\n", - profile_p->SMBcheckpath_count); - d_printf("checkpath_time: %u\n", - profile_p->SMBcheckpath_time); - d_printf("exit_count: %u\n", - profile_p->SMBexit_count); - d_printf("exit_time: %u\n", - profile_p->SMBexit_time); - d_printf("lseek_count: %u\n", - profile_p->SMBlseek_count); - d_printf("lseek_time: %u\n", - profile_p->SMBlseek_time); - d_printf("lockread_count: %u\n", - profile_p->SMBlockread_count); - d_printf("lockread_time: %u\n", - profile_p->SMBlockread_time); - d_printf("writeunlock_count: %u\n", - profile_p->SMBwriteunlock_count); - d_printf("writeunlock_time: %u\n", - profile_p->SMBwriteunlock_time); - d_printf("readbraw_count: %u\n", - profile_p->SMBreadbraw_count); - d_printf("readbraw_time: %u\n", - profile_p->SMBreadbraw_time); - d_printf("readBmpx_count: %u\n", - profile_p->SMBreadBmpx_count); - d_printf("readBmpx_time: %u\n", - profile_p->SMBreadBmpx_time); - d_printf("readBs_count: %u\n", - profile_p->SMBreadBs_count); - d_printf("readBs_time: %u\n", - profile_p->SMBreadBs_time); - d_printf("writebraw_count: %u\n", - profile_p->SMBwritebraw_count); - d_printf("writebraw_time: %u\n", - profile_p->SMBwritebraw_time); - d_printf("writeBmpx_count: %u\n", - profile_p->SMBwriteBmpx_count); - d_printf("writeBmpx_time: %u\n", - profile_p->SMBwriteBmpx_time); - d_printf("writeBs_count: %u\n", - profile_p->SMBwriteBs_count); - d_printf("writeBs_time: %u\n", - profile_p->SMBwriteBs_time); - d_printf("writec_count: %u\n", - profile_p->SMBwritec_count); - d_printf("writec_time: %u\n", - profile_p->SMBwritec_time); - d_printf("setattrE_count: %u\n", - profile_p->SMBsetattrE_count); - d_printf("setattrE_time: %u\n", - profile_p->SMBsetattrE_time); - d_printf("getattrE_count: %u\n", - profile_p->SMBgetattrE_count); - d_printf("getattrE_time: %u\n", - profile_p->SMBgetattrE_time); - d_printf("lockingX_count: %u\n", - profile_p->SMBlockingX_count); - d_printf("lockingX_time: %u\n", - profile_p->SMBlockingX_time); - d_printf("trans_count: %u\n", - profile_p->SMBtrans_count); - d_printf("trans_time: %u\n", - profile_p->SMBtrans_time); - d_printf("transs_count: %u\n", - profile_p->SMBtranss_count); - d_printf("transs_time: %u\n", - profile_p->SMBtranss_time); - d_printf("ioctl_count: %u\n", - profile_p->SMBioctl_count); - d_printf("ioctl_time: %u\n", - profile_p->SMBioctl_time); - d_printf("ioctls_count: %u\n", - profile_p->SMBioctls_count); - d_printf("ioctls_time: %u\n", - profile_p->SMBioctls_time); - d_printf("copy_count: %u\n", - profile_p->SMBcopy_count); - d_printf("copy_time: %u\n", - profile_p->SMBcopy_time); - d_printf("move_count: %u\n", - profile_p->SMBmove_count); - d_printf("move_time: %u\n", - profile_p->SMBmove_time); - d_printf("echo_count: %u\n", - profile_p->SMBecho_count); - d_printf("echo_time: %u\n", - profile_p->SMBecho_time); - d_printf("writeclose_count: %u\n", - profile_p->SMBwriteclose_count); - d_printf("writeclose_time: %u\n", - profile_p->SMBwriteclose_time); - d_printf("openX_count: %u\n", - profile_p->SMBopenX_count); - d_printf("openX_time: %u\n", - profile_p->SMBopenX_time); - d_printf("readX_count: %u\n", - profile_p->SMBreadX_count); - d_printf("readX_time: %u\n", - profile_p->SMBreadX_time); - d_printf("writeX_count: %u\n", - profile_p->SMBwriteX_count); - d_printf("writeX_time: %u\n", - profile_p->SMBwriteX_time); - d_printf("trans2_count: %u\n", - profile_p->SMBtrans2_count); - d_printf("trans2_time: %u\n", - profile_p->SMBtrans2_time); - d_printf("transs2_count: %u\n", - profile_p->SMBtranss2_count); - d_printf("transs2_time: %u\n", - profile_p->SMBtranss2_time); - d_printf("findclose_count: %u\n", - profile_p->SMBfindclose_count); - d_printf("findclose_time: %u\n", - profile_p->SMBfindclose_time); - d_printf("findnclose_count: %u\n", - profile_p->SMBfindnclose_count); - d_printf("findnclose_time: %u\n", - profile_p->SMBfindnclose_time); - d_printf("tcon_count: %u\n", - profile_p->SMBtcon_count); - d_printf("tcon_time: %u\n", - profile_p->SMBtcon_time); - d_printf("tdis_count: %u\n", - profile_p->SMBtdis_count); - d_printf("tdis_time: %u\n", - profile_p->SMBtdis_time); - d_printf("negprot_count: %u\n", - profile_p->SMBnegprot_count); - d_printf("negprot_time: %u\n", - profile_p->SMBnegprot_time); - d_printf("sesssetupX_count: %u\n", - profile_p->SMBsesssetupX_count); - d_printf("sesssetupX_time: %u\n", - profile_p->SMBsesssetupX_time); - d_printf("ulogoffX_count: %u\n", - profile_p->SMBulogoffX_count); - d_printf("ulogoffX_time: %u\n", - profile_p->SMBulogoffX_time); - d_printf("tconX_count: %u\n", - profile_p->SMBtconX_count); - d_printf("tconX_time: %u\n", - profile_p->SMBtconX_time); - d_printf("dskattr_count: %u\n", - profile_p->SMBdskattr_count); - d_printf("dskattr_time: %u\n", - profile_p->SMBdskattr_time); - d_printf("search_count: %u\n", - profile_p->SMBsearch_count); - d_printf("search_time: %u\n", - profile_p->SMBsearch_time); - d_printf("ffirst_count: %u\n", - profile_p->SMBffirst_count); - d_printf("ffirst_time: %u\n", - profile_p->SMBffirst_time); - d_printf("funique_count: %u\n", - profile_p->SMBfunique_count); - d_printf("funique_time: %u\n", - profile_p->SMBfunique_time); - d_printf("fclose_count: %u\n", - profile_p->SMBfclose_count); - d_printf("fclose_time: %u\n", - profile_p->SMBfclose_time); - d_printf("nttrans_count: %u\n", - profile_p->SMBnttrans_count); - d_printf("nttrans_time: %u\n", - profile_p->SMBnttrans_time); - d_printf("nttranss_count: %u\n", - profile_p->SMBnttranss_count); - d_printf("nttranss_time: %u\n", - profile_p->SMBnttranss_time); - d_printf("ntcreateX_count: %u\n", - profile_p->SMBntcreateX_count); - d_printf("ntcreateX_time: %u\n", - profile_p->SMBntcreateX_time); - d_printf("ntcancel_count: %u\n", - profile_p->SMBntcancel_count); - d_printf("ntcancel_time: %u\n", - profile_p->SMBntcancel_time); - d_printf("splopen_count: %u\n", - profile_p->SMBsplopen_count); - d_printf("splopen_time: %u\n", - profile_p->SMBsplopen_time); - d_printf("splwr_count: %u\n", - profile_p->SMBsplwr_count); - d_printf("splwr_time: %u\n", - profile_p->SMBsplwr_time); - d_printf("splclose_count: %u\n", - profile_p->SMBsplclose_count); - d_printf("splclose_time: %u\n", - profile_p->SMBsplclose_time); - d_printf("splretq_count: %u\n", - profile_p->SMBsplretq_count); - d_printf("splretq_time: %u\n", - profile_p->SMBsplretq_time); - d_printf("sends_count: %u\n", - profile_p->SMBsends_count); - d_printf("sends_time: %u\n", - profile_p->SMBsends_time); - d_printf("sendb_count: %u\n", - profile_p->SMBsendb_count); - d_printf("sendb_time: %u\n", - profile_p->SMBsendb_time); - d_printf("fwdname_count: %u\n", - profile_p->SMBfwdname_count); - d_printf("fwdname_time: %u\n", - profile_p->SMBfwdname_time); - d_printf("cancelf_count: %u\n", - profile_p->SMBcancelf_count); - d_printf("cancelf_time: %u\n", - profile_p->SMBcancelf_time); - d_printf("getmac_count: %u\n", - profile_p->SMBgetmac_count); - d_printf("getmac_time: %u\n", - profile_p->SMBgetmac_time); - d_printf("sendstrt_count: %u\n", - profile_p->SMBsendstrt_count); - d_printf("sendstrt_time: %u\n", - profile_p->SMBsendstrt_time); - d_printf("sendend_count: %u\n", - profile_p->SMBsendend_count); - d_printf("sendend_time: %u\n", - profile_p->SMBsendend_time); - d_printf("sendtxt_count: %u\n", - profile_p->SMBsendtxt_count); - d_printf("sendtxt_time: %u\n", - profile_p->SMBsendtxt_time); - d_printf("invalid_count: %u\n", - profile_p->SMBinvalid_count); - d_printf("invalid_time: %u\n", - profile_p->SMBinvalid_time); - - profile_separator("Trans2 Calls"); - d_printf("open_count: %u\n", - profile_p->Trans2_open_count); - d_printf("open_time: %u\n", - profile_p->Trans2_open_time); - d_printf("findfirst_count: %u\n", - profile_p->Trans2_findfirst_count); - d_printf("findfirst_time: %u\n", - profile_p->Trans2_findfirst_time); - d_printf("findnext_count: %u\n", - profile_p->Trans2_findnext_count); - d_printf("findnext_time: %u\n", - profile_p->Trans2_findnext_time); - d_printf("qfsinfo_count: %u\n", - profile_p->Trans2_qfsinfo_count); - d_printf("qfsinfo_time: %u\n", - profile_p->Trans2_qfsinfo_time); - d_printf("setfsinfo_count: %u\n", - profile_p->Trans2_setfsinfo_count); - d_printf("setfsinfo_time: %u\n", - profile_p->Trans2_setfsinfo_time); - d_printf("qpathinfo_count: %u\n", - profile_p->Trans2_qpathinfo_count); - d_printf("qpathinfo_time: %u\n", - profile_p->Trans2_qpathinfo_time); - d_printf("setpathinfo_count: %u\n", - profile_p->Trans2_setpathinfo_count); - d_printf("setpathinfo_time: %u\n", - profile_p->Trans2_setpathinfo_time); - d_printf("qfileinfo_count: %u\n", - profile_p->Trans2_qfileinfo_count); - d_printf("qfileinfo_time: %u\n", - profile_p->Trans2_qfileinfo_time); - d_printf("setfileinfo_count: %u\n", - profile_p->Trans2_setfileinfo_count); - d_printf("setfileinfo_time: %u\n", - profile_p->Trans2_setfileinfo_time); - d_printf("fsctl_count: %u\n", - profile_p->Trans2_fsctl_count); - d_printf("fsctl_time: %u\n", - profile_p->Trans2_fsctl_time); - d_printf("ioctl_count: %u\n", - profile_p->Trans2_ioctl_count); - d_printf("ioctl_time: %u\n", - profile_p->Trans2_ioctl_time); - d_printf("findnotifyfirst_count: %u\n", - profile_p->Trans2_findnotifyfirst_count); - d_printf("findnotifyfirst_time: %u\n", - profile_p->Trans2_findnotifyfirst_time); - d_printf("findnotifynext_count: %u\n", - profile_p->Trans2_findnotifynext_count); - d_printf("findnotifynext_time: %u\n", - profile_p->Trans2_findnotifynext_time); - d_printf("mkdir_count: %u\n", - profile_p->Trans2_mkdir_count); - d_printf("mkdir_time: %u\n", - profile_p->Trans2_mkdir_time); - d_printf("session_setup_count: %u\n", - profile_p->Trans2_session_setup_count); - d_printf("session_setup_time: %u\n", - profile_p->Trans2_session_setup_time); - d_printf("get_dfs_referral_count: %u\n", - profile_p->Trans2_get_dfs_referral_count); - d_printf("get_dfs_referral_time: %u\n", - profile_p->Trans2_get_dfs_referral_time); - d_printf("report_dfs_inconsistancy_count: %u\n", - profile_p->Trans2_report_dfs_inconsistancy_count); - d_printf("report_dfs_inconsistancy_time: %u\n", - profile_p->Trans2_report_dfs_inconsistancy_time); - - profile_separator("NT Transact Calls"); - d_printf("create_count: %u\n", - profile_p->NT_transact_create_count); - d_printf("create_time: %u\n", - profile_p->NT_transact_create_time); - d_printf("ioctl_count: %u\n", - profile_p->NT_transact_ioctl_count); - d_printf("ioctl_time: %u\n", - profile_p->NT_transact_ioctl_time); - d_printf("set_security_desc_count: %u\n", - profile_p->NT_transact_set_security_desc_count); - d_printf("set_security_desc_time: %u\n", - profile_p->NT_transact_set_security_desc_time); - d_printf("notify_change_count: %u\n", - profile_p->NT_transact_notify_change_count); - d_printf("notify_change_time: %u\n", - profile_p->NT_transact_notify_change_time); - d_printf("rename_count: %u\n", - profile_p->NT_transact_rename_count); - d_printf("rename_time: %u\n", - profile_p->NT_transact_rename_time); - d_printf("query_security_desc_count: %u\n", - profile_p->NT_transact_query_security_desc_count); - d_printf("query_security_desc_time: %u\n", - profile_p->NT_transact_query_security_desc_time); - - profile_separator("ACL Calls"); - d_printf("get_nt_acl_count: %u\n", - profile_p->get_nt_acl_count); - d_printf("get_nt_acl_time: %u\n", - profile_p->get_nt_acl_time); - d_printf("fget_nt_acl_count: %u\n", - profile_p->fget_nt_acl_count); - d_printf("fget_nt_acl_time: %u\n", - profile_p->fget_nt_acl_time); - d_printf("fset_nt_acl_count: %u\n", - profile_p->fset_nt_acl_count); - d_printf("fset_nt_acl_time: %u\n", - profile_p->fset_nt_acl_time); - d_printf("chmod_acl_count: %u\n", - profile_p->chmod_acl_count); - d_printf("chmod_acl_time: %u\n", - profile_p->chmod_acl_time); - d_printf("fchmod_acl_count: %u\n", - profile_p->fchmod_acl_count); - d_printf("fchmod_acl_time: %u\n", - profile_p->fchmod_acl_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); +#define __PRINT_FIELD_LINE(name, _stats, field) do { \ + d_printf("%-59s%20ju\n", \ + name "_" #field ":", \ + (uintmax_t)profile_p->_stats.field); \ +} while(0); +#define SMBPROFILE_STATS_START +#define SMBPROFILE_STATS_SECTION_START(name) profile_separator(#name); +#define SMBPROFILE_STATS_COUNT(name) do { \ + __PRINT_FIELD_LINE(#name, name##_stats, count); \ +} while(0); +#define SMBPROFILE_STATS_TIME(name) do { \ + __PRINT_FIELD_LINE(#name, name##_stats, time); \ +} while(0); +#define SMBPROFILE_STATS_BASIC(name) do { \ + __PRINT_FIELD_LINE(#name, name##_stats, count); \ + __PRINT_FIELD_LINE(#name, name##_stats, time); \ +} while(0); +#define SMBPROFILE_STATS_BYTES(name) do { \ + __PRINT_FIELD_LINE(#name, name##_stats, count); \ + __PRINT_FIELD_LINE(#name, name##_stats, time); \ + __PRINT_FIELD_LINE(#name, name##_stats, idle); \ + __PRINT_FIELD_LINE(#name, name##_stats, bytes); \ +} while(0); +#define SMBPROFILE_STATS_IOBYTES(name) do { \ + __PRINT_FIELD_LINE(#name, name##_stats, count); \ + __PRINT_FIELD_LINE(#name, name##_stats, time); \ + __PRINT_FIELD_LINE(#name, name##_stats, idle); \ + __PRINT_FIELD_LINE(#name, name##_stats, inbytes); \ + __PRINT_FIELD_LINE(#name, name##_stats, outbytes); \ +} while(0); +#define SMBPROFILE_STATS_SECTION_END +#define SMBPROFILE_STATS_END + SMBPROFILE_STATS_ALL_SECTIONS +#undef __PRINT_FIELD_LINE +#undef SMBPROFILE_STATS_START +#undef SMBPROFILE_STATS_SECTION_START +#undef SMBPROFILE_STATS_COUNT +#undef SMBPROFILE_STATS_TIME +#undef SMBPROFILE_STATS_BASIC +#undef SMBPROFILE_STATS_BYTES +#undef SMBPROFILE_STATS_IOBYTES +#undef SMBPROFILE_STATS_SECTION_END +#undef SMBPROFILE_STATS_END return True; } @@ -742,52 +105,196 @@ bool status_profile_dump(bool verbose) #define percent_time(used, period) ((double)(used) / (double)(period) * 100.0 ) -static int print_count_samples( - const struct profile_stats * const current, - const struct profile_stats * const last, +static uint64_t print_count_count_samples( + char *buf, const size_t buflen, + const char *name, + const struct smbprofile_stats_count * const current, + const struct smbprofile_stats_count * const last, uint64_t delta_usec) { - int i; - int count = 0; - unsigned step; - uint64_t spent; - int delta_sec; - const char * name; - char buf[40]; + uint64_t step = current->count - last->count; + uint64_t count = 0; - if (delta_usec == 0) { - return 0; + if (step != 0) { + uint64_t delta_sec = usec_to_sec(delta_usec); + + count++; + + if (buf[0] == '\0') { + snprintf(buf, buflen, + "%s %ju/sec", + name, (uintmax_t)(step / delta_sec)); + } else { + printf("%-40s %s %ju/sec\n", + buf, name, (uintmax_t)(step / delta_sec)); + buf[0] = '\0'; + } } - buf[0] = '\0'; - delta_sec = usec_to_sec(delta_usec); + return count; +} - for (i = 0; i < PR_VALUE_MAX; ++i) { - step = current->count[i] - last->count[i]; - spent = current->time[i] - last->time[i]; +static uint64_t print_basic_count_samples( + char *buf, const size_t buflen, + const char *name, + const struct smbprofile_stats_basic * const current, + const struct smbprofile_stats_basic * const last, + uint64_t delta_usec) +{ + uint64_t step = current->count - last->count; + uint64_t spent = current->time - last->time; + uint64_t count = 0; - if (step) { - ++count; + if (step != 0) { + uint64_t delta_sec = usec_to_sec(delta_usec); - name = profile_value_name(i); + count++; - if (buf[0] == '\0') { - snprintf(buf, sizeof(buf), - "%s %d/sec (%.2f%%)", - name, step / delta_sec, - percent_time(spent, delta_usec)); - } else { - printf("%-40s %s %d/sec (%.2f%%)\n", - buf, name, step / delta_sec, - percent_time(spent, delta_usec)); - buf[0] = '\0'; - } + if (buf[0] == '\0') { + snprintf(buf, buflen, + "%s %ju/sec (%.2f%%)", + name, (uintmax_t)(step / delta_sec), + percent_time(spent, delta_usec)); + } else { + printf("%-40s %s %ju/sec (%.2f%%)\n", + buf, name, (uintmax_t)(step / delta_sec), + percent_time(spent, delta_usec)); + buf[0] = '\0'; + } + } + + return count; +} + +static uint64_t print_bytes_count_samples( + char *buf, const size_t buflen, + const char *name, + const struct smbprofile_stats_bytes * const current, + const struct smbprofile_stats_bytes * const last, + uint64_t delta_usec) +{ + uint64_t step = current->count - last->count; + uint64_t spent = current->time - last->time; + uint64_t count = 0; + + if (step != 0) { + uint64_t delta_sec = usec_to_sec(delta_usec); + + count++; + + if (buf[0] == '\0') { + snprintf(buf, buflen, + "%s %ju/sec (%.2f%%)", + name, (uintmax_t)(step / delta_sec), + percent_time(spent, delta_usec)); + } else { + printf("%-40s %s %ju/sec (%.2f%%)\n", + buf, name, (uintmax_t)(step / delta_sec), + percent_time(spent, delta_usec)); + buf[0] = '\0'; } } return count; } +static uint64_t print_iobytes_count_samples( + char *buf, const size_t buflen, + const char *name, + const struct smbprofile_stats_iobytes * const current, + const struct smbprofile_stats_iobytes * const last, + uint64_t delta_usec) +{ + uint64_t step = current->count - last->count; + uint64_t spent = current->time - last->time; + uint64_t count = 0; + + if (step != 0) { + uint64_t delta_sec = usec_to_sec(delta_usec); + + count++; + + if (buf[0] == '\0') { + snprintf(buf, buflen, + "%s %ju/sec (%.2f%%)", + name, (uintmax_t)(step / delta_sec), + percent_time(spent, delta_usec)); + } else { + printf("%-40s %s %ju/sec (%.2f%%)\n", + buf, name, (uintmax_t)(step / delta_sec), + percent_time(spent, delta_usec)); + buf[0] = '\0'; + } + } + + return count; +} + +static uint64_t print_count_samples( + const struct profile_stats * const current, + const struct profile_stats * const last, + uint64_t delta_usec) +{ + uint64_t count = 0; + char buf[40] = { '\0', }; + + if (delta_usec == 0) { + return 0; + } + +#define SMBPROFILE_STATS_START +#define SMBPROFILE_STATS_SECTION_START(name) +#define SMBPROFILE_STATS_COUNT(name) do { \ + count += print_count_count_samples(buf, sizeof(buf), \ + #name, \ + ¤t->name##_stats, \ + &last->name##_stats, \ + delta_usec); \ +} while(0); +#define SMBPROFILE_STATS_TIME(name) do { \ +} while(0); +#define SMBPROFILE_STATS_BASIC(name) do { \ + count += print_basic_count_samples(buf, sizeof(buf), \ + #name, \ + ¤t->name##_stats, \ + &last->name##_stats, \ + delta_usec); \ +} while(0); +#define SMBPROFILE_STATS_BYTES(name) do { \ + count += print_bytes_count_samples(buf, sizeof(buf), \ + #name, \ + ¤t->name##_stats, \ + &last->name##_stats, \ + delta_usec); \ +} while(0); +#define SMBPROFILE_STATS_IOBYTES(name) do { \ + count += print_iobytes_count_samples(buf, sizeof(buf), \ + #name, \ + ¤t->name##_stats, \ + &last->name##_stats, \ + delta_usec); \ +} while(0); +#define SMBPROFILE_STATS_SECTION_END +#define SMBPROFILE_STATS_END + SMBPROFILE_STATS_ALL_SECTIONS +#undef SMBPROFILE_STATS_START +#undef SMBPROFILE_STATS_SECTION_START +#undef SMBPROFILE_STATS_COUNT +#undef SMBPROFILE_STATS_TIME +#undef SMBPROFILE_STATS_BASIC +#undef SMBPROFILE_STATS_BYTES +#undef SMBPROFILE_STATS_IOBYTES +#undef SMBPROFILE_STATS_SECTION_END +#undef SMBPROFILE_STATS_END + + if (buf[0] != '\0') { + printf("%-40s\n", buf); + buf[0] = '\0'; + } + + return count; +} + static struct profile_stats sample_data[2]; static uint64_t sample_time[2]; |