Subject: RE: Watchman support for git

From: Felipe Contreras <[email-masked]>
Date: Mon, 05 May 2014 13:14:38 -0500

David Turner wrote:
> On Fri, 2014-05-02 at 22:40 -0500, Felipe Contreras wrote:
> > David Turner wrote:
> > > On Fri, 2014-05-02 at 18:20 -0500, Felipe Contreras wrote:
> > > > dturner@ wrote:
> > > > > Test repository 1: Linux
> > > > > 
> > > > > Linux is about 45k files in 3k directories.  The average length of a
> > > > > filename is about 32 bytes.
> > > > > 
> > > > > Git status timing:
> > > > > no watchman: 125ms
> > > > > watchman: 90ms
> > > > 
> > > > That's very interesting. Do you get similar improvements when doing
> > > > something similar in Merurial (watchman vs . no watchman).
> > > 
> > > I have not tried it.  My understanding is that this is why Facebook
> > > wrote Watchman and added support for it to Mercurial, so I would assume
> > > that the improvements are at least this good.
> > 
> > Yeah, my bet is that they are actually much better (because Mercurial
> > can't be so optimized as Git).
> >
> > I'm interested in this number because if watchman in Git is improving it
> > by 30%, but in Mercurial it's improving it by 100% (made up number),
> > therefore it makes sens that you might want it more if you are using hg,
> > but not so much if you are using git.
> > 
> > Also, if similar repositories with Mercurial+watchman are actually
> > faster than Git+watchman, that means that there's room for improvement
> > in your implementation. This is not a big issue at this point of the
> > process, just something nice to know.
> 
> Converting git repos to hg seems to be incredibly slow.  (I have not yet
> tried doing it with git-remote-hg).

I haven't profiled the git->hg conversion, only the other way around,
but I don't see why it would be slow in git-remote-hg.

The only restriction is that octopus merges are not supported, so you
would probably need to find another repository.

> But I did find a hg repository for
> linux: https://bitbucket.org/orzel/linux-kernel-stable
> 
> On this repo, I get:
> hg without watchman: 620ms
> hg with watchman: 264ms
> (compared to 125ms/90ms for git).
> 
> The number of syscalls is, perhaps also interesting:
> no watchman / with watchman
> hg  77773   /  5421
> git 59180   /  599 
> 
> (About 1/3 of hg's syscalls with watchman seem to be loading Python
> stuff)

Exactly what I thought :) 28% improvement for Git, 76% improvement for
Mercurial. Still, the improvement would be welcome by big companies I
bet.

Cheers.

-- 
Felipe Contreras