From: Tom Zanussi <[email protected]>

This patch implements a script called 'crosstap', which essentially
encapsulates and automates the tedious steps until now required to
use systemtap on a remote embedded target, outlined here:

https://wiki.yoctoproject.org/wiki/Tracing_and_Profiling

There's actually a Yocto bug tracking this work, see for a little
more background:

https://bugzilla.yoctoproject.org/show_bug.cgi?id=1551

I've tested the below scripts on a couple qemu targets (qemuarm and
qemux86) as well as on real hardware (emenlow).  I'll be doing a lot
more testing of this script in the coming weeks as I address another
enhancement (tracing and profiling HOWTOs):

https://bugzilla.yoctoproject.org/show_bug.cgi?id=1640

The examples tested were:

1) The simplest possible probe, which just prints 'hello world':

probe begin
{
        print ("hello world\n")
        exit ()
}

[trz@empanada tutorial]$ crosstap [email protected] helloworld.stp
~/tracing/systemtap/scripts/tutorial ~/tracing/systemtap/scripts/tutorial
~/tracing/systemtap/scripts/tutorial
[email protected]'s password: 
hello world

2) The next simplest possible probe, which prints 'hello world', but also
demonstrates that any number of arguements can be passed to the systemtap
script:

probe begin
{
        printf("hello world with cmdline args, numeric arg: %d, string arg: 
%s\n", $1, @2)
        exit ()
}

[trz@empanada tutorial]$ crosstap [email protected] helloworld_args.stp 99 
ninetynine -v
~/tracing/systemtap/scripts/tutorial ~/tracing/systemtap/scripts/tutorial
~/tracing/systemtap/scripts/tutorial
[email protected]'s password: 
Pass 1: parsed user script and 83 library script(s) using 
150500virt/22236res/2148shr/20612data kb, in 80usr/0sys/81real ms.
Pass 2: analyzed script: 1 probe(s), 1 function(s), 0 embed(s), 0 global(s) 
using 150896virt/22760res/2224shr/21008data kb, in 0usr/0sys/2real ms.
Pass 3: translated to C into "/tmp/stapJsYotR/helloworld_args_src.c" using 
151020virt/23208res/2616shr/21132data kb, in 0usr/0sys/0real ms.
Pass 4: compiled C into "helloworld_args.ko" in 1030usr/450sys/1568real ms.
Pass 5: starting run.
hello world with cmdline args, numeric arg: 99, string arg: ninetynine
Pass 5: run completed in 10usr/0sys/426real ms.

3) A more interesting, marginally useful test, instrumenting and printing
out information about every 'open' syscall that happens on the system:

probe syscall.open
{
        printf ("%s(%d) open (%s)\n", execname(), pid(), argstr)
}

probe timer.ms(9000) # after 9 seconds
{
        exit ()
}

On the target system:
# cat /etc/*

[trz@empanada tutorial]$ crosstap [email protected] trace_open.stp
~/tracing/systemtap/scripts/tutorial ~/tracing/systemtap/scripts/tutorial
~/tracing/systemtap/scripts/tutorial
[email protected]'s password: 
syslogd(811) open ("/var/log/messages", 
O_WRONLY|O_APPEND|O_CREAT|O_LARGEFILE|O_NOCTTY|O_NONBLOCK, 0666)
cat(963) open ("/etc/ld.so.cache", O_RDONLY|O_CLOEXEC|O_CLOEXEC)
cat(963) open ("/lib/libc.so.6", O_RDONLY|O_CLOEXEC|O_CLOEXEC)
cat(963) open ("X11", O_RDONLY|O_LARGEFILE)
cat(963) open ("apm", O_RDONLY|O_LARGEFILE)
cat(963) open ("asound.conf", O_RDONLY|O_LARGEFILE)
.
.
.
cat(963) open ("init.d", O_RDONLY|O_LARGEFILE)
cat(963) open ("inittab", O_RDONLY|O_LARGEFILE)
cat(963) open ("inputrc", O_RDONLY|O_LARGEFILE)
cat(963) open ("issue", O_RDONLY|O_LARGEFILE)
cat(963) open ("issue.net", O_RDONLY|O_LARGEFILE)
cat(963) open ("ld.so.cache", O_RDONLY|O_LARGEFILE)
matchbox-termin(891) open ("/tmp/vteNQTCKW", O_RDWR|O_CREAT|O_EXCL|O_LARGEFILE, 
0600)
matchbox-termin(891) open ("/tmp/vteQOVCKW", O_RDWR|O_CREAT|O_EXCL|O_LARGEFILE, 
0600)
matchbox-termin(891) open ("/tmp/vte0QKDKW", O_RDWR|O_CREAT|O_EXCL|O_LARGEFILE, 
0600)
matchbox-termin(891) open ("/tmp/vteUBAFKW", O_RDWR|O_CREAT|O_EXCL|O_LARGEFILE, 
0600)
cat(963) open ("ld.so.conf", O_RDONLY|O_LARGEFILE)
cat(963) open ("libnl", O_RDONLY|O_LARGEFILE)
cat(963) open ("limits", O_RDONLY|O_LARGEFILE)
cat(963) open ("login.access", O_RDONLY|O_LARGEFILE)
cat(963) open ("login.defs", O_RDONLY|O_LARGEFILE)
cat(963) open ("logrotate.d", O_RDONLY|O_LARGEFILE)
cat(963) open ("matchbox", O_RDONLY|O_LARGEFILE)
.
.
.


The following changes since commit 9ba1e33e2d14362971d6441ee6142bcb0857df1a:

  sstate: Ensure master.list exists if it doesn't already (2012-08-30 22:45:56 
-0700)

are available in the git repository at:

  git://git.yoctoproject.org/poky-contrib.git tzanussi/crosstap.v1
  
http://git.yoctoproject.org/cgit/cgit.cgi/poky-contrib/log/?h=tzanussi/crosstap.v1

Tom Zanussi (1):
  crosstap: new script

 scripts/crosstap | 148 +++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 148 insertions(+)
 create mode 100755 scripts/crosstap

-- 
1.7.11.4


_______________________________________________
Openembedded-core mailing list
[email protected]
http://lists.linuxtogo.org/cgi-bin/mailman/listinfo/openembedded-core

Reply via email to