From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-16.8 required=3.0 tests=BAYES_00, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 6EBE7C433ED for ; Fri, 30 Apr 2021 14:22:52 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 4A8C461040 for ; Fri, 30 Apr 2021 14:22:52 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230196AbhD3OXi (ORCPT ); Fri, 30 Apr 2021 10:23:38 -0400 Received: from jptosegrel01.sonyericsson.com ([124.215.201.71]:3843 "EHLO JPTOSEGREL01.sonyericsson.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S233135AbhD3OX1 (ORCPT ); Fri, 30 Apr 2021 10:23:27 -0400 From: Peter Enderborg To: , Steven Rostedt , Ingo Molnar , Andrew Morton , "Eric W . Biederman" , Peter Zijlstra , Alexei Starovoitov , Christian Brauner , Davidlohr Bueso , Michel Lespinasse , Jann Horn , Mathieu Desnoyers , Christophe Leroy , Minchan Kim CC: Peter Enderborg Subject: [PATCH 1/2] tracing: Add a trace for task_exit Date: Fri, 30 Apr 2021 16:22:22 +0200 Message-ID: <20210430142223.25500-2-peter.enderborg@sony.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20210430142223.25500-1-peter.enderborg@sony.com> References: <20210430142223.25500-1-peter.enderborg@sony.com> MIME-Version: 1.0 Content-Type: text/plain X-SEG-SpamProfiler-Analysis: v=2.3 cv=DLnxHBFb c=1 sm=1 tr=0 a=fZcToFWbXLKijqHhjJ02CA==:117 a=3YhXtTcJ-WEA:10 a=z6gsHLkEAAAA:8 a=NkeGOKhD0Io3lEhIEAYA:9 a=d-OLMTCWyvARjPbQ-enb:22 X-SEG-SpamProfiler-Score: 0 Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org This is the peer functions to task_rename and task_newtask. With this we get hole "life-cycle" of task and can easily see short livied task and their exit status. Format might look like: bash-1144 [006] .... 1306.601707: task_newtask: pid=1181 comm=bash clone_flags=1200000 oom_score_adj=0 <...>-1181 [007] .... 1306.602080: task_rename: pid=1181 oldcomm=bash newcomm=ls oom_score_adj=0 bash-1144 [006] d... 1306.785960: task_exit: pid=1181 oom_score_adj=0 exit_signal=17 exit_code=0 exit_state=0x10 comm=ls For a sequence when a bash shell runs the ls command. Signed-off-by: Peter Enderborg --- include/trace/events/task.h | 32 ++++++++++++++++++++++++++++++++ kernel/exit.c | 3 +++ 2 files changed, 35 insertions(+) diff --git a/include/trace/events/task.h b/include/trace/events/task.h index 64d160930b0d..2e977d2935e1 100644 --- a/include/trace/events/task.h +++ b/include/trace/events/task.h @@ -56,6 +56,38 @@ TRACE_EVENT(task_rename, __entry->newcomm, __entry->oom_score_adj) ); +TRACE_EVENT(task_exit, + + TP_PROTO(struct task_struct *task), + + TP_ARGS(task), + + TP_STRUCT__entry( + __field(pid_t, pid) + __field(short, oom_score_adj) + __field(int, exit_signal) + __field(int, exit_code) + __field(int, exit_state) + __string(comm, task->comm) + + ), + + TP_fast_assign( + __entry->pid = task->pid; + __entry->oom_score_adj = task->signal->oom_score_adj; + __entry->exit_signal = task->exit_signal; + __entry->exit_code = task->exit_code; + __entry->exit_state = task->exit_state; + __assign_str(comm, task->comm); + ), + + TP_printk("pid=%d oom_score_adj=%hd exit_signal=%d exit_code=%d exit_state=0x%x comm=%s", + __entry->pid, + __entry->oom_score_adj, __entry->exit_signal, + __entry->exit_code, __entry->exit_state, + __get_str(comm)) +); + #endif /* This part must be outside protection */ diff --git a/kernel/exit.c b/kernel/exit.c index 04029e35e69a..3ab0944e5dfc 100644 --- a/kernel/exit.c +++ b/kernel/exit.c @@ -68,6 +68,7 @@ #include #include #include +#include static void __unhash_process(struct task_struct *p, bool group_dead) { @@ -107,6 +108,8 @@ static void __exit_signal(struct task_struct *tsk) posix_cpu_timers_exit_group(tsk); #endif + trace_task_exit(tsk); + if (group_dead) { tty = sig->tty; sig->tty = NULL; -- 2.17.1