diff options
author | Octavian Tuchila <octaviant@google.com> | 2021-10-06 09:31:46 +0000 |
---|---|---|
committer | Gerrit Code Review <noreply-gerritcodereview@google.com> | 2021-10-06 09:31:46 +0000 |
commit | 2cac07b0f803fad494a397505b791a57f08a432d (patch) | |
tree | e39a16e10a11ae28c980e0e06a0cf68f1dadf4ec | |
parent | 9412f737242359dc48cb009740216ac389b961ce (diff) | |
parent | 9c4b8a72b9eadebf89bbdde48c0bfcb3f2d01cff (diff) | |
download | perfetto-2cac07b0f803fad494a397505b791a57f08a432d.tar.gz |
Merge "ui: Show direct_reclaim begin/end information"
-rw-r--r-- | docs/data-sources/atrace.md | 2 | ||||
-rw-r--r-- | src/trace_processor/importers/ftrace/ftrace_parser.cc | 63 | ||||
-rw-r--r-- | src/trace_processor/importers/ftrace/ftrace_parser.h | 9 | ||||
-rw-r--r-- | src/traced/probes/ftrace/event_info.cc | 24 |
4 files changed, 97 insertions, 1 deletions
diff --git a/docs/data-sources/atrace.md b/docs/data-sources/atrace.md index 51e50f1f4..a54bd1a90 100644 --- a/docs/data-sources/atrace.md +++ b/docs/data-sources/atrace.md @@ -42,7 +42,7 @@ a managed execution environment, and a user-space <-> kernel-space roundtrip to write the marker into `/sys/kernel/debug/tracing/trace_marker` (which is the most expensive part). -Our team is are looking into a migration path for Android, in light of the newly +Our team is looking into a migration path for Android, in light of the newly introduced [Tracing SDK](/docs/instrumentation/tracing-sdk.md). At the moment the advice is to keep using the existing ATrace API on Android. diff --git a/src/trace_processor/importers/ftrace/ftrace_parser.cc b/src/trace_processor/importers/ftrace/ftrace_parser.cc index 425a0ed3f..9b5aba81e 100644 --- a/src/trace_processor/importers/ftrace/ftrace_parser.cc +++ b/src/trace_processor/importers/ftrace/ftrace_parser.cc @@ -56,6 +56,7 @@ #include "protos/perfetto/trace/ftrace/systrace.pbzero.h" #include "protos/perfetto/trace/ftrace/task.pbzero.h" #include "protos/perfetto/trace/ftrace/thermal.pbzero.h" +#include "protos/perfetto/trace/ftrace/vmscan.pbzero.h" #include "protos/perfetto/trace/ftrace/workqueue.pbzero.h" #include "protos/perfetto/trace/interned_data/interned_data.pbzero.h" @@ -125,6 +126,12 @@ FtraceParser::FtraceParser(TraceProcessorContext* context) workqueue_id_(context_->storage->InternString("workqueue")), irq_id_(context_->storage->InternString("irq")), ret_arg_id_(context_->storage->InternString("ret")), + direct_reclaim_order_id_( + context->storage->InternString("direct_reclaim_order")), + direct_reclaim_may_writepage_id_( + context->storage->InternString("direct_reclaim_may_writepage")), + direct_reclaim_gfp_flags_id_( + context->storage->InternString("direct_reclaim_gfp_flags")), vec_arg_id_(context->storage->InternString("vec")), gpu_mem_total_name_id_(context->storage->InternString("GPU Memory")), gpu_mem_total_unit_id_(context->storage->InternString( @@ -498,6 +505,14 @@ util::Status FtraceParser::ParseFtraceEvent(uint32_t cpu, ParseScmCallEnd(ts, pid, data); break; } + case FtraceEvent::kMmVmscanDirectReclaimBeginFieldNumber: { + ParseDirectReclaimBegin(ts, pid, data); + break; + } + case FtraceEvent::kMmVmscanDirectReclaimEndFieldNumber: { + ParseDirectReclaimEnd(ts, pid, data); + break; + } case FtraceEvent::kWorkqueueExecuteStartFieldNumber: { ParseWorkqueueExecuteStart(ts, pid, data, seq_state); break; @@ -1268,6 +1283,54 @@ void FtraceParser::ParseScmCallEnd(int64_t timestamp, context_->slice_tracker->End(timestamp, track_id); } +void FtraceParser::ParseDirectReclaimBegin(int64_t timestamp, + uint32_t pid, + ConstBytes blob) { + UniqueTid utid = context_->process_tracker->GetOrCreateThread(pid); + TrackId track_id = context_->track_tracker->InternThreadTrack(utid); + protos::pbzero::MmVmscanDirectReclaimBeginFtraceEvent::Decoder + direct_reclaim_begin(blob.data, blob.size); + + StringId name_id = context_->storage->InternString( + "mm_vmscan_direct_reclaim nr_reclaimed=?"); + + auto args_inserter = [this, &direct_reclaim_begin]( + ArgsTracker::BoundInserter* inserter) { + inserter->AddArg(direct_reclaim_order_id_, + Variadic::Integer(direct_reclaim_begin.order())); + inserter->AddArg(direct_reclaim_may_writepage_id_, + Variadic::Integer(direct_reclaim_begin.may_writepage())); + inserter->AddArg( + direct_reclaim_gfp_flags_id_, + Variadic::UnsignedInteger(direct_reclaim_begin.gfp_flags())); + }; + context_->slice_tracker->Begin(timestamp, track_id, kNullStringId, name_id, + args_inserter); +} + +void FtraceParser::ParseDirectReclaimEnd(int64_t timestamp, + uint32_t pid, + ConstBytes blob) { + protos::pbzero::ScmCallEndFtraceEvent::Decoder evt(blob.data, blob.size); + UniqueTid utid = context_->process_tracker->GetOrCreateThread(pid); + TrackId track_id = context_->track_tracker->InternThreadTrack(utid); + protos::pbzero::MmVmscanDirectReclaimEndFtraceEvent::Decoder + direct_reclame_end(blob.data, blob.size); + + const auto opt_slice_id = context_->slice_tracker->End(timestamp, track_id); + if (opt_slice_id) { + auto* slice_table = context_->storage->mutable_slice_table(); + uint32_t row_idx = *slice_table->id().IndexOf(*opt_slice_id); + + char str[128]; + sprintf(str, "mm_vmscan_direct_reclaim nr_reclaimed=%" PRIu64, + direct_reclame_end.nr_reclaimed()); + StringId name_id = context_->storage->InternString(str); + + slice_table->mutable_name()->Set(row_idx, name_id); + } +} + void FtraceParser::ParseWorkqueueExecuteStart( int64_t timestamp, uint32_t pid, diff --git a/src/trace_processor/importers/ftrace/ftrace_parser.h b/src/trace_processor/importers/ftrace/ftrace_parser.h index 79e1c6584..5ba69f530 100644 --- a/src/trace_processor/importers/ftrace/ftrace_parser.h +++ b/src/trace_processor/importers/ftrace/ftrace_parser.h @@ -120,6 +120,12 @@ class FtraceParser { uint32_t pid, protozero::ConstBytes); void ParseScmCallEnd(int64_t timestamp, uint32_t pid, protozero::ConstBytes); + void ParseDirectReclaimBegin(int64_t timestamp, + uint32_t pid, + protozero::ConstBytes); + void ParseDirectReclaimEnd(int64_t timestamp, + uint32_t pid, + protozero::ConstBytes); void ParseWorkqueueExecuteStart(int64_t timestamp, uint32_t pid, protozero::ConstBytes, @@ -174,6 +180,9 @@ class FtraceParser { const StringId workqueue_id_; const StringId irq_id_; const StringId ret_arg_id_; + const StringId direct_reclaim_order_id_; + const StringId direct_reclaim_may_writepage_id_; + const StringId direct_reclaim_gfp_flags_id_; const StringId vec_arg_id_; const StringId gpu_mem_total_name_id_; const StringId gpu_mem_total_unit_id_; diff --git a/src/traced/probes/ftrace/event_info.cc b/src/traced/probes/ftrace/event_info.cc index 9422d521f..9d6ac9ddc 100644 --- a/src/traced/probes/ftrace/event_info.cc +++ b/src/traced/probes/ftrace/event_info.cc @@ -6218,6 +6218,30 @@ std::vector<Event> GetStaticEventInfo() { 338, kUnsetSize}, {"scm_call_end", "scm", {}, kUnsetFtraceId, 339, kUnsetSize}, + {"mm_vmscan_direct_reclaim_begin", + "vmscan", + { + {kUnsetOffset, kUnsetSize, FtraceFieldType::kInvalidFtraceFieldType, + "order", 1, ProtoSchemaType::kInt32, + TranslationStrategy::kInvalidTranslationStrategy}, + {kUnsetOffset, kUnsetSize, FtraceFieldType::kInvalidFtraceFieldType, + "may_writepage", 2, ProtoSchemaType::kInt32, + TranslationStrategy::kInvalidTranslationStrategy}, + {kUnsetOffset, kUnsetSize, FtraceFieldType::kInvalidFtraceFieldType, + "gfp_flags", 3, ProtoSchemaType::kInt32, + TranslationStrategy::kInvalidTranslationStrategy}, + }, + kUnsetFtraceId, + 338, + kUnsetSize}, + {"mm_vmscan_direct_reclaim_end", + "vmscan", + {{kUnsetOffset, kUnsetSize, FtraceFieldType::kInvalidFtraceFieldType, + "nr_reclaimed", 1, ProtoSchemaType::kUint64, + TranslationStrategy::kInvalidTranslationStrategy}}, + kUnsetFtraceId, + 339, + kUnsetSize}, {"tracing_mark_write", "sde", { |