On 25/08/06 06:02PM, Eduard Zingerman wrote: > Avoid excessive vzalloc/vfree calls when patching instructions in > do_misc_fixups(). bpf_patch_insn_data() uses vzalloc to allocate new > memory for env->insn_aux_data for each patch as follows: > > struct bpf_prog *bpf_patch_insn_data(env, ...) > { > ... > new_data = vzalloc(... O(program size) ...); > ... > adjust_insn_aux_data(env, new_data, ...); > ... > } > > void adjust_insn_aux_data(env, new_data, ...) > { > ... > memcpy(new_data, env->insn_aux_data); > vfree(env->insn_aux_data); > env->insn_aux_data = new_data; > ... > } > > The vzalloc/vfree pair is hot in perf report collected for e.g. > pyperf180 test case. It can be replaced with a call to vrealloc in > order to reduce the number of actual memory allocations. Given that I am in any case looking at the code around, I've rebased on top of this change and tested it: Tested-by: Anton Protopopov <a.s.protopopov@xxxxxxxxx> > This is a stop-gap solution, as bpf_patch_insn_data is still hot in > the profile. More comprehansive solutions had been discussed before > e.g. as in [1]. > > [1] https://lore.kernel.org/bpf/CAEf4BzY_E8MSL4mD0UPuuiDcbJhh9e2xQo2=5w+ppRWWiYSGvQ@xxxxxxxxxxxxxx/ > > Suggested-by: Alexei Starovoitov <alexei.starovoitov@xxxxxxxxx> > Signed-off-by: Eduard Zingerman <eddyz87@xxxxxxxxx> [snip]