-
Notifications
You must be signed in to change notification settings - Fork 2.6k
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
git fetch performance regression 2.12.2.windows.2 -> 2.13.0.windows.1 #1233
Comments
Please note that this harms your wish to get help. But you can dig deeper yourself: there have been 5 intermediate snapshots on https://wingit.blob.core.windows.net/files/index.html, maybe you can pinpoint a bit finer where the regression happened. Other than that, the report does not even mention which protocol was used for transport. That's good for me, because I do not have to set aside time to try to dig deeper, as crucial information is simply unavailable, so I can go take care of other tasks instead. That's bad for you, though, as you do not get the assistance you seek. Assuming that you use the most prevalent protocol (HTTPS): by setting Good luck, and good hunting! |
Many thanks for trying to help given I'm not able to provide a URL for you to test against. I can say the URL is of the form However, I did find test those intermediate snapshots and found:
Is there any other information I can dig out to help move this along? |
The next steps to narrow things down would be to see what the changes are between the commits from which those two versions were built. You can find out by calling Other than that, there is always a chance that an updated dependency (in this case, most likely |
I saw the same issue when working with one of our internal repositories, which has about 2000 tags. mkdir test For 2.12.2.windows.2 64bit or earlier versions, it only takes about 30s. But for 2.13.3.windows.1, it takes more then 18min. |
Same version of git for Linux does not have the same issue. So it seems it's Windows specific. |
@jiez you probably want to do some digging on your own (as outlined in earlier comments), as it seems that you are also unable to provide a minimal, complete & verifiable example? |
mkdir test The above test uses about 5m50s for 2.13.x and 2.14.x, but only about 15s for 2.12.x. |
It's caused by this commit: commit 524a9fd
|
Change `lock_raw_ref()` and `lock_ref_sha1_basic()` to use `refs_verify_refname_available()` instead of `verify_refname_available_dir()`. This means that those callsites now check for conflicts with all references rather than just packed refs, but the performance cost shouldn't be significant (and will be regained later). These were the last callers of `verify_refname_available_dir()`, so also delete that (very complicated) function. Signed-off-by: Michael Haggerty <mhagger@alum.mit.edu> Signed-off-by: Junio C Hamano <gitster@pobox.com>
I tested on another machine using the method I mentioned in one of my previous comments. |
It seems that this issue is not at all Windows-specific, and that a patch to fix things was presented here: https://public-inbox.org/git/20170817152240.coioktoqfkcvxldj@sigill.intra.peff.net/t/#m146140068886c31b94a3c5603158c522784f30b1 Could you verify that this fixes the problem? |
To make it easier for you (cherry-picking the commit in git fetch https://github.com/dscho/git tentative-fix-for-1233
git checkout FETCH_HEAD |
With that fix, I got 5.3s on Windows, not as fast as before, but is acceptable. |
That patch has been merged into upstream |
Thanks for testing. I am weighing whether we should merge this branch early, i.e. before the v2.15.x track. Opinions? |
I am not familiar with git development. Will the next 2.14.x release include this fix? I took a quick look at how releases are cut on upstream git project. It seems each release is just made from the master branch. So the next 2.14.x release will include it. If so, we can just wait for the next 2.14 release. I currently just stick to 2.12.2. |
Upstream Git releases are cut from the In that light: no, unless we specifically merge |
I made up my mind. Waiting for over two months to see this regression fixed is way too long a time. From the upstream twitches, it looks as if v2.14.2 is relatively close (even if the upstream Git maintainer dropped no hint about v2.14.2), therefore I will hold off with a new version for now. I want to ask everybody who experienced this problem to test the new snapshot, though: https://wingit.blob.core.windows.net/files/index.html |
A regression that caused the fetch operation with lots of refs to be a lot slower than before [was fixed](git-for-windows/git#1233). Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Here are my results with @jiez's test - #1233 (comment)
That's a huge difference if you ask me. |
Thank you for the feedback! Glad that it made things faster again. |
A regression was introduced into Git for Windows v2.13.* via a half-finished refactoring of the refs handling. This refactoring has been completed in the meantime, but is was only merged into upstream's `master` branch, i.e. it was not integrated into the maintenance track. Git for Windows is used quite a bit in enterprise settings, though, where a large number of refs is quite common, and therefore the regression really hurts. So let's take this regression fix earlier than upstream Git. This fixes #1233. Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
A regression was introduced into Git for Windows v2.13.* via a half-finished refactoring of the refs handling. This refactoring has been completed in the meantime, but is was only merged into upstream's `master` branch, i.e. it was not integrated into the maintenance track. Git for Windows is used quite a bit in enterprise settings, though, where a large number of refs is quite common, and therefore the regression really hurts. So let's take this regression fix earlier than upstream Git. This fixes #1233. Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
A regression was introduced into Git for Windows v2.13.* via a half-finished refactoring of the refs handling. This refactoring has been completed in the meantime, but is was only merged into upstream's `master` branch, i.e. it was not integrated into the maintenance track. Git for Windows is used quite a bit in enterprise settings, though, where a large number of refs is quite common, and therefore the regression really hurts. So let's take this regression fix earlier than upstream Git. This fixes #1233. Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
A regression was introduced into Git for Windows v2.13.* via a half-finished refactoring of the refs handling. This refactoring has been completed in the meantime, but is was only merged into upstream's `master` branch, i.e. it was not integrated into the maintenance track. Git for Windows is used quite a bit in enterprise settings, though, where a large number of refs is quite common, and therefore the regression really hurts. So let's take this regression fix earlier than upstream Git. This fixes #1233. Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
A regression was introduced into Git for Windows v2.13.* via a half-finished refactoring of the refs handling. This refactoring has been completed in the meantime, but is was only merged into upstream's `master` branch, i.e. it was not integrated into the maintenance track. Git for Windows is used quite a bit in enterprise settings, though, where a large number of refs is quite common, and therefore the regression really hurts. So let's take this regression fix earlier than upstream Git. This fixes #1233. Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
A regression was introduced into Git for Windows v2.13.* via a half-finished refactoring of the refs handling. This refactoring has been completed in the meantime, but is was only merged into upstream's `master` branch, i.e. it was not integrated into the maintenance track. Git for Windows is used quite a bit in enterprise settings, though, where a large number of refs is quite common, and therefore the regression really hurts. So let's take this regression fix earlier than upstream Git. This fixes #1233. Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
A regression was introduced into Git for Windows v2.13.* via a half-finished refactoring of the refs handling. This refactoring has been completed in the meantime, but is was only merged into upstream's `master` branch, i.e. it was not integrated into the maintenance track. Git for Windows is used quite a bit in enterprise settings, though, where a large number of refs is quite common, and therefore the regression really hurts. So let's take this regression fix earlier than upstream Git. This fixes #1233. Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Setup
The slow version is:
defaults?
For both versions of git I choose the defaults. Here are the results for 2.13.0.windows.1:
to the issue you're seeing?
Not that I'm aware of.
Details
Admin CMD.
Minimal, Complete, and Verifiable example
this will help us understand the issue.
The git fetch to take approximately as long when running either version of git.
git 2.13 was significantly slower than git 2.12. The fetch pulled down some 60,000 references in a couple of minutes on git 2.12 whilst for 2.13 I gave up waiting after two hours. The issue reproduces reliably for me.
URL to that repository to help us with testing?
Sorry no.
The text was updated successfully, but these errors were encountered: