mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-08-21 16:29:59 +00:00
![Namhyung Kim](/assets/img/avatar_default.png)
It supports two or more expressions connected as a group and the group result is considered true when one of them returns true. The new group operators (GROUP_BEGIN and GROUP_END) are added to setup and check the condition. As it doesn't allow nested groups, the condition is saved in local variables. For example, the following is to get samples only if the data source memory level is L2 cache or the weight value is greater than 30. $ sudo ./perf record -adW -e cpu/mem-loads/pp \ > --filter 'mem_lvl == l2 || weight > 30' -- sleep 1 $ sudo ./perf script -F data_src,weight 10668100842 |OP LOAD|LVL L3 or L3 hit|SNP None|TLB L1 or L2 hit|LCK No|BLK N/A 47 11868100242 |OP LOAD|LVL LFB/MAB or LFB/MAB hit|SNP None|TLB L1 or L2 hit|LCK No|BLK N/A 57 10668100842 |OP LOAD|LVL L3 or L3 hit|SNP None|TLB L1 or L2 hit|LCK No|BLK N/A 56 10650100842 |OP LOAD|LVL L3 or L3 hit|SNP None|TLB L2 miss|LCK No|BLK N/A 144 10468100442 |OP LOAD|LVL L2 or L2 hit|SNP None|TLB L1 or L2 hit|LCK No|BLK N/A 16 10468100442 |OP LOAD|LVL L2 or L2 hit|SNP None|TLB L1 or L2 hit|LCK No|BLK N/A 20 11868100242 |OP LOAD|LVL LFB/MAB or LFB/MAB hit|SNP None|TLB L1 or L2 hit|LCK No|BLK N/A 189 1026a100142 |OP LOAD|LVL L1 or L1 hit|SNP None|TLB L1 or L2 hit|LCK Yes|BLK N/A 193 10468100442 |OP LOAD|LVL L2 or L2 hit|SNP None|TLB L1 or L2 hit|LCK No|BLK N/A 18 ... Signed-off-by: Namhyung Kim <namhyung@kernel.org> Acked-by: Jiri Olsa <jolsa@kernel.org> Cc: Adrian Hunter <adrian.hunter@intel.com> Cc: Andi Kleen <ak@linux.intel.com> Cc: Hao Luo <haoluo@google.com> Cc: Ian Rogers <irogers@google.com> Cc: Ingo Molnar <mingo@kernel.org> Cc: James Clark <james.clark@arm.com> Cc: Kan Liang <kan.liang@linux.intel.com> Cc: Leo Yan <leo.yan@linaro.org> Cc: Peter Zijlstra <peterz@infradead.org> Cc: Ravi Bangoria <ravi.bangoria@amd.com> Cc: Song Liu <song@kernel.org> Cc: Stephane Eranian <eranian@google.com> Cc: bpf@vger.kernel.org Link: https://lore.kernel.org/r/20230314234237.3008956-2-namhyung@kernel.org Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
49 lines
1.3 KiB
C
49 lines
1.3 KiB
C
/* SPDX-License-Identifier: GPL-2.0 */
|
|
#ifndef PERF_UTIL_BPF_FILTER_H
|
|
#define PERF_UTIL_BPF_FILTER_H
|
|
|
|
#include <linux/list.h>
|
|
|
|
#include "bpf_skel/sample-filter.h"
|
|
|
|
struct perf_bpf_filter_expr {
|
|
struct list_head list;
|
|
struct list_head groups;
|
|
enum perf_bpf_filter_op op;
|
|
int part;
|
|
unsigned long sample_flags;
|
|
unsigned long val;
|
|
};
|
|
|
|
struct evsel;
|
|
|
|
#ifdef HAVE_BPF_SKEL
|
|
struct perf_bpf_filter_expr *perf_bpf_filter_expr__new(unsigned long sample_flags, int part,
|
|
enum perf_bpf_filter_op op,
|
|
unsigned long val);
|
|
int perf_bpf_filter__parse(struct list_head *expr_head, const char *str);
|
|
int perf_bpf_filter__prepare(struct evsel *evsel);
|
|
int perf_bpf_filter__destroy(struct evsel *evsel);
|
|
u64 perf_bpf_filter__lost_count(struct evsel *evsel);
|
|
|
|
#else /* !HAVE_BPF_SKEL */
|
|
|
|
static inline int perf_bpf_filter__parse(struct list_head *expr_head __maybe_unused,
|
|
const char *str __maybe_unused)
|
|
{
|
|
return -EOPNOTSUPP;
|
|
}
|
|
static inline int perf_bpf_filter__prepare(struct evsel *evsel __maybe_unused)
|
|
{
|
|
return -EOPNOTSUPP;
|
|
}
|
|
static inline int perf_bpf_filter__destroy(struct evsel *evsel __maybe_unused)
|
|
{
|
|
return -EOPNOTSUPP;
|
|
}
|
|
static inline u64 perf_bpf_filter__lost_count(struct evsel *evsel __maybe_unused)
|
|
{
|
|
return 0;
|
|
}
|
|
#endif /* HAVE_BPF_SKEL*/
|
|
#endif /* PERF_UTIL_BPF_FILTER_H */
|