perf kwork: Constify control data for BPF
The control knobs set before loading BPF programs should be declared as 'const volatile' so that it can be optimized by the BPF core. Committer testing: root@x1:~# perf kwork report --use-bpf Starting trace, Hit <Ctrl+C> to stop and report ^C Kwork Name | Cpu | Total Runtime | Count | Max runtime | Max runtime start | Max runtime end | -------------------------------------------------------------------------------------------------------------------------------- (w)intel_atomic_commit_work [ | 0009 | 18.680 ms | 2 | 18.553 ms | 362410.681580 s | 362410.700133 s | (w)pm_runtime_work | 0007 | 13.300 ms | 1 | 13.300 ms | 362410.254996 s | 362410.268295 s | (w)intel_atomic_commit_work [ | 0009 | 9.846 ms | 2 | 9.717 ms | 362410.172352 s | 362410.182069 s | (w)acpi_ec_event_processor | 0002 | 8.106 ms | 1 | 8.106 ms | 362410.463187 s | 362410.471293 s | (s)SCHED:7 | 0000 | 1.351 ms | 106 | 0.063 ms | 362410.658017 s | 362410.658080 s | i915:157 | 0008 | 0.994 ms | 13 | 0.361 ms | 362411.222125 s | 362411.222486 s | (s)SCHED:7 | 0001 | 0.703 ms | 98 | 0.047 ms | 362410.245004 s | 362410.245051 s | (s)SCHED:7 | 0005 | 0.674 ms | 42 | 0.074 ms | 362411.483039 s | 362411.483113 s | (s)NET_RX:3 | 0001 | 0.556 ms | 10 | 0.079 ms | 362411.066388 s | 362411.066467 s | <SNIP> root@x1:~# perf trace -e bpf --max-events 5 perf kwork report --use-bpf 0.000 ( 0.016 ms): perf/2948007 bpf(cmd: 36, uattr: 0x7ffededa6660, size: 8) = -1 EOPNOTSUPP (Operation not supported) 0.026 ( 0.106 ms): perf/2948007 bpf(cmd: PROG_LOAD, uattr: 0x7ffededa6390, size: 148) = 12 0.152 ( 0.032 ms): perf/2948007 bpf(cmd: PROG_LOAD, uattr: 0x7ffededa6450, size: 148) = 12 26.247 ( 0.138 ms): perf/2948007 bpf(cmd: PROG_LOAD, uattr: 0x7ffededa6300, size: 148) = 12 26.396 ( 0.012 ms): perf/2948007 bpf(uattr: 0x7ffededa64b0, size: 80) = 12 Starting trace, Hit <Ctrl+C> to stop and report root@x1:~# Signed-off-by: Namhyung Kim <namhyung@kernel.org> Tested-by: Arnaldo Carvalho de Melo <acme@redhat.com> Cc: Adrian Hunter <adrian.hunter@intel.com> Cc: Ian Rogers <irogers@google.com> Cc: Ingo Molnar <mingo@kernel.org> Cc: Jiri Olsa <jolsa@kernel.org> Cc: Kan Liang <kan.liang@linux.intel.com> Cc: Peter Zijlstra <peterz@infradead.org> Cc: Song Liu <song@kernel.org> Cc: Yang Jihong <yangjihong@bytedance.com> Link: https://lore.kernel.org/r/20240902200515.2103769-4-namhyung@kernel.org Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
This commit is contained in:
parent
ac5a23b2f2
commit
066fd84087
@ -176,8 +176,6 @@ static int setup_filters(struct perf_kwork *kwork)
|
|||||||
bpf_map_update_elem(fd, &cpu.cpu, &val, BPF_ANY);
|
bpf_map_update_elem(fd, &cpu.cpu, &val, BPF_ANY);
|
||||||
}
|
}
|
||||||
perf_cpu_map__put(map);
|
perf_cpu_map__put(map);
|
||||||
|
|
||||||
skel->bss->has_cpu_filter = 1;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (kwork->profile_name != NULL) {
|
if (kwork->profile_name != NULL) {
|
||||||
@ -197,8 +195,6 @@ static int setup_filters(struct perf_kwork *kwork)
|
|||||||
|
|
||||||
key = 0;
|
key = 0;
|
||||||
bpf_map_update_elem(fd, &key, kwork->profile_name, BPF_ANY);
|
bpf_map_update_elem(fd, &key, kwork->profile_name, BPF_ANY);
|
||||||
|
|
||||||
skel->bss->has_name_filter = 1;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
@ -239,6 +235,11 @@ int perf_kwork__trace_prepare_bpf(struct perf_kwork *kwork)
|
|||||||
class_bpf->load_prepare(kwork);
|
class_bpf->load_prepare(kwork);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (kwork->cpu_list != NULL)
|
||||||
|
skel->rodata->has_cpu_filter = 1;
|
||||||
|
if (kwork->profile_name != NULL)
|
||||||
|
skel->rodata->has_name_filter = 1;
|
||||||
|
|
||||||
if (kwork_trace_bpf__load(skel)) {
|
if (kwork_trace_bpf__load(skel)) {
|
||||||
pr_debug("Failed to load kwork trace skeleton\n");
|
pr_debug("Failed to load kwork trace skeleton\n");
|
||||||
goto out;
|
goto out;
|
||||||
|
@ -151,14 +151,12 @@ static int setup_filters(struct perf_kwork *kwork)
|
|||||||
bpf_map_update_elem(fd, &cpu.cpu, &val, BPF_ANY);
|
bpf_map_update_elem(fd, &cpu.cpu, &val, BPF_ANY);
|
||||||
}
|
}
|
||||||
perf_cpu_map__put(map);
|
perf_cpu_map__put(map);
|
||||||
|
|
||||||
skel->bss->has_cpu_filter = 1;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int perf_kwork__top_prepare_bpf(struct perf_kwork *kwork __maybe_unused)
|
int perf_kwork__top_prepare_bpf(struct perf_kwork *kwork)
|
||||||
{
|
{
|
||||||
struct bpf_program *prog;
|
struct bpf_program *prog;
|
||||||
struct kwork_class *class;
|
struct kwork_class *class;
|
||||||
@ -193,6 +191,9 @@ int perf_kwork__top_prepare_bpf(struct perf_kwork *kwork __maybe_unused)
|
|||||||
class_bpf->load_prepare();
|
class_bpf->load_prepare();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (kwork->cpu_list)
|
||||||
|
skel->rodata->has_cpu_filter = 1;
|
||||||
|
|
||||||
if (kwork_top_bpf__load(skel)) {
|
if (kwork_top_bpf__load(skel)) {
|
||||||
pr_debug("Failed to load kwork top skeleton\n");
|
pr_debug("Failed to load kwork top skeleton\n");
|
||||||
goto out;
|
goto out;
|
||||||
|
@ -84,7 +84,7 @@ struct {
|
|||||||
|
|
||||||
int enabled = 0;
|
int enabled = 0;
|
||||||
|
|
||||||
int has_cpu_filter = 0;
|
const volatile int has_cpu_filter = 0;
|
||||||
|
|
||||||
__u64 from_timestamp = 0;
|
__u64 from_timestamp = 0;
|
||||||
__u64 to_timestamp = 0;
|
__u64 to_timestamp = 0;
|
||||||
|
@ -68,8 +68,9 @@ struct {
|
|||||||
} perf_kwork_name_filter SEC(".maps");
|
} perf_kwork_name_filter SEC(".maps");
|
||||||
|
|
||||||
int enabled = 0;
|
int enabled = 0;
|
||||||
int has_cpu_filter = 0;
|
|
||||||
int has_name_filter = 0;
|
const volatile int has_cpu_filter = 0;
|
||||||
|
const volatile int has_name_filter = 0;
|
||||||
|
|
||||||
static __always_inline int local_strncmp(const char *s1,
|
static __always_inline int local_strncmp(const char *s1,
|
||||||
unsigned int sz, const char *s2)
|
unsigned int sz, const char *s2)
|
||||||
|
Loading…
Reference in New Issue
Block a user