builtin-stat.c (1241eb8f136bf3ea409f61590e7663465906d158) | builtin-stat.c (44175b6f397a6724121eeaf0f072e2c912a46614) |
---|---|
1/* 2 * builtin-stat.c 3 * 4 * Builtin stat command: Give a precise performance counters summary 5 * overview about any workload, CPU or specific PID. 6 * 7 * Sample output: 8 --- 170 unchanged lines hidden (view full) --- 179 if (attrs[counter].type == PERF_TYPE_SOFTWARE && 180 attrs[counter].config == PERF_COUNT_SW_TASK_CLOCK) 181 runtime_nsecs = count[0]; 182 if (attrs[counter].type == PERF_TYPE_HARDWARE && 183 attrs[counter].config == PERF_COUNT_HW_CPU_CYCLES) 184 runtime_cycles = count[0]; 185} 186 | 1/* 2 * builtin-stat.c 3 * 4 * Builtin stat command: Give a precise performance counters summary 5 * overview about any workload, CPU or specific PID. 6 * 7 * Sample output: 8 --- 170 unchanged lines hidden (view full) --- 179 if (attrs[counter].type == PERF_TYPE_SOFTWARE && 180 attrs[counter].config == PERF_COUNT_SW_TASK_CLOCK) 181 runtime_nsecs = count[0]; 182 if (attrs[counter].type == PERF_TYPE_HARDWARE && 183 attrs[counter].config == PERF_COUNT_HW_CPU_CYCLES) 184 runtime_cycles = count[0]; 185} 186 |
187static void nsec_printout(int counter, __u64 *count) 188{ 189 double msecs = (double)count[0] / 1000000; 190 191 fprintf(stderr, " %14.6f %-20s", msecs, event_name(counter)); 192 193 if (attrs[counter].type == PERF_TYPE_SOFTWARE && 194 attrs[counter].config == PERF_COUNT_SW_TASK_CLOCK) { 195 196 if (walltime_nsecs) 197 fprintf(stderr, " # %10.3f CPUs", 198 (double)count[0] / (double)walltime_nsecs); 199 } 200} 201 202static void abs_printout(int counter, __u64 *count) 203{ 204 fprintf(stderr, " %14Ld %-20s", count[0], event_name(counter)); 205 206 if (runtime_cycles && 207 attrs[counter].type == PERF_TYPE_HARDWARE && 208 attrs[counter].config == PERF_COUNT_HW_INSTRUCTIONS) { 209 210 fprintf(stderr, " # %10.3f IPC", 211 (double)count[0] / (double)runtime_cycles); 212 213 return; 214 } 215 216 if (runtime_nsecs) 217 fprintf(stderr, " # %10.3f M/sec", 218 (double)count[0]/runtime_nsecs*1000.0); 219} 220 |
|
187/* 188 * Print out the results of a single counter: 189 */ 190static void print_counter(int counter) 191{ 192 __u64 *count; 193 int scaled; 194 195 count = event_res[counter]; 196 scaled = event_scaled[counter]; 197 198 if (scaled == -1) { 199 fprintf(stderr, " %14s %-20s\n", 200 "<not counted>", event_name(counter)); 201 return; 202 } 203 | 221/* 222 * Print out the results of a single counter: 223 */ 224static void print_counter(int counter) 225{ 226 __u64 *count; 227 int scaled; 228 229 count = event_res[counter]; 230 scaled = event_scaled[counter]; 231 232 if (scaled == -1) { 233 fprintf(stderr, " %14s %-20s\n", 234 "<not counted>", event_name(counter)); 235 return; 236 } 237 |
204 if (nsec_counter(counter)) { 205 double msecs = (double)count[0] / 1000000; | 238 if (nsec_counter(counter)) 239 nsec_printout(counter, count); 240 else 241 abs_printout(counter, count); |
206 | 242 |
207 fprintf(stderr, " %14.6f %-20s", 208 msecs, event_name(counter)); 209 if (attrs[counter].type == PERF_TYPE_SOFTWARE && 210 attrs[counter].config == PERF_COUNT_SW_TASK_CLOCK) { 211 212 if (walltime_nsecs) 213 fprintf(stderr, " # %11.3f CPU utilization factor", 214 (double)count[0] / (double)walltime_nsecs); 215 } 216 } else { 217 fprintf(stderr, " %14Ld %-20s", 218 count[0], event_name(counter)); 219 if (runtime_nsecs) 220 fprintf(stderr, " # %11.3f M/sec", 221 (double)count[0]/runtime_nsecs*1000.0); 222 if (runtime_cycles && 223 attrs[counter].type == PERF_TYPE_HARDWARE && 224 attrs[counter].config == PERF_COUNT_HW_INSTRUCTIONS) { 225 226 fprintf(stderr, " # %1.3f per cycle", 227 (double)count[0] / (double)runtime_cycles); 228 } 229 } | |
230 if (scaled) 231 fprintf(stderr, " (scaled from %.2f%%)", 232 (double) count[2] / count[1] * 100); | 243 if (scaled) 244 fprintf(stderr, " (scaled from %.2f%%)", 245 (double) count[2] / count[1] * 100); |
246 |
|
233 fprintf(stderr, "\n"); 234} 235 236static int do_perf_stat(int argc, const char **argv) 237{ 238 unsigned long long t0, t1; 239 int counter; 240 int status; --- 44 unchanged lines hidden (view full) --- 285 for (counter = 0; counter < nr_counters; counter++) 286 read_counter(counter); 287 288 for (counter = 0; counter < nr_counters; counter++) 289 print_counter(counter); 290 291 292 fprintf(stderr, "\n"); | 247 fprintf(stderr, "\n"); 248} 249 250static int do_perf_stat(int argc, const char **argv) 251{ 252 unsigned long long t0, t1; 253 int counter; 254 int status; --- 44 unchanged lines hidden (view full) --- 299 for (counter = 0; counter < nr_counters; counter++) 300 read_counter(counter); 301 302 for (counter = 0; counter < nr_counters; counter++) 303 print_counter(counter); 304 305 306 fprintf(stderr, "\n"); |
293 fprintf(stderr, " Wall-clock time elapsed: %12.6f msecs\n", 294 (double)(t1-t0)/1e6); | 307 fprintf(stderr, " %14.9f seconds time elapsed.\n", (double)(t1-t0)/1e9); |
295 fprintf(stderr, "\n"); 296 297 return 0; 298} 299 300static volatile int signr = -1; 301 302static void skip_signal(int signo) --- 65 unchanged lines hidden --- | 308 fprintf(stderr, "\n"); 309 310 return 0; 311} 312 313static volatile int signr = -1; 314 315static void skip_signal(int signo) --- 65 unchanged lines hidden --- |