Project News: DTrace
2017.05.08: DTrace userspace 0.6.0, kernel modules 0.6.0, libdtrace-ctf 0.5.0
All RPMs are available on the Unbreakable Linux Network.
New features in dtrace 0.6.0:
- Function boundary tracing (FBT) is supported for entry probes to most
functions in the core kernel. The current implementation does not support
retrieval of function arguments or return probes (except for some limited
support on x86_64). These features are currently under development.
- Userspace tracepoints (USDT) now work on SPARC for both 64- and 32-bit
- The ip provider is implemented, supporting ip:::send, ip:::receive,
ip:::drop-in and ip:::drop-out, with parameters compatible with other
implementations and appropriate translators. IPv4 and IPv6 are both
supported. Associated D translators for this provider are also implemented.
- dtrace consumers (including dtrace(1)) can now grab themselves via -p,
though symbol resolution is degraded when they do so because they
cannot stop themselves. (Previously, such grabs were suppressed but
the code to do so was buggy and caused dtrace not to terminate if
dtrace was asked to do a self-grab in conjunction with a -c of
some other process, even once the other process had terminated.)
- The types and translators used by SDT probes are now acquired from the
DTRACE_PROBE macros in the kernel source. New probe argument types and
translations are picked up automatically without needing to change the
module at all. perf-event probe argument types are acquired in the
- is-enabled probes are now supported for SDT: these are expressions which
always return false unless the specified probe is enabled, generally used
directly in if statements, and can be used to suppress collection of
expensive data only needed for probes until the probes that use them are
if (DTRACE_PROBE_ENABLED(probename)) /* expensive stuff */
Per-provider wrappers for DTRACE_PROBE_ENABLED() can be used, as with
- The DTRACE_PROBEn() macros used for USDT probes have been supplanted by a
new DTRACE_PROBE() macro which works exactly the same except that you don't
need to count the arguments any more. The old numbered macros remain
available for userspace probes that must be compiled with compilers that
don't support __VA_ARGS__ comma elision (such as GCC when in
c89/strict-ANSI mode). This involves a new, installed, internal header,
Bugfixes in dtrace 0.6.0:
- The implementation of the D 'ustack' action has been reworked completely to
improve stability and accuracy, and moved into the core kernel from the
- Numerous dtrace -c/-p and USDT fixes on SPARC systems, with symptoms
varying from a hanging dtrace and child process to a dtrace that
runs out of file descriptors.
- Probe processing (probe context) is not re-entrant, yet probes firing as a
result of processing another probe would cause re-entry into the processing
core, with often horrible effects. The processing core has been modified to
block any re-entry attempt except for ERROR probe processing. That is a
deliberate (and acceptable) exception in the DTrace design.
- The fast path implementation for obtaining the value of the D 'caller'
variable for SPARC64 has been corrected.
- The implemenation of the D 'stack' action has been made more robust, making
sure that memory access faults are not fatal.
- The number of stack frames to skip has been adjusted to changes in the
implementation of various providers, ensuring that DTrace related frames
are skipped as they should. This makes the D 'stack' action and the D
'caller' variable values correct.
- The implementation of the D 'stackdepth' variable could cause memory writes
beyond the end of the DTrace probe scratch buffer.
- Fix memory and fd leaks when a process monitored with -c or -p exec()s
- Work around a bug in elfutils causing massive corruption of object files when
dtrace -G is used.
User-visible internal changes in dtrace 0.6.0:
- DTrace now uses /proc/$pid/map_files, where available.
- dtrace -S now dumps the offset of DIF as well as the instruction counter,
allowing you to more easily match up DIF disassembly with errors from the
- Predicate DIF is disassembled in dtrace -S output.
- Probe processing will be bypassed when the system is entering panic mode,
This ensures that DTrace will not cause panic related output to be