~zulcss/samba/server-dailies-3.4

« back to all changes in this revision

Viewing changes to source3/utils/status_profile.c

  • Committer: Chuck Short
  • Date: 2010-09-28 20:38:39 UTC
  • Revision ID: zulcss@ubuntu.com-20100928203839-pgjulytsi9ue63x1
Initial version

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/*
 
2
 * Unix SMB/CIFS implementation.
 
3
 * status reporting
 
4
 * Copyright (C) Andrew Tridgell 1994-1998
 
5
 * Copyright (C) James Peach 2005-2006
 
6
 *
 
7
 * This program is free software; you can redistribute it and/or modify
 
8
 * it under the terms of the GNU General Public License as published by
 
9
 * the Free Software Foundation; either version 3 of the License, or
 
10
 * (at your option) any later version.
 
11
 *
 
12
 * This program is distributed in the hope that it will be useful,
 
13
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 
14
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 
15
 * GNU General Public License for more details.
 
16
 *
 
17
 * You should have received a copy of the GNU General Public License
 
18
 * along with this program; if not, see <http://www.gnu.org/licenses/>.
 
19
 */
 
20
 
 
21
#include "includes.h"
 
22
 
 
23
bool status_profile_dump(bool be_verbose);
 
24
bool status_profile_rates(bool be_verbose);
 
25
 
 
26
#ifdef WITH_PROFILE
 
27
static void profile_separator(const char * title)
 
28
{
 
29
    char line[79 + 1];
 
30
    char * end;
 
31
 
 
32
    snprintf(line, sizeof(line), "**** %s ", title);
 
33
 
 
34
    for (end = line + strlen(line); end < &line[sizeof(line) -1]; ++end) {
 
35
            *end = '*';
 
36
    }
 
37
 
 
38
    line[sizeof(line) - 1] = '\0';
 
39
    d_printf("%s\n", line);
 
40
}
 
41
#endif
 
42
 
 
43
/*******************************************************************
 
44
 dump the elements of the profile structure
 
45
  ******************************************************************/
 
46
bool status_profile_dump(bool verbose)
 
