Fixes https://github.com/go-hep/hep/issues/712, but the current implementation is a bit delicate (from pre-generics sync use), so I'm not entirely sure it's worth it for the marginal performance improvements.
This reuses buffers for lz4, zlib and zstd. The other compression algs did not appear to expose an API allowing for buffer reuse. All of this should be threadsafe, but hit hasn't been tested very thoroughly. Nothing is flagged if I build groot-bench with -race and generate files or run benchmarks, for whatever that's worth.
Any performance gains would come from reducing allocations, seen in e.g. go tool pprof -alloc-space on a memprofile, along with a reduction in gc frequency from the reduced allocation rate. There's very little change to overall throughput or memory use (small improvements in some cases):
Fixes https://github.com/go-hep/hep/issues/712, but the current implementation is a bit delicate (from pre-generics
sync
use), so I'm not entirely sure it's worth it for the marginal performance improvements.This reuses buffers for
lz4
,zlib
andzstd
. The other compression algs did not appear to expose an API allowing for buffer reuse. All of this should be threadsafe, but hit hasn't been tested very thoroughly. Nothing is flagged if I build groot-bench with-race
and generate files or run benchmarks, for whatever that's worth.Any performance gains would come from reducing allocations, seen in e.g.
go tool pprof -alloc-space
on a memprofile, along with a reduction in gc frequency from the reduced allocation rate. There's very little change to overall throughput or memory use (small improvements in some cases):