From: Vadim Fedorenko <vadim.fedorenko@linux.dev>
To: Peter Zijlstra <peterz@infradead.org>, Vadim Fedorenko <vadfed@meta.com>
Cc: Borislav Petkov <bp@alien8.de>,
Alexei Starovoitov <ast@kernel.org>,
Daniel Borkmann <daniel@iogearbox.net>,
Andrii Nakryiko <andrii@kernel.org>,
Eduard Zingerman <eddyz87@gmail.com>,
Thomas Gleixner <tglx@linutronix.de>,
Yonghong Song <yonghong.song@linux.dev>,
Mykola Lysenko <mykolal@fb.com>,
x86@kernel.org, bpf@vger.kernel.org,
Martin KaFai Lau <martin.lau@linux.dev>
Subject: Re: [PATCH bpf-next v8 0/4] bpf: add cpu cycles kfuncss
Date: Fri, 22 Nov 2024 07:40:58 -0800 [thread overview]
Message-ID: <5ef82652-25f4-43d4-bad5-f3766aafcc1f@linux.dev> (raw)
In-Reply-To: <20241122113409.GV24774@noisy.programming.kicks-ass.net>
On 22/11/2024 03:34, Peter Zijlstra wrote:
> On Wed, Nov 20, 2024 at 04:08:10PM -0800, Vadim Fedorenko wrote:
>> This patchset adds 2 kfuncs to provide a way to precisely measure the
>> time spent running some code. The first patch provides a way to get cpu
>> cycles counter which is used to feed CLOCK_MONOTONIC_RAW. On x86
>> architecture it is effectively rdtsc_ordered() function while on other
>> architectures it falls back to __arch_get_hw_counter(). The second patch
>> adds a kfunc to convert cpu cycles to nanoseconds using shift/mult
>> constants discovered by kernel. The main use-case for this kfunc is to
>> convert deltas of timestamp counter values into nanoseconds. It is not
>> supposed to get CLOCK_MONOTONIC_RAW values as offset part is skipped.
>> JIT version is done for x86 for now, on other architectures it falls
>> back to slightly simplified version of vdso_calc_ns.
>
> So having now read this. I'm still left wondering why you would want to
> do this.
>
> Is this just debug stuff, for when you're doing a poor man's profile
> run? If it is, why do we care about all the precision or the ns. And why
> aren't you using perf?
>
> Is it something else?
>
> Again, what are you going to do with this information?
We do a lot of benchmarking at scale. We benchmark kernel function as
well as our own BPF programs. We already do it using bpf_ktime_get_ns().
And this patchset optimizes benchmark use-case by removing overhead
created double conversion from tsc to ns in case when we only need delta
value as a result of benchmarks. Another optimization, which has even
better effect, is to remove the overhead of function calls. As you can
see, both helpers are fully inlined for x86, reducing the amount of
instructions from hundreds to single digit number and removing function
calls. The precision comes next, now we can better understand the effect
of fast-exits of some programs, but it's more like micro-benchmarking
and may have less benefits.
next prev parent reply other threads:[~2024-11-22 15:41 UTC|newest]
Thread overview: 19+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-11-21 0:08 [PATCH bpf-next v8 0/4] bpf: add cpu cycles kfuncss Vadim Fedorenko
2024-11-21 0:08 ` [PATCH bpf-next v8 1/4] bpf: add bpf_get_cpu_time_counter kfunc Vadim Fedorenko
2024-11-21 11:32 ` Peter Zijlstra
2024-11-21 14:35 ` Vadim Fedorenko
2024-11-21 15:33 ` Peter Zijlstra
2024-11-21 23:51 ` Andrii Nakryiko
2024-11-21 23:55 ` Vadim Fedorenko
2024-11-21 0:08 ` [PATCH bpf-next v8 2/4] bpf: add bpf_cpu_time_counter_to_ns helper Vadim Fedorenko
2024-11-21 11:31 ` Peter Zijlstra
2024-11-21 0:08 ` [PATCH bpf-next v8 3/4] selftests/bpf: add selftest to check rdtsc jit Vadim Fedorenko
2024-11-21 0:08 ` [PATCH bpf-next v8 4/4] selftests/bpf: add usage example for cpu cycles kfuncs Vadim Fedorenko
2024-11-22 11:34 ` [PATCH bpf-next v8 0/4] bpf: add cpu cycles kfuncss Peter Zijlstra
2024-11-22 15:40 ` Vadim Fedorenko [this message]
2024-11-26 18:12 ` Andrii Nakryiko
2024-11-28 11:27 ` Peter Zijlstra
2024-11-28 11:33 ` Peter Zijlstra
2024-11-28 14:30 ` Vadim Fedorenko
2024-11-28 14:28 ` Vadim Fedorenko
2024-12-02 19:15 ` Andrii Nakryiko
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=5ef82652-25f4-43d4-bad5-f3766aafcc1f@linux.dev \
--to=vadim.fedorenko@linux.dev \
--cc=andrii@kernel.org \
--cc=ast@kernel.org \
--cc=bp@alien8.de \
--cc=bpf@vger.kernel.org \
--cc=daniel@iogearbox.net \
--cc=eddyz87@gmail.com \
--cc=martin.lau@linux.dev \
--cc=mykolal@fb.com \
--cc=peterz@infradead.org \
--cc=tglx@linutronix.de \
--cc=vadfed@meta.com \
--cc=x86@kernel.org \
--cc=yonghong.song@linux.dev \
/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