47
{
 
48
#ifdef WITH_PROFILE
 
49
        if (!profile_setup(NULL, True)) {
 
50
                fprintf(stderr,"Failed to initialise profile memory\n");
 
51
                return False;
 
52
        }
 
53
 
 
54
        d_printf("smb_count:                      %u\n", profile_p->smb_count);
 
55
        d_printf("uid_changes:                    %u\n", profile_p->uid_changes);
 
56
 
 
57
        profile_separator("System Calls");
 
58
        d_printf("opendir_count:                  %u\n", profile_p->syscall_opendir_count);
 
59
        d_printf("opendir_time:                   %u\n", profile_p->syscall_opendir_time);
 
60
        d_printf("readdir_count:                  %u\n", profile_p->syscall_readdir_count);
 
61
        d_printf("readdir_time:                   %u\n", profile_p->syscall_readdir_time);
 
62
        d_printf("mkdir_count:                    %u\n", profile_p->syscall_mkdir_count);
 
63
        d_printf("mkdir_time:                     %u\n", profile_p->syscall_mkdir_time);
 
64
        d_printf("rmdir_count:                    %u\n", profile_p->syscall_rmdir_count);
 
65
        d_printf("rmdir_time:                     %u\n", profile_p->syscall_rmdir_time);
 
66
        d_printf("closedir_count:                 %u\n", profile_p->syscall_closedir_count);
 
67
        d_printf("closedir_time:                  %u\n", profile_p->syscall_closedir_time);
 
68
        d_printf("open_count:                     %u\n", profile_p->syscall_open_count);
 
69
        d_printf("open_time:                      %u\n", profile_p->syscall_open_time);
 
70
        d_printf("close_count:                    %u\n", profile_p->syscall_close_count);
 
71
        d_printf("close_time:                     %u\n", profile_p->syscall_close_time);
 
72
        d_printf("read_count:                     %u\n", profile_p->syscall_read_count);
 
73
        d_printf("read_time:                      %u\n", profile_p->syscall_read_time);
 
74
        d_printf("read_bytes:                     %u\n", profile_p->syscall_read_bytes);
 
75
        d_printf("write_count:                    %u\n", profile_p->syscall_write_count);
 
76
        d_printf("write_time:                     %u\n", profile_p->syscall_write_time);
 
77
        d_printf("write_bytes:                    %u\n", profile_p->syscall_write_bytes);
 
78
        d_printf("pread_count:                    %u\n", profile_p->syscall_pread_count);
 
79
        d_printf("pread_time:                     %u\n", profile_p->syscall_pread_time);
 
80
        d_printf("pread_bytes:                    %u\n", profile_p->syscall_pread_bytes);
 
81
        d_printf("pwrite_count:                   %u\n", profile_p->syscall_pwrite_count);
 
82
        d_printf("pwrite_time:                    %u\n", profile_p->syscall_pwrite_time);
 
83
        d_printf("pwrite_bytes:                   %u\n", profile_p->syscall_pwrite_bytes);
 
84
#ifdef WITH_SENDFILE
 
85
        d_printf("sendfile_count:                 %u\n", profile_p->syscall_sendfile_count);
 
86
        d_printf("sendfile_time:                  %u\n", profile_p->syscall_sendfile_time);
 
87
        d_printf("sendfile_bytes:                 %u\n", profile_p->syscall_sendfile_bytes);
 
88
#endif
 
89
        d_printf("lseek_count:                    %u\n", profile_p->syscall_lseek_count);
 
90
        d_printf("lseek_time:                     %u\n", profile_p->syscall_lseek_time);
 
91
        d_printf("rename_count:                   %u\n", profile_p->syscall_rename_count);
 
92
        d_printf("rename_time:                    %u\n", profile_p->syscall_rename_time);
 
93
        d_printf("fsync_count:                    %u\n", profile_p->syscall_fsync_count);
 
94
        d_printf("fsync_time:                     %u\n", profile_p->syscall_fsync_time);
 
95
        d_printf("stat_count:                     %u\n", profile_p->syscall_stat_count);
 
96
        d_printf("stat_time:                      %u\n", profile_p->syscall_stat_time);
 
97
        d_printf("fstat_count:                    %u\n", profile_p->syscall_fstat_count);
 
98
        d_printf("fstat_time:                     %u\n", profile_p->syscall_fstat_time);
 
99
        d_printf("lstat_count:                    %u\n", profile_p->syscall_lstat_count);
 
100
        d_printf("lstat_time:                     %u\n", profile_p->syscall_lstat_time);
 
101
        d_printf("unlink_count:                   %u\n", profile_p->syscall_unlink_count);
 
102
        d_printf("unlink_time:                    %u\n", profile_p->syscall_unlink_time);
 
103
        d_printf("chmod_count:                    %u\n", profile_p->syscall_chmod_count);
 
104
        d_printf("chmod_time:                     %u\n", profile_p->syscall_chmod_time);
 
105
        d_printf("fchmod_count:                   %u\n", profile_p->syscall_fchmod_count);
 
106
        d_printf("fchmod_time:                    %u\n", profile_p->syscall_fchmod_time);
 
107
        d_printf("chown_count:                    %u\n", profile_p->syscall_chown_count);
 
108
        d_printf("chown_time:                     %u\n", profile_p->syscall_chown_time);
 
109
        d_printf("fchown_count:                   %u\n", profile_p->syscall_fchown_count);
 
110
        d_printf("fchown_time:                    %u\n", profile_p->syscall_fchown_time);
 
111
        d_printf("chdir_count:                    %u\n", profile_p->syscall_chdir_count);
 
112
        d_printf("chdir_time:                     %u\n", profile_p->syscall_chdir_time);
 
113
        d_printf("getwd_count:                    %u\n", profile_p->syscall_getwd_count);
 
114
        d_printf("getwd_time:                     %u\n", profile_p->syscall_getwd_time);
 
115
        d_printf("ntimes_count:                   %u\n", profile_p->syscall_ntimes_count);
 
116
        d_printf("ntimes_time:                    %u\n", profile_p->syscall_ntimes_time);
 
117
        d_printf("ftruncate_count:                %u\n", profile_p->syscall_ftruncate_count);
 
118
        d_printf("ftruncate_time:                 %u\n", profile_p->syscall_ftruncate_time);
 
119
        d_printf("fcntl_lock_count:               %u\n", profile_p->syscall_fcntl_lock_count);
 
120
        d_printf("fcntl_lock_time:                %u\n", profile_p->syscall_fcntl_lock_time);
 
121
        d_printf("readlink_count:                 %u\n", profile_p->syscall_readlink_count);
 
122
        d_printf("readlink_time:                  %u\n", profile_p->syscall_readlink_time);
 
123
        d_printf("symlink_count:                  %u\n", profile_p->syscall_symlink_count);
 
124
        d_printf("symlink_time:                   %u\n", profile_p->syscall_symlink_time);
 
125
 
 
126
        profile_separator("Stat Cache");
 
127
        d_printf("lookups:                        %u\n", profile_p->statcache_lookups);
 
128
        d_printf("misses:                         %u\n", profile_p->statcache_misses);
 
129
        d_printf("hits:                           %u\n", profile_p->statcache_hits);
 
130
 
 
131
        profile_separator("Write Cache");
 
132
        d_printf("read_hits:                      %u\n", profile_p->writecache_read_hits);
 
133
        d_printf("abutted_writes:                 %u\n", profile_p->writecache_abutted_writes);
 
134
        d_printf("total_writes:                   %u\n", profile_p->writecache_total_writes);
 
135
        d_printf("non_oplock_writes:              %u\n", profile_p->writecache_non_oplock_writes);
 
136
        d_printf("direct_writes:                  %u\n", profile_p->writecache_direct_writes);
 
137
        d_printf("init_writes:                    %u\n", profile_p->writecache_init_writes);
 
138
        d_printf("flushed_writes[SEEK]:           %u\n", profile_p->writecache_flushed_writes[SEEK_FLUSH]);
 
139
        d_printf("flushed_writes[READ]:           %u\n", profile_p->writecache_flushed_writes[READ_FLUSH]);
 
140
        d_printf("flushed_writes[WRITE]:          %u\n", profile_p->writecache_flushed_writes[WRITE_FLUSH]);
 
141
        d_printf("flushed_writes[READRAW]:        %u\n", profile_p->writecache_flushed_writes[READRAW_FLUSH]);
 
142
        d_printf("flushed_writes[OPLOCK_RELEASE]: %u\n", profile_p->writecache_flushed_writes[OPLOCK_RELEASE_FLUSH]);
 
143
        d_printf("flushed_writes[CLOSE]:          %u\n", profile_p->writecache_flushed_writes[CLOSE_FLUSH]);
 
144
        d_printf("flushed_writes[SYNC]:           %u\n", profile_p->writecache_flushed_writes[SYNC_FLUSH]);
 
145
        d_printf("flushed_writes[SIZECHANGE]:     %u\n", profile_p->writecache_flushed_writes[SIZECHANGE_FLUSH]);
 
146
        d_printf("num_perfect_writes:             %u\n", profile_p->writecache_num_perfect_writes);
 
147
        d_printf("num_write_caches:               %u\n", profile_p->writecache_num_write_caches);
 
148
        d_printf("allocated_write_caches:         %u\n", profile_p->writecache_allocated_write_caches);
 
149
 
 
150
        profile_separator("SMB Calls");
 
151
        d_printf("mkdir_count:                    %u\n", profile_p->SMBmkdir_count);
 
152
        d_printf("mkdir_time:                     %u\n", profile_p->SMBmkdir_time);
 
153
        d_printf("rmdir_count:                    %u\n", profile_p->SMBrmdir_count);
 
154
        d_printf("rmdir_time:                     %u\n", profile_p->SMBrmdir_time);
 
155
        d_printf("open_count:                     %u\n", profile_p->SMBopen_count);
 
156
        d_printf("open_time:                      %u\n", profile_p->SMBopen_time);
 
157
        d_printf("create_count:                   %u\n", profile_p->SMBcreate_count);
 
158
        d_printf("create_time:                    %u\n", profile_p->SMBcreate_time);
 
159
        d_printf("close_count:                    %u\n", profile_p->SMBclose_count);
 
160
        d_printf("close_time:                     %u\n", profile_p->SMBclose_time);
 
161
        d_printf("flush_count:                    %u\n", profile_p->SMBflush_count);
 
162
        d_printf("flush_time:                     %u\n", profile_p->SMBflush_time);
 
163
        d_printf("unlink_count:                   %u\n", profile_p->SMBunlink_count);
 
164
        d_printf("unlink_time:                    %u\n", profile_p->SMBunlink_time);
 
165
        d_printf("mv_count:                       %u\n", profile_p->SMBmv_count);
 
166
        d_printf("mv_time:                        %u\n", profile_p->SMBmv_time);
 
167
        d_printf("getatr_count:                   %u\n", profile_p->SMBgetatr_count);
 
168
        d_printf("getatr_time:                    %u\n", profile_p->SMBgetatr_time);
 
169
        d_printf("setatr_count:                   %u\n", profile_p->SMBsetatr_count);
 
170
        d_printf("setatr_time:                    %u\n", profile_p->SMBsetatr_time);
 
171
        d_printf("read_count:                     %u\n", profile_p->SMBread_count);
 
172
        d_printf("read_time:                      %u\n", profile_p->SMBread_time);
 
173
        d_printf("write_count:                    %u\n", profile_p->SMBwrite_count);
 
174
        d_printf("write_time:                     %u\n", profile_p->SMBwrite_time);
 
175
        d_printf("lock_count:                     %u\n", profile_p->SMBlock_count);
 
176
        d_printf("lock_time:                      %u\n", profile_p->SMBlock_time);
 
177
        d_printf("unlock_count:                   %u\n", profile_p->SMBunlock_count);
 
178
        d_printf("unlock_time:                    %u\n", profile_p->SMBunlock_time);
 
179
        d_printf("ctemp_count:                    %u\n", profile_p->SMBctemp_count);
 
180
        d_printf("ctemp_time:                     %u\n", profile_p->SMBctemp_time);
 
181
        d_printf("mknew_count:                    %u\n", profile_p->SMBmknew_count);
 
182
        d_printf("mknew_time:                     %u\n", profile_p->SMBmknew_time);
 
183
        d_printf("checkpath_count:                %u\n", profile_p->SMBcheckpath_count);
 
184
        d_printf("checkpath_time:                 %u\n", profile_p->SMBcheckpath_time);
 
185
        d_printf("exit_count:                     %u\n", profile_p->SMBexit_count);
 
186
        d_printf("exit_time:                      %u\n", profile_p->SMBexit_time);
 
187
        d_printf("lseek_count:                    %u\n", profile_p->SMBlseek_count);
 
188
        d_printf("lseek_time:                     %u\n", profile_p->SMBlseek_time);
 
189
        d_printf("lockread_count:                 %u\n", profile_p->SMBlockread_count);
 
190
        d_printf("lockread_time:                  %u\n", profile_p->SMBlockread_time);
 
191
        d_printf("writeunlock_count:              %u\n", profile_p->SMBwriteunlock_count);
 
192
        d_printf("writeunlock_time:               %u\n", profile_p->SMBwriteunlock_time);
 
193
        d_printf("readbraw_count:                 %u\n", profile_p->SMBreadbraw_count);
 
194
        d_printf("readbraw_time:                  %u\n", profile_p->SMBreadbraw_time);
 
195
        d_printf("readBmpx_count:                 %u\n", profile_p->SMBreadBmpx_count);
 
196
        d_printf("readBmpx_time:                  %u\n", profile_p->SMBreadBmpx_time);
 
197
        d_printf("readBs_count:                   %u\n", profile_p->SMBreadBs_count);
 
198
        d_printf("readBs_time:                    %u\n", profile_p->SMBreadBs_time);
 
199
        d_printf("writebraw_count:                %u\n", profile_p->SMBwritebraw_count);
 
200
        d_printf("writebraw_time:                 %u\n", profile_p->SMBwritebraw_time);
 
201
        d_printf("writeBmpx_count:                %u\n", profile_p->SMBwriteBmpx_count);
 
202
        d_printf("writeBmpx_time:                 %u\n", profile_p->SMBwriteBmpx_time);
 
203
        d_printf("writeBs_count:                  %u\n", profile_p->SMBwriteBs_count);
 
204
        d_printf("writeBs_time:                   %u\n", profile_p->SMBwriteBs_time);
 
205
        d_printf("writec_count:                   %u\n", profile_p->SMBwritec_count);
 
206
        d_printf("writec_time:                    %u\n", profile_p->SMBwritec_time);
 
207
        d_printf("setattrE_count:                 %u\n", profile_p->SMBsetattrE_count);
 
208
        d_printf("setattrE_time:                  %u\n", profile_p->SMBsetattrE_time);
 
209
        d_printf("getattrE_count:                 %u\n", profile_p->SMBgetattrE_count);
 
210
        d_printf("getattrE_time:                  %u\n", profile_p->SMBgetattrE_time);
 
211
        d_printf("lockingX_count:                 %u\n", profile_p->SMBlockingX_count);
 
212
        d_printf("lockingX_time:                  %u\n", profile_p->SMBlockingX_time);
 
213
        d_printf("trans_count:                    %u\n", profile_p->SMBtrans_count);
 
214
        d_printf("trans_time:                     %u\n", profile_p->SMBtrans_time);
 
215
        d_printf("transs_count:                   %u\n", profile_p->SMBtranss_count);
 
216
        d_printf("transs_time:                    %u\n", profile_p->SMBtranss_time);
 
217
        d_printf("ioctl_count:                    %u\n", profile_p->SMBioctl_count);
 
218
        d_printf("ioctl_time:                     %u\n", profile_p->SMBioctl_time);
 
219
        d_printf("ioctls_count:                   %u\n", profile_p->SMBioctls_count);
 
220
        d_printf("ioctls_time:                    %u\n", profile_p->SMBioctls_time);
 
221
        d_printf("copy_count:                     %u\n", profile_p->SMBcopy_count);
 
222
        d_printf("copy_time:                      %u\n", profile_p->SMBcopy_time);
 
223
        d_printf("move_count:                     %u\n", profile_p->SMBmove_count);
 
224
        d_printf("move_time:                      %u\n", profile_p->SMBmove_time);
 
225
        d_printf("echo_count:                     %u\n", profile_p->SMBecho_count);
 
226
        d_printf("echo_time:                      %u\n", profile_p->SMBecho_time);
 
227
        d_printf("writeclose_count:               %u\n", profile_p->SMBwriteclose_count);
 
228
        d_printf("writeclose_time:                %u\n", profile_p->SMBwriteclose_time);
 
229
        d_printf("openX_count:                    %u\n", profile_p->SMBopenX_count);
 
230
        d_printf("openX_time:                     %u\n", profile_p->SMBopenX_time);
 
231
        d_printf("readX_count:                    %u\n", profile_p->SMBreadX_count);
 
232
        d_printf("readX_time:                     %u\n", profile_p->SMBreadX_time);
 
233
        d_printf("writeX_count:                   %u\n", profile_p->SMBwriteX_count);
 
234
        d_printf("writeX_time:                    %u\n", profile_p->SMBwriteX_time);
 
235
        d_printf("trans2_count:                   %u\n", profile_p->SMBtrans2_count);
 
236
        d_printf("trans2_time:                    %u\n", profile_p->SMBtrans2_time);
 
237
        d_printf("transs2_count:                  %u\n", profile_p->SMBtranss2_count);
 
238
        d_printf("transs2_time:                   %u\n", profile_p->SMBtranss2_time);
 
239
        d_printf("findclose_count:                %u\n", profile_p->SMBfindclose_count);
 
240
        d_printf("findclose_time:                 %u\n", profile_p->SMBfindclose_time);
 
241
        d_printf("findnclose_count:               %u\n", profile_p->SMBfindnclose_count);
 
242
        d_printf("findnclose_time:                %u\n", profile_p->SMBfindnclose_time);
 
243
        d_printf("tcon_count:                     %u\n", profile_p->SMBtcon_count);
 
244
        d_printf("tcon_time:                      %u\n", profile_p->SMBtcon_time);
 
245
        d_printf("tdis_count:                     %u\n", profile_p->SMBtdis_count);
 
246
        d_printf("tdis_time:                      %u\n", profile_p->SMBtdis_time);
 
247
        d_printf("negprot_count:                  %u\n", profile_p->SMBnegprot_count);
 
248
        d_printf("negprot_time:                   %u\n", profile_p->SMBnegprot_time);
 
249
        d_printf("sesssetupX_count:               %u\n", profile_p->SMBsesssetupX_count);
 
250
        d_printf("sesssetupX_time:                %u\n", profile_p->SMBsesssetupX_time);
 
251
        d_printf("ulogoffX_count:                 %u\n", profile_p->SMBulogoffX_count);
 
252
        d_printf("ulogoffX_time:                  %u\n", profile_p->SMBulogoffX_time);
 
253
        d_printf("tconX_count:                    %u\n", profile_p->SMBtconX_count);
 
254
        d_printf("tconX_time:                     %u\n", profile_p->SMBtconX_time);
 
255
        d_printf("dskattr_count:                  %u\n", profile_p->SMBdskattr_count);
 
256
        d_printf("dskattr_time:                   %u\n", profile_p->SMBdskattr_time);
 
257
        d_printf("search_count:                   %u\n", profile_p->SMBsearch_count);
 
258
        d_printf("search_time:                    %u\n", profile_p->SMBsearch_time);
 
259
        d_printf("ffirst_count:                   %u\n", profile_p->SMBffirst_count);
 
260
        d_printf("ffirst_time:                    %u\n", profile_p->SMBffirst_time);
 
261
        d_printf("funique_count:                  %u\n", profile_p->SMBfunique_count);
 
262
        d_printf("funique_time:                   %u\n", profile_p->SMBfunique_time);
 
263
        d_printf("fclose_count:                   %u\n", profile_p->SMBfclose_count);
 
264
        d_printf("fclose_time:                    %u\n", profile_p->SMBfclose_time);
 
265
        d_printf("nttrans_count:                  %u\n", profile_p->SMBnttrans_count);
 
266
        d_printf("nttrans_time:                   %u\n", profile_p->SMBnttrans_time);
 
267
        d_printf("nttranss_count:                 %u\n", profile_p->SMBnttranss_count);
 
268
        d_printf("nttranss_time:                  %u\n", profile_p->SMBnttranss_time);
 
269
        d_printf("ntcreateX_count:                %u\n", profile_p->SMBntcreateX_count);
 
270
        d_printf("ntcreateX_time:                 %u\n", profile_p->SMBntcreateX_time);
 
271
        d_printf("ntcancel_count:                 %u\n", profile_p->SMBntcancel_count);
 
272
        d_printf("ntcancel_time:                  %u\n", profile_p->SMBntcancel_time);
 
273
        d_printf("splopen_count:                  %u\n", profile_p->SMBsplopen_count);
 
274
        d_printf("splopen_time:                   %u\n", profile_p->SMBsplopen_time);
 
275
        d_printf("splwr_count:                    %u\n", profile_p->SMBsplwr_count);
 
276
        d_printf("splwr_time:                     %u\n", profile_p->SMBsplwr_time);
 
277
        d_printf("splclose_count:                 %u\n", profile_p->SMBsplclose_count);
 
278
        d_printf("splclose_time:                  %u\n", profile_p->SMBsplclose_time);
 
279
        d_printf("splretq_count:                  %u\n", profile_p->SMBsplretq_count);
 
280
        d_printf("splretq_time:                   %u\n", profile_p->SMBsplretq_time);
 
281
        d_printf("sends_count:                    %u\n", profile_p->SMBsends_count);
 
282
        d_printf("sends_time:                     %u\n", profile_p->SMBsends_time);
 
283
        d_printf("sendb_count:                    %u\n", profile_p->SMBsendb_count);
 
284
        d_printf("sendb_time:                     %u\n", profile_p->SMBsendb_time);
 
285
        d_printf("fwdname_count:                  %u\n", profile_p->SMBfwdname_count);
 
286
        d_printf("fwdname_time:                   %u\n", profile_p->SMBfwdname_time);
 
287
        d_printf("cancelf_count:                  %u\n", profile_p->SMBcancelf_count);
 
288
        d_printf("cancelf_time:                   %u\n", profile_p->SMBcancelf_time);
 
289
        d_printf("getmac_count:                   %u\n", profile_p->SMBgetmac_count);
 
290
        d_printf("getmac_time:                    %u\n", profile_p->SMBgetmac_time);
 
291
        d_printf("sendstrt_count:                 %u\n", profile_p->SMBsendstrt_count);
 
292
        d_printf("sendstrt_time:                  %u\n", profile_p->SMBsendstrt_time);
 
293
        d_printf("sendend_count:                  %u\n", profile_p->SMBsendend_count);
 
294
        d_printf("sendend_time:                   %u\n", profile_p->SMBsendend_time);
 
295
        d_printf("sendtxt_count:                  %u\n", profile_p->SMBsendtxt_count);
 
296
        d_printf("sendtxt_time:                   %u\n", profile_p->SMBsendtxt_time);
 
297
        d_printf("invalid_count:                  %u\n", profile_p->SMBinvalid_count);
 
298
        d_printf("invalid_time:                   %u\n", profile_p->SMBinvalid_time);
 
299
 
 
300
        profile_separator("Pathworks Calls");
 
301
        d_printf("setdir_count:                   %u\n", profile_p->pathworks_setdir_count);
 
302
        d_printf("setdir_time:                    %u\n", profile_p->pathworks_setdir_time);
 
303
 
 
304
        profile_separator("Trans2 Calls");
 
305
        d_printf("open_count:                     %u\n", profile_p->Trans2_open_count);
 
306
        d_printf("open_time:                      %u\n", profile_p->Trans2_open_time);
 
307
        d_printf("findfirst_count:                %u\n", profile_p->Trans2_findfirst_count);
 
308
        d_printf("findfirst_time:                 %u\n", profile_p->Trans2_findfirst_time);
 
309
        d_printf("findnext_count:                 %u\n", profile_p->Trans2_findnext_count);
 
310
        d_printf("findnext_time:                  %u\n", profile_p->Trans2_findnext_time);
 
311
        d_printf("qfsinfo_count:                  %u\n", profile_p->Trans2_qfsinfo_count);
 
312
        d_printf("qfsinfo_time:                   %u\n", profile_p->Trans2_qfsinfo_time);
 
313
        d_printf("setfsinfo_count:                %u\n", profile_p->Trans2_setfsinfo_count);
 
314
        d_printf("setfsinfo_time:                 %u\n", profile_p->Trans2_setfsinfo_time);
 
315
        d_printf("qpathinfo_count:                %u\n", profile_p->Trans2_qpathinfo_count);
 
316
        d_printf("qpathinfo_time:                 %u\n", profile_p->Trans2_qpathinfo_time);
 
317
        d_printf("setpathinfo_count:              %u\n", profile_p->Trans2_setpathinfo_count);
 
318
        d_printf("setpathinfo_time:               %u\n", profile_p->Trans2_setpathinfo_time);
 
319
        d_printf("qfileinfo_count:                %u\n", profile_p->Trans2_qfileinfo_count);
 
320
        d_printf("qfileinfo_time:                 %u\n", profile_p->Trans2_qfileinfo_time);
 
321
        d_printf("setfileinfo_count:              %u\n", profile_p->Trans2_setfileinfo_count);
 
322
        d_printf("setfileinfo_time:               %u\n", profile_p->Trans2_setfileinfo_time);
 
323
        d_printf("fsctl_count:                    %u\n", profile_p->Trans2_fsctl_count);
 
324
        d_printf("fsctl_time:                     %u\n", profile_p->Trans2_fsctl_time);
 
325
        d_printf("ioctl_count:                    %u\n", profile_p->Trans2_ioctl_count);
 
326
        d_printf("ioctl_time:                     %u\n", profile_p->Trans2_ioctl_time);
 
327
        d_printf("findnotifyfirst_count:          %u\n", profile_p->Trans2_findnotifyfirst_count);
 
328
        d_printf("findnotifyfirst_time:           %u\n", profile_p->Trans2_findnotifyfirst_time);
 
329
        d_printf("findnotifynext_count:           %u\n", profile_p->Trans2_findnotifynext_count);
 
330
        d_printf("findnotifynext_time:            %u\n", profile_p->Trans2_findnotifynext_time);
 
331
        d_printf("mkdir_count:                    %u\n", profile_p->Trans2_mkdir_count);
 
332
        d_printf("mkdir_time:                     %u\n", profile_p->Trans2_mkdir_time);
 
333
        d_printf("session_setup_count:            %u\n", profile_p->Trans2_session_setup_count);
 
334
        d_printf("session_setup_time:             %u\n", profile_p->Trans2_session_setup_time);
 
335
        d_printf("get_dfs_referral_count:         %u\n", profile_p->Trans2_get_dfs_referral_count);
 
336
        d_printf("get_dfs_referral_time:          %u\n", profile_p->Trans2_get_dfs_referral_time);
 
337
        d_printf("report_dfs_inconsistancy_count: %u\n", profile_p->Trans2_report_dfs_inconsistancy_count);
 
338
        d_printf("report_dfs_inconsistancy_time:  %u\n", profile_p->Trans2_report_dfs_inconsistancy_time);
 
339
 
 
340
        profile_separator("NT Transact Calls");
 
341
        d_printf("create_count:                   %u\n", profile_p->NT_transact_create_count);
 
342
        d_printf("create_time:                    %u\n", profile_p->NT_transact_create_time);
 
343
        d_printf("ioctl_count:                    %u\n", profile_p->NT_transact_ioctl_count);
 
344
        d_printf("ioctl_time:                     %u\n", profile_p->NT_transact_ioctl_time);
 
345
        d_printf("set_security_desc_count:        %u\n", profile_p->NT_transact_set_security_desc_count);
 
346
        d_printf("set_security_desc_time:         %u\n", profile_p->NT_transact_set_security_desc_time);
 
347
        d_printf("notify_change_count:            %u\n", profile_p->NT_transact_notify_change_count);
 
348
        d_printf("notify_change_time:             %u\n", profile_p->NT_transact_notify_change_time);
 
349
        d_printf("rename_count:                   %u\n", profile_p->NT_transact_rename_count);
 
350
        d_printf("rename_time:                    %u\n", profile_p->NT_transact_rename_time);
 
351
        d_printf("query_security_desc_count:      %u\n", profile_p->NT_transact_query_security_desc_count);
 
352
        d_printf("query_security_desc_time:       %u\n", profile_p->NT_transact_query_security_desc_time);
 
353
 
 
354
        profile_separator("ACL Calls");
 
355
        d_printf("get_nt_acl_count:               %u\n", profile_p->get_nt_acl_count);
 
356
        d_printf("get_nt_acl_time:                %u\n", profile_p->get_nt_acl_time);
 
357
        d_printf("fget_nt_acl_count:              %u\n", profile_p->fget_nt_acl_count);
 
358
        d_printf("fget_nt_acl_time:               %u\n", profile_p->fget_nt_acl_time);
 
359
        d_printf("fset_nt_acl_count:              %u\n", profile_p->fset_nt_acl_count);
 
360
        d_printf("fset_nt_acl_time:               %u\n", profile_p->fset_nt_acl_time);
 
361
        d_printf("chmod_acl_count:                %u\n", profile_p->chmod_acl_count);
 
362
        d_printf("chmod_acl_time:                 %u\n", profile_p->chmod_acl_time);
 
363
        d_printf("fchmod_acl_count:               %u\n", profile_p->fchmod_acl_count);
 
364
        d_printf("fchmod_acl_time:                %u\n", profile_p->fchmod_acl_time);
 
365
 
 
366
        profile_separator("NMBD Calls");
 
367
        d_printf("name_release_count:             %u\n", profile_p->name_release_count);
 
368
        d_printf("name_release_time:              %u\n", profile_p->name_release_time);
 
369
        d_printf("name_refresh_count:             %u\n", profile_p->name_refresh_count);
 
370
        d_printf("name_refresh_time:              %u\n", profile_p->name_refresh_time);
 
371
        d_printf("name_registration_count:        %u\n", profile_p->name_registration_count);
 
372
        d_printf("name_registration_time:         %u\n", profile_p->name_registration_time);
 
373
        d_printf("node_status_count:              %u\n", profile_p->node_status_count);
 
374
        d_printf("node_status_time:               %u\n", profile_p->node_status_time);
 
375
        d_printf("name_query_count:               %u\n", profile_p->name_query_count);
 
376
        d_printf("name_query_time:                %u\n", profile_p->name_query_time);
 
377
        d_printf("host_announce_count:            %u\n", profile_p->host_announce_count);
 
378
        d_printf("host_announce_time:             %u\n", profile_p->host_announce_time);
 
379
        d_printf("workgroup_announce_count:       %u\n", profile_p->workgroup_announce_count);
 
380
        d_printf("workgroup_announce_time:        %u\n", profile_p->workgroup_announce_time);
 
381
        d_printf("local_master_announce_count:    %u\n", profile_p->local_master_announce_count);
 
382
        d_printf("local_master_announce_time:     %u\n", profile_p->local_master_announce_time);
 
383
        d_printf("master_browser_announce_count:  %u\n", profile_p->master_browser_announce_count);
 
384
        d_printf("master_browser_announce_time:   %u\n", profile_p->master_browser_announce_time);
 
385
        d_printf("lm_host_announce_count:         %u\n", profile_p->lm_host_announce_count);
 
386
        d_printf("lm_host_announce_time:          %u\n", profile_p->lm_host_announce_time);
 
387
        d_printf("get_backup_list_count:          %u\n", profile_p->get_backup_list_count);
 
388
        d_printf("get_backup_list_time:           %u\n", profile_p->get_backup_list_time);
 
389
        d_printf("reset_browser_count:            %u\n", profile_p->reset_browser_count);
 
390
        d_printf("reset_browser_time:             %u\n", profile_p->reset_browser_time);
 
391
        d_printf("announce_request_count:         %u\n", profile_p->announce_request_count);
 
392
        d_printf("announce_request_time:          %u\n", profile_p->announce_request_time);
 
393
        d_printf("lm_announce_request_count:      %u\n", profile_p->lm_announce_request_count);
 
394
        d_printf("lm_announce_request_time:       %u\n", profile_p->lm_announce_request_time);
 
395
        d_printf("domain_logon_count:             %u\n", profile_p->domain_logon_count);
 
396
        d_printf("domain_logon_time:              %u\n", profile_p->domain_logon_time);
 
397
        d_printf("sync_browse_lists_count:        %u\n", profile_p->sync_browse_lists_count);
 
398
        d_printf("sync_browse_lists_time:         %u\n", profile_p->sync_browse_lists_time);
 
399
        d_printf("run_elections_count:            %u\n", profile_p->run_elections_count);
 
400
        d_printf("run_elections_time:             %u\n", profile_p->run_elections_time);
 
401
        d_printf("election_count:                 %u\n", profile_p->election_count);
 
402
        d_printf("election_time:                  %u\n", profile_p->election_time);
 
403
#else /* WITH_PROFILE */
 
404
        fprintf(stderr, "Profile data unavailable\n");
 
405
#endif /* WITH_PROFILE */
 
406
 
 
407
        return True;
 
408
}
 
