All of lore.kernel.org
 help / color / mirror / Atom feed
From: Matt Evans <matt@ozlabs.org>
To: Kumar Gala <galak@kernel.crashing.org>
Cc: netdev@vger.kernel.org, linuxppc-dev@lists.ozlabs.org
Subject: Re: [PATCH v2] net: filter: BPF 'JIT' compiler for PPC64
Date: Tue, 19 Jul 2011 17:06:38 +1000	[thread overview]
Message-ID: <4E252CFE.4070408@ozlabs.org> (raw)
In-Reply-To: <51978BAA-10A1-483D-B551-CCC2B69C72EA@kernel.crashing.org>

On 19/07/11 16:59, Kumar Gala wrote:
> 
> On Jul 18, 2011, at 9:13 PM, Matt Evans wrote:
> 
>> An implementation of a code generator for BPF programs to speed up packet
>> filtering on PPC64, inspired by Eric Dumazet's x86-64 version.
>>
>> Filter code is generated as an ABI-compliant function in module_alloc()'d mem
>> with stackframe & prologue/epilogue generated if required (simple filters don't
>> need anything more than an li/blr).  The filter's local variables, M[], live in
>> registers.  Supports all BPF opcodes, although "complicated" loads from negative
>> packet offsets (e.g. SKF_LL_OFF) are not yet supported.
>>
>> There are a couple of further optimisations left for future work; many-pass
>> assembly with branch-reach reduction and a register allocator to push M[]
>> variables into volatile registers would improve the code quality further.
>>
>> This currently supports big-endian 64-bit PowerPC only (but is fairly simple
>> to port to PPC32 or LE!).
>>
>> Enabled in the same way as x86-64:
>>
>> 	echo 1 > /proc/sys/net/core/bpf_jit_enable
>>
>> Or, enabled with extra debug output:
>>
>> 	echo 2 > /proc/sys/net/core/bpf_jit_enable
>>
>> Signed-off-by: Matt Evans <matt@ozlabs.org>
>> ---
>>
>> V2: Removed some cut/paste woe in setting SEEN_X even on writes.
>>    Merci for le review, Eric!
>>
>> arch/powerpc/Kconfig                  |    1 +
>> arch/powerpc/Makefile                 |    3 +-
>> arch/powerpc/include/asm/ppc-opcode.h |   40 ++
>> arch/powerpc/net/Makefile             |    4 +
>> arch/powerpc/net/bpf_jit.S            |  138 +++++++
> 
> can we rename to bpf_jit_64.S, since this doesn't work on PPC32.
> 
>> arch/powerpc/net/bpf_jit.h            |  227 +++++++++++
>> arch/powerpc/net/bpf_jit_comp.c       |  690 +++++++++++++++++++++++++++++++++
> 
> same here, or split between bpf_jit_comp.c (shared between ppc32 & ppc64) and
> bpf_jit_comp_64.c

A reasonable suggestion -- bpf_jit_64.S certainly.  I think it may not be worth
splitting bpf_jit_comp.c until we support both tho?  (I'm thinking
bpf_jit_comp_{32,64}.c would just house the stackframe generation code which is
the main difference, plus compile-time switched macros for the odd LD vs LWZ.)

Sorry it's not 32bit-friendly just yet (I knew you'd ask, hehe), I've postponed
that for when I get a mo :-)

Cheers,


Matt

WARNING: multiple messages have this Message-ID (diff)
From: Matt Evans <matt@ozlabs.org>
To: Kumar Gala <galak@kernel.crashing.org>
Cc: linuxppc-dev@lists.ozlabs.org, netdev@vger.kernel.org
Subject: Re: [PATCH v2] net: filter: BPF 'JIT' compiler for PPC64
Date: Tue, 19 Jul 2011 17:06:38 +1000	[thread overview]
Message-ID: <4E252CFE.4070408@ozlabs.org> (raw)
In-Reply-To: <51978BAA-10A1-483D-B551-CCC2B69C72EA@kernel.crashing.org>

