Netdev List
 help / color / mirror / Atom feed
* [PATCH bpf-next v5 00/12] bpf: dead code elimination
@ 2019-01-23  6:45 Jakub Kicinski
  2019-01-23  6:45 ` [PATCH bpf-next v5 01/12] bpf: change parameters of call/branch offset adjustment Jakub Kicinski
                   ` (12 more replies)
  0 siblings, 13 replies; 15+ messages in thread
From: Jakub Kicinski @ 2019-01-23  6:45 UTC (permalink / raw)
  To: alexei.starovoitov, daniel
  Cc: yhs, netdev, oss-drivers, kafai, Jakub Kicinski

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.
v5:
 - improve comments (Martin Lau).

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                         | 256 ++++++++++-
 tools/testing/selftests/bpf/test_btf.c        | 396 +++++++++++++++++-
 tools/testing/selftests/bpf/test_verifier.c   | 160 +++++++
 12 files changed, 1004 insertions(+), 67 deletions(-)

-- 
2.19.2


^ permalink raw reply	[flat|nested] 15+ messages in thread
* [PATCH bpf-next v4 00/12] bpf: dead code elimination
@ 2019-01-19 18:06 Jakub Kicinski
  2019-01-19 18:06 ` [PATCH bpf-next v5 12/12] nfp: bpf: support removing dead code Jakub Kicinski
  0 siblings, 1 reply; 15+ messages in thread
From: Jakub Kicinski @ 2019-01-19 18:06 UTC (permalink / raw)
  To: alexei.starovoitov, daniel; +Cc: netdev, oss-drivers, yhs, Jakub Kicinski

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


^ permalink raw reply	[flat|nested] 15+ messages in thread

end of thread, other threads:[~2019-01-24  1:42 UTC | newest]

Thread overview: 15+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2019-01-23  6:45 [PATCH bpf-next v5 00/12] bpf: dead code elimination Jakub Kicinski
2019-01-23  6:45 ` [PATCH bpf-next v5 01/12] bpf: change parameters of call/branch offset adjustment Jakub Kicinski
2019-01-23  6:45 ` [PATCH bpf-next v5 02/12] bpf: verifier: hard wire branches to dead code Jakub Kicinski
2019-01-23  6:45 ` [PATCH bpf-next v5 03/12] bpf: verifier: remove " Jakub Kicinski
2019-01-23  6:45 ` [PATCH bpf-next v5 04/12] bpf: verifier: remove unconditional branches by 0 Jakub Kicinski
2019-01-23  6:45 ` [PATCH bpf-next v5 05/12] selftests: bpf: add tests for dead code removal Jakub Kicinski
2019-01-23  6:45 ` [PATCH bpf-next v5 06/12] bpf: verifier: record original instruction index Jakub Kicinski
2019-01-23  6:45 ` [PATCH bpf-next v5 07/12] bpf: notify offload JITs about optimizations Jakub Kicinski
2019-01-23  6:45 ` [PATCH bpf-next v5 08/12] nfp: bpf: don't use instruction number for jump target Jakub Kicinski
2019-01-23  6:45 ` [PATCH bpf-next v5 09/12] nfp: bpf: split up the skip flag Jakub Kicinski
2019-01-23  6:45 ` [PATCH bpf-next v5 10/12] nfp: bpf: save original program length Jakub Kicinski
2019-01-23  6:45 ` [PATCH bpf-next v5 11/12] nfp: bpf: support optimizing dead branches Jakub Kicinski
2019-01-23  6:45 ` [PATCH bpf-next v5 12/12] nfp: bpf: support removing dead code Jakub Kicinski
2019-01-24  1:42 ` [PATCH bpf-next v5 00/12] bpf: dead code elimination Alexei Starovoitov
  -- strict thread matches above, loose matches on Subject: below --
2019-01-19 18:06 [PATCH bpf-next v4 " Jakub Kicinski
2019-01-19 18:06 ` [PATCH bpf-next v5 12/12] nfp: bpf: support removing dead code Jakub Kicinski

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox