v0.11.0
Pre-release
Pre-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) .awaitinsidematchandunsafeblocks in spawned tasks now correctly tracked for thread migration (#331)- Parallel iterator chains with
.awaitin if/else branches now correctly instrumented for fork/adopt (#344) letbindings 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