2.0.0-1.4 (Dec 9th, 2020)

Fourth errata of the standalone userspace implementation.

This is a pre-release with limited functionality.

New features:

  • Aggregations have been implemented. For now, only non-indexed aggregations are supported, e.g. @, @a, @foo, but not @[1], @a["foo"].

  • All aggregation functions have been implemented: avg(), count(), llquantize(), lquantize(), max(), min(), quantize(), stddev(), and sum().

  • Argument checking for aggregation functions has been improved.

  • The printa() action has been implemented for standard aggregations.

Bugfixes:

  • Bitwise negation has been corrected.

  • Reporting for quantize() has been corrected. No data was being reported when all values mapped to the last bin.

  • END clauses are now executed correctly when the consumer triggers tracing to stop.

Internal changes:

  • Aggregations now accumulate data in per-CPU kernel buffers (in a BPF map) and the consumer retrieves a snapshot of all CPU buffers as needed. This means that the only aggregation happening at the consumer level constitutes aggregating the values across all CPUs.

  • Macros have been added to support manual generation of BPF code. Each BPF instruction used to take two C statements: the instruction was defined and then appended to a list. Use of the new macros eliminates hundreds of such lines and makes the C code look much more like the BPF it is generating.

  • Restore the error message "%s %s( ) may not be called from a D expression (D program context required)", which had been disabled during development.

  • Remove the obsolete dt_bpf_builtins.h header file.

  • Replace dtrace_aggvarid_t by dtrace_aggid_t and DTRACEAGG_* with DT_AGG_*.

Compilation fixes:

  • Pre-compiled BPF functions are now correctly loaded even if they have no relocations.

Testsuite changes:

  • Comments, typos, and naming have been cleaned up.

  • New tests have been added or XFAIL annotations revised for new features.