提交 06edc59c 编写于 作者: C Christoph Hellwig 提交者: Alexei Starovoitov

bpf, docs: Prune all references to "internal BPF"

The eBPF name has completely taken over from eBPF in general usage for
the actual eBPF representation, or BPF for any general in-kernel use.
Prune all remaining references to "internal BPF".
Signed-off-by: NChristoph Hellwig <hch@lst.de>
Signed-off-by: NAlexei Starovoitov <ast@kernel.org>
Acked-by: NSong Liu <songliubraving@fb.com>
Link: https://lore.kernel.org/bpf/20211119163215.971383-4-hch@lst.de
上级 ccb00292
...@@ -617,7 +617,7 @@ format with similar underlying principles from BPF described in previous ...@@ -617,7 +617,7 @@ format with similar underlying principles from BPF described in previous
paragraphs is being used. However, the instruction set format is modelled paragraphs is being used. However, the instruction set format is modelled
closer to the underlying architecture to mimic native instruction sets, so closer to the underlying architecture to mimic native instruction sets, so
that a better performance can be achieved (more details later). This new that a better performance can be achieved (more details later). This new
ISA is called 'eBPF' or 'internal BPF' interchangeably. (Note: eBPF which ISA is called 'eBPF'. (Note: eBPF which
originates from [e]xtended BPF is not the same as BPF extensions! While originates from [e]xtended BPF is not the same as BPF extensions! While
eBPF is an ISA, BPF extensions date back to classic BPF's 'overloading' eBPF is an ISA, BPF extensions date back to classic BPF's 'overloading'
of BPF_LD | BPF_{B,H,W} | BPF_ABS instruction.) of BPF_LD | BPF_{B,H,W} | BPF_ABS instruction.)
...@@ -690,7 +690,7 @@ Some core changes of the new internal format: ...@@ -690,7 +690,7 @@ Some core changes of the new internal format:
That behavior maps directly to x86_64 and arm64 subregister definition, but That behavior maps directly to x86_64 and arm64 subregister definition, but
makes other JITs more difficult. makes other JITs more difficult.
32-bit architectures run 64-bit internal BPF programs via interpreter. 32-bit architectures run 64-bit eBPF programs via interpreter.
Their JITs may convert BPF programs that only use 32-bit subregisters into Their JITs may convert BPF programs that only use 32-bit subregisters into
native instruction set and let the rest being interpreted. native instruction set and let the rest being interpreted.
...@@ -711,7 +711,7 @@ Some core changes of the new internal format: ...@@ -711,7 +711,7 @@ Some core changes of the new internal format:
- Introduces bpf_call insn and register passing convention for zero overhead - Introduces bpf_call insn and register passing convention for zero overhead
calls from/to other kernel functions: calls from/to other kernel functions:
Before an in-kernel function call, the internal BPF program needs to Before an in-kernel function call, the eBPF program needs to
place function arguments into R1 to R5 registers to satisfy calling place function arguments into R1 to R5 registers to satisfy calling
convention, then the interpreter will take them from registers and pass convention, then the interpreter will take them from registers and pass
to in-kernel function. If R1 - R5 registers are mapped to CPU registers to in-kernel function. If R1 - R5 registers are mapped to CPU registers
...@@ -780,7 +780,7 @@ Some core changes of the new internal format: ...@@ -780,7 +780,7 @@ Some core changes of the new internal format:
... since x86_64 ABI mandates rdi, rsi, rdx, rcx, r8, r9 for argument passing ... since x86_64 ABI mandates rdi, rsi, rdx, rcx, r8, r9 for argument passing
and rbx, r12 - r15 are callee saved. and rbx, r12 - r15 are callee saved.
Then the following internal BPF pseudo-program:: Then the following eBPF pseudo-program::
bpf_mov R6, R1 /* save ctx */ bpf_mov R6, R1 /* save ctx */
bpf_mov R2, 2 bpf_mov R2, 2
...@@ -846,7 +846,7 @@ Some core changes of the new internal format: ...@@ -846,7 +846,7 @@ Some core changes of the new internal format:
bpf_exit bpf_exit
After the call the registers R1-R5 contain junk values and cannot be read. After the call the registers R1-R5 contain junk values and cannot be read.
An in-kernel eBPF verifier is used to validate internal BPF programs. An in-kernel eBPF verifier is used to validate eBPF programs.
Also in the new design, eBPF is limited to 4096 insns, which means that any Also in the new design, eBPF is limited to 4096 insns, which means that any
program will terminate quickly and will only call a fixed number of kernel program will terminate quickly and will only call a fixed number of kernel
...@@ -861,23 +861,23 @@ A program, that is translated internally consists of the following elements:: ...@@ -861,23 +861,23 @@ A program, that is translated internally consists of the following elements::
op:16, jt:8, jf:8, k:32 ==> op:8, dst_reg:4, src_reg:4, off:16, imm:32 op:16, jt:8, jf:8, k:32 ==> op:8, dst_reg:4, src_reg:4, off:16, imm:32
So far 87 internal BPF instructions were implemented. 8-bit 'op' opcode field So far 87 eBPF instructions were implemented. 8-bit 'op' opcode field
has room for new instructions. Some of them may use 16/24/32 byte encoding. New has room for new instructions. Some of them may use 16/24/32 byte encoding. New
instructions must be multiple of 8 bytes to preserve backward compatibility. instructions must be multiple of 8 bytes to preserve backward compatibility.
Internal BPF is a general purpose RISC instruction set. Not every register and eBPF is a general purpose RISC instruction set. Not every register and
every instruction are used during translation from original BPF to new format. every instruction are used during translation from original BPF to new format.
For example, socket filters are not using ``exclusive add`` instruction, but For example, socket filters are not using ``exclusive add`` instruction, but
tracing filters may do to maintain counters of events, for example. Register R9 tracing filters may do to maintain counters of events, for example. Register R9
is not used by socket filters either, but more complex filters may be running is not used by socket filters either, but more complex filters may be running
out of registers and would have to resort to spill/fill to stack. out of registers and would have to resort to spill/fill to stack.
Internal BPF can be used as a generic assembler for last step performance eBPF can be used as a generic assembler for last step performance
optimizations, socket filters and seccomp are using it as assembler. Tracing optimizations, socket filters and seccomp are using it as assembler. Tracing
filters may use it as assembler to generate code from kernel. In kernel usage filters may use it as assembler to generate code from kernel. In kernel usage
may not be bounded by security considerations, since generated internal BPF code may not be bounded by security considerations, since generated eBPF code
may be optimizing internal code path and not being exposed to the user space. may be optimizing internal code path and not being exposed to the user space.
Safety of internal BPF can come from a verifier (TBD). In such use cases as Safety of eBPF can come from a verifier (TBD). In such use cases as
described, it may be used as safe instruction set. described, it may be used as safe instruction set.
Just like the original BPF, the new format runs within a controlled environment, Just like the original BPF, the new format runs within a controlled environment,
...@@ -1675,7 +1675,7 @@ Testing ...@@ -1675,7 +1675,7 @@ Testing
------- -------
Next to the BPF toolchain, the kernel also ships a test module that contains Next to the BPF toolchain, the kernel also ships a test module that contains
various test cases for classic and internal BPF that can be executed against various test cases for classic and eBPF that can be executed against
the BPF interpreter and JIT compiler. It can be found in lib/test_bpf.c and the BPF interpreter and JIT compiler. It can be found in lib/test_bpf.c and
enabled via Kconfig:: enabled via Kconfig::
......
...@@ -163,7 +163,7 @@ static const s8 bpf2a32[][2] = { ...@@ -163,7 +163,7 @@ static const s8 bpf2a32[][2] = {
[BPF_REG_9] = {STACK_OFFSET(BPF_R9_HI), STACK_OFFSET(BPF_R9_LO)}, [BPF_REG_9] = {STACK_OFFSET(BPF_R9_HI), STACK_OFFSET(BPF_R9_LO)},
/* Read only Frame Pointer to access Stack */ /* Read only Frame Pointer to access Stack */
[BPF_REG_FP] = {STACK_OFFSET(BPF_FP_HI), STACK_OFFSET(BPF_FP_LO)}, [BPF_REG_FP] = {STACK_OFFSET(BPF_FP_HI), STACK_OFFSET(BPF_FP_LO)},
/* Temporary Register for internal BPF JIT, can be used /* Temporary Register for BPF JIT, can be used
* for constant blindings and others. * for constant blindings and others.
*/ */
[TMP_REG_1] = {ARM_R7, ARM_R6}, [TMP_REG_1] = {ARM_R7, ARM_R6},
......
...@@ -44,7 +44,7 @@ static const int bpf2a64[] = { ...@@ -44,7 +44,7 @@ static const int bpf2a64[] = {
[BPF_REG_9] = A64_R(22), [BPF_REG_9] = A64_R(22),
/* read-only frame pointer to access stack */ /* read-only frame pointer to access stack */
[BPF_REG_FP] = A64_R(25), [BPF_REG_FP] = A64_R(25),
/* temporary registers for internal BPF JIT */ /* temporary registers for BPF JIT */
[TMP_REG_1] = A64_R(10), [TMP_REG_1] = A64_R(10),
[TMP_REG_2] = A64_R(11), [TMP_REG_2] = A64_R(11),
[TMP_REG_3] = A64_R(12), [TMP_REG_3] = A64_R(12),
......
...@@ -227,7 +227,7 @@ static const int bpf2sparc[] = { ...@@ -227,7 +227,7 @@ static const int bpf2sparc[] = {
[BPF_REG_AX] = G7, [BPF_REG_AX] = G7,
/* temporary register for internal BPF JIT */ /* temporary register for BPF JIT */
[TMP_REG_1] = G1, [TMP_REG_1] = G1,
[TMP_REG_2] = G2, [TMP_REG_2] = G2,
[TMP_REG_3] = G3, [TMP_REG_3] = G3,
......
...@@ -1892,7 +1892,7 @@ static void bpf_prog_select_func(struct bpf_prog *fp) ...@@ -1892,7 +1892,7 @@ static void bpf_prog_select_func(struct bpf_prog *fp)
/** /**
* bpf_prog_select_runtime - select exec runtime for BPF program * bpf_prog_select_runtime - select exec runtime for BPF program
* @fp: bpf_prog populated with internal BPF program * @fp: bpf_prog populated with BPF program
* @err: pointer to error variable * @err: pointer to error variable
* *
* Try to JIT eBPF program, if JIT is not available, use interpreter. * Try to JIT eBPF program, if JIT is not available, use interpreter.
......
...@@ -1242,10 +1242,9 @@ static struct bpf_prog *bpf_migrate_filter(struct bpf_prog *fp) ...@@ -1242,10 +1242,9 @@ static struct bpf_prog *bpf_migrate_filter(struct bpf_prog *fp)
int err, new_len, old_len = fp->len; int err, new_len, old_len = fp->len;
bool seen_ld_abs = false; bool seen_ld_abs = false;
/* We are free to overwrite insns et al right here as it /* We are free to overwrite insns et al right here as it won't be used at
* won't be used at this point in time anymore internally * this point in time anymore internally after the migration to the eBPF
* after the migration to the internal BPF instruction * instruction representation.
* representation.
*/ */
BUILD_BUG_ON(sizeof(struct sock_filter) != BUILD_BUG_ON(sizeof(struct sock_filter) !=
sizeof(struct bpf_insn)); sizeof(struct bpf_insn));
...@@ -1336,8 +1335,8 @@ static struct bpf_prog *bpf_prepare_filter(struct bpf_prog *fp, ...@@ -1336,8 +1335,8 @@ static struct bpf_prog *bpf_prepare_filter(struct bpf_prog *fp,
*/ */
bpf_jit_compile(fp); bpf_jit_compile(fp);
/* JIT compiler couldn't process this filter, so do the /* JIT compiler couldn't process this filter, so do the eBPF translation
* internal BPF translation for the optimized interpreter. * for the optimized interpreter.
*/ */
if (!fp->jited) if (!fp->jited)
fp = bpf_migrate_filter(fp); fp = bpf_migrate_filter(fp);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册