From: Saket Kumar Bhaskar <skb99@linux.ibm.com>
To: Christophe Leroy <christophe.leroy@csgroup.eu>
Cc: bpf@vger.kernel.org, linuxppc-dev@lists.ozlabs.org,
linux-kernel@vger.kernel.org, ast@kernel.org,
hbathini@linux.ibm.com, andrii@kernel.org, daniel@iogearbox.net,
martin.lau@linux.dev, eddyz87@gmail.com, song@kernel.org,
yonghong.song@linux.dev, john.fastabend@gmail.com,
kpsingh@kernel.org, sdf@fomichev.me, haoluo@google.com,
jolsa@kernel.org, naveen@kernel.org, maddy@linux.ibm.com,
mpe@ellerman.id.au, npiggin@gmail.com
Subject: Re: [PATCH 1/2] powerpc, bpf: Support internal-only MOV instruction to resolve per-CPU addrs
Date: Tue, 29 Apr 2025 22:29:31 +0530 [thread overview]
Message-ID: <aBEFc8YnuGozsdvD@linux.ibm.com> (raw)
In-Reply-To: <ab2a370d-3e71-41f1-9afc-6e2c47db87d9@csgroup.eu>
On Tue, Mar 11, 2025 at 06:38:23PM +0100, Christophe Leroy wrote:
>
>
> Le 11/03/2025 à 17:09, Saket Kumar Bhaskar a écrit :
> > [Vous ne recevez pas souvent de courriers de skb99@linux.ibm.com. Découvrez pourquoi ceci est important à https://aka.ms/LearnAboutSenderIdentification ]
> >
> > With the introduction of commit 7bdbf7446305 ("bpf: add special
> > internal-only MOV instruction to resolve per-CPU addrs"),
> > a new BPF instruction BPF_MOV64_PERCPU_REG has been added to
> > resolve absolute addresses of per-CPU data from their per-CPU
> > offsets. This update requires enabling support for this
> > instruction in the powerpc JIT compiler.
> >
> > As of commit 7a0268fa1a36 ("[PATCH] powerpc/64: per cpu data
> > optimisations"), the per-CPU data offset for the CPU is stored in
> > the paca.
> >
> > To support this BPF instruction in the powerpc JIT, the following
> > powerpc instructions are emitted:
> >
> > mr dst_reg, src_reg //Move src_reg to dst_reg, if src_reg != dst_reg
> > ld tmp1_reg, 48(13) //Load per-CPU data offset from paca(r13) in tmp1_reg.
> > add dst_reg, dst_reg, tmp1_reg //Add the per cpu offset to the dst.
>
> Why not do:
>
> add dst_reg, src_reg, tmp1_reg
>
> instead of a combination of 'mr' and 'add' ?
>
Will do it in v2.
> >
> > To evaluate the performance improvements introduced by this change,
> > the benchmark described in [1] was employed.
> >
> > Before Change:
> > glob-arr-inc : 41.580 ± 0.034M/s
> > arr-inc : 39.592 ± 0.055M/s
> > hash-inc : 25.873 ± 0.012M/s
> >
> > After Change:
> > glob-arr-inc : 42.024 ± 0.049M/s
> > arr-inc : 55.447 ± 0.031M/s
> > hash-inc : 26.565 ± 0.014M/s
> >
> > [1] https://eur01.safelinks.protection.outlook.com/?url=https%3A%2F%2Fgithub.com%2Fanakryiko%2Flinux%2Fcommit%2F8dec900975ef&data=05%7C02%7Cchristophe.leroy%40csgroup.eu%7Ca4bc35a9cb49457fb5cc08dd60b73783%7C8b87af7d86474dc78df45f69a2011bb5%7C0%7C0%7C638773062200197453%7CUnknown%7CTWFpbGZsb3d8eyJFbXB0eU1hcGkiOnRydWUsIlYiOiIwLjAuMDAwMCIsIlAiOiJXaW4zMiIsIkFOIjoiTWFpbCIsIldUIjoyfQ%3D%3D%7C0%7C%7C%7C&sdata=1t2Bc3w6Ye0u33UNEjsSAv114HDOGNXmk1I%2Fxt7K2sc%3D&reserved=0
> >
> > Signed-off-by: Saket Kumar Bhaskar <skb99@linux.ibm.com>
> > ---
> > arch/powerpc/net/bpf_jit_comp.c | 5 +++++
> > arch/powerpc/net/bpf_jit_comp64.c | 8 ++++++++
> > 2 files changed, 13 insertions(+)
> >
> > diff --git a/arch/powerpc/net/bpf_jit_comp.c b/arch/powerpc/net/bpf_jit_comp.c
> > index 2991bb171a9b..3d4bd45a9a22 100644
> > --- a/arch/powerpc/net/bpf_jit_comp.c
> > +++ b/arch/powerpc/net/bpf_jit_comp.c
> > @@ -440,6 +440,11 @@ bool bpf_jit_supports_far_kfunc_call(void)
> > return IS_ENABLED(CONFIG_PPC64);
> > }
> >
> > +bool bpf_jit_supports_percpu_insn(void)
> > +{
> > + return true;
> > +}
> > +
>
> What about PPC32 ?
>
Right now we will enable it for PPC64. So will modify the return statement accordingly.
> > void *arch_alloc_bpf_trampoline(unsigned int size)
> > {
> > return bpf_prog_pack_alloc(size, bpf_jit_fill_ill_insns);
> > diff --git a/arch/powerpc/net/bpf_jit_comp64.c b/arch/powerpc/net/bpf_jit_comp64.c
> > index 233703b06d7c..06f06770ceea 100644
> > --- a/arch/powerpc/net/bpf_jit_comp64.c
> > +++ b/arch/powerpc/net/bpf_jit_comp64.c
> > @@ -679,6 +679,14 @@ int bpf_jit_build_body(struct bpf_prog *fp, u32 *image, u32 *fimage, struct code
> > */
> > case BPF_ALU | BPF_MOV | BPF_X: /* (u32) dst = src */
> > case BPF_ALU64 | BPF_MOV | BPF_X: /* dst = src */
> > + if (insn_is_mov_percpu_addr(&insn[i])) {
> > + if (dst_reg != src_reg)
> > + EMIT(PPC_RAW_MR(dst_reg, src_reg));
>
> Shouldn't be needed except for the non-SMP case maybe.
>
Acknowledged.
> > +#ifdef CONFIG_SMP
> > + EMIT(PPC_RAW_LD(tmp1_reg, _R13, offsetof(struct paca_struct, data_offset)));
> > + EMIT(PPC_RAW_ADD(dst_reg, dst_reg, tmp1_reg));
>
> Can use src_reg as first operand instead of dst_reg
>
Will include this in v2.
> > +#endif
>
> data_offset always exists in paca_struct, please use IS_ENABLED(CONFIG_SMP)
> instead of #ifdef
>
> > + }
> > if (imm == 1) {
> > /* special mov32 for zext */
> > EMIT(PPC_RAW_RLWINM(dst_reg, dst_reg, 0, 0, 31));
> > --
> > 2.43.5
> >
>
Thanks for reviewing Chris.
next prev parent reply other threads:[~2025-04-29 17:00 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-03-11 16:09 [PATCH 0/2] bpf: Inline helper in powerpc JIT Saket Kumar Bhaskar
2025-03-11 16:09 ` [PATCH 1/2] powerpc, bpf: Support internal-only MOV instruction to resolve per-CPU addrs Saket Kumar Bhaskar
2025-03-11 17:38 ` Christophe Leroy
2025-04-29 16:59 ` Saket Kumar Bhaskar [this message]
2025-03-11 16:09 ` [PATCH 2/2] powerpc, bpf: Inline bpf_get_smp_processor_id() Saket Kumar Bhaskar
2025-03-11 17:51 ` Christophe Leroy
2025-04-29 17:02 ` Saket Kumar Bhaskar
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=aBEFc8YnuGozsdvD@linux.ibm.com \
--to=skb99@linux.ibm.com \
--cc=andrii@kernel.org \
--cc=ast@kernel.org \
--cc=bpf@vger.kernel.org \
--cc=christophe.leroy@csgroup.eu \
--cc=daniel@iogearbox.net \
--cc=eddyz87@gmail.com \
--cc=haoluo@google.com \
--cc=hbathini@linux.ibm.com \
--cc=john.fastabend@gmail.com \
--cc=jolsa@kernel.org \
--cc=kpsingh@kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linuxppc-dev@lists.ozlabs.org \
--cc=maddy@linux.ibm.com \
--cc=martin.lau@linux.dev \
--cc=mpe@ellerman.id.au \
--cc=naveen@kernel.org \
--cc=npiggin@gmail.com \
--cc=sdf@fomichev.me \
--cc=song@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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.