On Thu, 7 Aug 2025 at 03:02, Eduard Zingerman <eddyz87@xxxxxxxxx> 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. > > 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> > --- Acked-by: Kumar Kartikeya Dwivedi <memxor@xxxxxxxxx> > [...]