sparse-index: count lstat() calls
The clear_skip_worktree.. methods already report some statistics about how many cache entries are checked against path_found() due to having the skip-worktree bit set. However, due to path_found() performing some caching, this isn't the only information that would be helpful to report. Add a new lstat_count member to the path_found_data struct to count the number of times path_found() calls lstat(). This will be helpful to help explain performance problems in this method as well as to demonstrate future changes to the caching algorithm in a more concrete way than end-to-end timings. Signed-off-by: Derrick Stolee <stolee@gmail.com> Reviewed-by: Elijah Newren <newren@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:

committed by
Junio C Hamano

parent
23dd6f8bcc
commit
c4e8c42c19
@ -442,6 +442,7 @@ void ensure_correct_sparsity(struct index_state *istate)
|
|||||||
struct path_found_data {
|
struct path_found_data {
|
||||||
struct strbuf dir;
|
struct strbuf dir;
|
||||||
int dir_found;
|
int dir_found;
|
||||||
|
size_t lstat_count;
|
||||||
};
|
};
|
||||||
|
|
||||||
#define PATH_FOUND_DATA_INIT { \
|
#define PATH_FOUND_DATA_INIT { \
|
||||||
@ -469,6 +470,7 @@ static int path_found(const char *path, struct path_found_data *data)
|
|||||||
/*
|
/*
|
||||||
* If path itself exists, return 1.
|
* If path itself exists, return 1.
|
||||||
*/
|
*/
|
||||||
|
data->lstat_count++;
|
||||||
if (!lstat(path, &st))
|
if (!lstat(path, &st))
|
||||||
return 1;
|
return 1;
|
||||||
|
|
||||||
@ -493,6 +495,7 @@ static int path_found(const char *path, struct path_found_data *data)
|
|||||||
strbuf_reset(&data->dir);
|
strbuf_reset(&data->dir);
|
||||||
strbuf_add(&data->dir, path, newdir - path + 1);
|
strbuf_add(&data->dir, path, newdir - path + 1);
|
||||||
|
|
||||||
|
data->lstat_count++;
|
||||||
data->dir_found = !lstat(data->dir.buf, &st);
|
data->dir_found = !lstat(data->dir.buf, &st);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
@ -524,6 +527,8 @@ static int clear_skip_worktree_from_present_files_sparse(struct index_state *ist
|
|||||||
|
|
||||||
trace2_data_intmax("index", istate->repo,
|
trace2_data_intmax("index", istate->repo,
|
||||||
"sparse_path_count", path_count);
|
"sparse_path_count", path_count);
|
||||||
|
trace2_data_intmax("index", istate->repo,
|
||||||
|
"sparse_lstat_count", data.lstat_count);
|
||||||
trace2_region_leave("index", "clear_skip_worktree_from_present_files_sparse",
|
trace2_region_leave("index", "clear_skip_worktree_from_present_files_sparse",
|
||||||
istate->repo);
|
istate->repo);
|
||||||
clear_path_found_data(&data);
|
clear_path_found_data(&data);
|
||||||
@ -553,6 +558,8 @@ static void clear_skip_worktree_from_present_files_full(struct index_state *ista
|
|||||||
|
|
||||||
trace2_data_intmax("index", istate->repo,
|
trace2_data_intmax("index", istate->repo,
|
||||||
"full_path_count", path_count);
|
"full_path_count", path_count);
|
||||||
|
trace2_data_intmax("index", istate->repo,
|
||||||
|
"full_lstat_count", data.lstat_count);
|
||||||
trace2_region_leave("index", "clear_skip_worktree_from_present_files_full",
|
trace2_region_leave("index", "clear_skip_worktree_from_present_files_full",
|
||||||
istate->repo);
|
istate->repo);
|
||||||
clear_path_found_data(&data);
|
clear_path_found_data(&data);
|
||||||
|
Reference in New Issue
Block a user