restic/internal
Michael Eischer c147422ba5 repository: special case SaveBlob for all zero chunks
Sparse files contain large regions containing only zero bytes. Checking
that a blob only contains zeros is possible with over 100GB/s for modern
x86 CPUs. Calculating sha256 hashes is only possible with 500MB/s (or
2GB/s using hardware acceleration). Thus we can speed up the hash
calculation for all zero blobs (which always have length
chunker.MinSize) by checking for zero bytes and then using the
precomputed hash.

The all zeros check is only performed for blobs with the minimal chunk
size, and thus should add no overhead most of the time. For chunks which
are not all zero but have the minimal chunks size, the overhead will be
below 2% based on the above performance numbers.

This allows reading sparse sections of files as fast as the kernel can
return data to us. On my system using BTRFS this resulted in about
4GB/s.
2022-09-24 21:39:39 +02:00
..
archiver archiver: reduce memory usage for large files 2022-07-23 14:45:07 +02:00
backend b2: sniff the error that caused init retry loops 2022-08-28 17:46:03 +02:00
bloblru bloblru: Fix comment for New function 2022-03-28 22:25:25 +02:00
cache cache: Just try to open cache entry without calling stat first 2022-08-19 20:59:06 +02:00
checker add option for setting min pack size 2022-08-05 23:47:12 +02:00
crypto crypto: move crypto buffer helpers 2022-07-17 13:42:23 +02:00
debug debug: support roundtripper logging also for release builds 2022-08-05 23:49:39 +02:00
dump repository: extract LoadTree/SaveTree 2022-07-17 13:11:28 +02:00
errors all: Move away from pkg/errors, easy cases 2022-06-14 08:36:38 +02:00
filter filter: deduplicate error handling for pattern validation 2022-09-09 23:12:41 +02:00
fs Add simple test for fs.TempFile on windows 2022-04-09 23:37:58 +02:00
fuse fuse: remove unused context parameter 2022-08-26 20:48:48 +02:00
hashing hashing: Fix up comments 2022-05-11 21:36:10 +02:00
migrations migrate: Report why an migration cannot be applied 2022-09-03 11:49:31 +02:00
options Don't crash if SecretString is uninitialized 2022-07-02 19:44:28 +02:00
pack repository: prevent header overfill 2022-08-05 23:47:12 +02:00
repository repository: special case SaveBlob for all zero chunks 2022-09-24 21:39:39 +02:00
restic restorer: move zeroPrefixLen to restic package 2022-09-24 21:39:39 +02:00
restorer repository: special case SaveBlob for all zero chunks 2022-09-24 21:39:39 +02:00
selfupdate Refactor file handing for self-update. 2022-04-09 21:40:33 +02:00
test all: Move away from pkg/errors, easy cases 2022-06-14 08:36:38 +02:00
textfile Add more error handling 2021-01-30 20:19:47 +01:00
ui archiver: remove unused fileInfo from progress callback 2022-07-23 14:16:23 +02:00
walker repository: extract LoadTree/SaveTree 2022-07-17 13:11:28 +02:00