Em Thu, Oct 08, 2020 at 04:39:52PM -0700, Andrii Nakryiko escreveu: > This patch set switches pahole to use libbpf-provided BTF loading and encoding > APIs. This reduces pahole's own BTF encoding code, speeds up the process, > reduces amount of RAM needed for DWARF-to-BTF conversion. Also, pahole finally > gets support to generating BTF for cross-compiled ELF binaries with different > endianness (patch #8). > > Additionally, patch #3 fixes previously missed problem with invalid array > index type generation. > > Patches #4-7 are speeding up DWARF-to-BTF convertion/dedup pretty > significantly, saving overall about 9 seconds out of current 27 or so. > > Patch #5 revamps how per-CPU BTF variables are emitted, eliminating repeated > and expensive looping over ELF symbols table. The critical detail that took > few hours of investigation is that when DW_AT_variable has > DW_AT_specification, variable address (to correlate with symbol's address) has > to be taken before specification is followed. > > More details could be found in respective patches. > > v1->v2: > - rebase on latest dwarves master and fix var->spec's address problem. Thanks, I applied all of them, tested and reproduced the performance gains, great work! I'll do some more testing on encoding a vmlinux for some big endian arch on my x86_64 workstation and then push things publicly. If Hao find any issues we can fix in a follow up patch. I also added the people involved in the discussion about cross builds failing, please take a look, I'm pushing now to a tmp.libbtf_encoder so that you can test it from there, ok? - Arnaldo > Cc: Arnaldo Carvalho de Melo <acme@xxxxxxxxxx> > > Andrii Nakryiko (8): > btf_loader: use libbpf to load BTF > btf_encoder: use libbpf APIs to encode BTF type info > btf_encoder: fix emitting __ARRAY_SIZE_TYPE__ as index range type > btf_encoder: discard CUs after BTF encoding > btf_encoder: revamp how per-CPU variables are encoded > dwarf_loader: increase the size of lookup hash map > strings: use BTF's string APIs for strings management > btf_encoder: support cross-compiled ELF binaries with different > endianness > > btf_encoder.c | 370 +++++++++++++++------------ > btf_loader.c | 244 +++++++----------- > ctf_encoder.c | 2 +- > dwarf_loader.c | 2 +- > libbtf.c | 661 +++++++++++++++++++++---------------------------- > libbtf.h | 41 ++- > libctf.c | 14 +- > libctf.h | 4 +- > pahole.c | 2 +- > strings.c | 91 +++---- > strings.h | 32 +-- > 11 files changed, 645 insertions(+), 818 deletions(-) > > -- > 2.24.1 > -- - Arnaldo