forked from TrueCloudLab/restic
Remove pools.go
This commit is contained in:
parent
1f33e29ce2
commit
bdbb3ab329
4 changed files with 8 additions and 133 deletions
|
@ -56,8 +56,8 @@ func BenchmarkChunkEncrypt(b *testing.B) {
|
|||
s := SetupBackend(b)
|
||||
defer TeardownBackend(b, s)
|
||||
|
||||
buf := restic.GetChunkBuf("BenchmarkChunkEncrypt")
|
||||
buf2 := restic.GetChunkBuf("BenchmarkChunkEncrypt")
|
||||
buf := make([]byte, chunker.MaxSize)
|
||||
buf2 := make([]byte, chunker.MaxSize)
|
||||
chunkBuf := make([]byte, chunkerBufSize)
|
||||
|
||||
b.ResetTimer()
|
||||
|
@ -66,9 +66,6 @@ func BenchmarkChunkEncrypt(b *testing.B) {
|
|||
for i := 0; i < b.N; i++ {
|
||||
benchmarkChunkEncrypt(b, buf, buf2, chunkBuf, rd, s.Key())
|
||||
}
|
||||
|
||||
restic.FreeChunkBuf("BenchmarkChunkEncrypt", buf)
|
||||
restic.FreeChunkBuf("BenchmarkChunkEncrypt", buf2)
|
||||
}
|
||||
|
||||
func benchmarkChunkEncryptP(b *testing.PB, buf, chunkBuf []byte, rd Rdr, key *crypto.Key) {
|
||||
|
@ -93,7 +90,7 @@ func BenchmarkChunkEncryptParallel(b *testing.B) {
|
|||
|
||||
data := Random(23, 10<<20) // 10MiB
|
||||
|
||||
buf := restic.GetChunkBuf("BenchmarkChunkEncryptParallel")
|
||||
buf := make([]byte, chunker.MaxSize)
|
||||
chunkBuf := make([]byte, chunkerBufSize)
|
||||
|
||||
b.ResetTimer()
|
||||
|
@ -105,8 +102,6 @@ func BenchmarkChunkEncryptParallel(b *testing.B) {
|
|||
benchmarkChunkEncryptP(pb, buf, chunkBuf, rd, s.Key())
|
||||
}
|
||||
})
|
||||
|
||||
restic.FreeChunkBuf("BenchmarkChunkEncryptParallel", buf)
|
||||
}
|
||||
|
||||
func archiveDirectory(b testing.TB) {
|
||||
|
|
|
@ -10,7 +10,6 @@ import (
|
|||
"golang.org/x/crypto/ssh/terminal"
|
||||
|
||||
"github.com/jessevdk/go-flags"
|
||||
"github.com/restic/restic"
|
||||
"github.com/restic/restic/backend"
|
||||
"github.com/restic/restic/backend/local"
|
||||
"github.com/restic/restic/backend/sftp"
|
||||
|
@ -182,7 +181,4 @@ func main() {
|
|||
if err != nil {
|
||||
os.Exit(1)
|
||||
}
|
||||
|
||||
// this prints some statistics for memory management using the debug package
|
||||
restic.PoolAlloc()
|
||||
}
|
||||
|
|
|
@ -8,7 +8,6 @@ import (
|
|||
"os"
|
||||
"testing"
|
||||
|
||||
"github.com/restic/restic"
|
||||
"github.com/restic/restic/chunker"
|
||||
"github.com/restic/restic/crypto"
|
||||
. "github.com/restic/restic/test"
|
||||
|
@ -29,7 +28,9 @@ func TestEncryptDecrypt(t *testing.T) {
|
|||
_, err := io.ReadFull(RandomReader(42, size), data)
|
||||
OK(t, err)
|
||||
|
||||
ciphertext, err := crypto.Encrypt(k, restic.GetChunkBuf("TestEncryptDecrypt"), data)
|
||||
buf := make([]byte, size+crypto.Extension)
|
||||
|
||||
ciphertext, err := crypto.Encrypt(k, buf, data)
|
||||
OK(t, err)
|
||||
Assert(t, len(ciphertext) == len(data)+crypto.Extension,
|
||||
"ciphertext length does not match: want %d, got %d",
|
||||
|
@ -41,8 +42,6 @@ func TestEncryptDecrypt(t *testing.T) {
|
|||
"plaintext length does not match: want %d, got %d",
|
||||
len(data), len(plaintext))
|
||||
|
||||
restic.FreeChunkBuf("TestEncryptDecrypt", ciphertext)
|
||||
|
||||
Equals(t, plaintext, data)
|
||||
}
|
||||
}
|
||||
|
@ -226,8 +225,6 @@ func BenchmarkEncryptDecryptReader(b *testing.B) {
|
|||
_, err = io.Copy(ioutil.Discard, r)
|
||||
OK(b, err)
|
||||
}
|
||||
|
||||
restic.PoolAlloc()
|
||||
}
|
||||
|
||||
func BenchmarkDecrypt(b *testing.B) {
|
||||
|
@ -236,10 +233,8 @@ func BenchmarkDecrypt(b *testing.B) {
|
|||
|
||||
k := crypto.NewRandomKey()
|
||||
|
||||
ciphertext := restic.GetChunkBuf("BenchmarkDecrypt")
|
||||
defer restic.FreeChunkBuf("BenchmarkDecrypt", ciphertext)
|
||||
plaintext := restic.GetChunkBuf("BenchmarkDecrypt")
|
||||
defer restic.FreeChunkBuf("BenchmarkDecrypt", plaintext)
|
||||
plaintext := make([]byte, size)
|
||||
ciphertext := make([]byte, size+crypto.Extension)
|
||||
|
||||
ciphertext, err := crypto.Encrypt(k, ciphertext, data)
|
||||
OK(b, err)
|
||||
|
|
111
pools.go
111
pools.go
|
@ -1,111 +0,0 @@
|
|||
package restic
|
||||
|
||||
import (
|
||||
"sync"
|
||||
|
||||
"github.com/restic/restic/chunker"
|
||||
"github.com/restic/restic/crypto"
|
||||
"github.com/restic/restic/debug"
|
||||
)
|
||||
|
||||
type poolStats struct {
|
||||
m sync.Mutex
|
||||
mget map[string]int
|
||||
mput map[string]int
|
||||
mmax map[string]int
|
||||
|
||||
new int
|
||||
get int
|
||||
put int
|
||||
max int
|
||||
}
|
||||
|
||||
const (
|
||||
maxCiphertextSize = crypto.Extension + chunker.MaxSize
|
||||
)
|
||||
|
||||
func (s *poolStats) Get(k string) {
|
||||
s.m.Lock()
|
||||
defer s.m.Unlock()
|
||||
|
||||
s.get++
|
||||
cur := s.get - s.put
|
||||
if cur > s.max {
|
||||
s.max = cur
|
||||
}
|
||||
|
||||
if k != "" {
|
||||
if _, ok := s.mget[k]; !ok {
|
||||
s.mget[k] = 0
|
||||
s.mput[k] = 0
|
||||
s.mmax[k] = 0
|
||||
}
|
||||
|
||||
s.mget[k]++
|
||||
|
||||
cur = s.mget[k] - s.mput[k]
|
||||
if cur > s.mmax[k] {
|
||||
s.mmax[k] = cur
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func (s *poolStats) Put(k string) {
|
||||
s.m.Lock()
|
||||
defer s.m.Unlock()
|
||||
|
||||
s.put++
|
||||
|
||||
if k != "" {
|
||||
s.mput[k]++
|
||||
}
|
||||
}
|
||||
|
||||
func newPoolStats() *poolStats {
|
||||
return &poolStats{
|
||||
mget: make(map[string]int),
|
||||
mput: make(map[string]int),
|
||||
mmax: make(map[string]int),
|
||||
}
|
||||
}
|
||||
|
||||
var (
|
||||
chunkPool = sync.Pool{New: newChunkBuf}
|
||||
|
||||
chunkStats = newPoolStats()
|
||||
nodeStats = newPoolStats()
|
||||
)
|
||||
|
||||
func newChunkBuf() interface{} {
|
||||
chunkStats.m.Lock()
|
||||
defer chunkStats.m.Unlock()
|
||||
chunkStats.new++
|
||||
|
||||
// create buffer for iv, data and mac
|
||||
return make([]byte, maxCiphertextSize)
|
||||
}
|
||||
|
||||
func GetChunkBuf(s string) []byte {
|
||||
chunkStats.Get(s)
|
||||
return chunkPool.Get().([]byte)
|
||||
}
|
||||
|
||||
func FreeChunkBuf(s string, buf []byte) {
|
||||
chunkStats.Put(s)
|
||||
chunkPool.Put(buf)
|
||||
}
|
||||
|
||||
func PoolAlloc() {
|
||||
debug.Log("pools.PoolAlloc", "pool stats for chunk: new %d, get %d, put %d, diff %d, max %d\n",
|
||||
chunkStats.new, chunkStats.get, chunkStats.put, chunkStats.get-chunkStats.put, chunkStats.max)
|
||||
for k, v := range chunkStats.mget {
|
||||
debug.Log("pools.PoolAlloc", "pool stats for chunk[%s]: get %d, put %d, diff %d, max %d\n",
|
||||
k, v, chunkStats.mput[k], v-chunkStats.mput[k], chunkStats.mmax[k])
|
||||
}
|
||||
|
||||
debug.Log("pools.PoolAlloc", "pool stats for node: new %d, get %d, put %d, diff %d, max %d\n",
|
||||
nodeStats.new, nodeStats.get, nodeStats.put, nodeStats.get-nodeStats.put, nodeStats.max)
|
||||
for k, v := range nodeStats.mget {
|
||||
debug.Log("pools.PoolAlloc", "pool stats for node[%s]: get %d, put %d, diff %d, max %d\n", k, v, nodeStats.mput[k], v-nodeStats.mput[k], nodeStats.mmax[k])
|
||||
}
|
||||
}
|
Loading…
Reference in a new issue