Skip to content

v0.11.0

Pre-release
Pre-release

Choose a tag to compare

@rocketman-code rocketman-code released this 05 Mar 06:11
· 456 commits to main since this release

Async profiling rewritten for correctness and lower overhead, plus automatic bias calibration that reduces measurement overhead by up to 81% on x86_64.

Added

  • Measurement bias calibrated at startup using trimmed-mean statistics and subtracted from all timing data, reducing per-call overhead by up to 81% on x86_64 (#306)

Fixed

  • Nested tokio::select! no longer inflates self-time by up to 5x due to rewritten async instrumentation that carries timing state inside the future (#332)
  • .await inside match and unsafe blocks in spawned tasks now correctly tracked for thread migration (#331)
  • Parallel iterator chains with .await in if/else branches now correctly instrumented for fork/adopt (#344)
  • let bindings containing spawned tasks now instrumented for thread migration (#329)
  • Generic bounds containing -> no longer break function detection in macro definitions (#328)
  • Injected profiling variables use double-underscore prefix to avoid name collisions with user code (#327)
  • Write failure on profiling data flush now prints an error message instead of exiting silently (#304)
  • Error message when zero functions are instrumented now explains the cause instead of blaming disk space (#305)

Changed

  • Per-call instrumentation overhead reduced by halving the guard struct from 16 to 8 bytes