This is the mail archive of the
systemtap@sourceware.org
mailing list for the systemtap project.
Re: new static user probe types
- From: Mark Wielaard <mjw at redhat dot com>
- To: Stan Cox <scox at redhat dot com>
- Cc: systemtap at sourceware dot org
- Date: Wed, 22 Jul 2009 12:42:07 +0200
- Subject: Re: new static user probe types
- References: <4A453D09.60600@redhat.com> <4A5E0195.5080803@redhat.com> <4A64B8AF.6030304@redhat.com>
On Mon, 2009-07-20 at 14:34 -0400, Stan Cox wrote:
> I did some tweaking and a bit more testing. Running a program which
> invokes a probe in a loop. Invoked via stap running a script with only
> a begin in it.
> utrace 0.71user 0.34system 0:01.10elapsed # probe is a syscall, no arg setup
> kprobe 0.72user 0.33system 0:01.09elapsed # probe is a syscall, no arg setup
> uprobe 0.57user 0.09system 0:00.68elapsed # probe is a nop, possibly
> also arg setup
So uprobes is the clear winner for almost zero-overhead when disabled.
> Invoked via stap running a script which actually has handlers for the probes
> utrace 0.82user 4.28system 0:05.17elapsed
> kprobe 1.59user 5.18system 0:08.50elapsed
> uprobe 1.17user 11.12system 0:12.35elapsed
But it has the largest overhead when enabled. Clearly we want the uprobe
mechanism when probes are disabled, but the utrace mechanism when probes
are enabled!
Would it be possible to change the uprobes mechanism for inserting trap
instructions to insert any instructions (sequence)?
Then we could have the best of both worlds, or could even decide at
runtime what to insert to when the probe gets enabled.
You would make sure that there are enough nops in the place of the probe
point for the instruction sequence you want to replace and then the
uprobes insert instruction mechanism would (after checking it had enough
nop space) insert the instruction sequence (preferable the one used by
the utrace mechanism).
It would also help with implementing the idea for the ENABLED mechanism
idea suggested in
http://sourceware.org/bugzilla/show_bug.cgi?id=10013#c2
but there you would replace a specific instruction with another (the
inserting mechanism should check of course).
So, it might be a bit like what Srikar posted to utrace-devel:
https://www.redhat.com/archives/utrace-devel/2009-June/msg00018.html
But with the Ubp (ubp_bkpt insn) replaced with inserting of an
"arbitrary" instruction instead of a trap (and possibly a check that the
instruction being replaced is the intended one). And without the need
for Ssol in that case.
Cheers,
Mark