diff options
author | Adrian Hunter <adrian.hunter@intel.com> | 2014-07-14 06:02:51 -0400 |
---|---|---|
committer | Arnaldo Carvalho de Melo <acme@redhat.com> | 2014-07-16 16:57:36 -0400 |
commit | 919d86d3a3109d7d4f0d7347f34711ee2f8e6609 (patch) | |
tree | a03b196cfb5db134cb4209d7d24acf493823faae /tools | |
parent | 9c00a81b6aafc4ed375a43e7a54e6cf2d720c7c6 (diff) |
perf session: Flag if the event stream is entirely in memory
Flag if the event stream is a file that has been mmapped in one go.
This is useful, for example, if a tool needs to keep an event for later
reference. If the new flag is set, a pointer to the event can be
retained, otherwise the event must be copied.
Signed-off-by: Adrian Hunter <adrian.hunter@intel.com>
Cc: David Ahern <dsahern@gmail.com>
Cc: Frederic Weisbecker <fweisbec@gmail.com>
Cc: Jiri Olsa <jolsa@redhat.com>
Cc: Namhyung Kim <namhyung@gmail.com>
Cc: Paul Mackerras <paulus@samba.org>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Stephane Eranian <eranian@google.com>
Link: http://lkml.kernel.org/r/1405332185-4050-28-git-send-email-adrian.hunter@intel.com
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
Diffstat (limited to 'tools')
-rw-r--r-- | tools/perf/util/session.c | 9 | ||||
-rw-r--r-- | tools/perf/util/session.h | 3 |
2 files changed, 11 insertions, 1 deletions
diff --git a/tools/perf/util/session.c b/tools/perf/util/session.c index c2f4ca917469..eac14ce0ae8d 100644 --- a/tools/perf/util/session.c +++ b/tools/perf/util/session.c | |||
@@ -1297,8 +1297,10 @@ int __perf_session__process_events(struct perf_session *session, | |||
1297 | ui_progress__init(&prog, file_size, "Processing events..."); | 1297 | ui_progress__init(&prog, file_size, "Processing events..."); |
1298 | 1298 | ||
1299 | mmap_size = MMAP_SIZE; | 1299 | mmap_size = MMAP_SIZE; |
1300 | if (mmap_size > file_size) | 1300 | if (mmap_size > file_size) { |
1301 | mmap_size = file_size; | 1301 | mmap_size = file_size; |
1302 | session->one_mmap = true; | ||
1303 | } | ||
1302 | 1304 | ||
1303 | memset(mmaps, 0, sizeof(mmaps)); | 1305 | memset(mmaps, 0, sizeof(mmaps)); |
1304 | 1306 | ||
@@ -1320,6 +1322,10 @@ remap: | |||
1320 | mmaps[map_idx] = buf; | 1322 | mmaps[map_idx] = buf; |
1321 | map_idx = (map_idx + 1) & (ARRAY_SIZE(mmaps) - 1); | 1323 | map_idx = (map_idx + 1) & (ARRAY_SIZE(mmaps) - 1); |
1322 | file_pos = file_offset + head; | 1324 | file_pos = file_offset + head; |
1325 | if (session->one_mmap) { | ||
1326 | session->one_mmap_addr = buf; | ||
1327 | session->one_mmap_offset = file_offset; | ||
1328 | } | ||
1323 | 1329 | ||
1324 | more: | 1330 | more: |
1325 | event = fetch_mmaped_event(session, head, mmap_size, buf); | 1331 | event = fetch_mmaped_event(session, head, mmap_size, buf); |
@@ -1365,6 +1371,7 @@ out_err: | |||
1365 | ui_progress__finish(); | 1371 | ui_progress__finish(); |
1366 | perf_session__warn_about_errors(session, tool); | 1372 | perf_session__warn_about_errors(session, tool); |
1367 | perf_session_free_sample_buffers(session); | 1373 | perf_session_free_sample_buffers(session); |
1374 | session->one_mmap = false; | ||
1368 | return err; | 1375 | return err; |
1369 | } | 1376 | } |
1370 | 1377 | ||
diff --git a/tools/perf/util/session.h b/tools/perf/util/session.h index 3140f8ae6148..0321013bd9fd 100644 --- a/tools/perf/util/session.h +++ b/tools/perf/util/session.h | |||
@@ -36,6 +36,9 @@ struct perf_session { | |||
36 | struct trace_event tevent; | 36 | struct trace_event tevent; |
37 | struct events_stats stats; | 37 | struct events_stats stats; |
38 | bool repipe; | 38 | bool repipe; |
39 | bool one_mmap; | ||
40 | void *one_mmap_addr; | ||
41 | u64 one_mmap_offset; | ||
39 | struct ordered_samples ordered_samples; | 42 | struct ordered_samples ordered_samples; |
40 | struct perf_data_file *file; | 43 | struct perf_data_file *file; |
41 | }; | 44 | }; |