Re: Git in Outreachy?
From: ZheNing Hu <hidden>
Date: 2021-09-07 05:50:41
Matheus Tavares Bernardino [off-list ref] 于2021年9月6日周一 下午8:36写道:
On Sun, Sep 5, 2021 at 5:59 AM ZheNing Hu [off-list ref] wrote:quoted
Jeff King [off-list ref] 于2021年9月4日周六 下午8:50写道:quoted
On Sat, Sep 04, 2021 at 03:40:41PM +0800, ZheNing Hu wrote:quoted
This may be a place to promote my patches: See [1][2][3]. It can provide some extra atoms for git cat-file --batch | --batch-check, like %(tree), %(author), %(tagger) etc. Although some performance optimizations have been made, It still has small performance gap. If the community still expects git cat-file --batch to reuse the logic of ref-filter, I expect it to get the attention of reviewers. The solutions I can think of to further optimize performance are: 1. Delay the evaluation of some ref-filter intermediate data. 2. Let ref-filter code reentrant and can be called in multi-threaded to take advantage of multi-core.I don't think trying to thread it will help much. For expensive formats, where we have to actually open and parse objects, in theory we could do that in parallel. But most of our time there is spent in zlib getting the object data, and that all needs to be done under a big lock.This big lock is "obj_read_lock()", right?The object reading code actually releases this lock before doing zlib decompression (and acquires it right after), to allow better multi-threaded performance.
Yeah, I guess this unlock place is in unpack_loose_short_header().
However, it is unfortunately not so simple to call object reading routines in multi-threaded code, even with this lock. The lock mainly protects `oid_object_info_extended()` and its wrappers. Some global resources used by these functions are also accessed outside of them, which could lead to race conditions in threaded code. That's why `builtin/grep.c` and `grep.c` have some explicit calls to `obj_read_lock()` outside `object-file.c` and `packfile.c`. (And it can be quite tricky to identity these cases.)
Indeed, a large number of global variables in ref-filter code are worth eliminating. Thanks. -- ZheNing Hu