mirror of https://github.com/restic/restic.git
Remove sync.Pool from internal/repository
The pool was used improperly, causing more allocations to be performed than without it. name old time/op new time/op delta SaveAndEncrypt-8 36.8ms ± 2% 36.9ms ± 2% ~ (p=0.218 n=10+10) name old speed new speed delta SaveAndEncrypt-8 114MB/s ± 2% 114MB/s ± 2% ~ (p=0.218 n=10+10) name old alloc/op new alloc/op delta SaveAndEncrypt-8 21.1MB ± 0% 21.0MB ± 0% -0.44% (p=0.000 n=10+10) name old allocs/op new allocs/op delta SaveAndEncrypt-8 79.0 ± 0% 77.0 ± 0% -2.53% (p=0.000 n=10+10)
This commit is contained in:
parent
616f9499ae
commit
8526cc6647
|
@ -1,21 +0,0 @@
|
||||||
package repository
|
|
||||||
|
|
||||||
import (
|
|
||||||
"sync"
|
|
||||||
|
|
||||||
"github.com/restic/chunker"
|
|
||||||
)
|
|
||||||
|
|
||||||
var bufPool = sync.Pool{
|
|
||||||
New: func() interface{} {
|
|
||||||
return make([]byte, chunker.MaxSize/3)
|
|
||||||
},
|
|
||||||
}
|
|
||||||
|
|
||||||
func getBuf() []byte {
|
|
||||||
return bufPool.Get().([]byte)
|
|
||||||
}
|
|
||||||
|
|
||||||
func freeBuf(data []byte) {
|
|
||||||
bufPool.Put(data)
|
|
||||||
}
|
|
|
@ -225,13 +225,10 @@ func (r *Repository) SaveAndEncrypt(ctx context.Context, t restic.BlobType, data
|
||||||
|
|
||||||
debug.Log("save id %v (%v, %d bytes)", id, t, len(data))
|
debug.Log("save id %v (%v, %d bytes)", id, t, len(data))
|
||||||
|
|
||||||
// get buf from the pool
|
|
||||||
ciphertext := getBuf()
|
|
||||||
|
|
||||||
ciphertext = ciphertext[:0]
|
|
||||||
nonce := crypto.NewRandomNonce()
|
nonce := crypto.NewRandomNonce()
|
||||||
|
|
||||||
|
ciphertext := make([]byte, 0, restic.CiphertextLength(len(data)))
|
||||||
ciphertext = append(ciphertext, nonce...)
|
ciphertext = append(ciphertext, nonce...)
|
||||||
defer freeBuf(ciphertext)
|
|
||||||
|
|
||||||
// encrypt blob
|
// encrypt blob
|
||||||
ciphertext = r.key.Seal(ciphertext, nonce, data, nil)
|
ciphertext = r.key.Seal(ciphertext, nonce, data, nil)
|
||||||
|
|
|
@ -104,6 +104,7 @@ func BenchmarkSaveAndEncrypt(t *testing.B) {
|
||||||
|
|
||||||
id := restic.ID(sha256.Sum256(data))
|
id := restic.ID(sha256.Sum256(data))
|
||||||
|
|
||||||
|
t.ReportAllocs()
|
||||||
t.ResetTimer()
|
t.ResetTimer()
|
||||||
t.SetBytes(int64(size))
|
t.SetBytes(int64(size))
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue