diff options
author | Vilas Bhat <vilasbhat@google.com> | 2024-04-09 14:49:23 +0000 |
---|---|---|
committer | Gerrit Code Review <noreply-gerritcodereview@google.com> | 2024-04-09 14:49:23 +0000 |
commit | 9c25054f06aa437e643a5d30aaef1c5094444b4b (patch) | |
tree | f1411c57e348b3495aa1eeb9ac4e2b9355d22500 | |
parent | d1be345fc00910f52ce4bd8033edde3fc5fb66e9 (diff) | |
parent | e808db727c990047224dbf61f7360828bd316501 (diff) | |
download | perfetto-9c25054f06aa437e643a5d30aaef1c5094444b4b.tar.gz |
Merge "perfetto/ftrace: Introduce f2fs garbage collection ftrace events" into main
9 files changed, 318 insertions, 2 deletions
diff --git a/protos/perfetto/trace/ftrace/f2fs.proto b/protos/perfetto/trace/ftrace/f2fs.proto index 0e5938448..eb8be75c2 100644 --- a/protos/perfetto/trace/ftrace/f2fs.proto +++ b/protos/perfetto/trace/ftrace/f2fs.proto @@ -288,3 +288,37 @@ message F2fsIostatLatencyFtraceEvent { optional uint32 n_wr_s_cnt = 27; optional uint32 n_wr_s_peak = 28; } +message F2fsBackgroundGcFtraceEvent { + optional uint64 dev = 1; + optional uint32 wait_ms = 2; + optional uint32 prefree = 3; + optional uint32 free = 4; +} +message F2fsGcBeginFtraceEvent { + optional uint64 dev = 1; + optional uint32 sync = 2; + optional uint32 background = 3; + optional int64 dirty_nodes = 4; + optional int64 dirty_dents = 5; + optional int64 dirty_imeta = 6; + optional uint32 free_sec = 7; + optional uint32 free_seg = 8; + optional int32 reserved_seg = 9; + optional uint32 prefree_seg = 10; + optional int32 gc_type = 11; + optional uint32 no_bg_gc = 12; + optional uint32 nr_free_secs = 13; +} +message F2fsGcEndFtraceEvent { + optional uint64 dev = 1; + optional int32 ret = 2; + optional int32 seg_freed = 3; + optional int32 sec_freed = 4; + optional int64 dirty_nodes = 5; + optional int64 dirty_dents = 6; + optional int64 dirty_imeta = 7; + optional uint32 free_sec = 8; + optional uint32 free_seg = 9; + optional int32 reserved_seg = 10; + optional uint32 prefree_seg = 11; +} diff --git a/protos/perfetto/trace/ftrace/ftrace_event.proto b/protos/perfetto/trace/ftrace/ftrace_event.proto index e0b1eeba6..5d5bf0665 100644 --- a/protos/perfetto/trace/ftrace/ftrace_event.proto +++ b/protos/perfetto/trace/ftrace/ftrace_event.proto @@ -611,5 +611,8 @@ message FtraceEvent { DpuDsiCmdFifoStatusFtraceEvent dpu_dsi_cmd_fifo_status = 492; DpuDsiRxFtraceEvent dpu_dsi_rx = 493; DpuDsiTxFtraceEvent dpu_dsi_tx = 494; + F2fsBackgroundGcFtraceEvent f2fs_background_gc = 495; + F2fsGcBeginFtraceEvent f2fs_gc_begin = 496; + F2fsGcEndFtraceEvent f2fs_gc_end = 497; } } diff --git a/protos/perfetto/trace/perfetto_trace.proto b/protos/perfetto/trace/perfetto_trace.proto index fc89f813f..c8b4c9e86 100644 --- a/protos/perfetto/trace/perfetto_trace.proto +++ b/protos/perfetto/trace/perfetto_trace.proto @@ -8284,6 +8284,40 @@ message F2fsIostatLatencyFtraceEvent { optional uint32 n_wr_s_cnt = 27; optional uint32 n_wr_s_peak = 28; } +message F2fsBackgroundGcFtraceEvent { + optional uint64 dev = 1; + optional uint32 wait_ms = 2; + optional uint32 prefree = 3; + optional uint32 free = 4; +} +message F2fsGcBeginFtraceEvent { + optional uint64 dev = 1; + optional uint32 sync = 2; + optional uint32 background = 3; + optional int64 dirty_nodes = 4; + optional int64 dirty_dents = 5; + optional int64 dirty_imeta = 6; + optional uint32 free_sec = 7; + optional uint32 free_seg = 8; + optional int32 reserved_seg = 9; + optional uint32 prefree_seg = 10; + optional int32 gc_type = 11; + optional uint32 no_bg_gc = 12; + optional uint32 nr_free_secs = 13; +} +message F2fsGcEndFtraceEvent { + optional uint64 dev = 1; + optional int32 ret = 2; + optional int32 seg_freed = 3; + optional int32 sec_freed = 4; + optional int64 dirty_nodes = 5; + optional int64 dirty_dents = 6; + optional int64 dirty_imeta = 7; + optional uint32 free_sec = 8; + optional uint32 free_seg = 9; + optional int32 reserved_seg = 10; + optional uint32 prefree_seg = 11; +} // End of protos/perfetto/trace/ftrace/f2fs.proto @@ -10637,6 +10671,9 @@ message FtraceEvent { DpuDsiCmdFifoStatusFtraceEvent dpu_dsi_cmd_fifo_status = 492; DpuDsiRxFtraceEvent dpu_dsi_rx = 493; DpuDsiTxFtraceEvent dpu_dsi_tx = 494; + F2fsBackgroundGcFtraceEvent f2fs_background_gc = 495; + F2fsGcBeginFtraceEvent f2fs_gc_begin = 496; + F2fsGcEndFtraceEvent f2fs_gc_end = 497; } } diff --git a/src/tools/ftrace_proto_gen/event_list b/src/tools/ftrace_proto_gen/event_list index c4b480780..db13230fd 100644 --- a/src/tools/ftrace_proto_gen/event_list +++ b/src/tools/ftrace_proto_gen/event_list @@ -488,4 +488,7 @@ panel/panel_write_generic sched/sched_migrate_task dpu/dsi_cmd_fifo_status dpu/dsi_rx -dpu/dsi_tx
\ No newline at end of file +dpu/dsi_tx +f2fs/f2fs_background_gc +f2fs/f2fs_gc_begin +f2fs/f2fs_gc_end diff --git a/src/trace_processor/importers/ftrace/ftrace_descriptors.cc b/src/trace_processor/importers/ftrace/ftrace_descriptors.cc index f272e6d8a..3b846f4e1 100644 --- a/src/trace_processor/importers/ftrace/ftrace_descriptors.cc +++ b/src/trace_processor/importers/ftrace/ftrace_descriptors.cc @@ -24,7 +24,7 @@ namespace perfetto { namespace trace_processor { namespace { -std::array<FtraceMessageDescriptor, 492> descriptors{{ +std::array<FtraceMessageDescriptor, 498> descriptors{{ {nullptr, 0, {}}, {nullptr, 0, {}}, {nullptr, 0, {}}, @@ -5423,6 +5423,84 @@ std::array<FtraceMessageDescriptor, 492> descriptors{{ {"load", ProtoSchemaType::kUint32}, }, }, + { + "dpu_dsi_cmd_fifo_status", + 2, + { + {}, + {"header", ProtoSchemaType::kUint32}, + {"payload", ProtoSchemaType::kUint32}, + }, + }, + { + "dpu_dsi_rx", + 2, + { + {}, + {"cmd", ProtoSchemaType::kUint32}, + {"rx_buf", ProtoSchemaType::kUint32}, + }, + }, + { + "dpu_dsi_tx", + 4, + { + {}, + {"type", ProtoSchemaType::kUint32}, + {"tx_buf", ProtoSchemaType::kUint32}, + {"last", ProtoSchemaType::kUint32}, + {"delay_ms", ProtoSchemaType::kUint32}, + }, + }, + { + "f2fs_background_gc", + 4, + { + {}, + {"dev", ProtoSchemaType::kUint64}, + {"wait_ms", ProtoSchemaType::kUint32}, + {"prefree", ProtoSchemaType::kUint32}, + {"free", ProtoSchemaType::kUint32}, + }, + }, + { + "f2fs_gc_begin", + 13, + { + {}, + {"dev", ProtoSchemaType::kUint64}, + {"sync", ProtoSchemaType::kUint32}, + {"background", ProtoSchemaType::kUint32}, + {"dirty_nodes", ProtoSchemaType::kInt64}, + {"dirty_dents", ProtoSchemaType::kInt64}, + {"dirty_imeta", ProtoSchemaType::kInt64}, + {"free_sec", ProtoSchemaType::kUint32}, + {"free_seg", ProtoSchemaType::kUint32}, + {"reserved_seg", ProtoSchemaType::kInt32}, + {"prefree_seg", ProtoSchemaType::kUint32}, + {"gc_type", ProtoSchemaType::kInt32}, + {"no_bg_gc", ProtoSchemaType::kUint32}, + {"nr_free_secs", ProtoSchemaType::kUint32}, + }, + }, + { + "f2fs_gc_end", + 11, + { + {}, + {"dev", ProtoSchemaType::kUint64}, + {"ret", ProtoSchemaType::kInt32}, + {"seg_freed", ProtoSchemaType::kInt32}, + {"sec_freed", ProtoSchemaType::kInt32}, + {"dirty_nodes", ProtoSchemaType::kInt64}, + {"dirty_dents", ProtoSchemaType::kInt64}, + {"dirty_imeta", ProtoSchemaType::kInt64}, + {"free_sec", ProtoSchemaType::kUint32}, + {"free_seg", ProtoSchemaType::kUint32}, + {"reserved_seg", ProtoSchemaType::kInt32}, + {"prefree_seg", ProtoSchemaType::kUint32}, + }, + }, }}; } // namespace diff --git a/src/traced/probes/ftrace/event_info.cc b/src/traced/probes/ftrace/event_info.cc index 3778987a5..e472d060a 100644 --- a/src/traced/probes/ftrace/event_info.cc +++ b/src/traced/probes/ftrace/event_info.cc @@ -4637,6 +4637,111 @@ std::vector<Event> GetStaticEventInfo() { kUnsetFtraceId, 420, kUnsetSize}, + {"f2fs_background_gc", + "f2fs", + { + {kUnsetOffset, kUnsetSize, FtraceFieldType::kInvalidFtraceFieldType, + "dev", 1, ProtoSchemaType::kUint64, + TranslationStrategy::kInvalidTranslationStrategy}, + {kUnsetOffset, kUnsetSize, FtraceFieldType::kInvalidFtraceFieldType, + "wait_ms", 2, ProtoSchemaType::kUint32, + TranslationStrategy::kInvalidTranslationStrategy}, + {kUnsetOffset, kUnsetSize, FtraceFieldType::kInvalidFtraceFieldType, + "prefree", 3, ProtoSchemaType::kUint32, + TranslationStrategy::kInvalidTranslationStrategy}, + {kUnsetOffset, kUnsetSize, FtraceFieldType::kInvalidFtraceFieldType, + "free", 4, ProtoSchemaType::kUint32, + TranslationStrategy::kInvalidTranslationStrategy}, + }, + kUnsetFtraceId, + 495, + kUnsetSize}, + {"f2fs_gc_begin", + "f2fs", + { + {kUnsetOffset, kUnsetSize, FtraceFieldType::kInvalidFtraceFieldType, + "dev", 1, ProtoSchemaType::kUint64, + TranslationStrategy::kInvalidTranslationStrategy}, + {kUnsetOffset, kUnsetSize, FtraceFieldType::kInvalidFtraceFieldType, + "sync", 2, ProtoSchemaType::kUint32, + TranslationStrategy::kInvalidTranslationStrategy}, + {kUnsetOffset, kUnsetSize, FtraceFieldType::kInvalidFtraceFieldType, + "background", 3, ProtoSchemaType::kUint32, + TranslationStrategy::kInvalidTranslationStrategy}, + {kUnsetOffset, kUnsetSize, FtraceFieldType::kInvalidFtraceFieldType, + "dirty_nodes", 4, ProtoSchemaType::kInt64, + TranslationStrategy::kInvalidTranslationStrategy}, + {kUnsetOffset, kUnsetSize, FtraceFieldType::kInvalidFtraceFieldType, + "dirty_dents", 5, ProtoSchemaType::kInt64, + TranslationStrategy::kInvalidTranslationStrategy}, + {kUnsetOffset, kUnsetSize, FtraceFieldType::kInvalidFtraceFieldType, + "dirty_imeta", 6, ProtoSchemaType::kInt64, + TranslationStrategy::kInvalidTranslationStrategy}, + {kUnsetOffset, kUnsetSize, FtraceFieldType::kInvalidFtraceFieldType, + "free_sec", 7, ProtoSchemaType::kUint32, + TranslationStrategy::kInvalidTranslationStrategy}, + {kUnsetOffset, kUnsetSize, FtraceFieldType::kInvalidFtraceFieldType, + "free_seg", 8, ProtoSchemaType::kUint32, + TranslationStrategy::kInvalidTranslationStrategy}, + {kUnsetOffset, kUnsetSize, FtraceFieldType::kInvalidFtraceFieldType, + "reserved_seg", 9, ProtoSchemaType::kInt32, + TranslationStrategy::kInvalidTranslationStrategy}, + {kUnsetOffset, kUnsetSize, FtraceFieldType::kInvalidFtraceFieldType, + "prefree_seg", 10, ProtoSchemaType::kUint32, + TranslationStrategy::kInvalidTranslationStrategy}, + {kUnsetOffset, kUnsetSize, FtraceFieldType::kInvalidFtraceFieldType, + "gc_type", 11, ProtoSchemaType::kInt32, + TranslationStrategy::kInvalidTranslationStrategy}, + {kUnsetOffset, kUnsetSize, FtraceFieldType::kInvalidFtraceFieldType, + "no_bg_gc", 12, ProtoSchemaType::kUint32, + TranslationStrategy::kInvalidTranslationStrategy}, + {kUnsetOffset, kUnsetSize, FtraceFieldType::kInvalidFtraceFieldType, + "nr_free_secs", 13, ProtoSchemaType::kUint32, + TranslationStrategy::kInvalidTranslationStrategy}, + }, + kUnsetFtraceId, + 496, + kUnsetSize}, + {"f2fs_gc_end", + "f2fs", + { + {kUnsetOffset, kUnsetSize, FtraceFieldType::kInvalidFtraceFieldType, + "dev", 1, ProtoSchemaType::kUint64, + TranslationStrategy::kInvalidTranslationStrategy}, + {kUnsetOffset, kUnsetSize, FtraceFieldType::kInvalidFtraceFieldType, + "ret", 2, ProtoSchemaType::kInt32, + TranslationStrategy::kInvalidTranslationStrategy}, + {kUnsetOffset, kUnsetSize, FtraceFieldType::kInvalidFtraceFieldType, + "seg_freed", 3, ProtoSchemaType::kInt32, + TranslationStrategy::kInvalidTranslationStrategy}, + {kUnsetOffset, kUnsetSize, FtraceFieldType::kInvalidFtraceFieldType, + "sec_freed", 4, ProtoSchemaType::kInt32, + TranslationStrategy::kInvalidTranslationStrategy}, + {kUnsetOffset, kUnsetSize, FtraceFieldType::kInvalidFtraceFieldType, + "dirty_nodes", 5, ProtoSchemaType::kInt64, + TranslationStrategy::kInvalidTranslationStrategy}, + {kUnsetOffset, kUnsetSize, FtraceFieldType::kInvalidFtraceFieldType, + "dirty_dents", 6, ProtoSchemaType::kInt64, + TranslationStrategy::kInvalidTranslationStrategy}, + {kUnsetOffset, kUnsetSize, FtraceFieldType::kInvalidFtraceFieldType, + "dirty_imeta", 7, ProtoSchemaType::kInt64, + TranslationStrategy::kInvalidTranslationStrategy}, + {kUnsetOffset, kUnsetSize, FtraceFieldType::kInvalidFtraceFieldType, + "free_sec", 8, ProtoSchemaType::kUint32, + TranslationStrategy::kInvalidTranslationStrategy}, + {kUnsetOffset, kUnsetSize, FtraceFieldType::kInvalidFtraceFieldType, + "free_seg", 9, ProtoSchemaType::kUint32, + TranslationStrategy::kInvalidTranslationStrategy}, + {kUnsetOffset, kUnsetSize, FtraceFieldType::kInvalidFtraceFieldType, + "reserved_seg", 10, ProtoSchemaType::kInt32, + TranslationStrategy::kInvalidTranslationStrategy}, + {kUnsetOffset, kUnsetSize, FtraceFieldType::kInvalidFtraceFieldType, + "prefree_seg", 11, ProtoSchemaType::kUint32, + TranslationStrategy::kInvalidTranslationStrategy}, + }, + kUnsetFtraceId, + 497, + kUnsetSize}, {"fastrpc_dma_stat", "fastrpc", { diff --git a/src/traced/probes/ftrace/test/data/synthetic/events/f2fs/f2fs_background_gc/format b/src/traced/probes/ftrace/test/data/synthetic/events/f2fs/f2fs_background_gc/format new file mode 100644 index 000000000..f6aa90153 --- /dev/null +++ b/src/traced/probes/ftrace/test/data/synthetic/events/f2fs/f2fs_background_gc/format @@ -0,0 +1,14 @@ +name: f2fs_background_gc +ID: 519 +format: + field:unsigned short common_type; offset:0; size:2; signed:0; + field:unsigned char common_flags; offset:2; size:1; signed:0; + field:unsigned char common_preempt_count; offset:3; size:1; signed:0; + field:int common_pid; offset:4; size:4; signed:1; + + field:dev_t dev; offset:8; size:4; signed:0; + field:unsigned int wait_ms; offset:12; size:4; signed:0; + field:unsigned int prefree; offset:16; size:4; signed:0; + field:unsigned int free; offset:20; size:4; signed:0; + +print fmt: "dev = (%d,%d), wait_ms = %u, prefree = %u, free = %u", ((unsigned int) ((REC->dev) >> 20)), ((unsigned int) ((REC->dev) & ((1U << 20) - 1))), REC->wait_ms, REC->prefree, REC->free diff --git a/src/traced/probes/ftrace/test/data/synthetic/events/f2fs/f2fs_gc_begin/format b/src/traced/probes/ftrace/test/data/synthetic/events/f2fs/f2fs_gc_begin/format new file mode 100644 index 000000000..502decacb --- /dev/null +++ b/src/traced/probes/ftrace/test/data/synthetic/events/f2fs/f2fs_gc_begin/format @@ -0,0 +1,21 @@ +name: f2fs_gc_begin +ID: 520 +format: + field:unsigned short common_type; offset:0; size:2; signed:0; + field:unsigned char common_flags; offset:2; size:1; signed:0; + field:unsigned char common_preempt_count; offset:3; size:1; signed:0; + field:int common_pid; offset:4; size:4; signed:1; + + field:dev_t dev; offset:8; size:4; signed:0; + field:int gc_type; offset:12; size:4; signed:1; + field:bool no_bg_gc; offset:16; size:1; signed:0; + field:unsigned int nr_free_secs; offset:20; size:4; signed:0; + field:long long dirty_nodes; offset:24; size:8; signed:1; + field:long long dirty_dents; offset:32; size:8; signed:1; + field:long long dirty_imeta; offset:40; size:8; signed:1; + field:unsigned int free_sec; offset:48; size:4; signed:0; + field:unsigned int free_seg; offset:52; size:4; signed:0; + field:int reserved_seg; offset:56; size:4; signed:1; + field:unsigned int prefree_seg; offset:60; size:4; signed:0; + +print fmt: "dev = (%d,%d), gc_type = %s, no_background_GC = %d, nr_free_secs = %u, nodes = %lld, dents = %lld, imeta = %lld, free_sec:%u, free_seg:%u, rsv_seg:%d, prefree_seg:%u", ((unsigned int) ((REC->dev) >> 20)), ((unsigned int) ((REC->dev) & ((1U << 20) - 1))), __print_symbolic(REC->gc_type, { 1, "Foreground GC" }, { 0, "Background GC" }), (REC->gc_type == 0) ? REC->no_bg_gc : -1, REC->nr_free_secs, REC->dirty_nodes, REC->dirty_dents, REC->dirty_imeta, REC->free_sec, REC->free_seg, REC->reserved_seg, REC->prefree_seg diff --git a/src/traced/probes/ftrace/test/data/synthetic/events/f2fs/f2fs_gc_end/format b/src/traced/probes/ftrace/test/data/synthetic/events/f2fs/f2fs_gc_end/format new file mode 100644 index 000000000..14870b345 --- /dev/null +++ b/src/traced/probes/ftrace/test/data/synthetic/events/f2fs/f2fs_gc_end/format @@ -0,0 +1,21 @@ +name: f2fs_gc_end +ID: 521 +format: + field:unsigned short common_type; offset:0; size:2; signed:0; + field:unsigned char common_flags; offset:2; size:1; signed:0; + field:unsigned char common_preempt_count; offset:3; size:1; signed:0; + field:int common_pid; offset:4; size:4; signed:1; + + field:dev_t dev; offset:8; size:4; signed:0; + field:int ret; offset:12; size:4; signed:1; + field:int seg_freed; offset:16; size:4; signed:1; + field:int sec_freed; offset:20; size:4; signed:1; + field:long long dirty_nodes; offset:24; size:8; signed:1; + field:long long dirty_dents; offset:32; size:8; signed:1; + field:long long dirty_imeta; offset:40; size:8; signed:1; + field:unsigned int free_sec; offset:48; size:4; signed:0; + field:unsigned int free_seg; offset:52; size:4; signed:0; + field:int reserved_seg; offset:56; size:4; signed:1; + field:unsigned int prefree_seg; offset:60; size:4; signed:0; + +print fmt: "dev = (%d,%d), ret = %d, seg_freed = %d, sec_freed = %d, nodes = %lld, dents = %lld, imeta = %lld, free_sec:%u, free_seg:%u, rsv_seg:%d, prefree_seg:%u", ((unsigned int) ((REC->dev) >> 20)), ((unsigned int) ((REC->dev) & ((1U << 20) - 1))), REC->ret, REC->seg_freed, REC->sec_freed, REC->dirty_nodes, REC->dirty_dents, REC->dirty_imeta, REC->free_sec, REC->free_seg, REC->reserved_seg, REC->prefree_seg |