On 19/07/11 16:59, Kumar Gala wrote:
> 
> On Jul 18, 2011, at 9:13 PM, Matt Evans wrote:
> 
>> An implementation of a code generator for BPF programs to speed up packet
>> filtering on PPC64, inspired by Eric Dumazet's x86-64 version.
>>
>> Filter code is generated as an ABI-compliant function in module_alloc()'d mem
>> with stackframe & prologue/epilogue generated if required (simple filters don't
>> need anything more than an li/blr).  The filter's local variables, M[], live in
>> registers.  Supports all BPF opcodes, although "complicated" loads from negative
>> packet offsets (e.g. SKF_LL_OFF) are not yet supported.
>>
>> There are a couple of further optimisations left for future work; many-pass
>> assembly with branch-reach reduction and a register allocator to push M[]
>> variables into volatile registers would improve the code quality further.
>>
>> This currently supports big-endian 64-bit PowerPC only (but is fairly simple
>> to port to PPC32 or LE!).
>>
>> Enabled in the same way as x86-64:
>>
>> 	echo 1 > /proc/sys/net/core/bpf_jit_enable
>>
>> Or, enabled with extra debug output:
>>
>> 	echo 2 > /proc/sys/net/core/bpf_jit_enable
>>
>> Signed-off-by: Matt Evans <matt@ozlabs.org>
>> ---
>>
>> V2: Removed some cut/paste woe in setting SEEN_X even on writes.
>>    Merci for le review, Eric!
>>
>> arch/powerpc/Kconfig                  |    1 +
>> arch/powerpc/Makefile                 |    3 +-
>> arch/powerpc/include/asm/ppc-opcode.h |   40 ++
>> arch/powerpc/net/Makefile             |    4 +
>> arch/powerpc/net/bpf_jit.S            |  138 +++++++
> 
> can we rename to bpf_jit_64.S, since this doesn't work on PPC32.
> 
>> arch/powerpc/net/bpf_jit.h            |  227 +++++++++++
>> arch/powerpc/net/bpf_jit_comp.c       |  690 +++++++++++++++++++++++++++++++++
> 
> same here, or split between bpf_jit_comp.c (shared between ppc32 & ppc64) and
> bpf_jit_comp_64.c

A reasonable suggestion -- bpf_jit_64.S certainly.  I think it may not be worth
splitting bpf_jit_comp.c until we support both tho?  (I'm thinking
bpf_jit_comp_{32,64}.c would just house the stackframe generation code which is
the main difference, plus compile-time switched macros for the odd LD vs LWZ.)

Sorry it's not 32bit-friendly just yet (I knew you'd ask, hehe), I've postponed
that for when I get a mo :-)

Cheers,


Matt

  reply	other threads:[~2011-07-19  7:06 UTC|newest]

Thread overview: 30+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2011-07-18  7:50 [PATCH] net: filter: BPF 'JIT' compiler for PPC64 Matt Evans
2011-07-18  8:39 ` Eric Dumazet
2011-07-18 19:42   ` David Miller
2011-07-18 19:42     ` David Miller
2011-07-18 20:05     ` Eric Dumazet
2011-07-18 20:05       ` Eric Dumazet
2011-07-19  1:21     ` Matt Evans
2011-07-19  1:21       ` Matt Evans
2011-07-19  2:13 ` [PATCH v2] " Matt Evans
2011-07-19  6:51   ` Eric Dumazet
2011-07-19  6:51     ` Eric Dumazet
2011-07-19  7:55     ` Benjamin Herrenschmidt
2011-07-19  7:55       ` Benjamin Herrenschmidt
2011-07-19  9:06       ` Eric Dumazet
2011-07-19  9:06         ` Eric Dumazet
2011-07-19  9:22         ` Benjamin Herrenschmidt
2011-07-19  9:22           ` Benjamin Herrenschmidt
2011-07-19  6:59   ` Kumar Gala
2011-07-19  6:59     ` Kumar Gala
2011-07-19  7:06     ` Matt Evans [this message]
2011-07-19  7:06       ` Matt Evans
2011-07-19  7:17       ` Kumar Gala
2011-07-19  7:17         ` Kumar Gala
2011-07-19  7:23         ` Matt Evans
2011-07-19  7:23           ` Matt Evans
2011-07-21  1:51   ` [PATCH v3] " Matt Evans
2011-07-21  5:00     ` Eric Dumazet
2011-07-21  5:00       ` Eric Dumazet
2011-07-21 19:47     ` David Miller
2011-07-21 19:47       ` David Miller

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=4E252CFE.4070408@ozlabs.org \
    --to=matt@ozlabs.org \
    --cc=galak@kernel.crashing.org \
    --cc=linuxppc-dev@lists.ozlabs.org \
    --cc=netdev@vger.kernel.org \
    /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.