[<prev] [next>] [thread-next>] [day] [month] [year] [list]
Message-Id: <20190119180656.24635-1-jakub.kicinski@netronome.com>
Date: Sat, 19 Jan 2019 10:06:44 -0800
From: Jakub Kicinski <jakub.kicinski@...ronome.com>
To: alexei.starovoitov@...il.com, daniel@...earbox.net
Cc: netdev@...r.kernel.org, oss-drivers@...ronome.com, yhs@...com,
Jakub Kicinski <jakub.kicinski@...ronome.com>
Subject: [PATCH bpf-next v4 00/12] bpf: dead code elimination
Hi!
This set adds support for complete removal of dead code.
Patch 3 contains all the code removal logic, patches 2 and 4
additionally optimize branches around and to dead code.
Patches 6 and 7 allow offload JITs to take advantage of the
optimization. After a few small clean ups (8, 9, 10) nfp
support is added (11, 12).
Removing code directly in the verifier makes it easy to adjust
the relevant metadata (line info, subprogram info). JITs for
code store constrained architectures would have hard time
performing such adjustments at JIT level. Removing subprograms
or line info is very hard once BPF core finished the verification.
For user space to perform dead code removal it would have to perform
the execution simulation/analysis similar to what the verifier does.
v3:
- fix uninitilized var warning in GCC 6 (buildbot).
v4:
- simplify the linfo-keeping logic (Yonghong). Instead of
trying to figure out that we are removing first instruction
of a subprogram, just always keep last dead line info, if
first live instruction doesn't have one.
Jakub Kicinski (12):
bpf: change parameters of call/branch offset adjustment
bpf: verifier: hard wire branches to dead code
bpf: verifier: remove dead code
bpf: verifier: remove unconditional branches by 0
selftests: bpf: add tests for dead code removal
bpf: verifier: record original instruction index
bpf: notify offload JITs about optimizations
nfp: bpf: don't use instruction number for jump target
nfp: bpf: split up the skip flag
nfp: bpf: save original program length
nfp: bpf: support optimizing dead branches
nfp: bpf: support removing dead code
drivers/net/ethernet/netronome/nfp/bpf/jit.c | 42 +-
drivers/net/ethernet/netronome/nfp/bpf/main.h | 33 +-
.../net/ethernet/netronome/nfp/bpf/offload.c | 9 +-
.../net/ethernet/netronome/nfp/bpf/verifier.c | 74 +++-
include/linux/bpf.h | 7 +
include/linux/bpf_verifier.h | 6 +
include/linux/filter.h | 1 +
kernel/bpf/core.c | 52 ++-
kernel/bpf/offload.c | 35 ++
kernel/bpf/verifier.c | 250 ++++++++++-
tools/testing/selftests/bpf/test_btf.c | 396 +++++++++++++++++-
tools/testing/selftests/bpf/test_verifier.c | 160 +++++++
12 files changed, 998 insertions(+), 67 deletions(-)
--
2.19.2
Powered by blists - more mailing lists