[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <20070717092324.28c7dc3d@frecb000686.frec.bull.fr>
Date: Tue, 17 Jul 2007 09:23:24 +0200
From: Sébastien Dugué <sebastien.dugue@...l.net>
To: linux@...mer.net
Cc: l.pinguin@...il.com, LKML <linux-kernel@...r.kernel.org>,
RT-Users <linux-rt-users@...r.kernel.org>,
mathieu.desnoyers@...ymtl.ca, "Ingo Molnar" <mingo@...e.hu>
Subject: Re: [Question] Hooks for scheduler tracing (CFS)
Hi Remy,
On Mon, 16 Jul 2007 21:46:46 +0200 "Remy Bohmer" <l.pinguin@...il.com> wrote:
> Hello,
>
> I am looking for some tool/kernel machanism that enables me to track
> every schedule change on the CFS scheduler of the RT-kernel for some
> period of time.
> Thus a tool that gives me an overview after some time which task got
> "scheduled in/out" at "which timestamp" and at "which CPU". ( I need
> the raw data)
>
> In a far past (on Montavista kernels) I used LTT for this to log for
> some time with only the SCHED_CHANGE filter and text output. But, I
> cannot find any LTT(ng) support for any RT-kernel, and support for the
> new CFS (like in 2.6.22.1-rt4) is even harder.
>
> So I was wondering if anybody knows some tool/kernel mechanism which
> can do this?
> If not, I will build a kernel extension for it myself (new extension
> to 'latency_trace' ?)
> In that case can anybody with in depth CFS scheduler knowledge please
> point me which hooks are safe to use for this?
>
> I need it to get a detailed insight in my RT-system with its RT and
> non-RT applications.
> Thus to know when a certain task gets scheduled (and to calculate its
> per thread min/max/avg latencies), which task preempts another task,
> and to get a complete overview of what the RT system (and scheduler)
> is doing during time etc.
>
>
Have a look at Steven Rostedt's logdev, it's very lightweight
and does what you want. I'm currently using it doing the same
thing you want to achieve.
http://rostedt.homelinux.com/logdev/
I ported it over to 2.6.21.5-rt20 (patches attached). The way I set it up
is:
- the patches apply in the following order:
. relay-update.patch
. logdev-0.5.4.patch
. logdev-markers-0.5.4.patch
. logdev-trace-ctx-switch.patch
. logdev-trace-sys_clock_getres.patch
- be sure to enable debugfs in the kernel
- the userspace tool, you can find at http://rostedt.homelinux.com/logdev/
I modified the dump_log.h and log_marker.c to suit my needs (attached) and
match the logdev-trace-ctx-switch.patch and logdev-trace-sys_clock_getres.patch
- start tracing with 'echo 1 > /mnt/debugfs/logdev/mark'
stop tracing with 'echo 0 > /mnt/debugfs/logdev/mark'
dump trace buffers with 'logdev/logread > dump.log'
The clock_getres trace is for me to mark some transitions in my
test program so that I can discard non interesting traces.
Hope this helps, feel free to ask for more details.
Sébastien.
View attachment "relay-update.patch" of type "text/x-patch" (4597 bytes)
View attachment "logdev-0.5.4.patch" of type "text/x-patch" (93273 bytes)
View attachment "logdev-markers-0.5.4.patch" of type "text/x-patch" (31517 bytes)
View attachment "logdev-trace-ctx-switch.patch" of type "text/x-patch" (4515 bytes)
View attachment "logdev-trace-sys_clock_getres.patch" of type "text/x-patch" (2911 bytes)
View attachment "dump_log.h" of type "text/x-chdr" (6243 bytes)
View attachment "log_marker.c" of type "text/x-csrc" (2518 bytes)
Powered by blists - more mailing lists