Skip to contentSkip to conversation

Tracepoint: add exec tracepoint

RFC PATCH Superseded David Smith 3 participants 5 messages Nov 3, 2011 – Nov 7, 2011

Subsystems (3)

v2 of 3 Superseded Latest is v3 →

lore
Share & tools
lore
#0 lore raw

RFC PATCH v2 1/1 Tracepoint: add exec tracepoint

New version corrects 2 small problems. Include linux/binfmts.h in trace/events/sched.h to provide definition of 'struct linux_binprm'. To avoid future abi problems, add 'struct task_struct' parameter (like most of the other sched tracepoints have).

---
From: David Smith <[email protected]>

Added general purpose exec tracepoint. The 'bprm' argument gives details of the exec.

---
 fs/exec.c                    |    6 +++++-
 include/trace/events/sched.h |   23 +++++++++++++++++++++++
 2 files changed, 28 insertions(+), 1 deletions(-)
fs/exec.c +5 -1
index 25dcbe5..b0f4919 100644
@@ -61,6 +61,8 @@
 #include <asm/tlb.h>
 #include "internal.h"
 
+#include <trace/events/sched.h>
+
 int core_uses_pid;
 char core_pattern[CORENAME_MAX_SIZE] = "core";
 unsigned int core_pipe_limit;
@@ -1401,9 +1403,11 @@ int search_binary_handler(struct linux_binprm *bprm,struct pt_regs *regs)
 			 */
 			bprm->recursion_depth = depth;
 			if (retval >= 0) {
-				if (depth == 0)
+				if (depth == 0) {
+					trace_sched_process_exec(current, bprm);
 					ptrace_event(PTRACE_EVENT_EXEC,
 							old_pid);
+				}
 				put_binfmt(fmt);
 				allow_write_access(bprm->file);
 				if (bprm->file)
include/trace/events/sched.h +23 -0
index 959ff18..ca8d084 100644
@@ -6,6 +6,7 @@
 
 #include <linux/sched.h>
 #include <linux/tracepoint.h>
+#include <linux/binfmts.h>
 
 /*
  * Tracepoint for calling kthread_stop, performed to end a kthread:
@@ -276,6 +277,28 @@ TRACE_EVENT(sched_process_fork,
 );
 
 /*
+ * Tracepoint for exec:
+ */
+TRACE_EVENT(sched_process_exec,
+
+	TP_PROTO(struct task_struct *p, struct linux_binprm *bprm),
+
+	TP_ARGS(p, bprm),
+
+	TP_STRUCT__entry(
+		__string(	filename,	bprm->filename	)
+		__field(	pid_t,		pid		)
+	),
+
+	TP_fast_assign(
+		__assign_str(filename, bprm->filename);
+		__entry->pid	= p->pid;
+	),
+
+	TP_printk("filename=%s pid=%d", __get_str(filename), __entry->pid)
+);
+
+/*
  * XXX the below sched_stat tracepoints only apply to SCHED_OTHER/BATCH/IDLE
  *     adding sched_stat support to SCHED_FIFO/RR would be welcome.
  */
#1 lore raw

fs/exec.c int search_binary_handler(struct linux_binprm *bprm,struct pt_regs *regs) · line 1410

Quoted 5 lines · David Smith
fs/exec.c +3 -0
+                               if (depth == 0) {
+                                       trace_sched_process_exec(current, bprm);
                                        ptrace_event(PTRACE_EVENT_EXEC,
                                                        old_pid);
+                               }

Won't tracepoints be interested in the old pid as well? Or does bprm carry that info? That was only recently added to the ptrace event, which probably postdates your original patch.

Signature · 1 line
Pedro Alves
#2 lore raw
Quoted 10 lines · Pedro Alves

fs/exec.c int search_binary_handler(struct linux_binprm *bprm,struct pt_regs *regs) · line 1410

Quoted 5 lines · David Smith
fs/exec.c +3 -0
+                               if (depth == 0) {
+                                       trace_sched_process_exec(current, bprm);
                                        ptrace_event(PTRACE_EVENT_EXEC,
                                                        old_pid);
+                               }

Won't tracepoints be interested in the old pid as well? Or does bprm carry that info? That was only recently added to the ptrace event, which probably postdates your original patch.

Looking back at commit bb188d7 and the reasons why 'old_pid' was added, it seems like a good idea to go ahead and add 'old_pid' to the tracepoint as well.

v3 coming up...

Thanks for looking at this.

Signature · 6 lines
David Smith
[email protected]
Red Hat
http://www.redhat.com
256.217.0141 (direct)
256.837.0057 (fax)
#3 lore raw
In reply to David Smith
Quoted 4 lines · David Smith

Added general purpose exec tracepoint. The 'bprm' argument gives details of the exec.

This 'changelog' if one can call it that, is completely devoid of rationale, why should we care and why should we merge.

#4 lore raw
Quoted 8 lines · Peter Zijlstra
Quoted 4 lines · David Smith

Added general purpose exec tracepoint. The 'bprm' argument gives details of the exec.

This 'changelog' if one can call it that, is completely devoid of rationale, why should we care and why should we merge.

Sorry for being too terse.

Exec is an important major event in the life of a task (like fork or exit). If you want to watch a task start up, when it gets exec'ed is a good place to start. With the addition of this tracepoint, we can monitor exec's and get a better picture of system activity in general. This will also enable better process tracking, allowing you to answer questions like "what process keeps starting up process X?".

This tracepoint can also be useful in ftrace filtering (i.e. starting or stopping filtering when exec is called)

Signature · 6 lines
David Smith
[email protected]
Red Hat
http://www.redhat.com
256.217.0141 (direct)
256.837.0057 (fax)