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

Re: [PATCH 4/4] fsmonitor: Delay updating state until after split index is merged

From
Johannes Schindelin <johannes.schindelin@gmx.de>
Date
Oct 23, 2017, 09:57 UTC
Message-ID
<alpine.DEB.2.21.1.1710231157030.6482@virtualbox>
In-Reply-To
<20171021033534.pgjtyiwlhvheuueo@sigill.intra.peff.net>
Hi Peff,
On Fri, 20 Oct 2017, Jeff King wrote:
Show 42 quoted lines
> On Fri, Oct 20, 2017 at 03:16:20PM +0200, Johannes Schindelin wrote:
> 
> > >  void tweak_fsmonitor(struct index_state *istate)
> > >  {
> > > +	int i;
> > > +
> > > +	if (istate->fsmonitor_dirty) {
> > > +		/* Mark all entries valid */
> > > +		trace_printf_key(&trace_fsmonitor, "fsmonitor is enabled; cache is %d", istate->cache_nr);
> > 
> > Sadly, a call to trace_printf_key() is not really a noop when tracing is
> > disabled. The call to trace_printf_key() hands off to trace_vprintf_fl(),
> > which in turn calls prepare_trace_line() which asks trace_want() whether
> > we need to trace, which finally calls get_trace_fd(). This last function
> > initializes a trace key if needed, and this entire call stack takes time.
> 
> It seems like we could pretty easily turn noop traces into a trivial
> conditional, like:
> 
> diff --git a/trace.h b/trace.h
> index 179b249c59..c46b92cbde 100644
> --- a/trace.h
> +++ b/trace.h
> @@ -80,8 +80,11 @@ extern void trace_performance_since(uint64_t start, const char *format, ...);
>  #define trace_printf(...) \
>  	trace_printf_key_fl(TRACE_CONTEXT, __LINE__, NULL, __VA_ARGS__)
>  
> -#define trace_printf_key(key, ...) \
> -	trace_printf_key_fl(TRACE_CONTEXT, __LINE__, key, __VA_ARGS__)
> +#define trace_printf_key(key, ...) do { \
> +	if (!key->initialized || key->fd) \
> +		trace_printf_key_fl(TRACE_CONTEXT, __LINE__, key, __VA_ARGS__) \
> +} while(0)
> +
>  
>  #define trace_argv_printf(argv, ...) \
>  	trace_argv_printf_fl(TRACE_CONTEXT, __LINE__, argv, __VA_ARGS__)
> 
> 
> (OK, that's got an OR, but if we are really pinching instructions we
> could obviously store a single "I've been initialized and am disabled"
> flag).
I'd really like that.
Show 5 quoted lines
> I don't have an opinion one way or the other on these particular
> messages, but in general I'd like to see _more_ tracing in Git, not
> less. I've often traced Git with a debugger or other tools like perf,
> but there's real value in the author of code annotating high-level
> logical events.
Yes, I like that idea, too: to add more tracing.

Thanks, Dscho

Previous: Jeff KingNext: Ben Peart
Message 14 of 21 in “fsmonitor fixes”
  1. 0/4 fsmonitor fixesAlex Vandiver, Oct 20, 2017
  2. 2/4 fsmonitor: Don't bother pretty-printing JSON from watchmanAlex Vandiver, Oct 20, 2017
  3. Johannes SchindelinOct 20, 2017
  4. Ben PeartOct 20, 2017
  5. Alex VandiverOct 26, 2017
  6. Johannes SchindelinOct 27, 2017
  7. 3/4 fsmonitor: Document GIT_TRACE_FSMONITORAlex Vandiver, Oct 20, 2017
  8. Ben PeartOct 20, 2017
  9. 4/4 fsmonitor: Delay updating state until after split index is mergedAlex Vandiver, Oct 20, 2017
  10. Johannes SchindelinOct 20, 2017
  11. Ben PeartOct 20, 2017
  12. Junio C HamanoOct 21, 2017
  13. Jeff KingOct 21, 2017
  14. Johannes SchindelinOct 23, 2017
  15. Ben PeartOct 23, 2017
  16. Alex VandiverOct 26, 2017
  17. 1/4 fsmonitor: Watch, and ask about, the top of the repo, not the CWDAlex Vandiver, Oct 20, 2017
  18. Johannes SchindelinOct 20, 2017
  19. Alex VandiverOct 26, 2017
  20. Johannes SchindelinOct 27, 2017
  21. Johannes SchindelinOct 20, 2017

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.