1. 22 6月, 2015 1 次提交
    • M
      MIPS: BPF: Introduce BPF ASM helpers · 266a88e2
      Markos Chandras 提交于
      This commit introduces BPF ASM helpers for MIPS and MIPS64 kernels.
      The purpose of this patch is to twofold:
      
      1) We are now able to handle negative offsets instead of either
      falling back to the interpreter or to simply not do anything and
      bail out.
      
      2) Optimize reads from the packet header instead of calling the C
      helpers
      
      Because of this patch, we are now able to get rid of quite a bit of
      code in the JIT generation process by using MIPS optimized assembly
      code. The new assembly code makes the test_bpf testsuite happy with
      all 60 test passing successfully compared to the previous
      implementation where 2 tests were failing.
      Doing some basic analysis in the results between the old
      implementation and the new one we can obtain the following
      summary running current mainline on an ER8 board (+/- 30us delta is
      ignored to prevent noise from kernel scheduling or IRQ latencies):
      
      Summary: 22 tests are faster, 7 are slower and 47 saw no improvement
      
      with the most notable improvement being the tcpdump tests. The 7 tests
      that seem to be a bit slower is because they all follow the slow path
      (bpf_internal_load_pointer_neg_helper) which is meant to be slow so
      that's not a problem.
      Signed-off-by: NMarkos Chandras <markos.chandras@imgtec.com>
      Cc: netdev@vger.kernel.org
      Cc: "David S. Miller" <davem@davemloft.net>
      Cc: Alexei Starovoitov <ast@plumgrid.com>
      Cc: Daniel Borkmann <dborkman@redhat.com>
      Cc: Hannes Frederic Sowa <hannes@stressinduktion.org>
      Cc: linux-kernel@vger.kernel.org
      Cc: linux-mips@linux-mips.org
      Cc: netdev@vger.kernel.org
      Patchwork: http://patchwork.linux-mips.org/patch/10530/Signed-off-by: NRalf Baechle <ralf@linux-mips.org>
      266a88e2
  2. 30 5月, 2014 1 次提交
    • M
      MIPS: net: Add BPF JIT · c6610de3
      Markos Chandras 提交于
      This adds initial support for BPF-JIT on MIPS
      
      Tested on mips32 LE/BE and mips64 BE/n64 using
      dhcp, ping and various tcpdump filters.
      
      Benchmarking:
      
      Assuming the remote MIPS target uses 192.168.154.181
      as its IP address, and the local host uses 192.168.154.136,
      the following results can be obtained using the following
      tcpdump filter (catches no frames) and a simple
      'time ping -f -c 1000000' command.
      
      [root@(none) ~]# tcpdump -p -n -s 0 -i eth0 net 10.0.0.0/24 -d
      (000) ldh      [12]
      (001) jeq      #0x800           jt 2	jf 8
      (002) ld       [26]
      (003) and      #0xffffff00
      (004) jeq      #0xa000000       jt 16	jf 5
      (005) ld       [30]
      (006) and      #0xffffff00
      (007) jeq      #0xa000000       jt 16	jf 17
      (008) jeq      #0x806           jt 10	jf 9
      (009) jeq      #0x8035          jt 10	jf 17
      (010) ld       [28]
      (011) and      #0xffffff00
      (012) jeq      #0xa000000       jt 16	jf 13
      (013) ld       [38]
      (014) and      #0xffffff00
      (015) jeq      #0xa000000       jt 16	jf 17
      (016) ret      #65535
      
      - BPF-JIT Disabled
      
      real    1m38.005s
      user    0m1.510s
      sys     0m6.710s
      
      - BPF-JIT Enabled
      
      real    1m35.215s
      user    0m1.200s
      sys     0m4.140s
      
      [ralf@linux-mips.org: Resolved conflict.]
      Signed-off-by: NMarkos Chandras <markos.chandras@imgtec.com>
      c6610de3