git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: Watchman support for git

From
David Turner <dturner@twopensource.com>
Date
May 9, 2014, 17:17 UTC
Message-ID
<1399655858.11843.119.camel@stross>
In-Reply-To
<alpine.DEB.2.02.1405090002000.17457@nftneq.ynat.uz>
On Fri, 2014-05-09 at 00:08 -0700, David Lang wrote:
Show 42 quoted lines
> On Thu, 8 May 2014, Sebastian Schuberth wrote:
> 
> > On 03.05.2014 05:40, Felipe Contreras wrote:
> >
> >>>> 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.
> >
> > The article at [1] has some details, they claim "For our repository, enabling Watchman integration has made Mercurial's status command more than 5x faster than Git's status command".
> >
> > [1] https://code.facebook.com/posts/218678814984400/scaling-mercurial-at-facebook/
> 
> a lot of that speed comparison is going to depend on your storage system and the 
> size of your repository.
> 
> if you have a high-end enterprise storage system that tracks metadata very 
> differently from the file contents (I've seen some that have rackes worth of 
> SATA drives for contents and then 'small' arrays of a few dozen flash drives for 
> the metadata), and then you have very large repositories (Facebook has 
> everything in a single repo), then you have a perfect storm where something like 
> watchman that talks the proprietary protocol of the storage array can be FAR 
> faster than anything that needs to operate with the standard POSIX calls.
> 
> That can easily account for the difference between the facebook announcement and 
> the results presented for normal disks that show an improvement, but with even 
> stock git being faster than improved mercurial.

As I recall from Facebook's presentation[1] on this (as well as from the discussion on the git mailing list[2]), Facebook's test respository is much larger than any known git repository. In particular, it is larger than WebKit. These performance improvements are not for server-side tasks, but for client-side (e.g. git/hg status). Facebook also made other improvements for the client-server communication, and for log/blame, but these are not relevant to watchman.

It is entirely possible that, as repo size grows, Mercurial with watchman is faster than git without.

With my patches, git status isn't constant-time; it's merely a roughly constant factor faster. My initial design was to make git status constant-time by caching the results of the wt_status_collect calls. But there were so many cases with the various options that I got a bit lost in the wilderness and made a big mess. Maybe I would do better if I tried it again today. And maybe if I just build on top of the untracked-cache code, I would be able to get to constant-time; I'll have to try that at some point.

[1] http://www.youtube.com/watch?v=Dlguc63cRXg [2] http://comments.gmane.org/gmane.comp.version-control.git/189776

Previous: David LangNext: David Lang
Message 17 of 43 in “Watchman support for git”
  1. dturner@twopensource.comMay 2, 2014
  2. 1/3 After chdir to run grep, return to old directorydturner@twopensource.com, May 2, 2014
  3. Junio C HamanoMay 6, 2014
  4. David TurnerMay 7, 2014
  5. Jeff KingMay 7, 2014
  6. David TurnerMay 7, 2014
  7. Junio C HamanoMay 7, 2014
  8. David TurnerMay 7, 2014
  9. 3/3 Watchman supportdturner@twopensource.com, May 2, 2014
  10. Felipe ContrerasMay 2, 2014
  11. David TurnerMay 3, 2014
  12. Felipe ContrerasMay 3, 2014
  13. David TurnerMay 5, 2014
  14. Felipe ContrerasMay 5, 2014
  15. Sebastian SchuberthMay 8, 2014
  16. David LangMay 9, 2014
  17. David TurnerMay 9, 2014
  18. David LangMay 9, 2014
  19. David TurnerMay 9, 2014
  20. David LangMay 9, 2014
  21. David TurnerMay 9, 2014
  22. Duy NguyenMay 3, 2014
  23. David TurnerMay 3, 2014
  24. Duy NguyenMay 3, 2014
  25. David TurnerMay 3, 2014
  26. Duy NguyenMay 4, 2014
  27. David TurnerMay 6, 2014
  28. Duy NguyenMay 6, 2014
  29. Duy NguyenMay 6, 2014
  30. Duy NguyenMay 10, 2014
  31. David TurnerMay 10, 2014
  32. Duy NguyenMay 11, 2014
  33. David TurnerMay 11, 2014
  34. Duy NguyenMay 12, 2014
  35. David TurnerMay 13, 2014
  36. Duy NguyenMay 13, 2014
  37. David TurnerMay 13, 2014
  38. Duy NguyenMay 10, 2014
  39. David TurnerMay 13, 2014
  40. Duy NguyenMay 14, 2014
  41. Duy NguyenMay 14, 2014
  42. David TurnerMay 15, 2014
  43. Duy NguyenMay 19, 2014

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.