DTrace Improvements

A number of bug fixes and enhancements including module and utility updates are included for DTrace on UEK R4u4 bringing the current version to 0.6.0. Notable changes include:

  • Function Boundary Tracing (FBT)

    Function Boundary Tracing is now available in DTrace. Work includes:
    • Handling of memory, data and instruction access traps.

    • Improved output for Kernel OOPS debugging, including DTrace probe context and last probe processed.

    • New user stack walker implementation within the kernel for consistency and better access to low level structures like page tables; and a field to track the end of the user stack.

    • FBT black lists are updated with functions that may be invoked during probe processing, including functions starting with insn_* or inat_* for instruction analysis.

  • Typed SDT arguments

    Changes have been made to the kernel, provided DTrace modules and to the userspace utilities for DTrace to better facilitate working with typed SDT arguments. Previous versions of DTrace required updates to the DTrace module for added SDT and perf probes. This update allows kernel developers to add probes without updating the module, relying instead on DTrace's ability to dynamically compute argument types to navigate structures. Additionally, the DTRACE_PROBE() macro no longer needs an argument-counting suffix making it much easier to add SDT provider DTRACE_PROBE() macro wrappers.

  • Process Grabbing

    Several fixes have been applied to improve DTrace process grabbing, including the option now to 'self-grab' to obtain better backtraces and to allow DTrace consumers to monitor the operation of non-DTrace components using -p.

  • Added Providers

    New network providers have baeen added, including an IP Provider 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.

  • Is-enabled probes

    DTrace supports 'is-enabled' probes, which are conditionals that allow you to execute different code if a probe is enabled, so you can avoid collecting expensive data needed only for certain probes when those probes are inactive.

  • General bugfixes

    Numerous bugfixes have been applied to provide greater stability and better performance.