From: "Björn Töpel" <bjorn@kernel.org>
To: Andy Chiu <andy.chiu@sifive.com>
Cc: Puranjay Mohan <puranjay12@gmail.com>,
Mark Rutland <mark.rutland@arm.com>,
Paul Walmsley <paul.walmsley@sifive.com>,
Palmer Dabbelt <palmer@dabbelt.com>,
Albert Ou <aou@eecs.berkeley.edu>,
Steven Rostedt <rostedt@goodmis.org>,
Masami Hiramatsu <mhiramat@kernel.org>,
Sami Tolvanen <samitolvanen@google.com>,
Guo Ren <guoren@kernel.org>,
Ley Foon Tan <leyfoon.tan@starfivetech.com>,
Deepak Gupta <debug@rivosinc.com>,
Sia Jee Heng <jeeheng.sia@starfivetech.com>,
Bjorn Topel <bjorn@rivosinc.com>,
Song Shuai <suagrfillet@gmail.com>,
Cl'ement L'eger <cleger@rivosinc.com>,
Al Viro <viro@zeniv.linux.org.uk>,
Jisheng Zhang <jszhang@kernel.org>,
linux-riscv@lists.infradead.org, linux-kernel@vger.kernel.org,
linux-trace-kernel@vger.kernel.org,
Robbin Ehn <rehn@rivosinc.com>,
Brendan Sweeney <brs@rivosinc.com>
Subject: Re: [RFC PATCH] riscv: Implement HAVE_DYNAMIC_FTRACE_WITH_CALL_OPS
Date: Thu, 21 Mar 2024 09:48:27 +0100 [thread overview]
Message-ID: <87msqsotr8.fsf@all.your.base.are.belong.to.us> (raw)
In-Reply-To: <CABgGipWPuvwi43v1+60-=0_MN_q_CD0ZGasxHHVWJ37cig5MmA@mail.gmail.com>
Andy,
Pulling out the A option:
>> > A) Use auipc/jalr, only patch jalr to take us to a common
>> > dispatcher/trampoline
>> >
>> > | <func_trace_target_data_8B> # probably on a data cache-line != func .text to avoid ping-pong
>> > | ...
>> > | func:
>> > | ...make sure ra isn't messed up...
>> > | aupic
>> > | nop <=> jalr # Text patch point -> common_dispatch
>> > | ACTUAL_FUNC
>> > |
>> > | common_dispatch:
>> > | load <func_trace_target_data_8B> based on ra
>> > | jalr
>> > | ...
>> >
>> > The auipc is never touched, and will be overhead. Also, we need a mv to
>> > store ra in a scratch register as well -- like Arm. We'll have two insn
>> > per-caller overhead for a disabled caller.
>
> My patch series takes a similar "in-function dispatch" approach. A
> difference is that the <func_trace_target_data_8B_per_function> is
> embedded within each function entry. I'd like to have it moved to a
> run-time allocated array to reduce total text size.
This is what arm64 has as well. It's a 8B + 1-2 dirt cheap movish like
instructions (save ra, prepare jump with auipc). I think that's a
reasonable overhead.
> Another difference is that my series changes the first instruction to
> "j ACTUAL_FUNC" for the "ftrace disable" case. As long as the
> architecture guarantees the atomicity of the first instruction, then
> we are safe. For example, we are safe if the first instruction could
> only be "mv tmp, ra" or "j ACTUAL_FUNC". And since the loaded address is
> always valid, we can fix "mv + jalr" down so we don't have to
> play with the exception handler trick. The guarantee from arch would
> require ziccif (in RVA22) though, but I think it is the same for us
> (unless with stop_machine). For ziccif, I would rather call that out
> during boot than blindly assume.
I'm maybe biased, but I'd prefer the A) over your version with the
unconditional jump. A) has the overhead of two, I'd say, free
instructions (again "Meten is Weten!" ;-)).
> However, one thing I am not very sure is: do we need a destination
> address in a "per-function" manner? It seems like most of the time the
> destination address can only be ftrace_call, or ftrace_regs_call. If
> the number of destination addresses is very few, then we could
> potentially reduce the size of
> <func_trace_target_data_8B_per_function>.
Yes, we do need a per-function manner. BPF, e.g., uses
dynamically/JIT:ed trampolines/targets.
Björn
_______________________________________________
linux-riscv mailing list
linux-riscv@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-riscv
next prev parent reply other threads:[~2024-03-21 8:48 UTC|newest]
Thread overview: 28+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-03-06 16:59 [RFC PATCH] riscv: Implement HAVE_DYNAMIC_FTRACE_WITH_CALL_OPS Puranjay Mohan
2024-03-06 20:35 ` Alexandre Ghiti
2024-03-06 20:38 ` Alexandre Ghiti
2024-03-07 0:17 ` Puranjay Mohan
2024-03-08 8:48 ` Andy Chiu
2024-03-11 13:56 ` [DMARC Error] " Evgenii Shatokhin
2024-03-07 19:27 ` Björn Töpel
2024-03-07 19:51 ` Puranjay Mohan
2024-03-08 9:18 ` Andy Chiu
2024-03-08 14:13 ` Puranjay Mohan
2024-03-10 1:37 ` Guo Ren
2024-03-08 10:16 ` Björn Töpel
2024-03-08 14:22 ` Puranjay Mohan
2024-03-08 15:15 ` Björn Töpel
2024-03-12 13:42 ` Mark Rutland
2024-03-13 11:23 ` Björn Töpel
2024-03-14 14:16 ` Puranjay Mohan
2024-03-14 15:07 ` Björn Töpel
2024-03-14 20:50 ` Björn Töpel
2024-03-20 16:41 ` Andy Chiu
2024-03-21 8:48 ` Björn Töpel [this message]
2024-03-21 17:39 ` Andy Chiu
2024-03-21 18:10 ` Björn Töpel
2024-03-25 12:50 ` Robbin Ehn
2024-03-20 18:03 ` Mark Rutland
2024-03-21 8:58 ` Björn Töpel
2024-03-21 14:49 ` Steven Rostedt
2024-03-21 20:02 ` Steven Rostedt
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=87msqsotr8.fsf@all.your.base.are.belong.to.us \
--to=bjorn@kernel.org \
--cc=andy.chiu@sifive.com \
--cc=aou@eecs.berkeley.edu \
--cc=bjorn@rivosinc.com \
--cc=brs@rivosinc.com \
--cc=cleger@rivosinc.com \
--cc=debug@rivosinc.com \
--cc=guoren@kernel.org \
--cc=jeeheng.sia@starfivetech.com \
--cc=jszhang@kernel.org \
--cc=leyfoon.tan@starfivetech.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-riscv@lists.infradead.org \
--cc=linux-trace-kernel@vger.kernel.org \
--cc=mark.rutland@arm.com \
--cc=mhiramat@kernel.org \
--cc=palmer@dabbelt.com \
--cc=paul.walmsley@sifive.com \
--cc=puranjay12@gmail.com \
--cc=rehn@rivosinc.com \
--cc=rostedt@goodmis.org \
--cc=samitolvanen@google.com \
--cc=suagrfillet@gmail.com \
--cc=viro@zeniv.linux.org.uk \
/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