From: Shawn Pearce Date: Wed, 10 Dec 2014 05:41:28 GMT Subject: Re: Poor push performance with large number of refs Message-ID: In-Reply-To: <20141210003735.GA124293@vauxhall.crustytoothpaste.net> On Tue, Dec 9, 2014 at 4:37 PM, brian m. carlson wrote: > I have a repository that's just under 2 GiB in size and contains over > 20000 refs, with a copy of it on a server. Both sides are using Git > 2.1.2. If I push a branch that contains a single commit, it takes about > 15 seconds to push. However, if everything is up-to-date, it completes > within 2 seconds. Notably, HTTPS performs the same as SSH. > > Most of the time is spent between the "Pushing to remote machine" and > "Counting objects", running git pack-objects: > > git pack-objects --all-progress-implied --revs --stdout --thin --delta-base-offset --progress > > Unfortunately, -vvv doesn't provide any helpful output. I have some > suspicions what's going on here, but no hard data. Where should I > be looking to determine the bottleneck? My guess is the revision queue is struggling to insert 20,000 commits that the remote side "has", are uninteresting, and should not be transmitted. This queue insertion usually requires parsing the commit object out of the local object store to get the commit timestamp, then bubble sort inserting that commit into the queue.