Messages in this thread Patch in this message | | | From | Shunsuke <> | Subject | [RFC PATCH 3/7] libperf: Add perf_evsel__refresh()/period() functions | Date | Fri, 25 Feb 2022 19:31:10 +0900 |
| |
From: Shunsuke Nakamura <nakamura.shun@fujitsu.com>
Add the following functions:
perf_evsel__refresh() perf_evsel__refresh_cpu() perf_evsel__period() perf_evsel__period_cpu()
to set the over flow limit and period.
Signed-off-by: Shunsuke Nakamura <nakamura.shun@fujitsu.com> --- tools/lib/perf/Documentation/libperf.txt | 5 ++ tools/lib/perf/evsel.c | 68 +++++++++++++++++++++--- tools/lib/perf/include/perf/evsel.h | 5 ++ tools/lib/perf/libperf.map | 4 ++ 4 files changed, 76 insertions(+), 6 deletions(-)
diff --git a/tools/lib/perf/Documentation/libperf.txt b/tools/lib/perf/Documentation/libperf.txt index 96a451cd34eb..8f523293fb9d 100644 --- a/tools/lib/perf/Documentation/libperf.txt +++ b/tools/lib/perf/Documentation/libperf.txt @@ -146,6 +146,11 @@ SYNOPSIS int perf_evsel__enable_cpu(struct perf_evsel *evsel, int cpu_map_idx); int perf_evsel__disable(struct perf_evsel *evsel); int perf_evsel__disable_cpu(struct perf_evsel *evsel, int cpu_map_idx); + int perf_evsel__refresh(struct perf_evsel *evsel, int refresh); + int perf_evsel__refresh_cpu(struct perf_evsel *evsel, int refresh, + int cpu_map_idx); + int perf_evsel__period(struct perf_evsel *evsel, int period); + int perf_evsel__period_cpu(struct perf_evsel *evsel, int period, int cpu_map_idx); struct perf_cpu_map *perf_evsel__cpus(struct perf_evsel *evsel); struct perf_thread_map *perf_evsel__threads(struct perf_evsel *evsel); struct perf_event_attr *perf_evsel__attr(struct perf_evsel *evsel); diff --git a/tools/lib/perf/evsel.c b/tools/lib/perf/evsel.c index d22b1468a1ad..8348545874e4 100644 --- a/tools/lib/perf/evsel.c +++ b/tools/lib/perf/evsel.c @@ -330,7 +330,7 @@ int perf_evsel__read(struct perf_evsel *evsel, int cpu_map_idx, int thread, } static int perf_evsel__run_ioctl(struct perf_evsel *evsel, - int ioc, void *arg, + int ioc, unsigned long arg, int cpu_map_idx) { int thread; @@ -353,7 +353,7 @@ static int perf_evsel__run_ioctl(struct perf_evsel *evsel, int perf_evsel__enable_cpu(struct perf_evsel *evsel, int cpu_map_idx) { - return perf_evsel__run_ioctl(evsel, PERF_EVENT_IOC_ENABLE, NULL, cpu_map_idx); + return perf_evsel__run_ioctl(evsel, PERF_EVENT_IOC_ENABLE, 0, cpu_map_idx); } int perf_evsel__enable(struct perf_evsel *evsel) @@ -362,13 +362,13 @@ int perf_evsel__enable(struct perf_evsel *evsel) int err = 0; for (i = 0; i < xyarray__max_x(evsel->fd) && !err; i++) - err = perf_evsel__run_ioctl(evsel, PERF_EVENT_IOC_ENABLE, NULL, i); + err = perf_evsel__run_ioctl(evsel, PERF_EVENT_IOC_ENABLE, 0, i); return err; } int perf_evsel__disable_cpu(struct perf_evsel *evsel, int cpu_map_idx) { - return perf_evsel__run_ioctl(evsel, PERF_EVENT_IOC_DISABLE, NULL, cpu_map_idx); + return perf_evsel__run_ioctl(evsel, PERF_EVENT_IOC_DISABLE, 0, cpu_map_idx); } int perf_evsel__disable(struct perf_evsel *evsel) @@ -377,7 +377,63 @@ int perf_evsel__disable(struct perf_evsel *evsel) int err = 0; for (i = 0; i < xyarray__max_x(evsel->fd) && !err; i++) - err = perf_evsel__run_ioctl(evsel, PERF_EVENT_IOC_DISABLE, NULL, i); + err = perf_evsel__run_ioctl(evsel, PERF_EVENT_IOC_DISABLE, 0, i); + return err; +} + +int perf_evsel__refresh_cpu(struct perf_evsel *evsel, int refresh, int cpu_map_idx) +{ + return perf_evsel__run_ioctl(evsel, PERF_EVENT_IOC_REFRESH, refresh, cpu_map_idx); +} + +int perf_evsel__refresh(struct perf_evsel *evsel, int refresh) +{ + int i; + int err = 0; + + for (i = 0; i < xyarray__max_x(evsel->fd) && !err; i++) + err = perf_evsel__run_ioctl(evsel, PERF_EVENT_IOC_REFRESH, refresh, i); + return err; +} + +int perf_evsel__period_cpu(struct perf_evsel *evsel, __u64 period, int cpu_map_idx) +{ + int err = 0; + struct perf_event_attr *attr; + + err = perf_evsel__run_ioctl(evsel, PERF_EVENT_IOC_PERIOD, + (unsigned long)&period, cpu_map_idx); + if (err) + return err; + + attr = perf_evsel__attr(evsel); + if (!attr) + return -1; + + attr->sample_period = period; + + return err; +} + +int perf_evsel__period(struct perf_evsel *evsel, __u64 period) +{ + int i; + int err = 0; + struct perf_event_attr *attr; + + for (i = 0; i < xyarray__max_x(evsel->fd) && !err; i++) { + err = perf_evsel__run_ioctl(evsel, PERF_EVENT_IOC_PERIOD, + (unsigned long)&period, i); + if (err) + return err; + } + + attr = perf_evsel__attr(evsel); + if (!attr) + return -1; + + attr->sample_period = period; + return err; } @@ -388,7 +444,7 @@ int perf_evsel__apply_filter(struct perf_evsel *evsel, const char *filter) for (i = 0; i < perf_cpu_map__nr(evsel->cpus) && !err; i++) err = perf_evsel__run_ioctl(evsel, PERF_EVENT_IOC_SET_FILTER, - (void *)filter, i); + (unsigned long)filter, i); return err; } diff --git a/tools/lib/perf/include/perf/evsel.h b/tools/lib/perf/include/perf/evsel.h index 23b0334a4c57..9ec24a5f5f9f 100644 --- a/tools/lib/perf/include/perf/evsel.h +++ b/tools/lib/perf/include/perf/evsel.h @@ -38,6 +38,11 @@ LIBPERF_API int perf_evsel__enable(struct perf_evsel *evsel); LIBPERF_API int perf_evsel__enable_cpu(struct perf_evsel *evsel, int cpu_map_idx); LIBPERF_API int perf_evsel__disable(struct perf_evsel *evsel); LIBPERF_API int perf_evsel__disable_cpu(struct perf_evsel *evsel, int cpu_map_idx); +LIBPERF_API int perf_evsel__refresh(struct perf_evsel *evsel, int refresh); +LIBPERF_API int perf_evsel__refresh_cpu(struct perf_evsel *evsel, int refresh, + int cpu_map_idx); +LIBPERF_API int perf_evsel__period(struct perf_evsel *evsel, __u64 period); +LIBPERF_API int perf_evsel__period_cpu(struct perf_evsel *evsel, __u64 period, int cpu_map_idx); LIBPERF_API struct perf_cpu_map *perf_evsel__cpus(struct perf_evsel *evsel); LIBPERF_API struct perf_thread_map *perf_evsel__threads(struct perf_evsel *evsel); LIBPERF_API struct perf_event_attr *perf_evsel__attr(struct perf_evsel *evsel); diff --git a/tools/lib/perf/libperf.map b/tools/lib/perf/libperf.map index 0f8d13f9009b..83ecbce9cfbb 100644 --- a/tools/lib/perf/libperf.map +++ b/tools/lib/perf/libperf.map @@ -28,6 +28,10 @@ LIBPERF_0.0.1 { perf_evsel__munmap; perf_evsel__mmap_base; perf_evsel__read; + perf_evsel__refresh; + perf_evsel__refresh_cpu; + perf_evsel__period; + perf_evsel__period_cpu; perf_evsel__cpus; perf_evsel__threads; perf_evsel__attr; -- 2.31.1
| |