• S
    bpftool: Introduce "prog profile" command · 47c09d6a
    Song Liu 提交于
    With fentry/fexit programs, it is possible to profile BPF program with
    hardware counters. Introduce bpftool "prog profile", which measures key
    metrics of a BPF program.
    
    bpftool prog profile command creates per-cpu perf events. Then it attaches
    fentry/fexit programs to the target BPF program. The fentry program saves
    perf event value to a map. The fexit program reads the perf event again,
    and calculates the difference, which is the instructions/cycles used by
    the target program.
    
    Example input and output:
    
      ./bpftool prog profile id 337 duration 3 cycles instructions llc_misses
    
            4228 run_cnt
         3403698 cycles                                              (84.08%)
         3525294 instructions   #  1.04 insn per cycle               (84.05%)
              13 llc_misses     #  3.69 LLC misses per million isns  (83.50%)
    
    This command measures cycles and instructions for BPF program with id
    337 for 3 seconds. The program has triggered 4228 times. The rest of the
    output is similar to perf-stat. In this example, the counters were only
    counting ~84% of the time because of time multiplexing of perf counters.
    
    Note that, this approach measures cycles and instructions in very small
    increments. So the fentry/fexit programs introduce noticeable errors to
    the measurement results.
    
    The fentry/fexit programs are generated with BPF skeletons. Therefore, we
    build bpftool twice. The first time _bpftool is built without skeletons.
    Then, _bpftool is used to generate the skeletons. The second time, bpftool
    is built with skeletons.
    Signed-off-by: NSong Liu <songliubraving@fb.com>
    Signed-off-by: NDaniel Borkmann <daniel@iogearbox.net>
    Reviewed-by: NQuentin Monnet <quentin@isovalent.com>
    Acked-by: NYonghong Song <yhs@fb.com>
    Link: https://lore.kernel.org/bpf/20200309173218.2739965-2-songliubraving@fb.com
    47c09d6a
Makefile 4.7 KB