~refi64/alys

v0.2.0 1 year, 1 month ago

alys 0.2.0

Highlights
==========

MessagePack traces
------------------

The `.alys` format is now based on MessagePack. This can result in
*massive* decreases in file size, largely thanks to variable-length
integer encoding.

Sampled events via `ALYS_SAMPLE_INTERVAL`
-----------------------------------------

On large applications, writing an event on every single allocation is
slow and can result in massive, hard-to-inspect trace files. Now, you
can set `ALYS_SAMPLE_INTERVAL=bytes:N` to only write events for every
`N` bytes allocated, trading granularity for significantly better
performance and a smaller file size.

PIE executable support for address-only backtraces (ELF only)
-------------------------------------------------------------

On systems that use ELF binaries, address-only backtraces will now embed
information in the trace file that allows `alys_converter` to symbolize
them regardless of the executable's base address. (Support for
macOS/Mach-O will come in the future.)

Significant `alys_converter` performance improvements
-----------------------------------------------------

`alys_converter` now uses a single `llvm-symbolizer` process for all
its symbolization, which can result in performance improvements of over
8x.

Flamegraphs (and folded stacks)
-------------------------------

`alys_converter` can now output folded stacks (primarily used for
feeding into various flamegraph tools) and flamegraphs
(via [`inferno-flamegraph`](https://github.com/jonhoo/inferno)).

`ALYS_BACKTRACE_TYPE=addr` is the default (ELF only)
----------------------------------------------------

Thanks to all of the above changes, making `alys_converter`
significantly faster *and* usable with PIE binaries,
`ALYS_BACKTRACE_TYPE=addr` is now the default trace type on ELF systems.
The main advantages are the smaller perf hit and trace file size, as
well as `alys_converter`'s symbolization giving *significantly* better
results.