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
Large file transfers through gitfs are very slow #25672
Comments
@bradthurber, thanks for the new issue. We'll figure out whether this is an issue in gitfs or the git backend and decide from there what to do. |
This issue is a show stopper for us. We absolutely need GitFS. With Non-VM Win Minion transferring a 150MB file takes more than an hour(!) Non-GitFS setup works with NO problem. I.e. if on Master the file is copied into file_roots:base (cp /var/cache/salt/master/gitfs/refs/base/Distribution.7z -> /srv/salt/), the transfer is OK. So far we traced the bottleneck on the Minion as follows:
We appreciate any hints that would allow to track the root of this problem faster. |
@mahresohl, what is the output of |
salt --versions-report Dependency Versions: System Versions: salt win_ak_bv --versions-report Dependency Versions: System Versions: |
BTW |
salt-minion --versions-report Dependency Versions: System Versions: |
Also on Master: On Minion |
after more debugging it seems "zmq/sugar/poll.py:101" is not really a culprit. If I put a breakpoint only there, it is hit a few times, and then never again. The download proceeds further as usual i.e. darn slow. Without knowing the overall architecture and the logic of the application, it's extremely hard to debug. |
I am running into the same issue and was hoping that git-lfs (git large file support) would help, but git-lfs isn't supported apparently yet by pygit2 nor GitPython.
|
Or perhabs the libgit2 library of saltstack is just outdated: |
It seems I am hitting this same thing on a much worse case, while using salt virt to try and deploy a new VM. Base VM is about 8GB in size. Using the following command: salt-run -l debug virt.init centosTEST 4 2048 salt://centos6-base.img seems to work until its stuck in this loop: [DEBUG ] Checking whether jid 20170221183812866496 is still running Looking a little bit further, I can see centos6-base.img is being copied to /var/cache/salt/minion/files/base/centos6-base.img on the minion at a VERY slow pace. Its been about 2 hours since I started the command and right now: Is there any workaround for this? |
Could you guys confirm that it works at a reasonable speed without gitfs? EDIT: Sorry, I haven't seen this:
|
@dxiri what's the ping between your master and minion? I might have an idea here. |
@dxiri currently file_buffer_size default is somewhere in order of 220kb-1mb. That's what I think could be slowing down your transfer if you have a large ping between machines. Could you try increasing that in both your master and minion configs? Refs: Line 2488 in deba6d2
|
@ninja- ping is really fast: Thanks for the tip! I will try it out and come back with results! |
@dxiri heh, 93ms is NOWHERE NEAR fast 😄 (fast would be < 3 ms) |
What happened in your case, and I've been probably right about the workaround for you, is that every Your current speed seems to be around ~ 13MB/s when I do 3200/2/60. Coincidence? 😈 |
@ninja- well, "fast" is a relative measure 😆 Results are still not in, servers are being moved to a new location as we speak, so it will take a while, but I will get back and post the results when I have them. |
@ninja- ok, servers back online :) checking what you mentioned about the file_buffer_size I currently have: Assuming that is in bytes, is the default buffer really 256KB? seems extremely low. By looking at the links you provided, I can see you have: which is 1MB. Is 1MB the maximum I can set this to? Thanks for the help so far! |
This issue has been automatically marked as stale because it has not had recent activity. It will be closed if no further activity occurs. Thank you for your contributions. If this issue is closed prematurely, please leave a comment and we will gladly reopen the issue. |
Note: This is a follow-on to #25455
Repro steps:
https://github.com/edubart/testrepo
salt 'minion-name' cp.get_url salt://largefile /tmp/largefile
I'm probably getting too fancy with expecting large files to smoothly make the transition through gitfs in this way - and I'm aware of the large file/binary file limitations of git; however, adding setup code (large RPMs to a formula could be a nice way of encapsulating what certain formulas need to accomplish (I'm looking at you oracle sql client RPM!).
Perhaps this is an issue with pygit2/libgit rather than salt - but the large file issue was supposed to be fixed in a much older libgit. Ref: libgit2/libgit2#1081
The text was updated successfully, but these errors were encountered: