mirror of
https://github.com/octoleo/syncthing.git
synced 2024-12-23 03:18:59 +00:00
lib/scanner: Allocate structure for final partial block (#7310)
Benchmark results on Linux/amd64, using updated benchmark for old and new: name old time/op new time/op delta HashFile-8 88.6ms ± 1% 88.3ms ± 1% -0.33% (p=0.046 n=19+19) name old speed new speed delta HashFile-8 201MB/s ± 1% 202MB/s ± 1% +0.33% (p=0.044 n=19+19) name old alloc/op new alloc/op delta HashFile-8 59.4kB ± 0% 46.1kB ± 0% -22.47% (p=0.000 n=14+20) name old allocs/op new allocs/op delta HashFile-8 29.0 ± 0% 27.0 ± 0% -6.90% (p=0.000 n=20+20) Co-authored-by: greatroar <@>
This commit is contained in:
parent
8b86171642
commit
fbe52faf49
@ -30,7 +30,7 @@ func Blocks(ctx context.Context, r io.Reader, blocksize int, sizehint int64, cou
|
|||||||
}
|
}
|
||||||
|
|
||||||
hf := sha256.New()
|
hf := sha256.New()
|
||||||
hashLength := hf.Size()
|
const hashLength = sha256.Size
|
||||||
|
|
||||||
var weakHf hash.Hash32 = noopHash{}
|
var weakHf hash.Hash32 = noopHash{}
|
||||||
var multiHf io.Writer = hf
|
var multiHf io.Writer = hf
|
||||||
@ -48,7 +48,11 @@ func Blocks(ctx context.Context, r io.Reader, blocksize int, sizehint int64, cou
|
|||||||
// Allocate contiguous blocks for the BlockInfo structures and their
|
// Allocate contiguous blocks for the BlockInfo structures and their
|
||||||
// hashes once and for all, and stick to the specified size.
|
// hashes once and for all, and stick to the specified size.
|
||||||
r = io.LimitReader(r, sizehint)
|
r = io.LimitReader(r, sizehint)
|
||||||
numBlocks := int(sizehint / int64(blocksize))
|
numBlocks := sizehint / int64(blocksize)
|
||||||
|
remainder := sizehint % int64(blocksize)
|
||||||
|
if remainder != 0 {
|
||||||
|
numBlocks++
|
||||||
|
}
|
||||||
blocks = make([]protocol.BlockInfo, 0, numBlocks)
|
blocks = make([]protocol.BlockInfo, 0, numBlocks)
|
||||||
hashes = make([]byte, 0, hashLength*numBlocks)
|
hashes = make([]byte, 0, hashLength*numBlocks)
|
||||||
}
|
}
|
||||||
|
@ -551,7 +551,7 @@ func (l testfileList) String() string {
|
|||||||
var initOnce sync.Once
|
var initOnce sync.Once
|
||||||
|
|
||||||
const (
|
const (
|
||||||
testdataSize = 17 << 20
|
testdataSize = 17<<20 + 1
|
||||||
testdataName = "_random.data"
|
testdataName = "_random.data"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user