зеркало из https://github.com/microsoft/git.git
read-cache: log the number of lstat calls to trace2
Report the total number of calls made to lstat() inside of refresh_index(). FSMonitor improves the performance of commands like `git status` by avoiding scanning the disk for changed files. This can be seen in `refresh_index()`. Let's measure this. Signed-off-by: Jeff Hostetler <jeffhost@microsoft.com> Reviewed-by: Taylor Blau <me@ttaylorr.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
Родитель
8c4b7503d0
Коммит
a98e0f2d31
17
read-cache.c
17
read-cache.c
|
@ -1364,7 +1364,8 @@ int add_index_entry(struct index_state *istate, struct cache_entry *ce, int opti
|
||||||
static struct cache_entry *refresh_cache_ent(struct index_state *istate,
|
static struct cache_entry *refresh_cache_ent(struct index_state *istate,
|
||||||
struct cache_entry *ce,
|
struct cache_entry *ce,
|
||||||
unsigned int options, int *err,
|
unsigned int options, int *err,
|
||||||
int *changed_ret)
|
int *changed_ret,
|
||||||
|
int *t2_did_lstat)
|
||||||
{
|
{
|
||||||
struct stat st;
|
struct stat st;
|
||||||
struct cache_entry *updated;
|
struct cache_entry *updated;
|
||||||
|
@ -1406,6 +1407,8 @@ static struct cache_entry *refresh_cache_ent(struct index_state *istate,
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (t2_did_lstat)
|
||||||
|
*t2_did_lstat = 1;
|
||||||
if (lstat(ce->name, &st) < 0) {
|
if (lstat(ce->name, &st) < 0) {
|
||||||
if (ignore_missing && errno == ENOENT)
|
if (ignore_missing && errno == ENOENT)
|
||||||
return ce;
|
return ce;
|
||||||
|
@ -1519,6 +1522,7 @@ int refresh_index(struct index_state *istate, unsigned int flags,
|
||||||
const char *added_fmt;
|
const char *added_fmt;
|
||||||
const char *unmerged_fmt;
|
const char *unmerged_fmt;
|
||||||
struct progress *progress = NULL;
|
struct progress *progress = NULL;
|
||||||
|
int t2_sum_lstat = 0;
|
||||||
|
|
||||||
if (flags & REFRESH_PROGRESS && isatty(2))
|
if (flags & REFRESH_PROGRESS && isatty(2))
|
||||||
progress = start_delayed_progress(_("Refresh index"),
|
progress = start_delayed_progress(_("Refresh index"),
|
||||||
|
@ -1536,11 +1540,13 @@ int refresh_index(struct index_state *istate, unsigned int flags,
|
||||||
* we only have to do the special cases that are left.
|
* we only have to do the special cases that are left.
|
||||||
*/
|
*/
|
||||||
preload_index(istate, pathspec, 0);
|
preload_index(istate, pathspec, 0);
|
||||||
|
trace2_region_enter("index", "refresh", NULL);
|
||||||
for (i = 0; i < istate->cache_nr; i++) {
|
for (i = 0; i < istate->cache_nr; i++) {
|
||||||
struct cache_entry *ce, *new_entry;
|
struct cache_entry *ce, *new_entry;
|
||||||
int cache_errno = 0;
|
int cache_errno = 0;
|
||||||
int changed = 0;
|
int changed = 0;
|
||||||
int filtered = 0;
|
int filtered = 0;
|
||||||
|
int t2_did_lstat = 0;
|
||||||
|
|
||||||
ce = istate->cache[i];
|
ce = istate->cache[i];
|
||||||
if (ignore_submodules && S_ISGITLINK(ce->ce_mode))
|
if (ignore_submodules && S_ISGITLINK(ce->ce_mode))
|
||||||
|
@ -1566,7 +1572,10 @@ int refresh_index(struct index_state *istate, unsigned int flags,
|
||||||
if (filtered)
|
if (filtered)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
new_entry = refresh_cache_ent(istate, ce, options, &cache_errno, &changed);
|
new_entry = refresh_cache_ent(istate, ce, options,
|
||||||
|
&cache_errno, &changed,
|
||||||
|
&t2_did_lstat);
|
||||||
|
t2_sum_lstat += t2_did_lstat;
|
||||||
if (new_entry == ce)
|
if (new_entry == ce)
|
||||||
continue;
|
continue;
|
||||||
if (progress)
|
if (progress)
|
||||||
|
@ -1602,6 +1611,8 @@ int refresh_index(struct index_state *istate, unsigned int flags,
|
||||||
|
|
||||||
replace_index_entry(istate, i, new_entry);
|
replace_index_entry(istate, i, new_entry);
|
||||||
}
|
}
|
||||||
|
trace2_data_intmax("index", NULL, "refresh/sum_lstat", t2_sum_lstat);
|
||||||
|
trace2_region_leave("index", "refresh", NULL);
|
||||||
if (progress) {
|
if (progress) {
|
||||||
display_progress(progress, istate->cache_nr);
|
display_progress(progress, istate->cache_nr);
|
||||||
stop_progress(&progress);
|
stop_progress(&progress);
|
||||||
|
@ -1614,7 +1625,7 @@ struct cache_entry *refresh_cache_entry(struct index_state *istate,
|
||||||
struct cache_entry *ce,
|
struct cache_entry *ce,
|
||||||
unsigned int options)
|
unsigned int options)
|
||||||
{
|
{
|
||||||
return refresh_cache_ent(istate, ce, options, NULL, NULL);
|
return refresh_cache_ent(istate, ce, options, NULL, NULL, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
Загрузка…
Ссылка в новой задаче