-
Notifications
You must be signed in to change notification settings - Fork 16
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Optimization - CPU #11
Comments
An optimization attempt was posted to the optimize1 branch. Unfortunately, the limited testing I did showed little if any difference. I may try re-introducing some of these changes on top of alpha4 and do some more extensive trials. |
(Note) Some optimization of prune/merge was recently done by setting |
#179 (comment)
|
@alvinstarr I think what may be going on is the large difference in Cpython's garbage collection workload due to dynamic buffering having to juggle larger buffers. (Hmmm. Does a 1MB buffer behave much differently?) Wyng does not yet use static buffering for transfer operations. And I always suspected that locally-based archives would someday throw performance issues that were masked by net access into high relief (as your benchmark just did). It would also be interesting to see the difference, for instance, with the helper script removed from the local transfer loop. That in combination with using static buffers could make a big difference, IMO. However, the limitations of the zstandard lib I'm currently using precludes static buffering. One really cheap (and safe) tweak you could try in the Wyng code is to remove the file IO # Open source volume and its delta bitmap as r, session manifest as w.
with open(volpath,"rb", buffering=chunksize) as vf, \ (Moved to issue 11.) |
@alvinstarr I've tested a simple modification to Wyng that bypasses the tarfile streaming when the destination is a local filesystem. This improves the throughput by 17%. The parameters I'm using are: Same SSD source and destination, 2MB chunks, zstd:0 and no encryption. |
BTW, removing |
got side tracked a bit. We have a backup and an incremental of our 27TB volume. We are looking at copying the our backups to a remote location so that we can have off-site storage. |
@alvinstarr Sorry, I got sidetracked as well. I just posted the The kicker is that while I'm seeing throughput increase >17% on an archive with 2MB chunks, I also tried an archive with 1MB chunks. It appears that the 1MB chunk size is the fastest for sending an initial/whole volume, regardless of whether tar-bypass is used, and the gain in throughput going from 2MB to 1MB is about 25%. Overall, sending to a 1MB archive while using the --tar-bypass I saw as much as 37% gain in throughput. The tar-bypass is considered experimental at this point, although I don't anticipate it causing any issues. Thanks for the tip about bbcp for backup copies. To be useful inside of Wyng, a copy/archive utility would have to handle streams from memory as well as files (this is why Python's tarfile lib was used). To get a similar muti-thread, multi-stream boost in |
@alvinstarr PS - You may want to look into bbcp's behavior when updating existing file sets. The documentation has scant info on that subject and I could not figure out if it would skip files based on file timestamps, for example. It also doesn't seem to have a delete feature. So my own preference would be, after the initial |
bbcp is defiantly not a replacement for rsync because of delete and sync of existing files like you mentioned. bbcp may not integrate well into what your doing but it may be possible to leverage the knowledge and work that has gone into doing the network socket processing. |
Changes that may improve throughput, especially for send:
The text was updated successfully, but these errors were encountered: