ktop now drains the ring buffer
Before beginning to collect data, ktop now drains the per cpu ring buffers.
Also fixed a couple of problems in dumping the ring buffers while testing.
BUG=chromium-os:38503
TEST=ran on stumpy
Change-Id: I3fce487ce4dab6df1f1ff34d1b401ba2d258472d
Reviewed-on: https://gerrit.chromium.org/gerrit/42675
Tested-by: Paul Taysom <taysom@chromium.org>
Reviewed-by: Luigi Semenzato <semenzato@chromium.org>
Commit-Queue: Paul Taysom <taysom@chromium.org>
diff --git a/collector.c b/collector.c
index 5b6e0ad..9275fde 100644
--- a/collector.c
+++ b/collector.c
@@ -367,7 +367,7 @@
size = 4 + length * 4;
time += r->time_delta;
if (Dump) {
- dump_event(buf);
+ dump_event(buf+4);
} else {
parse_event(buf+4, time);
}
@@ -402,6 +402,24 @@
return commit;
}
+/*
+ * drain any data that may have accumlated in previous runs
+ */
+void drain(int cpu)
+{
+ u8 buf[BUF_SIZE];
+ int trace_pipe = open_raw(cpu);
+ int rc;
+
+ for (;;) {
+ rc = read(trace_pipe, buf, sizeof(buf));
+ if (rc <= 0) {
+ break;
+ }
+ }
+ close(trace_pipe);
+}
+
void *collector(void *args)
{
Collector_args_s *a = args;
@@ -416,6 +434,7 @@
int rc;
int i;
+ drain(cpu);
ignore_pid(gettid());
trace_pipe = open_raw(cpu);
for (i = 0;; i++) {
diff --git a/collector.h b/collector.h
index c849f81..bc56aeb 100644
--- a/collector.h
+++ b/collector.h
@@ -72,6 +72,7 @@
void *dump_collector(void *args);
void dump_event(void *buf);
void pr_ring_header(ring_header_s *rh);
+void drain(int cpu);
extern int Sys_exit;
extern int Sys_enter;
diff --git a/dump.c b/dump.c
index f5d47d5..3e6aeed 100644
--- a/dump.c
+++ b/dump.c
@@ -51,7 +51,7 @@
void pr_ring_header(ring_header_s *rh)
{
- printf("%lld %lld %ld\n",
+ printf("ring header: %lld %lld %ld\n",
rh->time_stamp / ONE_BILLION, rh->time_stamp % ONE_BILLION,
rh->commit);
}
@@ -84,6 +84,7 @@
int rc;
int i;
+ drain(cpu);
ignore_pid(gettid());
trace_pipe = open_raw(cpu);
for (i = 0;; i++) {