Index: tools/ll_prof.py |
diff --git a/tools/ll_prof.py b/tools/ll_prof.py |
index f9bea4a61f2fc561f6f98070a840b7673f47e281..7dac2e05eba77e1925b0fa76cb532d9914bb296e 100755 |
--- a/tools/ll_prof.py |
+++ b/tools/ll_prof.py |
@@ -568,7 +568,7 @@ PERF_EVENT_HEADER_DESC = Descriptor([ |
]) |
-# Reference: kernel/events/core.c |
+# Reference: kernel/tools/perf/util/event.h |
PERF_MMAP_EVENT_BODY_DESC = Descriptor([ |
("pid", "u32"), |
("tid", "u32"), |
@@ -577,6 +577,20 @@ PERF_MMAP_EVENT_BODY_DESC = Descriptor([ |
("pgoff", "u64") |
]) |
+# Reference: kernel/tools/perf/util/event.h |
+PERF_MMAP2_EVENT_BODY_DESC = Descriptor([ |
+ ("pid", "u32"), |
+ ("tid", "u32"), |
+ ("addr", "u64"), |
+ ("len", "u64"), |
+ ("pgoff", "u64"), |
+ ("maj", "u32"), |
+ ("min", "u32"), |
+ ("ino", "u64"), |
+ ("ino_generation", "u64"), |
+ ("prot", "u32"), |
+ ("flags","u32") |
+]) |
# perf_event_attr.sample_type bits control the set of |
# perf_sample_event fields. |
@@ -616,6 +630,7 @@ PERF_SAMPLE_EVENT_IP_FORMAT = "u64" |
PERF_RECORD_MMAP = 1 |
+PERF_RECORD_MMAP2 = 10 |
PERF_RECORD_SAMPLE = 9 |
@@ -664,6 +679,15 @@ class TraceReader(object): |
mmap_info.filename = HOST_ROOT + filename[:filename.find(chr(0))] |
return mmap_info |
+ def ReadMmap2(self, header, offset): |
+ mmap_info = PERF_MMAP2_EVENT_BODY_DESC.Read(self.trace, |
+ offset + self.header_size) |
+ # Read null-terminated filename. |
+ filename = self.trace[offset + self.header_size + ctypes.sizeof(mmap_info): |
+ offset + header.size] |
+ mmap_info.filename = HOST_ROOT + filename[:filename.find(chr(0))] |
+ return mmap_info |
+ |
def ReadSample(self, header, offset): |
sample = self.sample_event_body_desc.Read(self.trace, |
offset + self.header_size) |
@@ -973,6 +997,14 @@ if __name__ == "__main__": |
else: |
library_repo.Load(mmap_info, code_map, options) |
mmap_time += time.time() - start |
+ elif header.type == PERF_RECORD_MMAP2: |
+ start = time.time() |
+ mmap_info = trace_reader.ReadMmap2(header, offset) |
+ if mmap_info.filename == HOST_ROOT + V8_GC_FAKE_MMAP: |
+ log_reader.ReadUpToGC() |
+ else: |
+ library_repo.Load(mmap_info, code_map, options) |
+ mmap_time += time.time() - start |
elif header.type == PERF_RECORD_SAMPLE: |
ticks += 1 |
start = time.time() |