perf trace: Handle task exit in BPF syscall summary

Some system calls never return because it'd terminate the calling
thread.  Let's hook the task exit path and update the duration of the
last syscall.

Before:
  $ sudo perf trace -as --bpf-summary -- true |& grep exit
  (nothing)

After:
  $ sudo perf trace -as --bpf-summary -- true |& grep exit
     exit_group             1      0     0.004     0.004     0.004     0.004      0.00%

Reviewed-by: Ian Rogers <irogers@google.com>
Acked-by: Howard Chu <howardchu95@gmail.com>
Signed-off-by: Namhyung Kim <namhyung@kernel.org>
This commit is contained in:
Namhyung Kim 2026-02-25 17:49:55 -08:00
parent 96f202eab8
commit af894feb32

View File

@ -118,13 +118,11 @@ int sys_enter(u64 *ctx)
return 0;
}
SEC("tp_btf/sys_exit")
int sys_exit(u64 *ctx)
static int do_exit(long ret)
{
int tid;
int key = 0;
u64 cgroup = 0;
long ret = ctx[1]; /* return value of the syscall */
struct syscall_trace *st;
s64 delta;
@ -150,4 +148,18 @@ int sys_exit(u64 *ctx)
return 0;
}
SEC("tp_btf/sys_exit")
int sys_exit(u64 *ctx)
{
long ret = ctx[1]; /* return value of the syscall */
return do_exit(ret);
}
SEC("tp_btf/sched_process_exit")
int process_exit(u64 *ctx)
{
return do_exit(0);
}
char _license[] SEC("license") = "GPL";