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

Re: [GSoC] Git Blog 11

From
Christian Couder <christian.couder@gmail.com>
Date
Aug 2, 2021, 06:25 UTC
Message-ID
<CAP8UFD16pqERdF4Mdq=_ktvFB1rcXwB9PRy8TjNq=ThH5HbeqA@mail.gmail.com>
In-Reply-To
<CAOLTT8RwwMF07f=XxWN=zGsPU0VQ8FqPVdyepQp78Ei8WZpSrw@mail.gmail.com>
On Sun, Aug 1, 2021 at 8:45 AM ZheNing Hu <adlternative@gmail.com> wrote:
>
> My eleventh week blog finished:
> The web version is here:
> https://adlternative.github.io/GSOC-Git-Blog-11/
Great, thanks!
Show 6 quoted lines
> ### Attempt to optimize performance
>
> This week, at the prompt of my mentor Christian, I used `gprof` for some
> performance tests about `git cat-file --batch`:
> [Re: [GSOC] How to improve the performance of git cat-file --batch]
> (https://lore.kernel.org/git/CAOLTT8TdL7UhfVSOzbpmo-WFNrcKwmy=E720tNt4KM9o_p=keg@mail.gmail.com/)
[...]
Show 6 quoted lines
> Here is an amazing fact:
>
> The number of calls to `lookup_object()` before and after using my
> patch are 0 and
> 522709 respectively. Therefore, I am very surprised, why do we have
> these additional calls?
> After printing the call stack of `lookup_object()`, we can know that
> the `parse_buffer()`
> is calling them.
s/the `parse_buffer()`/`parse_buffer()`/
or
s/the `parse_buffer()`/the `parse_buffer()` function/
Also: s/them/it/
Show 5 quoted lines
> A very straightforward idea, can we avoid calling
> this function?
>
> In `parse_object_buffer()`, `parse_blob_buffer()`, ``parse_tree_buffer()`,
> `parse_commit_buffer()`, and `parse_tag_buffer()` parse the object
s/parse/we parse/
> data, and then store
> it in `struct object *obj`, finally return it to the caller.
Maybe: s/finally/and finally/
Show 9 quoted lines
> `get_object()` will feed the `obj` to `grab_values()`, and then
> `grab_values()` will feed the
> `obj` to `grab_tag_values()`, `grab_commit_values()`, which can fill
> the object info in `obj` to
> implement some atom, e.g. `%(tag)`, `%(type)`, `%(object)`, `%(tree)`,
> `%(numparent)`,`%(parent)`.
> It is worth noting that `%(objectname)`, `%(objecttype)`,
> `%(objectsize)`, `%(deltabase)`, `%(rest)`,
> `%(raw)` are did not appear in them, this means that we can avoid
s/are did not/don't/
> parsing object buffer when we
> don't use those atoms which require `obj`'s information!
>
> After some processing and adaptation, I made the patch which can skip
s/the patch/a patch/
Show 19 quoted lines
> `parse_object_buffer()`
> in some cases, this is the result of the performance test of
> `t/perf/p1006-cat-file.sh`:
>
> ```
> Test                                        HEAD~             HEAD
> ------------------------------------------------------------------------------------
> 1006.2: cat-file --batch-check              0.10(0.09+0.00)
> 0.11(0.10+0.00) +10.0%
> 1006.3: cat-file --batch-check with atoms   0.09(0.08+0.01)
> 0.09(0.06+0.03) +0.0%
> 1006.4: cat-file --batch                    0.62(0.58+0.04)
> 0.57(0.54+0.03) -8.1%
> 1006.5: cat-file --batch with atoms         0.63(0.60+0.02)
> 0.52(0.49+0.02) -17.5%
> ```
>
> We can see that the performance of `git cat-file --batch` has been a
> certain improvement!

Yeah, sure -8.1% or -17.5% is really nice! But why +10.0% for `cat-file --batch-check`?

> Tell a joke: removing 1984531500 if checking can reduce the startup
> time of GTA5 by 70%. :-D
s/if checking/checks/
As this joke refers to:
https://rockstarintel.com/a-fan-reduces-gta-online-loading-times-by-70

it might be nice to add a link to help people like me who didn't know about this and had to google it.

> Currently the patch has not been submitted to the mailing list, let us
> wait a bit...
Looking forward to it...
Previous: ZheNing HuNext: ZheNing Hu
Message 2 of 6 in “[GSoC] Git Blog 11”
  1. ZheNing HuAug 1, 2021
  2. Christian CouderAug 2, 2021
  3. ZheNing HuAug 3, 2021
  4. ZheNing HuAug 3, 2021
  5. Christian CouderAug 4, 2021
  6. ZheNing HuAug 5, 2021

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.