Project News: DTrace

[ Project Home  |  News  |  Downloads  |  Docs  |  Mailing Lists  |  Source Control  |  Issues ]

 

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
    processes.
 
  - 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
    same way.
 
  - 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
    enabled:
 
      if (DTRACE_PROBE_ENABLED(probename)) /* expensive stuff */
 
    Per-provider wrappers for DTRACE_PROBE_ENABLED() can be used, as with
    DTRACE_PROBE() itself.
 
  - 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,
    /usr/include/sys/sdt_internal.h.

 

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 DTrace module. - 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 frequently. - 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 kernel. - 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 disrupted.