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

Re: [PATCH v8 1/4] sha1_file.c: support reading from a loose object of unknown type

From
Jeff King <peff@peff.net>
Date
Apr 17, 2015, 14:23 UTC
Message-ID
<20150417142310.GA12479@peff.net>
In-Reply-To
<20150415221824.GB27566@peff.net>
On Wed, Apr 15, 2015 at 06:18:24PM -0400, Jeff King wrote:
Show 22 quoted lines
> > This _might_ have some performance impact in that strbuf_addch()
> > involves strbuf_grow(*, 1), which does "does it overflow to
> > increment sb->len by one?"; I would say it should be unmeasurable
> > because the function is expected to be used only on loose objects
> > and you shouldn't have very many of them without packing in your
> > repository in the first place.
> > 
> > I guess Peff's c1822d4f (strbuf: add an optimized 1-character
> > strbuf_grow, 2015-04-04) may want to teach strbuf_addch() to use his
> > new strbuf_grow_ch(), and once that happens the performance worry
> > would disappear without this code to be changed at all.
> 
> I haven't re-rolled that series yet, but the discussion there showed
> that strbuf_grow_ch() is unnecessary; call-sites can just check:
> 
>   if (!strbuf_avail(sb))
> 	strbuf_grow(sb, 1);
> 
> to get the fast inline check. Since we go to the trouble to inline
> strbuf_addch, we should probably teach it the same trick. It would be
> nice to identify a place with a tight strbuf_addch() loop that could
> demonstrate the speed increase, though.

Just for reference, I did teach strbuf_addch this trick. And the config code is the tight loop to test it with. Results are here:

  http://article.gmane.org/gmane.comp.version-control.git/267266

In this code path, we are typically only seeing short strings (the original code used a 10-byte static buffer). So I doubt it makes all that much difference.

If there _is_ a performance implication to worry about here, I think it would be that we are doing an extra malloc/free. I'm not sure I understand why we are copying it at all. The original code copied from the hdr into type[10] so that we could NUL-terminate it, which was required for type_from_string().

But now we use type_from_string_gently, which can accept a length[1]. So we could just count the bytes to the first space and pass the original buffer along with that length, no?

-Peff
[1] Not related to your patch, but it looks like type_from_string_gently
    is overly lax. It does a strncmp() with the length of the candidate
    name, but does not check that we consumed all of the matching name.
    So "tr" would match "tree", "comm" would match "commit", and so
    forth.
Previous: Jeff KingNext: Junio C Hamano
Message 5 of 44 in “cat-file: teach cat-file a '--literally' option”
  1. 0/4 cat-file: teach cat-file a '--literally' optionkarthik nayak, Apr 15, 2015
  2. 1/4 sha1_file.c: support reading from a loose object of unknown typeKarthik Nayak, Apr 15, 2015
  3. Junio C HamanoApr 15, 2015
  4. Jeff KingApr 15, 2015
  5. Jeff KingApr 17, 2015
  6. Junio C HamanoApr 17, 2015
  7. Jeff KingApr 17, 2015
  8. Junio C HamanoApr 17, 2015
  9. karthik nayakApr 20, 2015
  10. Jeff KingApr 20, 2015
  11. karthik nayakApr 21, 2015
  12. Jeff KingApr 21, 2015
  13. karthik nayakApr 17, 2015
  14. Jeff KingApr 17, 2015
  15. karthik nayakApr 18, 2015
  16. Junio C HamanoApr 17, 2015
  17. karthik nayakApr 18, 2015
  18. Eric SunshineApr 17, 2015
  19. karthik nayakApr 18, 2015
  20. 2/4 cat-file: teach cat-file a '--literally' optionKarthik Nayak, Apr 15, 2015
  21. Junio C HamanoApr 15, 2015
  22. Junio C HamanoApr 15, 2015
  23. karthik nayakApr 16, 2015
  24. Junio C HamanoApr 16, 2015
  25. Karthik NayakApr 17, 2015
  26. Junio C HamanoApr 17, 2015
  27. Charles BaileyApr 19, 2015
  28. Junio C HamanoApr 20, 2015
  29. Charles BaileyApr 20, 2015
  30. Karthik NayakApr 20, 2015
  31. Charles BaileyApr 20, 2015
  32. karthik nayakApr 20, 2015
  33. Charles BaileyApr 21, 2015
  34. Eric SunshineApr 21, 2015
  35. Junio C HamanoApr 21, 2015
  36. karthik nayakApr 25, 2015
  37. Junio C HamanoApr 25, 2015
  38. karthik nayakApr 27, 2015
  39. Eric SunshineApr 27, 2015
  40. karthik nayakApr 28, 2015
  41. 3/4 cat-file: add documentation for '--literally' option.Karthik Nayak, Apr 15, 2015
  42. 4/4 t1006: add tests for git cat-file --literallyKarthik Nayak, Apr 15, 2015
  43. Eric SunshineApr 18, 2015
  44. karthik nayakApr 18, 2015

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.