• Daniel Borkmann's avatar
    bpf, x64: increase number of passes · 6007b080
    Daniel Borkmann authored
    In Cilium some of the main programs we run today are hitting 9 passes
    on x64's JIT compiler, and we've had cases already where we surpassed
    the limit where the JIT then punts the program to the interpreter
    instead, leading to insertion failures due to CONFIG_BPF_JIT_ALWAYS_ON
    or insertion failures due to the prog array owner being JITed but the
    program to insert not (both must have the same JITed/non-JITed property).
    
    One concrete case the program image shrunk from 12,767 bytes down to
    10,288 bytes where the image converged after 16 steps. I've measured
    that this took 340us in the JIT until it converges on my i7-6600U. Thus,
    increase the original limit we had from day one where the JIT covered
    cBPF only back then before we run into the case (as similar with the
    complexity limit) where we trip over this and hit program rejections.
    Also add a cond_resched() into the compilation loop, the JIT process
    runs without any locks and may sleep anyway.
    Signed-off-by: default avatarDaniel Borkmann <daniel@iogearbox.net>
    Acked-by: default avatarAlexei Starovoitov <ast@kernel.org>
    Reviewed-by: default avatarEric Dumazet <edumazet@google.com>
    Signed-off-by: default avatarAlexei Starovoitov <ast@kernel.org>
    6007b080
bpf_jit_comp.c 32.2 KB