409
 
 
410
#ifdef WITH_PROFILE
 
411
 
 
412
/* Convert microseconds to milliseconds. */
 
413
#define usec_to_msec(s) ((s) / 1000)
 
414
/* Convert microseconds to seconds. */
 
415
#define usec_to_sec(s) ((s) / 1000000)
 
416
/* One second in microseconds. */
 
417
#define one_second_usec (1000000)
 
418
 
 
419
#define sample_interval_usec one_second_usec
 
420
 
 
421
#define percent_time(used, period) ((double)(used) / (double)(period) * 100.0 )
 
422
 
 
423
static int print_count_samples(
 
424
        const struct profile_stats * const current,
 
425
        const struct profile_stats * const last,
 
426
        uint64_t delta_usec)
 
427
{
 
428
        int i;
 
429
        int count = 0;
 
430
        unsigned step;
 
431
        uint64_t spent;
 
432
        int delta_sec;
 
433
        const char * name;
 
434
        char buf[40];
 
435
 
 
436
        if (delta_usec == 0) {
 
437
                return 0;
 
438
        }
 
439
 
 
440
        buf[0] = '\0';
 
441
        delta_sec = usec_to_sec(delta_usec);
 
442
 
 
443
        for (i = 0; i < PR_VALUE_MAX; ++i) {
 
444
                step = current->count[i] - last->count[i];
 
445
                spent = current->time[i] - last->time[i];
 
446
 
 
447
                if (step) {
 
448
                        ++count;
 
449
 
 
450
                        name = profile_value_name(i);
 
451
 
 
452
                        if (buf[0] == '\0') {
 
453
                                snprintf(buf, sizeof(buf),
 
454
                                        "%s %d/sec (%.2f%%)",
 
455
                                        name, step / delta_sec,
 
456
                                        percent_time(spent, delta_usec));
 
457
                        } else {
 
458
                                printf("%-40s %s %d/sec (%.2f%%)\n",
 
459
                                        buf, name, step / delta_sec,
 
460
                                        percent_time(spent, delta_usec));
 
461
                                buf[0] = '\0';
 
462
                        }
 
463
                }
 
464
        }
 
465
 
 
466
        return count;
 
467
}
 
