root / synthbench / bonnie++ / bon_time.cpp
History | View | Annotate | Download (9.1 kB)
1 | 0:839f52ef7657 | louridas | |
---|---|---|---|
2 | 0:839f52ef7657 | louridas | using namespace std; |
3 | 0:839f52ef7657 | louridas | |
4 | 0:839f52ef7657 | louridas | #include <sys/time.h> |
5 | 0:839f52ef7657 | louridas | #ifdef OS2
|
6 | 0:839f52ef7657 | louridas | #define INCL_DOSFILEMGR
|
7 | 0:839f52ef7657 | louridas | #define INCL_BASE
|
8 | 0:839f52ef7657 | louridas | #include <os2.h> |
9 | 0:839f52ef7657 | louridas | #include "os2-perfutil.h" |
10 | 0:839f52ef7657 | louridas | /*
|
11 | 0:839f52ef7657 | louridas | Convert 8-byte (low, high) time value to double
|
12 | 0:839f52ef7657 | louridas | */
|
13 | 0:839f52ef7657 | louridas | #define LL2F(high, low) (4294967296.0*(high)+(low)) |
14 | 0:839f52ef7657 | louridas | #else
|
15 | 0:839f52ef7657 | louridas | #include <unistd.h> |
16 | 0:839f52ef7657 | louridas | #include <sys/resource.h> |
17 | 0:839f52ef7657 | louridas | #endif
|
18 | 0:839f52ef7657 | louridas | #include "bon_time.h" |
19 | 0:839f52ef7657 | louridas | #include <time.h> |
20 | 0:839f52ef7657 | louridas | #include <string.h> |
21 | 0:839f52ef7657 | louridas | |
22 | 0:839f52ef7657 | louridas | #ifndef NON_UNIX
|
23 | 0:839f52ef7657 | louridas | #include "conf.h" |
24 | 0:839f52ef7657 | louridas | #endif
|
25 | 0:839f52ef7657 | louridas | |
26 | 0:839f52ef7657 | louridas | #ifdef HAVE_ALGORITHM
|
27 | 0:839f52ef7657 | louridas | #include <algorithm> |
28 | 0:839f52ef7657 | louridas | #else
|
29 | 0:839f52ef7657 | louridas | |
30 | 0:839f52ef7657 | louridas | #ifdef HAVE_ALGO
|
31 | 0:839f52ef7657 | louridas | #include <algo> |
32 | 0:839f52ef7657 | louridas | #else
|
33 | 0:839f52ef7657 | louridas | #ifdef HAVE_ALGO_H
|
34 | 0:839f52ef7657 | louridas | #include <algo.h> |
35 | 0:839f52ef7657 | louridas | #else
|
36 | 0:839f52ef7657 | louridas | #define min(XX,YY) ((XX) < (YY) ? (XX) : (YY))
|
37 | 0:839f52ef7657 | louridas | #define max(XX,YY) ((XX) > (YY) ? (XX) : (YY))
|
38 | 0:839f52ef7657 | louridas | #endif
|
39 | 0:839f52ef7657 | louridas | #endif
|
40 | 0:839f52ef7657 | louridas | |
41 | 0:839f52ef7657 | louridas | #endif
|
42 | 0:839f52ef7657 | louridas | |
43 | 0:839f52ef7657 | louridas | #define TIMEVAL_TO_DOUBLE(XX) (double((XX).tv_sec) + double((XX).tv_usec) / 1000000.0) |
44 | 0:839f52ef7657 | louridas | |
45 | 0:839f52ef7657 | louridas | void BonTimer::timestamp()
|
46 | 0:839f52ef7657 | louridas | { |
47 | 0:839f52ef7657 | louridas | m_last_timestamp = get_cur_time(); |
48 | 0:839f52ef7657 | louridas | m_last_cpustamp = get_cpu_use(); |
49 | 0:839f52ef7657 | louridas | } |
50 | 0:839f52ef7657 | louridas | |
51 | 0:839f52ef7657 | louridas | double
|
52 | 0:839f52ef7657 | louridas | BonTimer::time_so_far() |
53 | 0:839f52ef7657 | louridas | { |
54 | 0:839f52ef7657 | louridas | return get_cur_time() - m_last_timestamp;
|
55 | 0:839f52ef7657 | louridas | } |
56 | 0:839f52ef7657 | louridas | |
57 | 0:839f52ef7657 | louridas | double
|
58 | 0:839f52ef7657 | louridas | BonTimer::cpu_so_far() |
59 | 0:839f52ef7657 | louridas | { |
60 | 0:839f52ef7657 | louridas | return get_cpu_use() - m_last_cpustamp;
|
61 | 0:839f52ef7657 | louridas | } |
62 | 0:839f52ef7657 | louridas | |
63 | 0:839f52ef7657 | louridas | double
|
64 | 0:839f52ef7657 | louridas | BonTimer::get_cur_time() |
65 | 0:839f52ef7657 | louridas | { |
66 | 0:839f52ef7657 | louridas | #ifdef OS2
|
67 | 0:839f52ef7657 | louridas | ULONG count = 0;
|
68 | 0:839f52ef7657 | louridas | ULONG rc = DosQuerySysInfo(QSV_MS_COUNT, QSV_MS_COUNT, &count, sizeof(count));
|
69 | 0:839f52ef7657 | louridas | if(rc)
|
70 | 0:839f52ef7657 | louridas | return 0.0; |
71 | 0:839f52ef7657 | louridas | return double(count)/1000.0; |
72 | 0:839f52ef7657 | louridas | #else
|
73 | 0:839f52ef7657 | louridas | struct timeval tp;
|
74 | 0:839f52ef7657 | louridas | |
75 | 0:839f52ef7657 | louridas | if (gettimeofday(&tp, static_cast<struct timezone *>(NULL)) == -1) |
76 | 0:839f52ef7657 | louridas | io_error("gettimeofday", true); |
77 | 0:839f52ef7657 | louridas | return TIMEVAL_TO_DOUBLE(tp);
|
78 | 0:839f52ef7657 | louridas | #endif
|
79 | 0:839f52ef7657 | louridas | } |
80 | 0:839f52ef7657 | louridas | |
81 | 0:839f52ef7657 | louridas | double
|
82 | 0:839f52ef7657 | louridas | BonTimer::get_cpu_use() |
83 | 0:839f52ef7657 | louridas | { |
84 | 0:839f52ef7657 | louridas | #ifdef OS2
|
85 | 0:839f52ef7657 | louridas | double busy_val, busy_val_prev;
|
86 | 0:839f52ef7657 | louridas | double intr_val, intr_val_prev;
|
87 | 0:839f52ef7657 | louridas | CPUUTIL CPUUtil; |
88 | 0:839f52ef7657 | louridas | |
89 | 0:839f52ef7657 | louridas | ULONG rc = DosPerfSysCall(CMD_KI_RDCNT,(ULONG) &CPUUtil,0,0); |
90 | 0:839f52ef7657 | louridas | if(rc)
|
91 | 0:839f52ef7657 | louridas | io_error("times", true); |
92 | 0:839f52ef7657 | louridas | return LL2F(CPUUtil.ulBusyHigh, CPUUtil.ulBusyLow)
|
93 | 0:839f52ef7657 | louridas | + LL2F(CPUUtil.ulIntrHigh, CPUUtil.ulIntrLow); |
94 | 0:839f52ef7657 | louridas | #else
|
95 | 0:839f52ef7657 | louridas | struct rusage res_usage;
|
96 | 0:839f52ef7657 | louridas | |
97 | 0:839f52ef7657 | louridas | getrusage(RUSAGE_SELF, &res_usage); |
98 | 0:839f52ef7657 | louridas | return TIMEVAL_TO_DOUBLE(res_usage.ru_utime) + TIMEVAL_TO_DOUBLE(res_usage.ru_stime);
|
99 | 0:839f52ef7657 | louridas | #endif
|
100 | 0:839f52ef7657 | louridas | } |
101 | 0:839f52ef7657 | louridas | |
102 | 0:839f52ef7657 | louridas | void BonTimer::get_delta_t(tests_t test)
|
103 | 0:839f52ef7657 | louridas | { |
104 | 0:839f52ef7657 | louridas | m_delta[test].Elapsed = time_so_far(); |
105 | 0:839f52ef7657 | louridas | m_delta[test].CPU = cpu_so_far(); |
106 | 0:839f52ef7657 | louridas | timestamp(); |
107 | 0:839f52ef7657 | louridas | } |
108 | 0:839f52ef7657 | louridas | |
109 | 0:839f52ef7657 | louridas | void BonTimer::get_delta_report(report_s &rep)
|
110 | 0:839f52ef7657 | louridas | { |
111 | 0:839f52ef7657 | louridas | rep.EndTime = get_cur_time(); |
112 | 0:839f52ef7657 | louridas | rep.CPU = cpu_so_far(); |
113 | 0:839f52ef7657 | louridas | timestamp(); |
114 | 0:839f52ef7657 | louridas | } |
115 | 0:839f52ef7657 | louridas | |
116 | 0:839f52ef7657 | louridas | void BonTimer::add_delta_report(report_s &rep, tests_t test)
|
117 | 0:839f52ef7657 | louridas | { |
118 | 0:839f52ef7657 | louridas | if(m_delta[test].CPU == 0.0) |
119 | 0:839f52ef7657 | louridas | { |
120 | 0:839f52ef7657 | louridas | m_delta[test].FirstStart = rep.StartTime; |
121 | 0:839f52ef7657 | louridas | m_delta[test].LastStop = rep.EndTime; |
122 | 0:839f52ef7657 | louridas | } |
123 | 0:839f52ef7657 | louridas | else
|
124 | 0:839f52ef7657 | louridas | { |
125 | 0:839f52ef7657 | louridas | m_delta[test].FirstStart = min(m_delta[test].FirstStart, rep.StartTime); |
126 | 0:839f52ef7657 | louridas | m_delta[test].LastStop = max(m_delta[test].LastStop, rep.EndTime); |
127 | 0:839f52ef7657 | louridas | } |
128 | 0:839f52ef7657 | louridas | m_delta[test].CPU += rep.CPU; |
129 | 0:839f52ef7657 | louridas | m_delta[test].Elapsed = m_delta[test].LastStop - m_delta[test].FirstStart; |
130 | 0:839f52ef7657 | louridas | } |
131 | 0:839f52ef7657 | louridas | |
132 | 0:839f52ef7657 | louridas | BonTimer::BonTimer() |
133 | 0:839f52ef7657 | louridas | : m_type(txt) |
134 | 0:839f52ef7657 | louridas | { |
135 | 0:839f52ef7657 | louridas | Initialize(); |
136 | 0:839f52ef7657 | louridas | } |
137 | 0:839f52ef7657 | louridas | |
138 | 0:839f52ef7657 | louridas | void
|
139 | 0:839f52ef7657 | louridas | BonTimer::Initialize() |
140 | 0:839f52ef7657 | louridas | { |
141 | 0:839f52ef7657 | louridas | for(int i = 0; i < TestCount; i++) |
142 | 0:839f52ef7657 | louridas | { |
143 | 0:839f52ef7657 | louridas | m_delta[i].CPU = 0.0; |
144 | 0:839f52ef7657 | louridas | m_delta[i].Elapsed = 0.0; |
145 | 0:839f52ef7657 | louridas | } |
146 | 0:839f52ef7657 | louridas | timestamp(); |
147 | 0:839f52ef7657 | louridas | } |
148 | 0:839f52ef7657 | louridas | |
149 | 0:839f52ef7657 | louridas | int BonTimer::print_cpu_stat(tests_t test)
|
150 | 0:839f52ef7657 | louridas | { |
151 | 0:839f52ef7657 | louridas | if(m_delta[test].Elapsed == 0.0) |
152 | 0:839f52ef7657 | louridas | { |
153 | 0:839f52ef7657 | louridas | if(m_type == txt)
|
154 | 0:839f52ef7657 | louridas | fprintf(m_fp, " ");
|
155 | 0:839f52ef7657 | louridas | else
|
156 | 0:839f52ef7657 | louridas | fprintf(m_fp, ",");
|
157 | 0:839f52ef7657 | louridas | return 0; |
158 | 0:839f52ef7657 | louridas | } |
159 | 0:839f52ef7657 | louridas | if(m_delta[test].Elapsed < MinTime)
|
160 | 0:839f52ef7657 | louridas | { |
161 | 0:839f52ef7657 | louridas | if(m_type == txt)
|
162 | 0:839f52ef7657 | louridas | fprintf(m_fp, " +++");
|
163 | 0:839f52ef7657 | louridas | else
|
164 | 0:839f52ef7657 | louridas | fprintf(m_fp, ",+++");
|
165 | 0:839f52ef7657 | louridas | return 0; |
166 | 0:839f52ef7657 | louridas | } |
167 | 0:839f52ef7657 | louridas | int cpu = int(m_delta[test].CPU / m_delta[test].Elapsed * 100.0); |
168 | 0:839f52ef7657 | louridas | if(m_type == txt)
|
169 | 0:839f52ef7657 | louridas | fprintf(m_fp, " %3d", cpu);
|
170 | 0:839f52ef7657 | louridas | else
|
171 | 0:839f52ef7657 | louridas | fprintf(m_fp, ",%d", cpu);
|
172 | 0:839f52ef7657 | louridas | return 0; |
173 | 0:839f52ef7657 | louridas | } |
174 | 0:839f52ef7657 | louridas | |
175 | 0:839f52ef7657 | louridas | int BonTimer::print_stat(tests_t test)
|
176 | 0:839f52ef7657 | louridas | { |
177 | 0:839f52ef7657 | louridas | if(m_delta[test].Elapsed == 0.0) |
178 | 0:839f52ef7657 | louridas | { |
179 | 0:839f52ef7657 | louridas | if(m_type == txt)
|
180 | 0:839f52ef7657 | louridas | fprintf(m_fp, " ");
|
181 | 0:839f52ef7657 | louridas | else
|
182 | 0:839f52ef7657 | louridas | fprintf(m_fp, ",");
|
183 | 0:839f52ef7657 | louridas | } |
184 | 0:839f52ef7657 | louridas | else if(m_delta[test].Elapsed < MinTime) |
185 | 0:839f52ef7657 | louridas | { |
186 | 0:839f52ef7657 | louridas | if(m_type == txt)
|
187 | 0:839f52ef7657 | louridas | fprintf(m_fp, " +++++");
|
188 | 0:839f52ef7657 | louridas | else
|
189 | 0:839f52ef7657 | louridas | fprintf(m_fp, ",+++++");
|
190 | 0:839f52ef7657 | louridas | } |
191 | 0:839f52ef7657 | louridas | else
|
192 | 0:839f52ef7657 | louridas | { |
193 | 0:839f52ef7657 | louridas | if(test == Lseek)
|
194 | 0:839f52ef7657 | louridas | { |
195 | 0:839f52ef7657 | louridas | double seek_stat = double(Seeks) / m_delta[test].Elapsed; |
196 | 0:839f52ef7657 | louridas | if(m_type == txt)
|
197 | 0:839f52ef7657 | louridas | { |
198 | 0:839f52ef7657 | louridas | if(seek_stat >= 1000.0) |
199 | 0:839f52ef7657 | louridas | fprintf(m_fp, " %5.0f", seek_stat);
|
200 | 0:839f52ef7657 | louridas | else
|
201 | 0:839f52ef7657 | louridas | fprintf(m_fp, " %5.1f", seek_stat);
|
202 | 0:839f52ef7657 | louridas | } |
203 | 0:839f52ef7657 | louridas | else
|
204 | 0:839f52ef7657 | louridas | fprintf(m_fp, ",%.1f", seek_stat);
|
205 | 0:839f52ef7657 | louridas | } |
206 | 0:839f52ef7657 | louridas | else
|
207 | 0:839f52ef7657 | louridas | { |
208 | 0:839f52ef7657 | louridas | int res = int(double(m_file_size) / (m_delta[test].Elapsed / 1024.0)); |
209 | 0:839f52ef7657 | louridas | if(m_type == txt)
|
210 | 0:839f52ef7657 | louridas | fprintf(m_fp, " %5d", res);
|
211 | 0:839f52ef7657 | louridas | else
|
212 | 0:839f52ef7657 | louridas | fprintf(m_fp, ",%d", res);
|
213 | 0:839f52ef7657 | louridas | } |
214 | 0:839f52ef7657 | louridas | } |
215 | 0:839f52ef7657 | louridas | return print_cpu_stat(test);
|
216 | 0:839f52ef7657 | louridas | } |
217 | 0:839f52ef7657 | louridas | |
218 | 0:839f52ef7657 | louridas | int BonTimer::print_file_stat(tests_t test)
|
219 | 0:839f52ef7657 | louridas | { |
220 | 0:839f52ef7657 | louridas | if(m_delta[test].Elapsed == 0.0) |
221 | 0:839f52ef7657 | louridas | { |
222 | 0:839f52ef7657 | louridas | if(m_type == txt)
|
223 | 0:839f52ef7657 | louridas | fprintf(m_fp, " ");
|
224 | 0:839f52ef7657 | louridas | else
|
225 | 0:839f52ef7657 | louridas | fprintf(m_fp, ",");
|
226 | 0:839f52ef7657 | louridas | } |
227 | 0:839f52ef7657 | louridas | else if(m_delta[test].Elapsed < MinTime) |
228 | 0:839f52ef7657 | louridas | { |
229 | 0:839f52ef7657 | louridas | if(m_type == txt)
|
230 | 0:839f52ef7657 | louridas | fprintf(m_fp, " +++++");
|
231 | 0:839f52ef7657 | louridas | else
|
232 | 0:839f52ef7657 | louridas | fprintf(m_fp, ",+++++");
|
233 | 0:839f52ef7657 | louridas | } |
234 | 0:839f52ef7657 | louridas | else
|
235 | 0:839f52ef7657 | louridas | { |
236 | 0:839f52ef7657 | louridas | int res = int(double(m_directory_size) * double(DirectoryUnit) |
237 | 0:839f52ef7657 | louridas | / m_delta[test].Elapsed); |
238 | 0:839f52ef7657 | louridas | if(m_type == txt)
|
239 | 0:839f52ef7657 | louridas | fprintf(m_fp, " %5d", res);
|
240 | 0:839f52ef7657 | louridas | else
|
241 | 0:839f52ef7657 | louridas | fprintf(m_fp, ",%d", res);
|
242 | 0:839f52ef7657 | louridas | } |
243 | 0:839f52ef7657 | louridas | |
244 | 0:839f52ef7657 | louridas | return print_cpu_stat(test);
|
245 | 0:839f52ef7657 | louridas | } |
246 | 0:839f52ef7657 | louridas | |
247 | 0:839f52ef7657 | louridas | void
|
248 | 0:839f52ef7657 | louridas | BonTimer::PrintHeader(FILE *fp) |
249 | 0:839f52ef7657 | louridas | { |
250 | 0:839f52ef7657 | louridas | fprintf(fp, "name");
|
251 | 0:839f52ef7657 | louridas | fprintf(fp, ",file_size,putc,putc_cpu,put_block,put_block_cpu,rewrite,rewrite_cpu,getc,getc_cpu,get_block,get_block_cpu,seeks,seeks_cpu");
|
252 | 0:839f52ef7657 | louridas | fprintf(fp, ",num_files,seq_create,seq_create_cpu,seq_stat,seq_stat_cpu,seq_del,seq_del_cpu,ran_create,ran_create_cpu,ran_stat,ran_stat_cpu,ran_del,ran_del_cpu");
|
253 | 0:839f52ef7657 | louridas | fprintf(fp, "\n");
|
254 | 0:839f52ef7657 | louridas | fflush(NULL);
|
255 | 0:839f52ef7657 | louridas | } |
256 | 0:839f52ef7657 | louridas | |
257 | 0:839f52ef7657 | louridas | int
|
258 | 0:839f52ef7657 | louridas | BonTimer::DoReport(CPCCHAR machine, int file_size, int directory_size |
259 | 0:839f52ef7657 | louridas | , int max_size, int min_size, int num_directories |
260 | 0:839f52ef7657 | louridas | , int chunk_size, FILE *fp)
|
261 | 0:839f52ef7657 | louridas | { |
262 | 0:839f52ef7657 | louridas | m_fp = fp; |
263 | 0:839f52ef7657 | louridas | m_file_size = file_size; |
264 | 0:839f52ef7657 | louridas | m_directory_size = directory_size; |
265 | 0:839f52ef7657 | louridas | m_chunk_size = chunk_size; |
266 | 0:839f52ef7657 | louridas | const int txt_machine_size = 20; |
267 | 0:839f52ef7657 | louridas | if(m_file_size)
|
268 | 0:839f52ef7657 | louridas | { |
269 | 0:839f52ef7657 | louridas | if(m_type == txt)
|
270 | 0:839f52ef7657 | louridas | { |
271 | 0:839f52ef7657 | louridas | fprintf(m_fp, "Version %5s ", BON_VERSION);
|
272 | 0:839f52ef7657 | louridas | fprintf(m_fp, |
273 | 0:839f52ef7657 | louridas | "------Sequential Output------ --Sequential Input- --Random-\n");
|
274 | 0:839f52ef7657 | louridas | fprintf(m_fp, " ");
|
275 | 0:839f52ef7657 | louridas | fprintf(m_fp, |
276 | 0:839f52ef7657 | louridas | "-Per Chr- --Block-- -Rewrite- -Per Chr- --Block-- --Seeks--\n");
|
277 | 0:839f52ef7657 | louridas | if(m_chunk_size == DefaultChunkSize)
|
278 | 0:839f52ef7657 | louridas | fprintf(m_fp, "Machine Size ");
|
279 | 0:839f52ef7657 | louridas | else
|
280 | 0:839f52ef7657 | louridas | fprintf(m_fp, "Machine Size:chnk ");
|
281 | 0:839f52ef7657 | louridas | fprintf(m_fp, "K/sec %%CP K/sec %%CP K/sec %%CP K/sec %%CP K/sec ");
|
282 | 0:839f52ef7657 | louridas | fprintf(m_fp, "%%CP /sec %%CP\n");
|
283 | 0:839f52ef7657 | louridas | } |
284 | 0:839f52ef7657 | louridas | char size_buf[1024]; |
285 | 0:839f52ef7657 | louridas | if(m_file_size % 1024 == 0) |
286 | 0:839f52ef7657 | louridas | sprintf(size_buf, "%dG", m_file_size / 1024); |
287 | 0:839f52ef7657 | louridas | else
|
288 | 0:839f52ef7657 | louridas | sprintf(size_buf, "%dM", m_file_size);
|
289 | 0:839f52ef7657 | louridas | if(m_chunk_size != DefaultChunkSize)
|
290 | 0:839f52ef7657 | louridas | { |
291 | 0:839f52ef7657 | louridas | char *tmp = size_buf + strlen(size_buf);
|
292 | 0:839f52ef7657 | louridas | if(m_chunk_size >= 1024) |
293 | 0:839f52ef7657 | louridas | sprintf(tmp, ":%dk", m_chunk_size / 1024); |
294 | 0:839f52ef7657 | louridas | else
|
295 | 0:839f52ef7657 | louridas | sprintf(tmp, ":%d", m_chunk_size);
|
296 | 0:839f52ef7657 | louridas | } |
297 | 0:839f52ef7657 | louridas | char buf[4096]; |
298 | 0:839f52ef7657 | louridas | if(m_type == txt)
|
299 | 0:839f52ef7657 | louridas | { |
300 | 0:839f52ef7657 | louridas | // copy machine name to buf
|
301 | 0:839f52ef7657 | louridas | //
|
302 | 0:839f52ef7657 | louridas | snprintf(buf |
303 | 0:839f52ef7657 | louridas | #ifndef NO_SNPRINTF
|
304 | 0:839f52ef7657 | louridas | , txt_machine_size - 1
|
305 | 0:839f52ef7657 | louridas | #endif
|
306 | 0:839f52ef7657 | louridas | , "%s ", machine);
|
307 | 0:839f52ef7657 | louridas | buf[txt_machine_size - 1] = '\0'; |
308 | 0:839f52ef7657 | louridas | // set cur to point to a byte past where we end the machine name
|
309 | 0:839f52ef7657 | louridas | // size of the buf - size of the new data - 1 for the space - 1 for the
|
310 | 0:839f52ef7657 | louridas | // terminating zero on the string
|
311 | 0:839f52ef7657 | louridas | char *cur = &buf[txt_machine_size - strlen(size_buf) - 2]; |
312 | 0:839f52ef7657 | louridas | *cur = ' '; // make cur a space |
313 | 0:839f52ef7657 | louridas | cur++; // increment to where we store the size
|
314 | 0:839f52ef7657 | louridas | strcpy(cur, size_buf); // copy the size in
|
315 | 0:839f52ef7657 | louridas | fputs(buf, m_fp); |
316 | 0:839f52ef7657 | louridas | } |
317 | 0:839f52ef7657 | louridas | else
|
318 | 0:839f52ef7657 | louridas | { |
319 | 0:839f52ef7657 | louridas | printf("%s,%s", machine, size_buf);
|
320 | 0:839f52ef7657 | louridas | } |
321 | 0:839f52ef7657 | louridas | print_stat(Putc); |
322 | 0:839f52ef7657 | louridas | print_stat(FastWrite); |
323 | 0:839f52ef7657 | louridas | print_stat(ReWrite); |
324 | 0:839f52ef7657 | louridas | print_stat(Getc); |
325 | 0:839f52ef7657 | louridas | print_stat(FastRead); |
326 | 0:839f52ef7657 | louridas | print_stat(Lseek); |
327 | 0:839f52ef7657 | louridas | if(m_type == txt)
|
328 | 0:839f52ef7657 | louridas | fprintf(m_fp, "\n");
|
329 | 0:839f52ef7657 | louridas | } |
330 | 0:839f52ef7657 | louridas | else if(m_type == csv) |
331 | 0:839f52ef7657 | louridas | { |
332 | 0:839f52ef7657 | louridas | fprintf(m_fp, "%s,,,,,,,,,,,,,", machine);
|
333 | 0:839f52ef7657 | louridas | } |
334 | 0:839f52ef7657 | louridas | |
335 | 0:839f52ef7657 | louridas | if(m_directory_size)
|
336 | 0:839f52ef7657 | louridas | { |
337 | 0:839f52ef7657 | louridas | char buf[128]; |
338 | 0:839f52ef7657 | louridas | char *tmp;
|
339 | 0:839f52ef7657 | louridas | sprintf(buf, "%d", m_directory_size);
|
340 | 0:839f52ef7657 | louridas | if(max_size == -1) |
341 | 0:839f52ef7657 | louridas | { |
342 | 0:839f52ef7657 | louridas | strcat(buf, ":link");
|
343 | 0:839f52ef7657 | louridas | } |
344 | 0:839f52ef7657 | louridas | else if(max_size == -2) |
345 | 0:839f52ef7657 | louridas | { |
346 | 0:839f52ef7657 | louridas | strcat(buf, ":symlink");
|
347 | 0:839f52ef7657 | louridas | } |
348 | 0:839f52ef7657 | louridas | else if(max_size) |
349 | 0:839f52ef7657 | louridas | { |
350 | 0:839f52ef7657 | louridas | tmp = &buf[strlen(buf)]; |
351 | 0:839f52ef7657 | louridas | sprintf(tmp, ":%d:%d", max_size, min_size);
|
352 | 0:839f52ef7657 | louridas | } |
353 | 0:839f52ef7657 | louridas | if(num_directories > 1) |
354 | 0:839f52ef7657 | louridas | { |
355 | 0:839f52ef7657 | louridas | tmp = &buf[strlen(buf)]; |
356 | 0:839f52ef7657 | louridas | sprintf(tmp, "/%d", num_directories);
|
357 | 0:839f52ef7657 | louridas | } |
358 | 0:839f52ef7657 | louridas | if(m_type == txt)
|
359 | 0:839f52ef7657 | louridas | { |
360 | 0:839f52ef7657 | louridas | if(m_file_size)
|
361 | 0:839f52ef7657 | louridas | fprintf(m_fp, " ");
|
362 | 0:839f52ef7657 | louridas | else
|
363 | 0:839f52ef7657 | louridas | fprintf(m_fp, "Version %5s ", BON_VERSION);
|
364 | 0:839f52ef7657 | louridas | fprintf(m_fp, |
365 | 0:839f52ef7657 | louridas | "------Sequential Create------ --------Random Create--------\n");
|
366 | 0:839f52ef7657 | louridas | if(m_file_size)
|
367 | 0:839f52ef7657 | louridas | fprintf(m_fp, " ");
|
368 | 0:839f52ef7657 | louridas | else
|
369 | 0:839f52ef7657 | louridas | fprintf(m_fp, "%-19.19s ", machine);
|
370 | 0:839f52ef7657 | louridas | fprintf(m_fp, |
371 | 0:839f52ef7657 | louridas | "-Create-- --Read--- -Delete-- -Create-- --Read--- -Delete--\n");
|
372 | 0:839f52ef7657 | louridas | if(min_size)
|
373 | 0:839f52ef7657 | louridas | { |
374 | 0:839f52ef7657 | louridas | fprintf(m_fp, "files:max:min ");
|
375 | 0:839f52ef7657 | louridas | } |
376 | 0:839f52ef7657 | louridas | else
|
377 | 0:839f52ef7657 | louridas | { |
378 | 0:839f52ef7657 | louridas | if(max_size)
|
379 | 0:839f52ef7657 | louridas | fprintf(m_fp, "files:max ");
|
380 | 0:839f52ef7657 | louridas | else
|
381 | 0:839f52ef7657 | louridas | fprintf(m_fp, " files ");
|
382 | 0:839f52ef7657 | louridas | } |
383 | 0:839f52ef7657 | louridas | fprintf(m_fp, " /sec %%CP /sec %%CP /sec %%CP /sec %%CP /sec ");
|
384 | 0:839f52ef7657 | louridas | fprintf(m_fp, "%%CP /sec %%CP\n");
|
385 | 0:839f52ef7657 | louridas | fprintf(m_fp, "%19s", buf);
|
386 | 0:839f52ef7657 | louridas | } |
387 | 0:839f52ef7657 | louridas | else
|
388 | 0:839f52ef7657 | louridas | { |
389 | 0:839f52ef7657 | louridas | fprintf(m_fp, ",%s", buf);
|
390 | 0:839f52ef7657 | louridas | } |
391 | 0:839f52ef7657 | louridas | print_file_stat(CreateSeq); |
392 | 0:839f52ef7657 | louridas | print_file_stat(StatSeq); |
393 | 0:839f52ef7657 | louridas | print_file_stat(DelSeq); |
394 | 0:839f52ef7657 | louridas | print_file_stat(CreateRand); |
395 | 0:839f52ef7657 | louridas | print_file_stat(StatRand); |
396 | 0:839f52ef7657 | louridas | print_file_stat(DelRand); |
397 | 0:839f52ef7657 | louridas | fprintf(m_fp, "\n");
|
398 | 0:839f52ef7657 | louridas | } |
399 | 0:839f52ef7657 | louridas | else if(m_type == csv) |
400 | 0:839f52ef7657 | louridas | { |
401 | 0:839f52ef7657 | louridas | fprintf(m_fp, ",,,,,,,,,,,,,\n");
|
402 | 0:839f52ef7657 | louridas | } |
403 | 0:839f52ef7657 | louridas | fflush(stdout); |
404 | 0:839f52ef7657 | louridas | return 0; |
405 | 0:839f52ef7657 | louridas | } |