On Thu, Nov 13, 2025 at 10:02 AM Steven Rostedt <[email protected]> wrote: > > On Thu, 13 Nov 2025 09:48:52 +0800 > Donglin Peng <[email protected]> wrote: > > > I noticed that when funcgraph-args is enabled, it registers > > trace_graph_entry_args > > to replace trace_graph_entry. The only difference is whether a valid > > fregs pointer > > is passed. > > > > To reduce overhead, I propose consolidating the two entry functions. We > > could > > maintain only trace_graph_entry and pass the fregs parameter to graph_entry. > > Within __graph_entry, we can then conditionally record arguments based on > > 'TRACE_GRAPH_ARGS && !!fregs'. > > What overhead are you reducing? Why add a branch statement in a critical > path?
Thanks. During testing, I found that enabling funcgraph-args incurs significant overhead (344ms) compared to other trace options (near-zero). # time echo 1 > options/funcgraph-retaddr real 0m0.000s user 0m0.000s sys 0m0.000s # time echo 1 > options/funcgraph-args real 0m0.344s user 0m0.000s sys 0m0.344s So I thought it may need to be optimized. > > The graph_entry() should not be looking at the flags argument. It's called > by *every function*. Also note, I recently fixed the flags to be per > instance and not global. Which means testing the flags would require > indirection lookups. Thanks, I agree and it indeed introduces extra branch instruction and may introduce more overhead when using indirection lookups. > > -- Steve
