• Alexei Starovoitov's avatar
    bpf: split bpf core interpreter · f696b8f4
    Alexei Starovoitov authored
    split __bpf_prog_run() interpreter into stack allocation and execution parts.
    The code section shrinks which helps interpreter performance in some cases.
       text	   data	    bss	    dec	    hex	filename
      26350	  10328	    624	  37302	   91b6	kernel/bpf/core.o.before
      25777	  10328	    624	  36729	   8f79	kernel/bpf/core.o.after
    
    Very short programs got slower (due to extra function call):
    Before:
    test_bpf: #89 ALU64_ADD_K: 1 + 2 = 3 jited:0 7 PASS
    test_bpf: #90 ALU64_ADD_K: 3 + 0 = 3 jited:0 8 PASS
    test_bpf: #91 ALU64_ADD_K: 1 + 2147483646 = 2147483647 jited:0 7 PASS
    test_bpf: #92 ALU64_ADD_K: 4294967294 + 2 = 4294967296 jited:0 11 PASS
    test_bpf: #93 ALU64_ADD_K: 2147483646 + -2147483647 = -1 jited:0 7 PASS
    After:
    test_bpf: #89 ALU64_ADD_K: 1 + 2 = 3 jited:0 11 PASS
    test_bpf: #90 ALU64_ADD_K: 3 + 0 = 3 jited:0 11 PASS
    test_bpf: #91 ALU64_ADD_K: 1 + 2147483646 = 2147483647 jited:0 11 PASS
    test_bpf: #92 ALU64_ADD_K: 4294967294 + 2 = 4294967296 jited:0 14 PASS
    test_bpf: #93 ALU64_ADD_K: 2147483646 + -2147483647 = -1 jited:0 10 PASS
    
    Longer programs got faster:
    Before:
    test_bpf: #266 BPF_MAXINSNS: Ctx heavy transformations jited:0 20286 20513 PASS
    test_bpf: #267 BPF_MAXINSNS: Call heavy transformations jited:0 31853 31768 PASS
    test_bpf: #268 BPF_MAXINSNS: Jump heavy test jited:0 9815 PASS
    test_bpf: #269 BPF_MAXINSNS: Very long jump backwards jited:0 6 PASS
    test_bpf: #270 BPF_MAXINSNS: Edge hopping nuthouse jited:0 13959 PASS
    test_bpf: #271 BPF_MAXINSNS: Jump, gap, jump, ... jited:0 210 PASS
    test_bpf: #272 BPF_MAXINSNS: ld_abs+get_processor_id jited:0 21724 PASS
    test_bpf: #273 BPF_MAXINSNS: ld_abs+vlan_push/pop jited:0 19118 PASS
    After:
    test_bpf: #266 BPF_MAXINSNS: Ctx heavy transformations jited:0 19008 18827 PASS
    test_bpf: #267 BPF_MAXINSNS: Call heavy transformations jited:0 29238 28450 PASS
    test_bpf: #268 BPF_MAXINSNS: Jump heavy test jited:0 9485 PASS
    test_bpf: #269 BPF_MAXINSNS: Very long jump backwards jited:0 12 PASS
    test_bpf: #270 BPF_MAXINSNS: Edge hopping nuthouse jited:0 13257 PASS
    test_bpf: #271 BPF_MAXINSNS: Jump, gap, jump, ... jited:0 213 PASS
    test_bpf: #272 BPF_MAXINSNS: ld_abs+get_processor_id jited:0 19389 PASS
    test_bpf: #273 BPF_MAXINSNS: ld_abs+vlan_push/pop jited:0 19583 PASS
    
    For real world production programs the difference is noise.
    
    This patch is first step towards reducing interpreter stack consumption.
    Signed-off-by: default avatarAlexei Starovoitov <ast@kernel.org>
    Acked-by: default avatarDaniel Borkmann <daniel@iogearbox.net>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    f696b8f4
core.c 36.3 KB