diff options
Diffstat (limited to 'kernel/trace/ring_buffer_benchmark.c')
| -rw-r--r-- | kernel/trace/ring_buffer_benchmark.c | 45 |
1 files changed, 24 insertions, 21 deletions
diff --git a/kernel/trace/ring_buffer_benchmark.c b/kernel/trace/ring_buffer_benchmark.c index 8d68e149a8b3..573d3cc762c3 100644 --- a/kernel/trace/ring_buffer_benchmark.c +++ b/kernel/trace/ring_buffer_benchmark.c | |||
| @@ -102,8 +102,10 @@ static enum event_status read_page(int cpu) | |||
| 102 | event = (void *)&rpage->data[i]; | 102 | event = (void *)&rpage->data[i]; |
| 103 | switch (event->type_len) { | 103 | switch (event->type_len) { |
| 104 | case RINGBUF_TYPE_PADDING: | 104 | case RINGBUF_TYPE_PADDING: |
| 105 | /* We don't expect any padding */ | 105 | /* failed writes may be discarded events */ |
| 106 | KILL_TEST(); | 106 | if (!event->time_delta) |
| 107 | KILL_TEST(); | ||
| 108 | inc = event->array[0] + 4; | ||
| 107 | break; | 109 | break; |
| 108 | case RINGBUF_TYPE_TIME_EXTEND: | 110 | case RINGBUF_TYPE_TIME_EXTEND: |
| 109 | inc = 8; | 111 | inc = 8; |
| @@ -119,7 +121,7 @@ static enum event_status read_page(int cpu) | |||
| 119 | KILL_TEST(); | 121 | KILL_TEST(); |
| 120 | break; | 122 | break; |
| 121 | } | 123 | } |
| 122 | inc = event->array[0]; | 124 | inc = event->array[0] + 4; |
| 123 | break; | 125 | break; |
| 124 | default: | 126 | default: |
| 125 | entry = ring_buffer_event_data(event); | 127 | entry = ring_buffer_event_data(event); |
| @@ -201,7 +203,7 @@ static void ring_buffer_producer(void) | |||
| 201 | * Hammer the buffer for 10 secs (this may | 203 | * Hammer the buffer for 10 secs (this may |
| 202 | * make the system stall) | 204 | * make the system stall) |
| 203 | */ | 205 | */ |
| 204 | pr_info("Starting ring buffer hammer\n"); | 206 | trace_printk("Starting ring buffer hammer\n"); |
| 205 | do_gettimeofday(&start_tv); | 207 | do_gettimeofday(&start_tv); |
| 206 | do { | 208 | do { |
| 207 | struct ring_buffer_event *event; | 209 | struct ring_buffer_event *event; |
| @@ -237,7 +239,7 @@ static void ring_buffer_producer(void) | |||
| 237 | #endif | 239 | #endif |
| 238 | 240 | ||
| 239 | } while (end_tv.tv_sec < (start_tv.tv_sec + RUN_TIME) && !kill_test); | 241 | } while (end_tv.tv_sec < (start_tv.tv_sec + RUN_TIME) && !kill_test); |
| 240 | pr_info("End ring buffer hammer\n"); | 242 | trace_printk("End ring buffer hammer\n"); |
| 241 | 243 | ||
| 242 | if (consumer) { | 244 | if (consumer) { |
| 243 | /* Init both completions here to avoid races */ | 245 | /* Init both completions here to avoid races */ |
| @@ -260,49 +262,50 @@ static void ring_buffer_producer(void) | |||
| 260 | overruns = ring_buffer_overruns(buffer); | 262 | overruns = ring_buffer_overruns(buffer); |
| 261 | 263 | ||
| 262 | if (kill_test) | 264 | if (kill_test) |
| 263 | pr_info("ERROR!\n"); | 265 | trace_printk("ERROR!\n"); |
| 264 | pr_info("Time: %lld (usecs)\n", time); | 266 | trace_printk("Time: %lld (usecs)\n", time); |
| 265 | pr_info("Overruns: %lld\n", overruns); | 267 | trace_printk("Overruns: %lld\n", overruns); |
| 266 | if (disable_reader) | 268 | if (disable_reader) |
| 267 | pr_info("Read: (reader disabled)\n"); | 269 | trace_printk("Read: (reader disabled)\n"); |
| 268 | else | 270 | else |
| 269 | pr_info("Read: %ld (by %s)\n", read, | 271 | trace_printk("Read: %ld (by %s)\n", read, |
| 270 | read_events ? "events" : "pages"); | 272 | read_events ? "events" : "pages"); |
| 271 | pr_info("Entries: %lld\n", entries); | 273 | trace_printk("Entries: %lld\n", entries); |
| 272 | pr_info("Total: %lld\n", entries + overruns + read); | 274 | trace_printk("Total: %lld\n", entries + overruns + read); |
| 273 | pr_info("Missed: %ld\n", missed); | 275 | trace_printk("Missed: %ld\n", missed); |
| 274 | pr_info("Hit: %ld\n", hit); | 276 | trace_printk("Hit: %ld\n", hit); |
| 275 | 277 | ||
| 276 | /* Convert time from usecs to millisecs */ | 278 | /* Convert time from usecs to millisecs */ |
| 277 | do_div(time, USEC_PER_MSEC); | 279 | do_div(time, USEC_PER_MSEC); |
| 278 | if (time) | 280 | if (time) |
| 279 | hit /= (long)time; | 281 | hit /= (long)time; |
| 280 | else | 282 | else |
| 281 | pr_info("TIME IS ZERO??\n"); | 283 | trace_printk("TIME IS ZERO??\n"); |
| 282 | 284 | ||
| 283 | pr_info("Entries per millisec: %ld\n", hit); | 285 | trace_printk("Entries per millisec: %ld\n", hit); |
| 284 | 286 | ||
| 285 | if (hit) { | 287 | if (hit) { |
| 286 | /* Calculate the average time in nanosecs */ | 288 | /* Calculate the average time in nanosecs */ |
| 287 | avg = NSEC_PER_MSEC / hit; | 289 | avg = NSEC_PER_MSEC / hit; |
| 288 | pr_info("%ld ns per entry\n", avg); | 290 | trace_printk("%ld ns per entry\n", avg); |
| 289 | } | 291 | } |
| 290 | 292 | ||
| 291 | if (missed) { | 293 | if (missed) { |
| 292 | if (time) | 294 | if (time) |
| 293 | missed /= (long)time; | 295 | missed /= (long)time; |
| 294 | 296 | ||
| 295 | pr_info("Total iterations per millisec: %ld\n", hit + missed); | 297 | trace_printk("Total iterations per millisec: %ld\n", |
| 298 | hit + missed); | ||
| 296 | 299 | ||
| 297 | /* it is possible that hit + missed will overflow and be zero */ | 300 | /* it is possible that hit + missed will overflow and be zero */ |
| 298 | if (!(hit + missed)) { | 301 | if (!(hit + missed)) { |
| 299 | pr_info("hit + missed overflowed and totalled zero!\n"); | 302 | trace_printk("hit + missed overflowed and totalled zero!\n"); |
| 300 | hit--; /* make it non zero */ | 303 | hit--; /* make it non zero */ |
| 301 | } | 304 | } |
| 302 | 305 | ||
| 303 | /* Caculate the average time in nanosecs */ | 306 | /* Caculate the average time in nanosecs */ |
| 304 | avg = NSEC_PER_MSEC / (hit + missed); | 307 | avg = NSEC_PER_MSEC / (hit + missed); |
| 305 | pr_info("%ld ns per entry\n", avg); | 308 | trace_printk("%ld ns per entry\n", avg); |
| 306 | } | 309 | } |
| 307 | } | 310 | } |
| 308 | 311 | ||
| @@ -353,7 +356,7 @@ static int ring_buffer_producer_thread(void *arg) | |||
| 353 | 356 | ||
| 354 | ring_buffer_producer(); | 357 | ring_buffer_producer(); |
| 355 | 358 | ||
| 356 | pr_info("Sleeping for 10 secs\n"); | 359 | trace_printk("Sleeping for 10 secs\n"); |
| 357 | set_current_state(TASK_INTERRUPTIBLE); | 360 | set_current_state(TASK_INTERRUPTIBLE); |
| 358 | schedule_timeout(HZ * SLEEP_TIME); | 361 | schedule_timeout(HZ * SLEEP_TIME); |
| 359 | __set_current_state(TASK_RUNNING); | 362 | __set_current_state(TASK_RUNNING); |
