From: Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca>
To: Ingo Molnar <mingo@elte.hu>
Cc: linux-kernel@vger.kernel.org, systemtap@sources.redhat.com,
"Frank Ch. Eigler" <fche@redhat.com>
Subject: System call instrumentation
Date: Sun, 4 May 2008 09:48:39 -0400 [thread overview]
Message-ID: <20080504134838.GA21487@Krystal> (raw)
Hi Ingo,
I looked at the system call instrumentation present in LTTng lately. I
tried different solutions, e.g. hooking a kernel-wide syscall trace in
do_syscall_trace, but it appears that I ended up re-doing another
syscall table, which consists of specialized functions which extracts
the string and data structure parameters from user-space. Since code
duplication is not exactly wanted, I think that the original approach
taken in my patchset, which is to instrument the kernel code at the
sys_* level (e.g. sys_open), which is the earliest level where the
parameter information is made available to the kernel, is still the best
way to go.
I would still identify the execution mode changes in the same way I do
currently, which is by instrumenting do_syscall_trace, just to know as
soon as possible when the mode has changed from user-space to
kernel-space so we can do time accounting more accurately. I already
have the patchset which adds the KERNEL_TRACE thread flag to every
architectures. It's tested in assembly in the same way SYSCALL_TRACE is
tested, but is activated globally by iterating on all the threads.
So, the currently proposed scheme for a system call would be (for the
open() example)
shown as :
kernel stack
trace: event name (parameters)
do_syscall_trace()
trace: kernel_arch_syscall_entry (syscall id, instruction pointer)
do_sys_open()
trace: fs_open (fd, filename)
do_syscall_trace()
kernel_arch_syscall_exit (return value)
If we take this open() example, filename is ready only in do_sys_open,
which is called by sys_open and sys_openat. So the logical
instrumentation site for this would really be do_sys_open(). The
information about which system call has been done is made available in
the kernel_arch_syscall_entry event. It is not present anymore at the
do_sys_open level because this execution path can be called from more
than one syscall.
What do you think of this approach ?
Mathieu
--
Mathieu Desnoyers
OpenPGP key fingerprint: 8CD5 52C3 8E3C 4140 715F BA06 3F25 A8FE 3BAE 9A68
next reply other threads:[~2008-05-04 13:48 UTC|newest]
Thread overview: 10+ messages / expand[flat|nested] mbox.gz Atom feed top
2008-05-04 13:48 Mathieu Desnoyers [this message]
2008-05-05 6:55 ` System call instrumentation Ingo Molnar
2008-05-05 10:59 ` Mathieu Desnoyers
2008-05-05 11:10 ` Ingo Molnar
2008-05-05 11:30 ` Mathieu Desnoyers
2008-05-05 12:28 ` Ingo Molnar
2008-05-06 20:52 ` Masami Hiramatsu
2008-05-20 3:44 ` Mathieu Desnoyers
2008-05-20 14:18 ` Arjan van de Ven
2008-05-22 12:47 ` Mathieu Desnoyers
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20080504134838.GA21487@Krystal \
--to=mathieu.desnoyers@polymtl.ca \
--cc=fche@redhat.com \
--cc=linux-kernel@vger.kernel.org \
--cc=mingo@elte.hu \
--cc=systemtap@sources.redhat.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox