On 02/05/2019 02:29 AM, Andrii Nakryiko wrote: > This patch series adds BTF deduplication algorithm to libbpf. This algorithm > allows to take BTF type information containing duplicate per-compilation unit > information and reduce it to equivalent set of BTF types with no duplication > without > loss of information. It also deduplicates strings and removes those strings > that > are not referenced from any BTF type (and line information in .BTF.ext > section, > if any). > > Algorithm also resolves struct/union forward declarations into concrete BTF > types > across multiple compilation units to facilitate better deduplication ratio. If > undesired, this resolution can be disabled through specifying corresponding > options. > > When applied to BTF data emitted by pahole's DWARF->BTF converter, it reduces > the overall size of .BTF section by about 65x, from about 112MB to 1.75MB, > leaving > only 29247 out of initial 3073497 BTF type descriptors. > > Algorithm with minor differences and preliminary results before > FUNC/FUNC_PROTO > support is also described more verbosely at: > https://facebookmicrosites.github.io/bpf/blog/2018/11/14/btf-enhancement.html > > v1->v2: > - rebase on latest bpf-next > - err_log/elog -> pr_debug > - btf__dedup, btf__get_strings, btf__get_nr_types listed under 0.0.2 version > > Andrii Nakryiko (3): > btf: extract BTF type size calculation > btf: add BTF types deduplication algorithm > selftests/btf: add initial BTF dedup tests > > tools/lib/bpf/btf.c | 1851 +++++++++++++++++++++++- > tools/lib/bpf/btf.h | 10 + > tools/lib/bpf/libbpf.map | 3 + > tools/testing/selftests/bpf/test_btf.c | 535 ++++++- > 4 files changed, 2332 insertions(+), 67 deletions(-)
Applied, thanks!