From: Daniel Borkmann <daniel@iogearbox.net>
To: Jesper Dangaard Brouer <brouer@redhat.com>,
Eric Dumazet <eric.dumazet@gmail.com>
Cc: Markos Chandras <markos.chandras@imgtec.com>,
bloat <bloat@lists.bufferbloat.net>
Subject: Re: [Bloat] high speed packet and protocol processing in userspace?
Date: Fri, 17 Mar 2017 13:10:32 +0100 [thread overview]
Message-ID: <58CBD238.7030508@iogearbox.net> (raw)
In-Reply-To: <20170317100214.600bc15f@redhat.com>
On 03/17/2017 10:02 AM, Jesper Dangaard Brouer wrote:
> On Thu, 16 Mar 2017 09:27:44 -0700 Eric Dumazet <eric.dumazet@gmail.com> wrote:
>> On Thu, 2017-03-16 at 11:52 -0400, Michael Richardson wrote:
>>> Dave Taht <dave.taht@gmail.com> wrote:
>>> > Is it faster to execute 17 bpf vm instructions on (nearly) every
>>> > packet, or to use all that old stuff?
>>>
>>> My understanding is that there is a JIT for ebpf.
>>
>> ebpf is pretty fast.
>
> To Dave what kind of arch are you running on?
> AFAIK you were running on MIPS right?
> Just checked the kernel tree and I was surprised to see a bpf JIT for mips:
>
> $ ls -1 arch/mips/net/bpf_jit*
> arch/mips/net/bpf_jit_asm.S
> arch/mips/net/bpf_jit.c
> arch/mips/net/bpf_jit.h
>
> But I don't know what state it is in (Markos?)
The JIT is for cBPF right now, but Cavium guys mentioned on netdev
recently that they're going to implement an eBPF JIT for mips 64.
You can see current cBPF and eBPF JITs that are supported by the
kernel via:
$ git grep BPF_JIT | grep select
arch/arm/Kconfig: select HAVE_CBPF_JIT
arch/arm64/Kconfig: select HAVE_EBPF_JIT
arch/mips/Kconfig: select HAVE_CBPF_JIT if !CPU_MICROMIPS
arch/powerpc/Kconfig: select HAVE_CBPF_JIT if !PPC64
arch/powerpc/Kconfig: select HAVE_EBPF_JIT if PPC64
arch/s390/Kconfig: select HAVE_EBPF_JIT if PACK_STACK && HAVE_MARCH_Z196_FEATURES
arch/sparc/Kconfig: select HAVE_CBPF_JIT
arch/x86/Kconfig: select HAVE_EBPF_JIT if X86_64
[...]
> The main point for getting performance out of eBPF is to avoid writing
> a generic framework that need to handle everything. The point is only
> to emit the instructions you need for your specific use-case.
>
> You should think about eBPF as a programmable policy (that we don't
> need/want to add to the kernel code and maintain forever) See this talk:
> https://github.com/iovisor/bpf-docs/blob/master/XDP_Inside_and_Out.pdf
>
>> Note that you can use C to write your parser, then use LLVM to
>> generate native eBPF code.
>
> Yes, that is how I use eBPF, writing restricted-C that LLVM compiles
> into eBPF code. You can look at examples in the kernel git tree under
> samples/bpf/
Another, perhaps more complex project for eBPF in combination with
tc + sched_clsact + cls_bpf in da (direct-action) mode can be found
under: https://github.com/cilium/cilium (see bpf/ folder for the C
code that LLVM compiles down to eBPF if you're curious).
Cheers,
Daniel
next prev parent reply other threads:[~2017-03-17 12:10 UTC|newest]
Thread overview: 9+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-03-16 15:19 Dave Taht
2017-03-16 15:52 ` Michael Richardson
2017-03-16 16:27 ` Eric Dumazet
2017-03-16 16:44 ` Dave Taht
2017-03-16 17:32 ` Michael Richardson
2017-03-16 20:04 ` Dave Taht
2017-03-17 9:02 ` Jesper Dangaard Brouer
2017-03-17 12:10 ` Daniel Borkmann [this message]
2017-03-17 20:11 ` Jesper Dangaard Brouer
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
List information: https://lists.bufferbloat.net/postorius/lists/bloat.lists.bufferbloat.net/
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=58CBD238.7030508@iogearbox.net \
--to=daniel@iogearbox.net \
--cc=bloat@lists.bufferbloat.net \
--cc=brouer@redhat.com \
--cc=eric.dumazet@gmail.com \
--cc=markos.chandras@imgtec.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