• Ian Rogers's avatar
    perf expr: Migrate expr ids table to a hashmap · ded80bda
    Ian Rogers authored
    Use a hashmap between a char* string and a double* value. While bpf's
    hashmap entries are size_t in size, we can't guarantee sizeof(size_t) >=
    sizeof(double). Avoid a memory allocation when gathering ids by making
    0.0 a special value encoded as NULL.
    
    Original map suggestion by Andi Kleen:
    
      https://lore.kernel.org/lkml/20200224210308.GQ160988@tassilo.jf.intel.com/
    
    and seconded by Jiri Olsa:
    
      https://lore.kernel.org/lkml/20200423112915.GH1136647@krava/
    
    Committer notes:
    
    There are fixes that need to land upstream before we can use libbpf's
    headers, for now use our copy unconditionally, since the data structures
    at this point are exactly the same, no problem.
    
    When the fixes for libbpf's hashmap land upstream, we can fix this up.
    
    Testing it:
    
    Building with LIBBPF=1, i.e. the default:
    
      $ perf -vv | grep -i bpf
                         bpf: [ on  ]  # HAVE_LIBBPF_SUPPORT
      $ nm ~/bin/perf | grep -i libbpf_ | wc -l
      39
      $ nm ~/bin/perf | grep -i hashmap_ | wc -l
      17
      $
    
    Explicitely building without LIBBPF:
    
      $ perf -vv | grep -i bpf
                         bpf: [ OFF ]  # HAVE_LIBBPF_SUPPORT
      $
      $ nm ~/bin/perf | grep -i libbpf_ | wc -l
      0
      $ nm ~/bin/perf | grep -i hashmap_ | wc -l
      9
      $
    Signed-off-by: default avatarIan Rogers <irogers@google.com>
    Tested-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
    Cc: Adrian Hunter <adrian.hunter@intel.com>
    Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
    Cc: Alexei Starovoitov <ast@kernel.org>
    Cc: Andi Kleen <ak@linux.intel.com>
    Cc: Andrii Nakryiko <andriin@fb.com>
    Cc: Cong Wang <xiyou.wangcong@gmail.com>
    Cc: Daniel Borkmann <daniel@iogearbox.net>
    Cc: Jin Yao <yao.jin@linux.intel.com>
    Cc: Jiri Olsa <jolsa@redhat.com>
    Cc: John Fastabend <john.fastabend@gmail.com>
    Cc: John Garry <john.garry@huawei.com>
    Cc: Kajol Jain <kjain@linux.ibm.com>
    Cc: Kan Liang <kan.liang@linux.intel.com>
    Cc: Kim Phillips <kim.phillips@amd.com>
    Cc: Leo Yan <leo.yan@linaro.org>
    Cc: Mark Rutland <mark.rutland@arm.com>
    Cc: Martin KaFai Lau <kafai@fb.com>
    Cc: Namhyung Kim <namhyung@kernel.org>
    Cc: Peter Zijlstra <peterz@infradead.org>
    Cc: Song Liu <songliubraving@fb.com>
    Cc: Stephane Eranian <eranian@google.com>
    Cc: Yonghong Song <yhs@fb.com>
    Cc: bpf@vger.kernel.org
    Cc: kp singh <kpsingh@chromium.org>
    Cc: netdev@vger.kernel.org
    Link: http://lore.kernel.org/lkml/20200515221732.44078-8-irogers@google.comSigned-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
    ded80bda
expr.c 2.18 KB