• Yonghong Song's avatar
    bpf: add helper bpf_perf_event_read_value for perf event array map · 908432ca
    Yonghong Song authored
    Hardware pmu counters are limited resources. When there are more
    pmu based perf events opened than available counters, kernel will
    multiplex these events so each event gets certain percentage
    (but not 100%) of the pmu time. In case that multiplexing happens,
    the number of samples or counter value will not reflect the
    case compared to no multiplexing. This makes comparison between
    different runs difficult.
    
    Typically, the number of samples or counter value should be
    normalized before comparing to other experiments. The typical
    normalization is done like:
      normalized_num_samples = num_samples * time_enabled / time_running
      normalized_counter_value = counter_value * time_enabled / time_running
    where time_enabled is the time enabled for event and time_running is
    the time running for event since last normalization.
    
    This patch adds helper bpf_perf_event_read_value for kprobed based perf
    event array map, to read perf counter and enabled/running time.
    The enabled/running time is accumulated since the perf event open.
    To achieve scaling factor between two bpf invocations, users
    can can use cpu_id as the key (which is typical for perf array usage model)
    to remember the previous value and do the calculation inside the
    bpf program.
    Signed-off-by: default avatarYonghong Song <yhs@fb.com>
    Acked-by: default avatarAlexei Starovoitov <ast@fb.com>
    Acked-by: default avatarDaniel Borkmann <daniel@iogearbox.net>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    908432ca
verifier.c 133 KB