public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
From: "S. P. Prasanna" <prasanna@in.ibm.com>
To: Martin Bligh <mbligh@google.com>
Cc: Vara Prasad <prasadav@us.ibm.com>, Andrew Morton <akpm@osdl.org>,
	"Frank Ch. Eigler" <fche@redhat.com>, Ingo Molnar <mingo@elte.hu>,
	Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca>,
	Paul Mundt <lethal@linux-sh.org>,
	linux-kernel <linux-kernel@vger.kernel.org>,
	Jes Sorensen <jes@sgi.com>, Tom Zanussi <zanussi@us.ibm.com>,
	Richard J Moore <richardj_moore@uk.ibm.com>,
	Michel Dagenais <michel.dagenais@polymtl.ca>,
	Christoph Hellwig <hch@infradead.org>,
	Greg Kroah-Hartman <gregkh@suse.de>,
	Thomas Gleixner <tglx@linutronix.de>,
	William Cohen <wcohen@redhat.com>,
	ltt-dev@shafik.org, systemtap@sources.redhat.com,
	Alan Cox <alan@lxorguk.ukuu.org.uk>
Subject: Re: [PATCH] Linux Kernel Markers
Date: Tue, 19 Sep 2006 15:00:57 +0530	[thread overview]
Message-ID: <20060919093056.GA21618@in.ibm.com> (raw)
In-Reply-To: <45104468.50106@google.com>

On Tue, Sep 19, 2006 at 12:26:32PM -0700, Martin Bligh wrote:
> Vara Prasad wrote:
> >Martin Bligh wrote:
> >
> >>[...]
> >>Depends what we're trying to fix. I was trying to fix two things:
> >>
> >>1. Flexibility - kprobes seem unable to access all local variables etc
> >>easily, and go anywhere inside the function. Plus keeping low overhead
> >>for doing things like keeping counters in a function (see previous
> >>example I mentioned for counting pages in shrink_list).
> >>
> >Using tools like systemtap on can consult DWARF information and put 
> >probes in the middle of the function and access local variables as well, 
> >that is not the real problem. The issue here is compiler doesn't seem to 
> >generate required DWARF information in some cases due to optimizations.  
> 
> It seems difficult to seperate those two from each other. If the
> subsystem you're relying on doesn't work, then ....
> 
> >The other related problem is when there exists debug information, the 
> >way to specify the breakpoint location is using line number which is not 
> >maintainable, having a marker solves this problem as well. Your proposal 
> >still doesn't solve the need for markers if i understood correctly.
> 
> It could, but I think we're better off with the markers, yes.
> 
> >>2. Overhead of the int3, which was allegedly 1000 cycles or so, though
> >>faster after Ingo had played with it, it's still significant.
> >
> >The reason Kprobes use breakpoint instruction as pointed out by Prasanna 
> >is, it is atomic on most platforms. We are already working on an 
> >improved idea using jump instruction with which overhead is less than 
> >100 cycles on modern CPU's but it has some limitations and issues 
> >related to preemption and SMP.
> >
> >You can get a glimpse of some of the issues here
> >http://sourceware.org/ml/systemtap/2006-q3/msg00507.html
> >http://sourceware.org/ml/systemtap/2005-q4/msg00117.html
> >For more details do a search for djprobe in the systemtap mailing list 
> >(sorry i am not able to find few threads to summarize all the issues).
> 
> "This djprobe is NOT a replacement of kprobes. Djprobe and kprobes
> have complementary qualities. (ex: djprobe's overhead is low, and
> kprobes can be inserted in anywhere.)". Hmm. that seems problematic.
> 
> From what I was describing for function replacement, we could do an NMI
> IPI to everyone, and lock them in there whilst we insert the probe, but
> it's a bit sucky.

We can do batch processing here. Send one IPI to everyone 
and then insert bunch of jump instructions. This will reduce number
of IPI required here.

> 
> >Here is the algorithm djprobes uses to
> >
> >       IA
> >        | [-2][-1][0][1][2][3][4][5][6][7]
> >       [ins1][ins2][  ins3 ]
> >       [<-     DCR       ->]
> >          [<- JTPR ->]
> >
> >ins1: 1st Instruction
> >ins2: 2nd Instruction
> >ins3: 3rd Instruction
> >IA:  Insertion Address
> >JTPR: Jump Target Prohibition Region
> >DCR: Detoured Code Region
> >
> >
> >The replacement procedure of djpopbes is the following (i have 
> >simplified for readability the actual steps djprobes uses)
> >
> >(1) copying instruction(s) in DCR
> >(2) putting break point instruction at IA
> >(3) make sure no cpu's have replacing instructions in the cache to avoid 
> >jump to the middle of jmp instruction
> >(4) replacing original instruction(s) with jump instruction
> >
> >As you can see from the above your suggestion is very similar to the 
> >djprobes hence i believe all the issues related to djprobes will be 
> >valid for yours as well.
> 
> The hooking seems very similar, yes, perhaps I can be lazy and just
> steal djprobes for this. The difference is that if we just replace the
> whole function, we can just shove arbitrary changes into functions, and
> do whatever we please. Plus we don't have to worry about locating
> internal variables, etc.
> 

Some more coplicated method.
How about inserting a (instruction size) number of breakpoints and
wait untill all the threads gets scheduled atleast once (so that
threads would hit the breakpoint, if their IPs are in the middle of
instruction we want to replace with jump) and then replace with
jump instruction.

Thanks
Prasanna

