Patchwork [0/1] crosstap: a systemtap usability script

login
register
mail settings
Submitter Tom Zanussi
Date Aug. 31, 2012, 9:45 p.m.
Message ID <cover.1346448608.git.tom.zanussi@intel.com>
Download mbox
Permalink /patch/35619/
State New
Headers show

Pull-request

git://git.yoctoproject.org/poky-contrib.git tzanussi/crosstap.v1

Comments

Tom Zanussi - Aug. 31, 2012, 9:45 p.m.
From: Tom Zanussi <tom.zanussi@intel.com>

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 root@192.168.7.10 helloworld.stp
~/tracing/systemtap/scripts/tutorial ~/tracing/systemtap/scripts/tutorial
~/tracing/systemtap/scripts/tutorial
root@192.168.7.10'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 root@192.168.7.10 helloworld_args.stp 99 ninetynine -v
~/tracing/systemtap/scripts/tutorial ~/tracing/systemtap/scripts/tutorial
~/tracing/systemtap/scripts/tutorial
root@192.168.7.10'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 root@192.168.7.10 trace_open.stp
~/tracing/systemtap/scripts/tutorial ~/tracing/systemtap/scripts/tutorial
~/tracing/systemtap/scripts/tutorial
root@192.168.7.10'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