diff options
author | Yang Jihong <yangjihong1@huawei.com> | 2022-07-09 03:50:18 +0200 |
---|---|---|
committer | Arnaldo Carvalho de Melo <acme@redhat.com> | 2022-07-26 21:01:29 +0200 |
commit | 4f8ae962f0f71c682f97be5a9491694f9fbd814a (patch) | |
tree | b2f2657cd1452831ec50fbbd2cb853c8da68d8b4 /tools/perf/builtin-kwork.c | |
parent | perf kwork: New tool to trace time properties of kernel work (such as softirq... (diff) | |
download | linux-4f8ae962f0f71c682f97be5a9491694f9fbd814a.tar.xz linux-4f8ae962f0f71c682f97be5a9491694f9fbd814a.zip |
perf kwork: Add irq kwork record support
Record interrupt events irq:irq_handler_entry & irq_handler_exit
Test cases:
# perf kwork record -o perf_kwork.date -- sleep 1
[ perf record: Woken up 0 times to write data ]
[ perf record: Captured and wrote 0.556 MB perf_kwork.date ]
#
# perf evlist -i perf_kwork.date
irq:irq_handler_entry
irq:irq_handler_exit
dummy:HG
# Tip: use 'perf evlist --trace-fields' to show fields for tracepoint events
#
Signed-off-by: Yang Jihong <yangjihong1@huawei.com>
Tested-by: Arnaldo Carvalho de Melo <acme@redhat.com>
Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
Cc: Ingo Molnar <mingo@redhat.com>
Cc: Jiri Olsa <jolsa@kernel.org>
Cc: Mark Rutland <mark.rutland@arm.com>
Cc: Namhyung Kim <namhyung@kernel.org>
Cc: Paul Clarke <pc@us.ibm.com>
Cc: Peter Zijlstra <peterz@infradead.org>
Link: https://lore.kernel.org/r/20220709015033.38326-3-yangjihong1@huawei.com
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
Diffstat (limited to 'tools/perf/builtin-kwork.c')
-rw-r--r-- | tools/perf/builtin-kwork.c | 15 |
1 files changed, 14 insertions, 1 deletions
diff --git a/tools/perf/builtin-kwork.c b/tools/perf/builtin-kwork.c index 3e8d5fa47674..2cff7d1fff20 100644 --- a/tools/perf/builtin-kwork.c +++ b/tools/perf/builtin-kwork.c @@ -25,7 +25,20 @@ #include <linux/time64.h> #include <linux/zalloc.h> +const struct evsel_str_handler irq_tp_handlers[] = { + { "irq:irq_handler_entry", NULL, }, + { "irq:irq_handler_exit", NULL, }, +}; + +static struct kwork_class kwork_irq = { + .name = "irq", + .type = KWORK_CLASS_IRQ, + .nr_tracepoints = 2, + .tp_handlers = irq_tp_handlers, +}; + static struct kwork_class *kwork_class_supported_list[KWORK_CLASS_MAX] = { + [KWORK_CLASS_IRQ] = &kwork_irq, }; static void setup_event_list(struct perf_kwork *kwork, @@ -133,7 +146,7 @@ int cmd_kwork(int argc, const char **argv) OPT_BOOLEAN('D', "dump-raw-trace", &dump_trace, "dump raw trace in ASCII"), OPT_STRING('k', "kwork", &kwork.event_list_str, "kwork", - "list of kwork to profile"), + "list of kwork to profile (irq, etc)"), OPT_BOOLEAN('f', "force", &kwork.force, "don't complain, do it"), OPT_END() }; |