-- 
Prasanna S.P.
Linux Technology Center
India Software Labs, IBM Bangalore
Email: prasanna@in.ibm.com
Ph: 91-80-41776329

  reply	other threads:[~2006-09-19 20:00 UTC|newest]

Thread overview: 74+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2006-09-18 23:45 [PATCH] Linux Kernel Markers Mathieu Desnoyers
2006-09-19  0:41 ` Alan Cox
2006-09-19  1:10 ` Dave Jones
2006-09-19  8:11 ` Ingo Molnar
2006-09-19  8:13   ` Ingo Molnar
2006-09-19 15:11   ` Martin J. Bligh
2006-09-19 15:31     ` Ingo Molnar
2006-09-20 11:19       ` Andi Kleen
2006-09-19 15:46     ` Frank Ch. Eigler
2006-09-19 16:04       ` Martin Bligh
2006-09-19 16:39         ` Andrew Morton
2006-09-19 16:41           ` Martin Bligh
2006-09-19  6:38             ` S. P. Prasanna
2006-09-19 17:17               ` Martin Bligh
2006-09-19  7:05                 ` S. P. Prasanna
2006-09-19 18:02                   ` Martin Bligh
2006-09-19 21:04                     ` Karim Yaghmour
2006-09-20 13:27                       ` Masami Hiramatsu
2006-09-20 17:21                         ` Karim Yaghmour
2006-09-20 17:15                           ` Mathieu Desnoyers
2006-09-20 17:35                             ` Karim Yaghmour
2006-09-20 18:08                           ` Frank Ch. Eigler
2006-09-20 18:22                             ` Martin Bligh
2006-09-20 18:50                               ` Karim Yaghmour
2006-09-20 19:22                                 ` Martin Bligh
2006-09-20 19:43                                   ` Karim Yaghmour
2006-09-20 19:40                                     ` Martin Bligh
2006-09-20 19:58                                       ` Karim Yaghmour
2006-09-20 18:25                             ` Karim Yaghmour
2006-09-20 17:41                         ` Karim Yaghmour
2006-09-19 17:54                 ` Mathieu Desnoyers
2006-09-19 18:01                   ` Martin Bligh
2006-09-19 18:11                     ` Mathieu Desnoyers
2006-09-20  0:08                   ` Alan Cox
2006-09-20  0:52                     ` Karim Yaghmour
2006-09-20 10:44                       ` Alan Cox
2006-09-20 23:00                         ` Richard J Moore
2006-09-23 15:34                           ` score-boarding [was Re: [PATCH] Linux Kernel Markers] Hugh Dickins
2006-09-26  8:43                             ` Richard J Moore
2006-09-20  1:08                     ` [PATCH] Linux Kernel Markers S. P. Prasanna
2006-09-20  8:18                       ` Richard J Moore
2006-09-20 10:32                         ` Alan Cox
2006-09-20 11:50                           ` Andi Kleen
2006-09-20 13:45                           ` Richard J Moore
2006-09-22 12:33                         ` Pavel Machek
2006-09-20  1:09                     ` Mathieu Desnoyers
2006-09-19 19:13                 ` Vara Prasad
2006-09-19 19:16                   ` Mathieu Desnoyers
2006-09-19 19:24                     ` Martin Bligh
2006-09-19 22:27                     ` Satoshi Oshima
2006-09-19 19:26                   ` Martin Bligh
2006-09-19  9:30                     ` S. P. Prasanna [this message]
2006-09-19 20:12                       ` Mathieu Desnoyers
2006-09-20 11:00                       ` Masami Hiramatsu
2006-09-20  9:39               ` Helge Hafting
2006-09-20 10:30                 ` Alan Cox
2006-09-20 13:23                   ` Masami Hiramatsu
2006-09-19 16:36             ` Ingo Molnar
2006-09-19 16:41         ` Richard J Moore
2006-09-19 16:49         ` Frank Ch. Eigler
2006-09-19 16:52           ` Martin Bligh
2006-09-19 17:02             ` Frank Ch. Eigler
2006-09-19 16:06     ` Vara Prasad
2006-09-19 16:14       ` Martin Bligh
2006-09-19 17:43       ` Mathieu Desnoyers
2006-09-19 16:23     ` Karim Yaghmour
2006-09-19 16:17       ` Martin Bligh
2006-09-19 16:29         ` Karim Yaghmour
2006-09-19 16:55         ` Karim Yaghmour
2006-09-19 17:41     ` Mathieu Desnoyers
2006-09-20 17:33     ` Karim Yaghmour
2006-09-19 15:21 ` Frank Ch. Eigler
2006-09-20 13:20 ` Masami Hiramatsu
2006-09-20 13:32   ` 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=20060919093056.GA21618@in.ibm.com \
    --to=prasanna@in.ibm.com \
    --cc=akpm@osdl.org \
    --cc=alan@lxorguk.ukuu.org.uk \
    --cc=fche@redhat.com \
    --cc=gregkh@suse.de \
    --cc=hch@infradead.org \
    --cc=jes@sgi.com \
    --cc=lethal@linux-sh.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=ltt-dev@shafik.org \
    --cc=mathieu.desnoyers@polymtl.ca \
    --cc=mbligh@google.com \
    --cc=michel.dagenais@polymtl.ca \
    --cc=mingo@elte.hu \
    --cc=prasadav@us.ibm.com \
    --cc=richardj_moore@uk.ibm.com \
    --cc=systemtap@sources.redhat.com \
    --cc=tglx@linutronix.de \
    --cc=wcohen@redhat.com \
    --cc=zanussi@us.ibm.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