468
 
 
469
static struct profile_stats     sample_data[2];
 
470
static uint64_t         sample_time[2];
 
471
 
 
472
bool status_profile_rates(bool verbose)
 
473
{
 
474
        uint64_t remain_usec;
 
475
        uint64_t next_usec;
 
476
        uint64_t delta_usec;
 
477
 
 
478
        int last = 0;
 
479
        int current = 1;
 
480
        int tmp;
 
481
 
 
482
        if (verbose) {
 
483
            fprintf(stderr, "Sampling stats at %d sec intervals\n",
 
484
                    usec_to_sec(sample_interval_usec));
 
485
        }
 
486
 
 
487
        if (!profile_setup(NULL, True)) {
 
488
                fprintf(stderr,"Failed to initialise profile memory\n");
 
489
                return False;
 
490
        }
 
491
 
 
492
        memcpy(&sample_data[last], profile_p, sizeof(*profile_p));
 
493
        for (;;) {
 
494
                sample_time[current] = profile_timestamp();
 
495
                next_usec = sample_time[current] + sample_interval_usec;
 
496
 
 
497
                /* Take a sample. */
 
498
                memcpy(&sample_data[current], profile_p, sizeof(*profile_p));
 
499
 
 
500
                /* Rate convert some values and print results. */
 
501
                delta_usec = sample_time[current] - sample_time[last];
 
502
 
 
503
                if (print_count_samples(&sample_data[current],
 
504
                        &sample_data[last], delta_usec)) {
 
505
                        printf("\n");
 
506
                }
 
507
 
 
508
                /* Swap sampling buffers. */
 
509
                tmp = last;
 
510
                last = current;
 
511
                current = tmp;
 
512
 
 
513
                /* Delay until next sample time. */
 
514
                remain_usec = next_usec - profile_timestamp();
 
515
                if (remain_usec > sample_interval_usec) {
 
516
                        fprintf(stderr, "eek! falling behind sampling rate!\n");
 
517
                } else {
 
518
                        if (verbose) {
 
519
                            fprintf(stderr,
 
520
                                    "delaying for %lu msec\n",
 
521
                                    (unsigned long )usec_to_msec(remain_usec));
 
522
                        }
 
523
 
 
524
                        sys_usleep(remain_usec);
 
525
                }
 
526
 
 
527
        }
 
528
 
 
529
        return True;
 
530
}
 
531
 
 
532
#else /* WITH_PROFILE */
 
533
 
 
534
bool status_profile_rates(bool verbose)
 
535
{
 
536
        fprintf(stderr, "Profile data unavailable\n");
 
537
        return False;
 
538
}
 
539
 
 
540
#endif /* WITH_PROFILE */
 
541