systemtap 2.2.1 release

From: Frank Ch. Eigler
Date: Thu May 16 2013 - 10:50:30 EST


The systemtap team announces release 2.2.1, "jZlakVTeCT"!

Java method probing support using Byteman, stapdyn -G global variable support,
misc stapdyn bugfixes & internal improvements

= Where to get it

http://sourceware.org/systemtap/ - our project page
http://sourceware.org/systemtap/ftp/releases/systemtap-2.2.1.tar.gz
http://koji.fedoraproject.org/koji/packageinfo?packageID=615
git tag release-2.2.1 (commit 9c4e07c8a3)

There have been over 200 commits since the last release.
There have been over 30 bugs/features fixed since the last release.


= How to build it

See the README and NEWS files at
http://sourceware.org/git/?p=systemtap.git;a=tree
Further information at http://sourceware.org/systemtap/wiki/


= Systemtap frontend (stap) changes

- Basic support has been added for probing Java methods using Byteman
http://www.jboss.org/byteman as a backend. Java method probes can
target method entries, returns, or specific statements in the method
as specified by line number. They perform much better than the
hotspot.method_** probes that instrument all-or-none of the entire java app.

probe java("org.my.MyApp").class("^java.lang.Object").method("foo(int)")
{ println($$parms) }

See java/README for information on manual setup for Java/Byteman
functionality. Set env STAPBM_VERBOSE=yes for more tracing.

- A systemd service file and tmpfile have been added to allow
systemtap-server to be managed natively by systemd.

= Systemtap runtime changes

- The dyninst backend has improved in several aspects:
- Setting custom values for global variables is now supported, both
with -G when compiling a script, and from the stapdyn command line
when loading a precompiled module.
- A transport layer has been added for two-way communication between
the stap process and the target process. For now, this allows systemtap
output to be correctly printed to the stdout of the stap process, rather
than the target's stdout.


= Systemtap tapset changes

- Due to the removal of register_timer_hook in recent kernels, the
behaviour of timer.profile has been changed slightly. This probe is
now an alias which uses the old mechanism where possible, but falls
back to perf.sw.cpu_clock when the kernel timer hook is not
available.

To require the kernel timer hook mechanism in your script, use
timer.profile.tick instead of timer.profile.

- New tapsets:
timers.stp defines timer.profile probe alias

- Changed tapsets:
nfsd.stp add uid, gid convenience variables to nfsd.proc.*
in nfsd.proc4.write, set vlen to 0 if wr_vlen doesn't exist
syscalls2.stp add syscall.sendmmsg and syscall.sendmmsg.return
nd_syscalls2.stp ditto
task_time.stp add cputime_to_usecs() and usecs_to_string()

- The following tapset variables are deprecated in release 2.2:
- The 'origin' variables in the 'generic.fop.llseek',
'generic.fop.llseek.return', and 'nfs.fop.llseek' probes. The
'origin' variable has been replaced by the 'whence' variable.
- The 'page_index' variable in the 'vfs.block_sync_page' and
'vfs.buffer_migrate_page' probe aliases.
- The 'write_from' and 'write_upto' variables in the
'_vfs.block_prepare_write' and '_vfs.block_prepare_write.return'
probe aliases.
- The 'regs' variable in the 'syscall.sigaltstack',
'nd_syscall.sigaltstack', 'syscall.fork', and 'nd_syscall.fork'
probe aliases.
- The 'first', 'second', 'third', and 'uptr_uaddr' variables in the
'syscall.compat_sys_shmat' and 'nd_syscall.compat_sys_shmat' probe
aliases.

- The following tapset functions are deprecated in release 2.2:

'ppos_pos', '_dev_minor', and '_dev_major'

- The following tapset functions used to return error strings instead
of raising an error. The original behavior is deprecated in release
2.2.

'ctime', 'probemod', 'modname'


= Systemtap sample scripts

- New samples:
eatmydata.stp - (guru mode) suppress fsync() syscalls in indicated process

