mirror of
https://github.com/FEX-Emu/linux.git
synced 2025-01-28 06:07:16 +00:00
08e60ed15d
Add support to print alias descriptions in perf list, which are taken from the generated event files. The sorting code is changed to put the events with descriptions at the end. The descriptions are printed as possibly multiple word wrapped lines. Example output: % perf list ... arith.fpu_div [Divide operations executed] arith.fpu_div_active [Cycles when divider is busy executing divide operations] Committer notes: Further testing on a Broadwell machine (ThinkPad t450s), using these files: $ find tools/perf/pmu-events/arch/x86/ tools/perf/pmu-events/arch/x86/ tools/perf/pmu-events/arch/x86/Broadwell tools/perf/pmu-events/arch/x86/Broadwell/Cache.json tools/perf/pmu-events/arch/x86/Broadwell/Other.json tools/perf/pmu-events/arch/x86/Broadwell/Frontend.json tools/perf/pmu-events/arch/x86/Broadwell/Virtual-Memory.json tools/perf/pmu-events/arch/x86/Broadwell/Pipeline.json tools/perf/pmu-events/arch/x86/Broadwell/Floating-point.json tools/perf/pmu-events/arch/x86/Broadwell/Memory.json tools/perf/pmu-events/arch/x86/mapfile.csv $ Taken from: https://github.com/sukadev/linux/tree/json-code+data-v21/tools/perf/pmu-events/arch/x86/ to get this machinery to actually parse JSON files, generate $(OUTPUT)pmu-events/pmu-events.c, compile it and link it with perf, that will then use the table it contains, these files will be submitted right after this patchkit. [acme@jouet linux]$ perf list page_walker List of pre-defined events (to be used in -e): page_walker_loads.dtlb_l1 [Number of DTLB page walker hits in the L1+FB] page_walker_loads.dtlb_l2 [Number of DTLB page walker hits in the L2] page_walker_loads.dtlb_l3 [Number of DTLB page walker hits in the L3 + XSNP] page_walker_loads.dtlb_memory [Number of DTLB page walker hits in Memory] page_walker_loads.itlb_l1 [Number of ITLB page walker hits in the L1+FB] page_walker_loads.itlb_l2 [Number of ITLB page walker hits in the L2] page_walker_loads.itlb_l3 [Number of ITLB page walker hits in the L3 + XSNP] [acme@jouet linux]$ Signed-off-by: Andi Kleen <ak@linux.intel.com> Signed-off-by: Sukadev Bhattiprolu <sukadev@linux.vnet.ibm.com> Acked-by: Ingo Molnar <mingo@kernel.org> Acked-by: Jiri Olsa <jolsa@redhat.com> Tested-by: Arnaldo Carvalho de Melo <acme@redhat.com> Cc: Madhavan Srinivasan <maddy@linux.vnet.ibm.com> Cc: Peter Zijlstra <peterz@infradead.org> Cc: linuxppc-dev@lists.ozlabs.org Link: http://lkml.kernel.org/r/1473978296-20712-7-git-send-email-sukadev@linux.vnet.ibm.com Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
86 lines
2.4 KiB
C
86 lines
2.4 KiB
C
#ifndef __PMU_H
|
|
#define __PMU_H
|
|
|
|
#include <linux/bitmap.h>
|
|
#include <linux/perf_event.h>
|
|
#include <stdbool.h>
|
|
#include "evsel.h"
|
|
#include "parse-events.h"
|
|
|
|
enum {
|
|
PERF_PMU_FORMAT_VALUE_CONFIG,
|
|
PERF_PMU_FORMAT_VALUE_CONFIG1,
|
|
PERF_PMU_FORMAT_VALUE_CONFIG2,
|
|
};
|
|
|
|
#define PERF_PMU_FORMAT_BITS 64
|
|
|
|
struct perf_event_attr;
|
|
|
|
struct perf_pmu {
|
|
char *name;
|
|
__u32 type;
|
|
bool selectable;
|
|
struct perf_event_attr *default_config;
|
|
struct cpu_map *cpus;
|
|
struct list_head format; /* HEAD struct perf_pmu_format -> list */
|
|
struct list_head aliases; /* HEAD struct perf_pmu_alias -> list */
|
|
struct list_head list; /* ELEM */
|
|
int (*set_drv_config) (struct perf_evsel_config_term *term);
|
|
};
|
|
|
|
struct perf_pmu_info {
|
|
const char *unit;
|
|
double scale;
|
|
bool per_pkg;
|
|
bool snapshot;
|
|
};
|
|
|
|
#define UNIT_MAX_LEN 31 /* max length for event unit name */
|
|
|
|
struct perf_pmu_alias {
|
|
char *name;
|
|
char *desc;
|
|
struct list_head terms; /* HEAD struct parse_events_term -> list */
|
|
struct list_head list; /* ELEM */
|
|
char unit[UNIT_MAX_LEN+1];
|
|
double scale;
|
|
bool per_pkg;
|
|
bool snapshot;
|
|
};
|
|
|
|
struct perf_pmu *perf_pmu__find(const char *name);
|
|
int perf_pmu__config(struct perf_pmu *pmu, struct perf_event_attr *attr,
|
|
struct list_head *head_terms,
|
|
struct parse_events_error *error);
|
|
int perf_pmu__config_terms(struct list_head *formats,
|
|
struct perf_event_attr *attr,
|
|
struct list_head *head_terms,
|
|
bool zero, struct parse_events_error *error);
|
|
__u64 perf_pmu__format_bits(struct list_head *formats, const char *name);
|
|
int perf_pmu__check_alias(struct perf_pmu *pmu, struct list_head *head_terms,
|
|
struct perf_pmu_info *info);
|
|
struct list_head *perf_pmu__alias(struct perf_pmu *pmu,
|
|
struct list_head *head_terms);
|
|
int perf_pmu_wrap(void);
|
|
void perf_pmu_error(struct list_head *list, char *name, char const *msg);
|
|
|
|
int perf_pmu__new_format(struct list_head *list, char *name,
|
|
int config, unsigned long *bits);
|
|
void perf_pmu__set_format(unsigned long *bits, long from, long to);
|
|
int perf_pmu__format_parse(char *dir, struct list_head *head);
|
|
|
|
struct perf_pmu *perf_pmu__scan(struct perf_pmu *pmu);
|
|
|
|
void print_pmu_events(const char *event_glob, bool name_only);
|
|
bool pmu_have_event(const char *pname, const char *name);
|
|
|
|
int perf_pmu__scan_file(struct perf_pmu *pmu, const char *name, const char *fmt,
|
|
...) __attribute__((format(scanf, 3, 4)));
|
|
|
|
int perf_pmu__test(void);
|
|
|
|
struct perf_event_attr *perf_pmu__get_default_config(struct perf_pmu *pmu);
|
|
|
|
#endif /* __PMU_H */
|