mirror of
https://github.com/prometheus/prometheus.git
synced 2025-03-05 20:59:13 -08:00
Optimize zstd decompression memory usage
This commit is contained in:
parent
1abce2acfc
commit
6f957dba95
|
@ -166,6 +166,7 @@ func (s *s2Compression) Decompress(data []byte) ([]byte, error) {
|
|||
type zstdCompression struct {
|
||||
level zstd.EncoderLevel
|
||||
buf bytes.Buffer
|
||||
rawBuf []byte
|
||||
r *reZstd.Decoder
|
||||
w *reZstd.Encoder
|
||||
}
|
||||
|
@ -178,7 +179,8 @@ func (z *zstdCompression) Compress(data []byte) ([]byte, error) {
|
|||
return nil, err
|
||||
}
|
||||
}
|
||||
|
||||
// NOTE: from my observations EncodeAll takes a bit less CPU but considerably more memory.
|
||||
// Taking this decision deliberately.
|
||||
z.buf.Reset()
|
||||
z.w.Reset(&z.buf)
|
||||
_, err = z.w.Write(data)
|
||||
|
@ -200,17 +202,20 @@ func (z *zstdCompression) Decompress(data []byte) ([]byte, error) {
|
|||
return nil, err
|
||||
}
|
||||
}
|
||||
|
||||
err = z.r.Reset(bytes.NewReader(data))
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
z.buf.Reset()
|
||||
_, err = io.Copy(&z.buf, z.r)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return z.buf.Bytes(), nil
|
||||
// NOTE: interestingly, I'm seeing much better memory usage using DecodeAll, for the same CPU
|
||||
z.rawBuf = z.rawBuf[:0]
|
||||
z.rawBuf, err = z.r.DecodeAll(data, z.rawBuf)
|
||||
return z.rawBuf, err
|
||||
// err = z.r.Reset(bytes.NewReader(data))
|
||||
// if err != nil {
|
||||
// return nil, err
|
||||
// }
|
||||
// z.buf.Reset()
|
||||
// _, err = io.Copy(&z.buf, z.r)
|
||||
// if err != nil {
|
||||
// return nil, err
|
||||
// }
|
||||
// return z.buf.Bytes(), nil
|
||||
}
|
||||
|
||||
type lzwCompression struct {
|
||||
|
|
Loading…
Reference in a new issue