bpf.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Andrii Nakryiko <andrii.nakryiko@gmail.com>
To: Ilya Leoshkevich <iii@linux.ibm.com>
Cc: Alexei Starovoitov <ast@kernel.org>,
	Daniel Borkmann <daniel@iogearbox.net>,
	Andrii Nakryiko <andrii@kernel.org>, Yonghong Song <yhs@fb.com>,
	Arnaldo Carvalho de Melo <acme@redhat.com>,
	bpf <bpf@vger.kernel.org>,
	Heiko Carstens <heiko.carstens@de.ibm.com>,
	Vasily Gorbik <gor@linux.ibm.com>
Subject: Re: [PATCH RFC 0/6] Add BTF_KIND_FLOAT support
Date: Wed, 10 Feb 2021 17:31:13 -0800	[thread overview]
Message-ID: <CAEf4BzaUe4_yJMPS2QR0tsCn2av=tMzNrP3S94fKw-Cd77w5SQ@mail.gmail.com> (raw)
In-Reply-To: <20210210030317.78820-1-iii@linux.ibm.com>

On Tue, Feb 9, 2021 at 7:03 PM Ilya Leoshkevich <iii@linux.ibm.com> wrote:
>
> Some BPF programs compiled on s390 fail to load, because s390
> arch-specific linux headers contain float and double types.
>
> Introduce support for such types by representing them using the new
> BTF_KIND_FLOAT. This series deals with libbpf, bpftool, in-kernel BTF
> parser as well as selftests and documentation.
>
> There are also pahole and LLVM parts:
>
> * https://github.com/iii-i/dwarves/commit/btf-kind-float-v1
> * https://reviews.llvm.org/D83289
>
> but they should go in after the libbpf part is integrated.
>
> There is also an open question: should we go forward with
> BTF_KIND_FLOAT, or should this be merely a BTF_KIND_INT encoding? The
> argument for BTF_KIND_FLOAT is that it's more explicit and therefore
> less prone to unintentional mixups. The argument for BTF_KIND_INT
> encoding is that there would be less code and the overall integration
> process would be simpler.

Less code is not the only or main motivation for representing floats
as just an encoding of BTF_KIND_INT. I think float is not sufficiently
different from bool and int to warrant its own type (kind). And BTF,
in general, is pretty good about having only essential types (kinds).
Float/double is a primitive type, just like bool or char/int/long,
supported by the compiler natively and it represents some indivisible
arrangement of bits in memory.

Surely, there are some semantic differences in how compiler and CPU
are handling such types, but that's none of type system's concern.
E.g., ABI calling conventions dictating which registers or stack
locations arguments go into are not described by BTF. Also, consider
bool. You can treat it as a single byte integer, but it's not just
that: compiler treats it specially (with the 0 and 1 regularization,
when converting to integer representation). Similarly for floats, code
generated for use of floats will be different from integers, but
that's none of type system's concerns. But when using BTF types to
describe memory contents, bool, int, and float are exactly the same
thing: a set of bytes in memory, which are up to interpretation. And
that's why it leads to less code and overall simpler integration.

The only place I can think of where BPF verifier would care about
float vs int, is when processing function signature, because (at least
for some architectures) float will be put in different registers than
non-floats. But BPF verifier can easily distinguish that case by
checking the encoding, so I don't buy the "unintentional mixups"
argument.


>
> Ilya Leoshkevich (6):
>   bpf: Add BTF_KIND_FLOAT to uapi
>   libbpf: Add BTF_KIND_FLOAT support
>   tools/bpftool: Add BTF_KIND_FLOAT support
>   bpf: Add BTF_KIND_FLOAT support
>   selftest/bpf: Add BTF_KIND_FLOAT tests
>   bpf: Document BTF_KIND_FLOAT in btf.rst
>
>  Documentation/bpf/btf.rst                    |  19 ++-
>  include/uapi/linux/btf.h                     |  10 +-
>  kernel/bpf/btf.c                             | 101 ++++++++++++-
>  tools/bpf/bpftool/btf.c                      |  13 ++
>  tools/bpf/bpftool/btf_dumper.c               |   1 +
>  tools/include/uapi/linux/btf.h               |  10 +-
>  tools/lib/bpf/btf.c                          |  85 ++++++++---
>  tools/lib/bpf/btf.h                          |  13 ++
>  tools/lib/bpf/btf_dump.c                     |   4 +
>  tools/lib/bpf/libbpf.c                       |  32 +++-
>  tools/lib/bpf/libbpf.map                     |   5 +
>  tools/lib/bpf/libbpf_internal.h              |   4 +
>  tools/testing/selftests/bpf/btf_helpers.c    |   4 +
>  tools/testing/selftests/bpf/prog_tests/btf.c | 145 +++++++++++++++++++
>  tools/testing/selftests/bpf/test_btf.h       |   5 +
>  15 files changed, 418 insertions(+), 33 deletions(-)
>
> --
> 2.29.2
>

      parent reply	other threads:[~2021-02-11  1:32 UTC|newest]

Thread overview: 13+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-02-10  3:03 [PATCH RFC 0/6] Add BTF_KIND_FLOAT support Ilya Leoshkevich
2021-02-10  3:03 ` [PATCH RFC 1/6] bpf: Add BTF_KIND_FLOAT to uapi Ilya Leoshkevich
2021-02-11  0:19   ` Andrii Nakryiko
2021-02-11 21:26     ` Ilya Leoshkevich
2021-02-11 23:11       ` Alexei Starovoitov
2021-02-10  3:03 ` [PATCH RFC 2/6] libbpf: Add BTF_KIND_FLOAT support Ilya Leoshkevich
2021-02-11  0:15   ` Andrii Nakryiko
2021-02-10  3:03 ` [PATCH RFC 3/6] tools/bpftool: " Ilya Leoshkevich
2021-02-10  3:03 ` [PATCH RFC 4/6] bpf: " Ilya Leoshkevich
2021-02-11  0:20   ` Andrii Nakryiko
2021-02-10  3:03 ` [PATCH RFC 5/6] selftest/bpf: Add BTF_KIND_FLOAT tests Ilya Leoshkevich
2021-02-10  3:03 ` [PATCH RFC 6/6] bpf: Document BTF_KIND_FLOAT in btf.rst Ilya Leoshkevich
2021-02-11  1:31 ` Andrii Nakryiko [this message]

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='CAEf4BzaUe4_yJMPS2QR0tsCn2av=tMzNrP3S94fKw-Cd77w5SQ@mail.gmail.com' \
    --to=andrii.nakryiko@gmail.com \
    --cc=acme@redhat.com \
    --cc=andrii@kernel.org \
    --cc=ast@kernel.org \
    --cc=bpf@vger.kernel.org \
    --cc=daniel@iogearbox.net \
    --cc=gor@linux.ibm.com \
    --cc=heiko.carstens@de.ibm.com \
    --cc=iii@linux.ibm.com \
    --cc=yhs@fb.com \
    /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;
as well as URLs for NNTP newsgroup(s).