* Change default cpu version from v1 to v3 in llvm20
@ 2024-09-03 4:10 Yonghong Song
2024-09-03 6:52 ` Daniel Borkmann
0 siblings, 1 reply; 6+ messages in thread
From: Yonghong Song @ 2024-09-03 4:10 UTC (permalink / raw)
To: Alexei Starovoitov, Daniel Borkmann, Andrii Nakryiko,
Martin KaFai Lau, bpf
Hi,
Suggested by Alexei, I put a llvm20 diff to make cpu=v3 as the default
cpu version:
https://github.com/llvm/llvm-project/pull/107008
cpu=v3 has been introduced in llvm9 (2019 H2) and the kernel cpu=v3
support should be available around the same time although I
cannot remember the exact kernel version.
There are two motivation to move cpu version default from v1 to v3.
First, to resolve correct usage of code like
(void)__sync_fetch_and_add(&ptr, value);
In cpu v1/v2, the above insn generates locked add insn, and
for cpu >= v3, the above insn generates atomic_fetch_add insn.
The atomic_fetch_add insn is the correct way for the eventual
insn for arm64. Otherwise, with locked add insn in arm64,
proper barrier will be missing and incorrect results may
be generated.
Second, cpu=v3 should have better performance than cpu=v1
in most cases. In Meta, several years ago, we have conducted
performance evaluation to compare v1 and v3 for major bpf
programs running in our platform and we concluded v3 is
better than v1 in most cases and in other rare cases v1 and v3
have the same performance. So moving to v3 can help
performance too.
If in rare cases, e.g. really old kernels, v1/v2 is the only
option, then users can set -mcpu=v1 explicitly.
Please let us know if you still have some concerns in your
setup w.r.t. cpu v1->v3 transition.
Thanks,
Yonghong
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: Change default cpu version from v1 to v3 in llvm20
2024-09-03 4:10 Change default cpu version from v1 to v3 in llvm20 Yonghong Song
@ 2024-09-03 6:52 ` Daniel Borkmann
2024-09-03 14:50 ` Yonghong Song
0 siblings, 1 reply; 6+ messages in thread
From: Daniel Borkmann @ 2024-09-03 6:52 UTC (permalink / raw)
To: Yonghong Song, Alexei Starovoitov, Andrii Nakryiko,
Martin KaFai Lau, bpf
On 9/3/24 6:10 AM, Yonghong Song wrote:
> Hi,
>
> Suggested by Alexei, I put a llvm20 diff to make cpu=v3 as the default
> cpu version:
> https://github.com/llvm/llvm-project/pull/107008
>
> cpu=v3 has been introduced in llvm9 (2019 H2) and the kernel cpu=v3
> support should be available around the same time although I
> cannot remember the exact kernel version.
>
> There are two motivation to move cpu version default from v1 to v3.
>
> First, to resolve correct usage of code like
> (void)__sync_fetch_and_add(&ptr, value);
> In cpu v1/v2, the above insn generates locked add insn, and
> for cpu >= v3, the above insn generates atomic_fetch_add insn.
> The atomic_fetch_add insn is the correct way for the eventual
> insn for arm64. Otherwise, with locked add insn in arm64,
> proper barrier will be missing and incorrect results may
> be generated.
>
> Second, cpu=v3 should have better performance than cpu=v1
> in most cases. In Meta, several years ago, we have conducted
> performance evaluation to compare v1 and v3 for major bpf
> programs running in our platform and we concluded v3 is
> better than v1 in most cases and in other rare cases v1 and v3
> have the same performance. So moving to v3 can help
> performance too.
>
> If in rare cases, e.g. really old kernels, v1/v2 is the only
> option, then users can set -mcpu=v1 explicitly.
>
> Please let us know if you still have some concerns in your
> setup w.r.t. cpu v1->v3 transition.
Sounds good to me! Is there a place somewhere in LLVM where this
can be documented for the BPF backend (along with the various
extensions), so that developers can find sth in the official LLVM
docs if they search the web? I see that riscv and some other archs
have documentation under [0] which seems to get deployed under [1].
[0] https://github.com/llvm/llvm-project/tree/main/llvm/docs
[1] https://llvm.org/docs/RISCV/RISCVVectorExtension.html
Thanks,
Daniel
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: Change default cpu version from v1 to v3 in llvm20
2024-09-03 6:52 ` Daniel Borkmann
@ 2024-09-03 14:50 ` Yonghong Song
2024-09-03 18:35 ` Daniel Borkmann
0 siblings, 1 reply; 6+ messages in thread
From: Yonghong Song @ 2024-09-03 14:50 UTC (permalink / raw)
To: Daniel Borkmann, Alexei Starovoitov, Andrii Nakryiko,
Martin KaFai Lau, bpf
On 9/2/24 11:52 PM, Daniel Borkmann wrote:
> On 9/3/24 6:10 AM, Yonghong Song wrote:
>> Hi,
>>
>> Suggested by Alexei, I put a llvm20 diff to make cpu=v3 as the default
>> cpu version:
>> https://github.com/llvm/llvm-project/pull/107008
>>
>> cpu=v3 has been introduced in llvm9 (2019 H2) and the kernel cpu=v3
>> support should be available around the same time although I
>> cannot remember the exact kernel version.
>>
>> There are two motivation to move cpu version default from v1 to v3.
>>
>> First, to resolve correct usage of code like
>> (void)__sync_fetch_and_add(&ptr, value);
>> In cpu v1/v2, the above insn generates locked add insn, and
>> for cpu >= v3, the above insn generates atomic_fetch_add insn.
>> The atomic_fetch_add insn is the correct way for the eventual
>> insn for arm64. Otherwise, with locked add insn in arm64,
>> proper barrier will be missing and incorrect results may
>> be generated.
>>
>> Second, cpu=v3 should have better performance than cpu=v1
>> in most cases. In Meta, several years ago, we have conducted
>> performance evaluation to compare v1 and v3 for major bpf
>> programs running in our platform and we concluded v3 is
>> better than v1 in most cases and in other rare cases v1 and v3
>> have the same performance. So moving to v3 can help
>> performance too.
>>
>> If in rare cases, e.g. really old kernels, v1/v2 is the only
>> option, then users can set -mcpu=v1 explicitly.
>>
>> Please let us know if you still have some concerns in your
>> setup w.r.t. cpu v1->v3 transition.
>
> Sounds good to me! Is there a place somewhere in LLVM where this
> can be documented for the BPF backend (along with the various
> extensions), so that developers can find sth in the official LLVM
> docs if they search the web? I see that riscv and some other archs
> have documentation under [0] which seems to get deployed under [1].
Thanks Daniel.
Trying to have llvm doc for BPF backend has been discussed
before. IIRC, Fangrui Song suggested this when we tried to
add BPF reloc documents in Documentation/bpf/llvm_reloc.rst.
Eventually we added llvm_reloc.rst to kernel since this doc
is mostly interesting for kernel/bpf folks. We should add
an entry in bpf_devel_QA.rst to mention that default cpu
version change from v1 to v3.
Not sure whether we should have the same doc in
llvm.org/docs/. Let me discuss with other folks on this.
>
> [0] https://github.com/llvm/llvm-project/tree/main/llvm/docs
> [1] https://llvm.org/docs/RISCV/RISCVVectorExtension.html
>
> Thanks,
> Daniel
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: Change default cpu version from v1 to v3 in llvm20
2024-09-03 14:50 ` Yonghong Song
@ 2024-09-03 18:35 ` Daniel Borkmann
2024-09-03 23:06 ` Yonghong Song
0 siblings, 1 reply; 6+ messages in thread
From: Daniel Borkmann @ 2024-09-03 18:35 UTC (permalink / raw)
To: Yonghong Song, Alexei Starovoitov, Andrii Nakryiko,
Martin KaFai Lau, bpf
On 9/3/24 4:50 PM, Yonghong Song wrote:
> On 9/2/24 11:52 PM, Daniel Borkmann wrote:
>> On 9/3/24 6:10 AM, Yonghong Song wrote:
>>> Hi,
>>>
>>> Suggested by Alexei, I put a llvm20 diff to make cpu=v3 as the default
>>> cpu version:
>>> https://github.com/llvm/llvm-project/pull/107008
>>>
>>> cpu=v3 has been introduced in llvm9 (2019 H2) and the kernel cpu=v3
>>> support should be available around the same time although I
>>> cannot remember the exact kernel version.
>>>
>>> There are two motivation to move cpu version default from v1 to v3.
>>>
>>> First, to resolve correct usage of code like
>>> (void)__sync_fetch_and_add(&ptr, value);
>>> In cpu v1/v2, the above insn generates locked add insn, and
>>> for cpu >= v3, the above insn generates atomic_fetch_add insn.
>>> The atomic_fetch_add insn is the correct way for the eventual
>>> insn for arm64. Otherwise, with locked add insn in arm64,
>>> proper barrier will be missing and incorrect results may
>>> be generated.
>>>
>>> Second, cpu=v3 should have better performance than cpu=v1
>>> in most cases. In Meta, several years ago, we have conducted
>>> performance evaluation to compare v1 and v3 for major bpf
>>> programs running in our platform and we concluded v3 is
>>> better than v1 in most cases and in other rare cases v1 and v3
>>> have the same performance. So moving to v3 can help
>>> performance too.
>>>
>>> If in rare cases, e.g. really old kernels, v1/v2 is the only
>>> option, then users can set -mcpu=v1 explicitly.
>>>
>>> Please let us know if you still have some concerns in your
>>> setup w.r.t. cpu v1->v3 transition.
>>
>> Sounds good to me! Is there a place somewhere in LLVM where this
>> can be documented for the BPF backend (along with the various
>> extensions), so that developers can find sth in the official LLVM
>> docs if they search the web? I see that riscv and some other archs
>> have documentation under [0] which seems to get deployed under [1].
>
> Thanks Daniel.
>
> Trying to have llvm doc for BPF backend has been discussed
> before. IIRC, Fangrui Song suggested this when we tried to
> add BPF reloc documents in Documentation/bpf/llvm_reloc.rst.
> Eventually we added llvm_reloc.rst to kernel since this doc
> is mostly interesting for kernel/bpf folks. We should add
> an entry in bpf_devel_QA.rst to mention that default cpu
> version change from v1 to v3.
>
> Not sure whether we should have the same doc in
> llvm.org/docs/. Let me discuss with other folks on this.
I was mostly thinking that not everyone might be looking into
kernel docs (say, eBPF for Windows folks using LLVM), and at
least on gcc docs/wiki you'll find information & quirks about
gcc-bpf backend [2].
[2] https://gcc.gnu.org/wiki/BPFBackEnd
>> [0] https://github.com/llvm/llvm-project/tree/main/llvm/docs
>> [1] https://llvm.org/docs/RISCV/RISCVVectorExtension.html
>>
>> Thanks,
>> Daniel
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: Change default cpu version from v1 to v3 in llvm20
2024-09-03 18:35 ` Daniel Borkmann
@ 2024-09-03 23:06 ` Yonghong Song
2024-09-04 8:00 ` Jose E. Marchesi
0 siblings, 1 reply; 6+ messages in thread
From: Yonghong Song @ 2024-09-03 23:06 UTC (permalink / raw)
To: Daniel Borkmann, Alexei Starovoitov, Andrii Nakryiko,
Martin KaFai Lau, bpf
On 9/3/24 11:35 AM, Daniel Borkmann wrote:
> On 9/3/24 4:50 PM, Yonghong Song wrote:
>> On 9/2/24 11:52 PM, Daniel Borkmann wrote:
>>> On 9/3/24 6:10 AM, Yonghong Song wrote:
>>>> Hi,
>>>>
>>>> Suggested by Alexei, I put a llvm20 diff to make cpu=v3 as the default
>>>> cpu version:
>>>> https://github.com/llvm/llvm-project/pull/107008
>>>>
>>>> cpu=v3 has been introduced in llvm9 (2019 H2) and the kernel cpu=v3
>>>> support should be available around the same time although I
>>>> cannot remember the exact kernel version.
>>>>
>>>> There are two motivation to move cpu version default from v1 to v3.
>>>>
>>>> First, to resolve correct usage of code like
>>>> (void)__sync_fetch_and_add(&ptr, value);
>>>> In cpu v1/v2, the above insn generates locked add insn, and
>>>> for cpu >= v3, the above insn generates atomic_fetch_add insn.
>>>> The atomic_fetch_add insn is the correct way for the eventual
>>>> insn for arm64. Otherwise, with locked add insn in arm64,
>>>> proper barrier will be missing and incorrect results may
>>>> be generated.
>>>>
>>>> Second, cpu=v3 should have better performance than cpu=v1
>>>> in most cases. In Meta, several years ago, we have conducted
>>>> performance evaluation to compare v1 and v3 for major bpf
>>>> programs running in our platform and we concluded v3 is
>>>> better than v1 in most cases and in other rare cases v1 and v3
>>>> have the same performance. So moving to v3 can help
>>>> performance too.
>>>>
>>>> If in rare cases, e.g. really old kernels, v1/v2 is the only
>>>> option, then users can set -mcpu=v1 explicitly.
>>>>
>>>> Please let us know if you still have some concerns in your
>>>> setup w.r.t. cpu v1->v3 transition.
>>>
>>> Sounds good to me! Is there a place somewhere in LLVM where this
>>> can be documented for the BPF backend (along with the various
>>> extensions), so that developers can find sth in the official LLVM
>>> docs if they search the web? I see that riscv and some other archs
>>> have documentation under [0] which seems to get deployed under [1].
>>
>> Thanks Daniel.
>>
>> Trying to have llvm doc for BPF backend has been discussed
>> before. IIRC, Fangrui Song suggested this when we tried to
>> add BPF reloc documents in Documentation/bpf/llvm_reloc.rst.
>> Eventually we added llvm_reloc.rst to kernel since this doc
>> is mostly interesting for kernel/bpf folks. We should add
>> an entry in bpf_devel_QA.rst to mention that default cpu
>> version change from v1 to v3.
>>
>> Not sure whether we should have the same doc in
>> llvm.org/docs/. Let me discuss with other folks on this.
>
> I was mostly thinking that not everyone might be looking into
> kernel docs (say, eBPF for Windows folks using LLVM), and at
> least on gcc docs/wiki you'll find information & quirks about
> gcc-bpf backend [2].
>
> [2] https://gcc.gnu.org/wiki/BPFBackEnd
Thanks, Daniel. Eduard and I will look into this.
Yonghong
>
>>> [0] https://github.com/llvm/llvm-project/tree/main/llvm/docs
>>> [1] https://llvm.org/docs/RISCV/RISCVVectorExtension.html
>>>
>>> Thanks,
>>> Daniel
>
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: Change default cpu version from v1 to v3 in llvm20
2024-09-03 23:06 ` Yonghong Song
@ 2024-09-04 8:00 ` Jose E. Marchesi
0 siblings, 0 replies; 6+ messages in thread
From: Jose E. Marchesi @ 2024-09-04 8:00 UTC (permalink / raw)
To: Yonghong Song
Cc: Daniel Borkmann, Alexei Starovoitov, Andrii Nakryiko,
Martin KaFai Lau, bpf
> On 9/3/24 11:35 AM, Daniel Borkmann wrote:
>> On 9/3/24 4:50 PM, Yonghong Song wrote:
>>> On 9/2/24 11:52 PM, Daniel Borkmann wrote:
>>>> On 9/3/24 6:10 AM, Yonghong Song wrote:
>>>>> Hi,
>>>>>
>>>>> Suggested by Alexei, I put a llvm20 diff to make cpu=v3 as the default
>>>>> cpu version:
>>>>> https://github.com/llvm/llvm-project/pull/107008
>>>>>
>>>>> cpu=v3 has been introduced in llvm9 (2019 H2) and the kernel cpu=v3
>>>>> support should be available around the same time although I
>>>>> cannot remember the exact kernel version.
>>>>>
>>>>> There are two motivation to move cpu version default from v1 to v3.
>>>>>
>>>>> First, to resolve correct usage of code like
>>>>> (void)__sync_fetch_and_add(&ptr, value);
>>>>> In cpu v1/v2, the above insn generates locked add insn, and
>>>>> for cpu >= v3, the above insn generates atomic_fetch_add insn.
>>>>> The atomic_fetch_add insn is the correct way for the eventual
>>>>> insn for arm64. Otherwise, with locked add insn in arm64,
>>>>> proper barrier will be missing and incorrect results may
>>>>> be generated.
>>>>>
>>>>> Second, cpu=v3 should have better performance than cpu=v1
>>>>> in most cases. In Meta, several years ago, we have conducted
>>>>> performance evaluation to compare v1 and v3 for major bpf
>>>>> programs running in our platform and we concluded v3 is
>>>>> better than v1 in most cases and in other rare cases v1 and v3
>>>>> have the same performance. So moving to v3 can help
>>>>> performance too.
>>>>>
>>>>> If in rare cases, e.g. really old kernels, v1/v2 is the only
>>>>> option, then users can set -mcpu=v1 explicitly.
>>>>>
>>>>> Please let us know if you still have some concerns in your
>>>>> setup w.r.t. cpu v1->v3 transition.
>>>>
>>>> Sounds good to me! Is there a place somewhere in LLVM where this
>>>> can be documented for the BPF backend (along with the various
>>>> extensions), so that developers can find sth in the official LLVM
>>>> docs if they search the web? I see that riscv and some other archs
>>>> have documentation under [0] which seems to get deployed under [1].
>>>
>>> Thanks Daniel.
>>>
>>> Trying to have llvm doc for BPF backend has been discussed
>>> before. IIRC, Fangrui Song suggested this when we tried to
>>> add BPF reloc documents in Documentation/bpf/llvm_reloc.rst.
>>> Eventually we added llvm_reloc.rst to kernel since this doc
>>> is mostly interesting for kernel/bpf folks. We should add
>>> an entry in bpf_devel_QA.rst to mention that default cpu
>>> version change from v1 to v3.
>>>
>>> Not sure whether we should have the same doc in
>>> llvm.org/docs/. Let me discuss with other folks on this.
>>
>> I was mostly thinking that not everyone might be looking into
>> kernel docs (say, eBPF for Windows folks using LLVM), and at
>> least on gcc docs/wiki you'll find information & quirks about
>> gcc-bpf backend [2].
>>
>> [2] https://gcc.gnu.org/wiki/BPFBackEnd
>
> Thanks, Daniel. Eduard and I will look into this.
Note that in GCC we document the BPF extensions (additional compiler
options with their defaults, backend-specific built-ins, etc) in the
compiler's manual, https://gcc.gnu.org/onlinedocs/gcc-14.2.0/gcc/.
The wiki page is mainly for documenting the development and status.
>
> Yonghong
>
>>
>>>> [0] https://github.com/llvm/llvm-project/tree/main/llvm/docs
>>>> [1] https://llvm.org/docs/RISCV/RISCVVectorExtension.html
>>>>
>>>> Thanks,
>>>> Daniel
>>
^ permalink raw reply [flat|nested] 6+ messages in thread
end of thread, other threads:[~2024-09-04 8:01 UTC | newest]
Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-09-03 4:10 Change default cpu version from v1 to v3 in llvm20 Yonghong Song
2024-09-03 6:52 ` Daniel Borkmann
2024-09-03 14:50 ` Yonghong Song
2024-09-03 18:35 ` Daniel Borkmann
2024-09-03 23:06 ` Yonghong Song
2024-09-04 8:00 ` Jose E. Marchesi
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox