Re: [PATCH 1/1] read-cache: update index format default to v4
- From
Ben Peart <peartben@gmail.com>
- Date
- Sep 25, 2018, 21:22 UTC
- Message-ID
- <c05896d5-0b0a-9349-3c6d-9e658cd495ca@gmail.com>
- In-Reply-To
- <CAGZ79kZEN9pSBAdVajfRrrb_D3twD+C7hnzZti+TqO0-sVp9PA@mail.gmail.com>
On 9/25/2018 2:01 PM, Stefan Beller wrote:
Show 49 quoted lines
> On Tue, Sep 25, 2018 at 7:30 AM Derrick Stolee <stolee@gmail.com> wrote: >> >> On 9/25/2018 3:06 AM, Patrick Steinhardt wrote: >>> On Mon, Sep 24, 2018 at 11:32:23PM +0200, SZEDER Gábor wrote: >>>> On Mon, Sep 24, 2018 at 02:15:30PM -0700, Derrick Stolee via GitGitGadget wrote: >>>>> From: Derrick Stolee <dstolee@microsoft.com> >>>>> >>>>> The index v4 format has been available since 2012 with 9d22778 >>>>> "reach-cache.c: write prefix-compressed names in the index". Since >>>>> the format has been stable for so long, almost all versions of Git >>>>> in use today understand version 4, removing one barrier to upgrade >>>>> -- that someone may want to downgrade and needs a working repo. >>>> What about alternative implementations, like JGit, libgit2, etc.? >>> Speaking of libgit2, we are able to read and write index v4 since >>> commit c1b370e93 >> >> This is a good point, Szeder. >> >> Patrick: I'm glad LibGit2 is up-to-date with index formats. >> >> Unfortunately, taking a look (for the first time) at the JGit code >> reveals that they don't appear to have v4 support. In >> org.eclipse.jgit/src/org/eclipse/jgit/dircache/DirCache.java, the >> DirCache.readFrom() method: lines 488-494, I see the following snippet: >> >> final int ver = NB.decodeInt32(hdr, 4); >> boolean extended = false; >> if (ver == 3) >> extended = true; >> else if (ver != 2) >> throw new >> CorruptObjectException(MessageFormat.format( >> JGitText.get().unknownDIRCVersion, Integer.valueOf(ver))); >> >> It looks like this will immediately throw with versions other than 2 or 3. >> >> I'm adding Jonathan Nieder to CC so he can check with JGit people about >> the impact of this change. > > JGit is used both on the server (which doesn't use index/staging area) > as well as client side as e.g. an Eclipse integration, which would > very much like to use the index. > > Adding Matthias Sohn as well, who is active in JGit and cares > more about the client side than Googlers who only make use > of the server side part of JGit. > > Stefan >
In addition to the compatibility with other implementations of git question, I think we should include Duy's patch [1] to "optimize reading index format v4" before flipping the default to V4.
In my testing, this reduced the index load time of V4 by 10%-15% making the CPU cost only ~2% more expensive than V2 or V3 indexes. This increase in CPU cost is more than offset by the significant reduction in file IO due to the reduced index file size.
[1] https://public-inbox.org/git/20180825064458.28484-1-pclouds@gmail.com/