From f28053257082f716e78e740be31eb2a356ab0559 Mon Sep 17 00:00:00 2001 From: hkarlsson Date: Fri, 18 Jun 2021 13:09:56 -0700 Subject: [PATCH] Added delta compression results doc --- doc/DeltaCompressionResults.md | 66 ++++++++++++++++++++++++ doc/Images/CompressionZstd.png | Bin 0 -> 14066 bytes doc/Images/DeltaCompressionXdelta.png | Bin 0 -> 13195 bytes doc/Images/DeltaCompressionZstd.png | Bin 0 -> 13469 bytes doc/Images/NoCompression.png | Bin 0 -> 12305 bytes doc/Images/SelfBalancingCompression.png | Bin 0 -> 14840 bytes 6 files changed, 66 insertions(+) create mode 100644 doc/DeltaCompressionResults.md create mode 100644 doc/Images/CompressionZstd.png create mode 100644 doc/Images/DeltaCompressionXdelta.png create mode 100644 doc/Images/DeltaCompressionZstd.png create mode 100644 doc/Images/NoCompression.png create mode 100644 doc/Images/SelfBalancingCompression.png diff --git a/doc/DeltaCompressionResults.md b/doc/DeltaCompressionResults.md new file mode 100644 index 0000000..8f69836 --- /dev/null +++ b/doc/DeltaCompressionResults.md @@ -0,0 +1,66 @@ +**Case study** + +When people working from home it is more important than ever to speed up transferring of files from office to home and back. +In EACopy we recently added delta compression and here are the results. + +**Compression** + +EACopy<->EACopyService can do on-demand compression which is self-regulating based on network performance. +So, if bandwidth is high, compression is low and if bandwidth is low, compression is high. +Just start an EACopyService on or close to the network share and let EACopy communicate through it to enable compression (need /C on commandline). +Here's a real case example of a copy where compression is enabled. It copied 10.1gb but only 2.1gb travelled over the wire. Average compression level (zstd) ended up being 8.2 + +![image info](Images/SelfBalancingCompression.png) + +**Delta compression.** + +I experimented with this 2 years ago, but at the time I couldn’t find any delta compression platform that was both efficient and fast (which is needed for on-demand delta compression). +I gave it another chance this weekend (2021 june 12) and tested primarily xdelta and zstd. +Facebook added delta compression to zstd ~1 year ago and the results are very impressive. +Basically how it works is that when EACopy is about to copy a file from the share it checks if it already has a version of that file (same filename in same location). +If it has, it sends the “last written time” and size of that file to the EACopyService. +Since the EACopyService keeps track of all the files it has seen it will likely be aware of that old file and where to find it on the share. + +If the service doesnt recognize the file it will use normal self regulating compression. + +If the service does recognize the old file and it is still on the share it can create a delta patch between the old file that the client has and the new file the client wants. +The client then applies the received patch onto the old file to turn it to the new file. + +**The results** + +Below are some interesting numbers. This was done using two builds mostly containing dlls and pdbs. +There were 1025 diffing files in there, mostly dlls and pdbs. +In my experiment I ran both the EACopyService and the EACopy on my local computer and I forced the compression to a certain level instead of letting it dynamically control it (since then compression would end up being 0 because bandwidth is obviously very high) + +**Normal copy** + +As you can see 5.3gb was copied out of 7.5gb.. the rest was skipped because the old and new build matched. Without compression all 5.3gb needs to be sent over the wire. + +![image info](Images/NoCompression.png) + +**Compression (zstd with fixed level 7)** + +With zstd compression fixed to level 7 the eacopyservice compressed 5.3gb down to 1.2gb. +The client spent 1min and 44 seconds waiting for data to come from the network socket. +Since I’m running locally on my machine I know 100% of that time is the actual compression time on the server side. +Note RecvFile time is thread time and not wall time and current copy uses 16 threads, so actually only 6 seconds wall time was used doing compression of 5.3gb down to 1.2gb which is awesome. +That time will be hidden from the actual transfer time of those 1.2gb when sending to remote clients. + +![image info](Images/CompressionZstd.png) + +**Delta compression (zstd)** + +These numbers are very impressive. Not only did it manage to compress the delta down to 247mb(!) but it also did it in 40 seconds (2.5 seconds wall time). +This is crazy good. I don’t know if this scenario is just exceptionally good or if this is expected. +The downside with this approach is that the EACopyService must read two files to produce the delta. It needs to read the old and the new file from the share, so if bandwidth between EACopyService and network share is poor this will affect the results. + +![image info](Images/DeltaCompressionZstd.png) + +**Delta compression (xdelta+lzma)** + +Compression is good but the time it takes to produce the delta is too long to be useful for on-demand delta compression. +It does beat zstd size-wise landing at 213mb but it took its time. It took ~27seconds wall time to create the compressed delta of those 5.3gb. +In other experiments I’ve also noticed that xdelta doesnt work as well with really large files (>1gb), cost go up dramatically, while zstd delta compression scales really well. +So the little size benefit is not worth it in our typical scenarios. + +![image info](Images/DeltaCompressionXdelta.png) diff --git a/doc/Images/CompressionZstd.png b/doc/Images/CompressionZstd.png new file mode 100644 index 0000000000000000000000000000000000000000..2737bc0180a932ed9afa1b75bc96452daf5566e5 GIT binary patch literal 14066 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 b!;8ZkfJwwtl<{kw8iI;~rhK)mMcDrXm2bVg literal 0 HcmV?d00001 diff --git a/doc/Images/DeltaCompressionXdelta.png b/doc/Images/DeltaCompressionXdelta.png new file mode 100644 index 0000000000000000000000000000000000000000..10c4d4062ae93198c633e17ff2450a020e8079cd GIT binary patch literal 13195 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 QH_)Ic%WKG0$ykK`UlE%6{r~^~ literal 0 HcmV?d00001 diff --git a/doc/Images/DeltaCompressionZstd.png b/doc/Images/DeltaCompressionZstd.png new file mode 100644 index 0000000000000000000000000000000000000000..78e9d4bdc3f05fcb2d87c04a4eb14f06675931c1 GIT binary patch literal 13469 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 literal 0 HcmV?d00001 diff --git a/doc/Images/NoCompression.png b/doc/Images/NoCompression.png new file mode 100644 index 0000000000000000000000000000000000000000..689cdede000ef9f41bf8444de74510818ea09dff GIT binary patch literal 12305 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