Re: [RFC] [PATCH 4/7] Uprobes Implementation

From: Peter Zijlstra
Date: Fri Jan 15 2010 - 08:48:12 EST


On Fri, 2010-01-15 at 08:38 -0500, Frank Ch. Eigler wrote:
> Hi -
>
> On Fri, Jan 15, 2010 at 02:25:30PM +0100, Peter Zijlstra wrote:
> > [...]
> > > utrace is not a form of punishment inflicted upon the undeserving. It
> > > is a service layer that uprobes et alii are built upon. You as a
> > > potential uprobes client need not also talk directly to it, if you
> > > wish to reimplement task-finder-like services some other way.
> >
> > [...]
> > But yes, I think that for most purposes utrace is a punishment, its way
> > too heavy, I mean, trap, generate a signal, catch the signal, that's
> > like an insane amount of code to jump through in order to get that trap.
>
> At the bottom, there will be an int3 in the userspace text page.
> There will be a trap taken, no matter what. Code must figure out
> whether this trap came from an in-kernel client such as uprobes, or
> whether it is to be passed through to a userspace debugger via ptrace
> (or the gdbstub). This part is unavoidable if you wish to be
> compatible.

Sure, a lookup against existing probe sites on trap is unavoidable, if
you find a match, you call a probe specific handler and deal with it
there, if you don't you'll eventually generate a SIGTRAP and fall back
to userspace.

Thing is, utrace doesn't do that (nor should it), its something the
uprobe interface should implement just like kprobes does.

> I'm not sure, but it sounds like the part you're complaining about is
> how utrace ultimately reports the trap to uprobes: i.e.,
> utrace_get_signal()? Is that the "insane amount of code"?

Well when tracing/profiling every instruction is too much. Having to
needlessly raise a signal only to catch it again a short bit later
sounds like obvious waste to me.

> > Furthermore it requires stopping and resuming tasks and nonsense like
> > that, that's unwanted in many cases, just run stuff from the trap site
> > and you're done.
>
> I don't know what you mean exactly. A trap already stopped task.
> utrace merely allows various clients to inspect/manipulate the state
> of the task at that moment. It does not add any context switches or
> spurious stop/resumue operations.

Srikar seemed to suggest it needed stop/resume.

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/