From: Steven Rostedt <rostedt@goodmis.org>
To: linux-kernel@vger.kernel.org, linux-trace-kernel@vger.kernel.org
Cc: Masami Hiramatsu <mhiramat@kernel.org>,
Mark Rutland <mark.rutland@arm.com>,
Mathieu Desnoyers <mathieu.desnoyers@efficios.com>,
Andrew Morton <akpm@linux-foundation.org>,
Alexei Starovoitov <alexei.starovoitov@gmail.com>,
Florent Revest <revest@chromium.org>,
Martin KaFai Lau <martin.lau@linux.dev>,
bpf <bpf@vger.kernel.org>, Sven Schnelle <svens@linux.ibm.com>,
Alexei Starovoitov <ast@kernel.org>, Jiri Olsa <jolsa@kernel.org>,
Arnaldo Carvalho de Melo <acme@kernel.org>,
Daniel Borkmann <daniel@iogearbox.net>,
Alan Maguire <alan.maguire@oracle.com>,
Peter Zijlstra <peterz@infradead.org>,
Thomas Gleixner <tglx@linutronix.de>, Guo Ren <guoren@kernel.org>
Subject: [PATCH v3 23/27] function_graph: Use bitmask to loop on fgraph entry
Date: Mon, 03 Jun 2024 15:07:27 -0400 [thread overview]
Message-ID: <20240603190824.604448781@goodmis.org> (raw)
In-Reply-To: 20240603190704.663840775@goodmis.org
From: "Steven Rostedt (Google)" <rostedt@goodmis.org>
Instead of looping through all the elements of fgraph_array[] to see if
there's an gops attached to one and then calling its gops->func(). Create
a fgraph_array_bitmask that sets bits when an index in the array is
reserved (via the simple lru algorithm). Then only the bits set in this
bitmask needs to be looked at where only elements in the array that have
ops registered need to be looked at.
Note, we do not care about races. If a bit is set before the gops is
assigned, it only wastes time looking at the element and ignoring it (as
it did before this bitmask is added).
Reviewed-by: Masami Hiramatsu (Google) <mhiramat@kernel.org>
Signed-off-by: Steven Rostedt (Google) <rostedt@goodmis.org>
---
kernel/trace/fgraph.c | 8 +++++++-
1 file changed, 7 insertions(+), 1 deletion(-)
diff --git a/kernel/trace/fgraph.c b/kernel/trace/fgraph.c
index 0827b67f746d..4d566a0a741d 100644
--- a/kernel/trace/fgraph.c
+++ b/kernel/trace/fgraph.c
@@ -172,6 +172,7 @@ DEFINE_STATIC_KEY_FALSE(kill_ftrace_graph);
int ftrace_graph_active;
static struct fgraph_ops *fgraph_array[FGRAPH_ARRAY_SIZE];
+static unsigned long fgraph_array_bitmask;
/* LRU index table for fgraph_array */
static int fgraph_lru_table[FGRAPH_ARRAY_SIZE];
@@ -196,6 +197,8 @@ static int fgraph_lru_release_index(int idx)
fgraph_lru_table[fgraph_lru_last] = idx;
fgraph_lru_last = (fgraph_lru_last + 1) % FGRAPH_ARRAY_SIZE;
+
+ clear_bit(idx, &fgraph_array_bitmask);
return 0;
}
@@ -210,6 +213,8 @@ static int fgraph_lru_alloc_index(void)
fgraph_lru_table[fgraph_lru_next] = -1;
fgraph_lru_next = (fgraph_lru_next + 1) % FGRAPH_ARRAY_SIZE;
+
+ set_bit(idx, &fgraph_array_bitmask);
return idx;
}
@@ -631,7 +636,8 @@ int function_graph_enter(unsigned long ret, unsigned long func,
if (offset < 0)
goto out;
- for (i = 0; i < FGRAPH_ARRAY_SIZE; i++) {
+ for_each_set_bit(i, &fgraph_array_bitmask,
+ sizeof(fgraph_array_bitmask) * BITS_PER_BYTE) {
struct fgraph_ops *gops = fgraph_array[i];
int save_curr_ret_stack;
--
2.43.0
next prev parent reply other threads:[~2024-06-03 19:07 UTC|newest]
Thread overview: 37+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-06-03 19:07 [PATCH v3 00/27] function_graph: Allow multiple users for function graph tracing Steven Rostedt
2024-06-03 19:07 ` [PATCH v3 01/27] function_graph: Convert ret_stack to a series of longs Steven Rostedt
2024-06-03 19:07 ` [PATCH v3 02/27] fgraph: Use BUILD_BUG_ON() to make sure we have structures divisible by long Steven Rostedt
2024-06-03 19:07 ` [PATCH v3 03/27] function_graph: Add an array structure that will allow multiple callbacks Steven Rostedt
2024-06-03 19:07 ` [PATCH v3 04/27] function_graph: Allow multiple users to attach to function graph Steven Rostedt
2024-06-03 19:07 ` [PATCH v3 05/27] function_graph: Handle tail calls for stack unwinding Steven Rostedt
2024-06-03 19:07 ` [PATCH v3 06/27] function_graph: Remove logic around ftrace_graph_entry and return Steven Rostedt
2024-06-03 19:07 ` [PATCH v3 07/27] ftrace/function_graph: Pass fgraph_ops to function graph callbacks Steven Rostedt
2024-06-03 19:07 ` [PATCH v3 08/27] ftrace: Allow function_graph tracer to be enabled in instances Steven Rostedt
2024-06-03 19:07 ` [PATCH v3 09/27] ftrace: Allow ftrace startup flags to exist without dynamic ftrace Steven Rostedt
2024-06-03 19:07 ` [PATCH v3 10/27] ftrace: Add subops logic to allow one ops to manage many Steven Rostedt
2024-06-03 19:07 ` [PATCH v3 11/27] ftrace: Allow subops filtering to be modified Steven Rostedt
2024-06-03 19:07 ` [PATCH v3 12/27] function_graph: Have the instances use their own ftrace_ops for filtering Steven Rostedt
2024-06-03 19:07 ` [PATCH v3 13/27] function_graph: Add pid tracing back to function graph tracer Steven Rostedt
2024-06-06 0:08 ` Steven Rostedt
2024-06-03 19:07 ` [PATCH v3 14/27] function_graph: Use a simple LRU for fgraph_array index number Steven Rostedt
2024-06-03 19:07 ` [PATCH v3 15/27] function_graph: Add "task variables" per task for fgraph_ops Steven Rostedt
2024-06-03 19:07 ` [PATCH v3 16/27] function_graph: Move set_graph_function tests to shadow stack global var Steven Rostedt
2024-06-03 19:07 ` [PATCH v3 17/27] function_graph: Move graph depth stored data " Steven Rostedt
2024-06-03 19:07 ` [PATCH v3 18/27] function_graph: Move graph notrace bit " Steven Rostedt
2024-06-03 19:07 ` [PATCH v3 19/27] function_graph: Implement fgraph_reserve_data() and fgraph_retrieve_data() Steven Rostedt
2024-06-03 19:07 ` [PATCH v3 20/27] function_graph: Add selftest for passing local variables Steven Rostedt
2024-06-03 19:07 ` [PATCH v3 21/27] ftrace: Add multiple fgraph storage selftest Steven Rostedt
2024-06-03 19:07 ` [PATCH v3 22/27] function_graph: Use for_each_set_bit() in __ftrace_return_to_handler() Steven Rostedt
2024-06-03 19:07 ` Steven Rostedt [this message]
2024-06-03 19:07 ` [PATCH v3 24/27] function_graph: Use static_call and branch to optimize entry function Steven Rostedt
2024-06-03 19:07 ` [PATCH v3 25/27] function_graph: Use static_call and branch to optimize return function Steven Rostedt
2024-06-03 19:07 ` [PATCH v3 26/27] selftests/ftrace: Add function_graph tracer to func-filter-pid test Steven Rostedt
2024-06-03 19:07 ` [PATCH v3 27/27] selftests/ftrace: Add fgraph-multi.tc test Steven Rostedt
2024-06-04 12:18 ` [PATCH v3 00/27] function_graph: Allow multiple users for function graph tracing Steven Rostedt
2024-06-04 14:23 ` Masami Hiramatsu
2024-06-04 14:44 ` Mark Rutland
2024-06-04 16:31 ` Steven Rostedt
2024-06-04 17:04 ` Mark Rutland
2024-06-04 18:57 ` Steven Rostedt
2024-06-04 19:18 ` Steven Rostedt
2024-06-05 14:07 ` Mark Rutland
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20240603190824.604448781@goodmis.org \
--to=rostedt@goodmis.org \
--cc=acme@kernel.org \
--cc=akpm@linux-foundation.org \
--cc=alan.maguire@oracle.com \
--cc=alexei.starovoitov@gmail.com \
--cc=ast@kernel.org \
--cc=bpf@vger.kernel.org \
--cc=daniel@iogearbox.net \
--cc=guoren@kernel.org \
--cc=jolsa@kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-trace-kernel@vger.kernel.org \
--cc=mark.rutland@arm.com \
--cc=martin.lau@linux.dev \
--cc=mathieu.desnoyers@efficios.com \
--cc=mhiramat@kernel.org \
--cc=peterz@infradead.org \
--cc=revest@chromium.org \
--cc=svens@linux.ibm.com \
--cc=tglx@linutronix.de \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox