Tracepoint: add exec tracepoint
Subsystems (3)
RFC PATCH v3 1/1 Tracepoint: add exec tracepoint
Added general purpose exec tracepoint. 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, exec's can be monitored and better picture of general system activity can be obtained. This tracepoint will also enable better process life 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)
--- fs/exec.c | 8 +++++++- include/trace/events/sched.h | 27 +++++++++++++++++++++++++++ 2 files changed, 34 insertions(+), 1 deletions(-)
fs/exec.c +7 -1
@@ -63,6 +63,8 @@#include <trace/events/task.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,13 @@ 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, + old_pid, + bprm);ptrace_event (PTRACE_EVENT_EXEC , old_pid); + }put_binfmt (fmt);allow_write_access (bprm->file);if (bprm->file)
include/trace/events/sched.h +27 -0
@@ -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,32 @@ TRACE_EVENT(sched_process_fork, );/* +* Tracepoint for exec: +*/ +TRACE_EVENT (sched_process_exec, + + TP_PROTO(struct task_struct *p, pid_t old_pid, + struct linux_binprm *bprm), + +TP_ARGS (p, old_pid, bprm), + +TP_STRUCT__entry ( + __string( filename, bprm->filename ) + __field( pid_t, pid ) +__field ( pid_t, old_pid ) + ), + +TP_fast_assign ( + __assign_str(filename, bprm->filename); + __entry->pid = p->pid; + __entry->old_pid = p->pid; + ), + +TP_printk ("filename=%s pid=%d old_pid=%d" ,__get_str (filename), + __entry->pid, __entry->old_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. */
[tip:perf/core] tracepoint, vfs, sched: Add exec() tracepoint
Commit-ID: 49667d4aec91c766bb0519db798713ee6c90e7d5 Gitweb: http://git.kernel.org/tip/49667d4aec91c766bb0519db798713ee6c90e7d5 Author: David Smith <[email protected]> AuthorDate: Tue, 7 Feb 2012 10:11:05 -0600 Committer: Ingo Molnar <[email protected]> CommitDate: Wed, 22 Feb 2012 12:21:54 +0100
tracepoint, vfs, sched: Add exec() tracepoint
Added a minimal exec tracepoint. Exec is an important major event in the life of a task, like fork(), clone() or exit(), all of which we already trace.
[ We also do scheduling re-balancing during exec() - so it's useful
from a scheduler instrumentation POV as well. ]
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, exec's can be monitored and better picture of general system activity can be obtained. This tracepoint will also enable better process life tracking, allowing you to answer questions like "what process keeps starting up binary X?".
This tracepoint can also be useful in ftrace filtering and trigger
conditions: i.e. starting or stopping filtering when exec is called.
--- fs/exec.c | 9 ++++++--- include/trace/events/sched.h | 27 +++++++++++++++++++++++++++ 2 files changed, 33 insertions(+), 3 deletions(-)
fs/exec.c +6 -3
@@ -63,6 +63,8 @@#include <trace/events/task.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,10 @@ int search_binary_handler(struct linux_binprm *bprm,struct pt_regs *regs)*/ bprm->recursion_depth = depth;if (retval >=0 ) { -if (depth ==0 ) -ptrace_event (PTRACE_EVENT_EXEC , - old_pid); +if (depth ==0 ) { +trace_sched_process_exec (current, old_pid, bprm); +ptrace_event (PTRACE_EVENT_EXEC , old_pid); + }put_binfmt (fmt);allow_write_access (bprm->file);if (bprm->file)
include/trace/events/sched.h +27 -0
@@ -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,32 @@ TRACE_EVENT(sched_process_fork, );/* +* Tracepoint for exec: +*/ +TRACE_EVENT (sched_process_exec, + + TP_PROTO(struct task_struct *p, pid_t old_pid, + struct linux_binprm *bprm), + +TP_ARGS (p, old_pid, bprm), + +TP_STRUCT__entry ( + __string( filename, bprm->filename ) + __field( pid_t, pid ) +__field ( pid_t, old_pid ) + ), + +TP_fast_assign ( + __assign_str(filename, bprm->filename); + __entry->pid = p->pid; + __entry->old_pid = p->pid; + ), + +TP_printk ("filename=%s pid=%d old_pid=%d" ,__get_str (filename), + __entry->pid, __entry->old_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. */
[tip:perf/core] tracepoint, vfs, sched: Add exec() tracepoint
In reply to David SmithCommit-ID: 4ff16c25e2cc48cbe6956e356c38a25ac063a64d Gitweb: http://git.kernel.org/tip/4ff16c25e2cc48cbe6956e356c38a25ac063a64d Author: David Smith <[email protected]> AuthorDate: Tue, 7 Feb 2012 10:11:05 -0600 Committer: Ingo Molnar <[email protected]> CommitDate: Thu, 23 Feb 2012 09:28:06 +0100
tracepoint, vfs, sched: Add exec() tracepoint
Added a minimal exec tracepoint. Exec is an important major event in the life of a task, like fork(), clone() or exit(), all of which we already trace.
[ We also do scheduling re-balancing during exec() - so it's useful
from a scheduler instrumentation POV as well. ]
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, exec's can be monitored and better picture of general system activity can be obtained. This tracepoint will also enable better process life tracking, allowing you to answer questions like "what process keeps starting up binary X?".
This tracepoint can also be useful in ftrace filtering and trigger
conditions: i.e. starting or stopping filtering when exec is called.
--- fs/exec.c | 9 ++++++--- include/trace/events/sched.h | 27 +++++++++++++++++++++++++++ 2 files changed, 33 insertions(+), 3 deletions(-)
fs/exec.c +6 -3
@@ -63,6 +63,8 @@#include <trace/events/task.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,10 @@ int search_binary_handler(struct linux_binprm *bprm,struct pt_regs *regs)*/ bprm->recursion_depth = depth;if (retval >=0 ) { -if (depth ==0 ) -ptrace_event (PTRACE_EVENT_EXEC , - old_pid); +if (depth ==0 ) { +trace_sched_process_exec (current, old_pid, bprm); +ptrace_event (PTRACE_EVENT_EXEC , old_pid); + }put_binfmt (fmt);allow_write_access (bprm->file);if (bprm->file)
include/trace/events/sched.h +27 -0
@@ -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,32 @@ TRACE_EVENT(sched_process_fork, );/* +* Tracepoint for exec: +*/ +TRACE_EVENT (sched_process_exec, + + TP_PROTO(struct task_struct *p, pid_t old_pid, + struct linux_binprm *bprm), + +TP_ARGS (p, old_pid, bprm), + +TP_STRUCT__entry ( + __string( filename, bprm->filename ) + __field( pid_t, pid ) +__field ( pid_t, old_pid ) + ), + +TP_fast_assign ( + __assign_str(filename, bprm->filename); + __entry->pid = p->pid; + __entry->old_pid = p->pid; + ), + +TP_printk ("filename=%s pid=%d old_pid=%d" ,__get_str (filename), + __entry->pid, __entry->old_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. */