diff options
author | Peter Zijlstra <a.p.zijlstra@chello.nl> | 2009-09-17 13:59:05 -0400 |
---|---|---|
committer | Ingo Molnar <mingo@elte.hu> | 2009-09-17 16:08:27 -0400 |
commit | 8b412664d0a487c2e16ac43f4fcede346df33254 (patch) | |
tree | 75914df712d93dcbf6fc82f80f4f2ecb6ce19e7d /tools | |
parent | 2667de81f3256c944b06abdf2c56c2f192fcb724 (diff) |
perf record: Disable profiling before draining the buffer
I noticed that perf-record continues profiling itself after the
child terminated and we're draining the buffer.
This can cause a _lot_ of overhead with --all recording - we keep
and keep recording, which produces new and new events.
Signed-off-by: Peter Zijlstra <a.p.zijlstra@chello.nl>
LKML-Reference: <new-submission>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
Diffstat (limited to 'tools')
-rw-r--r-- | tools/perf/builtin-record.c | 13 |
1 files changed, 12 insertions, 1 deletions
diff --git a/tools/perf/builtin-record.c b/tools/perf/builtin-record.c index 5f3127e7a61..2459e5a22ed 100644 --- a/tools/perf/builtin-record.c +++ b/tools/perf/builtin-record.c | |||
@@ -524,6 +524,7 @@ static int __cmd_record(int argc, const char **argv) | |||
524 | pid_t pid = 0; | 524 | pid_t pid = 0; |
525 | int flags; | 525 | int flags; |
526 | int ret; | 526 | int ret; |
527 | unsigned long waking = 0; | ||
527 | 528 | ||
528 | page_size = sysconf(_SC_PAGE_SIZE); | 529 | page_size = sysconf(_SC_PAGE_SIZE); |
529 | nr_cpus = sysconf(_SC_NPROCESSORS_ONLN); | 530 | nr_cpus = sysconf(_SC_NPROCESSORS_ONLN); |
@@ -634,10 +635,20 @@ static int __cmd_record(int argc, const char **argv) | |||
634 | if (hits == samples) { | 635 | if (hits == samples) { |
635 | if (done) | 636 | if (done) |
636 | break; | 637 | break; |
637 | ret = poll(event_array, nr_poll, 100); | 638 | ret = poll(event_array, nr_poll, -1); |
639 | waking++; | ||
640 | } | ||
641 | |||
642 | if (done) { | ||
643 | for (i = 0; i < nr_cpu; i++) { | ||
644 | for (counter = 0; counter < nr_counters; counter++) | ||
645 | ioctl(fd[i][counter], PERF_COUNTER_IOC_DISABLE); | ||
646 | } | ||
638 | } | 647 | } |
639 | } | 648 | } |
640 | 649 | ||
650 | fprintf(stderr, "[ perf record: Woken up %ld times to write data ]\n", waking); | ||
651 | |||
641 | /* | 652 | /* |
642 | * Approximate RIP event size: 24 bytes. | 653 | * Approximate RIP event size: 24 bytes. |
643 | */ | 654 | */ |