- Changed samples:
hw_watch_addr.stp use a more-likely-to-trigger target symbol
hw_watch_sym.stp ditto
iodevstats.stp switch from _dev_minor and _dev_major to MINOR and MAJOR
mutex_contention.stp drop compulsory array-size argument


= Examples of tested kernel versions

3.10-rc1 (i686, x86_64)
3.9.0 (x86_64)
3.8.11 (armv7l)
3.5.0 (i686)
3.4.0 (armv7l)
2.6.18 (i686, x86_64)
2.6.9 (i686)


= Known issues with this release

- Some kernel crashes continue to be reported when a script probes
broad kernel function wildcards. (PR2725)

- The java byteman backend is a work in progress. Robustness issues
are suspected with concurrent user and/or JVM usage, and some
installation steps are manual. Not enough context variables are
available. But it's a start!


- The dyninst backend is still a work in progress. Current issues:
+ lack of support for multiarch/cross-instrumentation
+ tapset functions are still incomplete relative to what is supported
when the kernel backend is active
+ exception handling becomes completely broken in programs
instrumented by the current version of dyninst (PR14702)
+ command line interrupts are slightly mishandled (PR15049)
+ not all registers are made available on 32-bit x86 (PR15136)

See dyninst/README and the systemtap/dyninst Bugzilla component
(http://tinyurl.com/stapdyn-PR-list) if you want all the gory
details about the state of the feature.


= Contributors for this release

Dave Brolley, David Smith, Frank Ch. Eigler, Josh Stone, Lukas Berk,
Mark Wielaard, Masanari Iida*, Negreanu Marius Adrian, Serguei Makarov,
Timo Juhani Lindfors, Torsten Polle

Special thanks to Serguei Makarov for drafting these notes.
Special thanks to new contributors, marked with '*' above.


= Bugs fixed for this release <http://sourceware.org/PR#####>

11341 update_visitor::require/provide uses hazardous static_casts
12894 Provide a systemd target replacing the current stap-server initscript
14275 Possible hotspot.function(" ") style probes
14297 stap -l and pn() fail to expand complex wildcards
14491 Add a proper stapdyn transport layer
15053 stapdyn needs -G (setting global variables) support
15112 Can't connect to stap-server via IPv6 raw hex addresses
15114 [PATCH] Propagate uid and gid from nfsd module as well
15123 workaround for bad debuginfo for -mfentry
15147 _stp_error() doesn't behave as described
15155 syscall tapset doesn't know sendmmsg
15162 eh_frame table too big, may kernel panic
15168 tolerate ppc deprecated ptrace commands
15170 nfsd.proc4.write probe alias needs updating
15171 inet_get_local_port() tapset function is broken on rawhide kernels
15172 tolerate unavailable System.map, as on ubuntu
15173 'origin' renamed to 'whence'
15177 need to handle new 'whence' values of 'SEEK_DATA' and 'SEEK_HOLE'
15197 syscall.fork/nd_syscall.fork broken on rawhide kernels
15198 syscall.sigaltstack / nd_syscall.sigaltstack broken on rawhide
15211 syscall.exp failures on rawhide
15237 adapt to changes in hlist_* kernel api in 3.9
15279 Stop munging the uprobes IP with kernel 3.9
15290 Update the inode-uretprobes support for aarapov's latest iteration
15306 stapdyn IRPC on terminated process, child SEGV
15315 Implement basic process filtering for inode-uprobes
15363 don't abort for a measly inode-uprobes registration failure
15408 procfs probes broken on rawhide
15422 loc2c with 32-on-64 sometimes creates integer-widening-into-pointer gcc warnings
15445 kernel.data (hwbkpt) probes can cause kernel panic on i686
15446 procfs probes broken on rawhide (kernel 3.10)
15452 segmentation fault in libdw while running debugtyptes.stp on rawhide
15456 syscalls and nd_syscalls tapset compat probe points broken on kernel 3.10
15466 add fallback for timer.profile on kernels without register_timer_hook()


Attachment: pgp00000.pgp
Description: PGP signature