0.10.0
Major changes:
- Performance improvements; CPU overhead of allocation-heavy heavily multithreaded programs was cut down by up to ~80%
- You can now control whether child processes are profiled with the
MEMORY_PROFILER_TRACK_CHILD_PROCESSES
environment variable (disabled by default) - The fragmentation timeline was removed from the UI
mmap
/munmap
calls are now gathered by default (you can disable this withMEMORY_PROFILER_GATHER_MAPS
)- Total actual memory usage is now gathered by periodically polling
/proc/self/smaps
- Maps can now be browsed in the UI and analyzed through the scripting API
- Maps are now named according to their source using
PR_SET_VMA_ANON_NAME
(Linux 5.17 or newer; on older kernels this is emulated in user space) - Glibc-internal
__mmap
and__munmap
are now hooked into - Bytehound-internal allocations now exclusively use mimalloc as their allocator
- New scripting APIs:
AllocationList::only_alive_at
AllocationList::only_from_maps
Graph::start_at
Graph::end_at
Graph::show_address_space
Graph::show_rss
MapList
Map
- Removed scripting APIs:
AllocationList::only_not_deallocated_after_at_least
AllocationList::only_not_deallocated_until_at_most
Graph::truncate_until
Graph::extend_until
- Removed lifetime filters in the UI:
only_not_deallocated_in_current_range
,only_deallocated_in_current_range
- Fixed a rare crash when profiling programs using jemalloc
- Added support for
aligned_alloc
- Added support for
memalign
- Relative scale in the generated graphs is now always relative to the start of profiling
- Gathered backtraces will now include an extra Bytehound-specific frame on the bottom to indicate which function was called
- Minor improvements to the UI