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

Re: [PATCH v2] index: add trace2 region for clear skip worktree

From
JHJeff Hostetler <git@jeffhostetler.com>
Date
Oct 28, 2022, 16:50 UTC
Message-ID
<ff5d79c9-35f8-8881-8349-63977732c422@jeffhostetler.com>
In-Reply-To
<pull.1368.v2.git.git.1666917961644.gitgitgadget@gmail.com>

On 10/27/22 8:46 PM, Anh Le via GitGitGadget wrote: [...]

Show 47 quoted lines
> diff --git a/sparse-index.c b/sparse-index.c
> index e4a54ce1943..dbf647949c1 100644
> --- a/sparse-index.c
> +++ b/sparse-index.c
> @@ -493,24 +493,38 @@ void clear_skip_worktree_from_present_files(struct index_state *istate)
>   	int dir_found = 1;
>   
>   	int i;
> +	int path_counts[2] = {0, 0};
> +	int restarted = 0;
>   
>   	if (!core_apply_sparse_checkout ||
>   	    sparse_expect_files_outside_of_patterns)
>   		return;
>   
> +	trace2_region_enter("index", "clear_skip_worktree_from_present_files", istate->repo);
>   restart:
>   	for (i = 0; i < istate->cache_nr; i++) {
>   		struct cache_entry *ce = istate->cache[i];
>   
> -		if (ce_skip_worktree(ce) &&
> -		    path_found(ce->name, &last_dirname, &dir_len, &dir_found)) {
> -			if (S_ISSPARSEDIR(ce->ce_mode)) {
> -				ensure_full_index(istate);
> -				goto restart;
> +		if (ce_skip_worktree(ce)) {
> +			path_counts[restarted]++;
> +			if (path_found(ce->name, &last_dirname, &dir_len, &dir_found)) {
> +				if (S_ISSPARSEDIR(ce->ce_mode)) {
> +					ensure_full_index(istate);
> +					restarted = 1;
> +					goto restart;
> +				}
> +				ce->ce_flags &= ~CE_SKIP_WORKTREE;
>   			}
> -			ce->ce_flags &= ~CE_SKIP_WORKTREE;
>   		}
>   	}
> +
> +	if (path_counts[0] > 0) {
> +		trace2_data_intmax("index", istate->repo, "clear_skip_worktree_from_present_files/path_count", path_counts[0]);
> +	}
> +	if (restarted) {
> +		trace2_data_intmax("index", istate->repo, "clear_skip_worktree_from_present_files/full_index/path_count", path_counts[1]);
> +	}
> +	trace2_region_leave("index", "clear_skip_worktree_from_present_files", istate->repo);
>   }

This looks good. And I think it sets us up to later answer some of our earlier perf questions after you get some data.

For example, if the path_count[0] phase is expensive, does the restart always need to restart the loop at i=0? Granted, the `ensure_full_index()` may create a new cache-entry array, so the value of `i` prior to the call may not correspond to the same cell after the call at the `goto`, but we could cache the strdup the pathname of cache[i] before the call and do a find on the new cache[] afterwards to get the corresponding i-prime value and let the restart start the loop on i-prime. That's just an idea, but let's wait for the data to see if that would be helpful.

Thanks! Jeff

Previous: Anh LeNext: Anh Le via GitGitGadget
Message 11 of 18 in “index: add trace2 region for clear skip worktree”
  1. index: add trace2 region for clear skip worktreeAnh Le via GitGitGadget, Oct 26, 2022
  2. Junio C HamanoOct 26, 2022
  3. Jeff HostetlerOct 26, 2022
  4. Junio C HamanoOct 26, 2022
  5. Jeff HostetlerOct 26, 2022
  6. Anh LeOct 27, 2022
  7. index: add trace2 region for clear skip worktreeAnh Le via GitGitGadget, Oct 28, 2022
  8. Derrick StoleeOct 28, 2022
  9. Junio C HamanoOct 28, 2022
  10. Anh LeOct 30, 2022
  11. Jeff HostetlerOct 28, 2022
  12. index: add trace2 region for clear skip worktreeAnh Le via GitGitGadget, Oct 31, 2022
  13. Taylor BlauOct 31, 2022
  14. 0/2 index: add trace2 region for clear skip worktreeAnh Le via GitGitGadget, Nov 3, 2022
  15. 2/2 index: raise a bug if the index is materialised more than onceAnh Le via GitGitGadget, Nov 3, 2022
  16. 1/2 index: add trace2 region for clear skip worktreeAnh Le via GitGitGadget, Nov 3, 2022
  17. Taylor BlauNov 5, 2022
  18. Derrick StoleeNov 7, 2022

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.