2.0.0 (Mar 10th, 2020)

First release of the standalone userspace implementation.

This is a pre-release with limited functionality.

Working components:

  • The entire D language, with the exception of aggregations. Valid D clauses are compiled into equivalent BPF programs.

  • The vast majority of the DTrace core functionality has been implemented, providing a nearly complete compiler implementation (including predicates), provider API, probe management, and Linux tracing integration.

  • Support for pre-compiled BPF function libraries has been added. This is used to implement various D language constructs (global and TLS variable access, string manipulation, ...) and D subroutines. This feature makes use of the BPF support in GCC and binutils as cross compilation tools. The BPF functions are compiled at DTrace build time, so there is no runtime dependency on the cross compilation tools.

  • Support has been added for reporting BPF verifier output. When compiled D scripts are loaded as BPF program into the kernel, the BPF verifier performs a static code analysis to ensure safety of the program. When this analysis fails, output is generated and DTrace will report this output to the user.

  • Function Boundary Tracing (FBT) probes with functions grouped by module (regardless of whether the module is compiled in or loadable) if the kernel provides this information in /proc/kallsyms (or /proc/kallmodsyms).

  • Syscall entry and return probes (systrace provider), with support for typed probe arguments.

  • Statically Defined Tracing (SDT) probes based on Linux tracepoints, with support for typed probe arguments.

  • The trace data buffer management code has been reworked to work with the perf event ring buffers that are used by BPF to record tracing data.

  • The DTrace testsuite has been updated to reflect what tests are expected to pass with the current state of development for DTrace v2. Various tests were also improved to be more robust and to be more focused on what they are meant to be testing.