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

Re: [PATCH 0/9] respect binary attribute in grep

From
PWPete Wyckoff <pw@padd.com>
Date
Feb 4, 2012, 19:22 UTC
Message-ID
<20120204192252.GA15319@padd.com>
In-Reply-To
<20120202081747.GA10271@sigill.intra.peff.net>

I took a look at this series. It's nice. My worry was that the extra open() of non-existent .gitattributes files in all the directories would cause performance problems across networked filesystems like NFS.

My usual (non-public) repository has order:
    100k files
     10k directories

and no files marked as binary. The grep string is such that it is disk-bound, and not expected to match in any file (or binary): "time ~/src/git/bin-wrappers/git grep unfindable-string".

With your change, there are 10k new open() calls looking for .gitattributes in each directory, all of which return ENOENT. This turns out to have an insignificant impact on performance due to the much bigger time sink of stat()-ing all the files.

I think this happens to be true because the gitattributes lookups run in parallel to all the file stat work, as the main thread dispatches file work while doing its own gitattributes lookups.

It could be plausible that deep directory structures with few grep-able files will suffer with this change. For example, many big binary blobs in deep directory hierarchies, but also some useful files here and there.

One could argue that with the use of .gitattributes to specify which blobs should not be searched, this series makes this faster by not having to to read the binary blobs at all. And I'd be okay with that.

Just FYI that there may be a performance impact on certain repositories.

		-- Pete
Previous: Jeff KingNext: Jeff King
Message 42 of 43 in “git-grep while excluding files in a blacklist”
  1. Dov GrobgeldJan 17, 2012
  2. Nguyen Thai Ngoc DuyJan 17, 2012
  3. Junio C HamanoJan 17, 2012
  4. Nguyen Thai Ngoc DuyJan 18, 2012
  5. Don't search files with an unset "grep" attributeconrad.irwin@gmail.com, Jan 23, 2012
  6. Junio C HamanoJan 23, 2012
  7. Don't search files with an unset "grep" attributeConrad Irwin, Jan 23, 2012
  8. Junio C HamanoJan 24, 2012
  9. Jeff KingJan 25, 2012
  10. Stephen BashJan 26, 2012
  11. Michael HaggertyJan 26, 2012
  12. Jeff KingJan 26, 2012
  13. Jeff KingJan 27, 2012
  14. Junio C HamanoFeb 1, 2012
  15. Jeff KingFeb 1, 2012
  16. Jeff KingFeb 1, 2012
  17. Conrad IrwinFeb 1, 2012
  18. Junio C HamanoFeb 1, 2012
  19. Jeff KingFeb 1, 2012
  20. Jeff KingFeb 1, 2012
  21. 1/2 grep: let grep_buffer callers specify a binary flagJeff King, Feb 1, 2012
  22. 2/2 grep: respect diff attributes for binary-nessJeff King, Feb 1, 2012
  23. Junio C HamanoFeb 2, 2012
  24. Jeff KingFeb 2, 2012
  25. Junio C HamanoFeb 2, 2012
  26. 0/9 respect binary attribute in grepJeff King, Feb 2, 2012
  27. 1/9 grep: make locking flag globalJeff King, Feb 2, 2012
  28. 2/9 grep: move sha1-reading mutex into low-level codeJeff King, Feb 2, 2012
  29. 3/9 grep: refactor the concept of "grep source" into an objectJeff King, Feb 2, 2012
  30. 4/9 convert git-grep to use grep_source interfaceJeff King, Feb 2, 2012
  31. 5/9 grep: drop grep_buffer's "name" parameterJeff King, Feb 2, 2012
  32. 6/9 grep: cache userdiff_driver in grep_sourceJeff King, Feb 2, 2012
  33. 7/9 grep: respect diff attributes for binary-nessJeff King, Feb 2, 2012
  34. 8/9 grep: load file data after checking binary-nessJeff King, Feb 2, 2012
  35. 9/9 grep: pre-load userdiff drivers when threadedJeff King, Feb 2, 2012
  36. Jeff KingFeb 2, 2012
  37. Thomas RastFeb 2, 2012
  38. Jeff KingFeb 2, 2012
  39. Junio C HamanoFeb 2, 2012
  40. Junio C HamanoFeb 2, 2012
  41. Jeff KingFeb 2, 2012
  42. Pete WyckoffFeb 4, 2012
  43. Jeff KingFeb 4, 2012

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.