Linux Perf
header.h
Go to the documentation of this file.
1
/* SPDX-License-Identifier: GPL-2.0 */
2
#ifndef __PERF_HEADER_H
3
#define __PERF_HEADER_H
4
5
#include <linux/perf_event.h>
6
#include <sys/types.h>
7
#include <stdbool.h>
8
#include <linux/bitmap.h>
9
#include <linux/types.h>
10
#include "
event.h
"
11
#include "
env.h
"
12
#include "
pmu.h
"
13
14
enum
{
15
HEADER_RESERVED
= 0,
/* always cleared */
16
HEADER_FIRST_FEATURE
= 1,
17
HEADER_TRACING_DATA
= 1,
18
HEADER_BUILD_ID
,
19
20
HEADER_HOSTNAME
,
21
HEADER_OSRELEASE
,
22
HEADER_VERSION
,
23
HEADER_ARCH
,
24
HEADER_NRCPUS
,
25
HEADER_CPUDESC
,
26
HEADER_CPUID
,
27
HEADER_TOTAL_MEM
,
28
HEADER_CMDLINE
,
29
HEADER_EVENT_DESC
,
30
HEADER_CPU_TOPOLOGY
,
31
HEADER_NUMA_TOPOLOGY
,
32
HEADER_BRANCH_STACK
,
33
HEADER_PMU_MAPPINGS
,
34
HEADER_GROUP_DESC
,
35
HEADER_AUXTRACE
,
36
HEADER_STAT
,
37
HEADER_CACHE
,
38
HEADER_SAMPLE_TIME
,
39
HEADER_MEM_TOPOLOGY
,
40
HEADER_LAST_FEATURE
,
41
HEADER_FEAT_BITS
= 256,
42
};
43
44
enum
perf_header_version
{
45
PERF_HEADER_VERSION_1
,
46
PERF_HEADER_VERSION_2
,
47
};
48
49
struct
perf_file_section
{
50
u64
offset
;
51
u64
size
;
52
};
53
54
struct
perf_file_header
{
55
u64
magic
;
56
u64
size
;
57
u64
attr_size
;
58
struct
perf_file_section
attrs;
59
struct
perf_file_section
data
;
60
/* event_types is ignored */
61
struct
perf_file_section
event_types;
62
DECLARE_BITMAP
(adds_features,
HEADER_FEAT_BITS
);
63
};
64
65
struct
perf_pipe_file_header
{
66
u64
magic
;
67
u64
size
;
68
};
69
70
struct
perf_header
;
71
72
int
perf_file_header__read
(
struct
perf_file_header
*header,
73
struct
perf_header
*ph,
int
fd);
74
75
struct
perf_header
{
76
enum
perf_header_version
version
;
77
bool
needs_swap
;
78
u64
data_offset
;
79
u64
data_size
;
80
u64
feat_offset
;
81
DECLARE_BITMAP
(adds_features,
HEADER_FEAT_BITS
);
82
struct
perf_env
env;
83
};
84
85
struct
perf_evlist
;
86
struct
perf_session
;
87
88
int
perf_session__read_header
(
struct
perf_session
*
session
);
89
int
perf_session__write_header
(
struct
perf_session
*
session
,
90
struct
perf_evlist
*
evlist
,
91
int
fd,
bool
at_exit);
92
int
perf_header__write_pipe
(
int
fd);
93
94
void
perf_header__set_feat
(
struct
perf_header
*
header
,
int
feat);
95
void
perf_header__clear_feat
(
struct
perf_header
*
header
,
int
feat);
96
bool
perf_header__has_feat
(
const
struct
perf_header
*
header
,
int
feat);
97
98
int
perf_header__set_cmdline
(
int
argc
,
const
char
**argv);
99
100
int
perf_header__process_sections
(
struct
perf_header
*
header
,
int
fd,
101
void
*
data
,
102
int
(*process)(
struct
perf_file_section
*section,
103
struct
perf_header
*ph,
104
int
feat,
int
fd,
void
*data));
105
106
int
perf_header__fprintf_info
(
struct
perf_session
*s, FILE *fp,
bool
full);
107
108
int
perf_event__synthesize_features
(
struct
perf_tool
*
tool
,
109
struct
perf_session
*
session
,
110
struct
perf_evlist
*
evlist
,
111
perf_event__handler_t
process);
112
113
int
perf_event__synthesize_extra_attr
(
struct
perf_tool
*
tool
,
114
struct
perf_evlist
*
evsel_list
,
115
perf_event__handler_t
process,
116
bool
is_pipe);
117
118
int
perf_event__process_feature
(
struct
perf_tool
*
tool
,
119
union
perf_event
*
event
,
120
struct
perf_session
*
session
);
121
122
int
perf_event__synthesize_attr
(
struct
perf_tool
*
tool
,
123
struct
perf_event_attr *
attr
, u32 ids, u64 *
id
,
124
perf_event__handler_t
process);
125
int
perf_event__synthesize_attrs
(
struct
perf_tool
*
tool
,
126
struct
perf_session
*
session
,
127
perf_event__handler_t
process);
128
int
perf_event__synthesize_event_update_unit
(
struct
perf_tool
*
tool
,
129
struct
perf_evsel
*evsel,
130
perf_event__handler_t
process);
131
int
perf_event__synthesize_event_update_scale
(
struct
perf_tool
*
tool
,
132
struct
perf_evsel
*evsel,
133
perf_event__handler_t
process);
134
int
perf_event__synthesize_event_update_name
(
struct
perf_tool
*
tool
,
135
struct
perf_evsel
*evsel,
136
perf_event__handler_t
process);
137
int
perf_event__synthesize_event_update_cpus
(
struct
perf_tool
*
tool
,
138
struct
perf_evsel
*evsel,
139
perf_event__handler_t
process);
140
int
perf_event__process_attr
(
struct
perf_tool
*
tool
,
union
perf_event
*
event
,
141
struct
perf_evlist
**pevlist);
142
int
perf_event__process_event_update
(
struct
perf_tool
*
tool
,
143
union
perf_event
*
event
,
144
struct
perf_evlist
**pevlist);
145
size_t
perf_event__fprintf_event_update
(
union
perf_event
*
event
, FILE *fp);
146
147
int
perf_event__synthesize_tracing_data
(
struct
perf_tool
*
tool
,
148
int
fd,
struct
perf_evlist
*
evlist
,
149
perf_event__handler_t
process);
150
int
perf_event__process_tracing_data
(
struct
perf_tool
*
tool
,
151
union
perf_event
*
event
,
152
struct
perf_session
*
session
);
153
154
int
perf_event__synthesize_build_id
(
struct
perf_tool
*
tool
,
155
struct
dso
*pos, u16 misc,
156
perf_event__handler_t
process,
157
struct
machine
*
machine
);
158
int
perf_event__process_build_id
(
struct
perf_tool
*
tool
,
159
union
perf_event
*
event
,
160
struct
perf_session
*
session
);
161
bool
is_perf_magic
(u64 magic);
162
163
#define NAME_ALIGN 64
164
165
struct
feat_fd
;
166
167
int
do_write
(
struct
feat_fd
*fd,
const
void
*
buf
,
size_t
size
);
168
169
int
write_padded
(
struct
feat_fd
*fd,
const
void
*bf,
170
size_t
count,
size_t
count_aligned);
171
172
/*
173
* arch specific callback
174
*/
175
int
get_cpuid
(
char
*buffer,
size_t
sz);
176
177
char
*
get_cpuid_str
(
struct
perf_pmu
*pmu __maybe_unused);
178
int
strcmp_cpuid_str
(
const
char
*s1,
const
char
*s2);
179
#endif
/* __PERF_HEADER_H */
do_write
int do_write(struct feat_fd *fd, const void *buf, size_t size)
Definition:
header.c:129
perf_event__synthesize_event_update_name
int perf_event__synthesize_event_update_name(struct perf_tool *tool, struct perf_evsel *evsel, perf_event__handler_t process)
Definition:
header.c:3546
perf_file_header::attr_size
u64 attr_size
Definition:
header.h:57
perf_event__process_attr
int perf_event__process_attr(struct perf_tool *tool, union perf_event *event, struct perf_evlist **pevlist)
perf_env
Definition:
env.h:36
perf_session::evlist
struct perf_evlist * evlist
Definition:
session.h:25
compaction-times.argc
int argc
Definition:
compaction-times.py:270
HEADER_TRACING_DATA
Definition:
header.h:17
perf_event__handler_t
int(* perf_event__handler_t)(struct perf_tool *tool, union perf_event *event, struct perf_sample *sample, struct machine *machine)
Definition:
event.h:664
perf_event__synthesize_event_update_cpus
int perf_event__synthesize_event_update_cpus(struct perf_tool *tool, struct perf_evsel *evsel, perf_event__handler_t process)
Definition:
header.c:3565
get_cpuid_str
char * get_cpuid_str(struct perf_pmu *pmu __maybe_unused)
Definition:
header.c:38
machine
Definition:
machine.h:39
perf_event__synthesize_tracing_data
int perf_event__synthesize_tracing_data(struct perf_tool *tool, int fd, struct perf_evlist *evlist, perf_event__handler_t process)
Definition:
header.c:3805
version
static struct version version
Definition:
builtin-version.c:17
perf_file_section::offset
u64 offset
Definition:
header.h:50
perf_event__process_feature
int perf_event__process_feature(struct perf_tool *tool, union perf_event *event, struct perf_session *session)
stat-cpi.data
dictionary data
Definition:
stat-cpi.py:4
perf_file_header
Definition:
header.h:54
perf_file_header__read
int perf_file_header__read(struct perf_file_header *header, struct perf_header *ph, int fd)
Definition:
header.c:3012
perf_event__synthesize_event_update_unit
int perf_event__synthesize_event_update_unit(struct perf_tool *tool, struct perf_evsel *evsel, perf_event__handler_t process)
Definition:
header.c:3507
HEADER_NUMA_TOPOLOGY
Definition:
header.h:31
write_padded
int write_padded(struct feat_fd *fd, const void *bf, size_t count, size_t count_aligned)
Definition:
header.c:156
perf_header::feat_offset
u64 feat_offset
Definition:
header.h:80
perf_header__fprintf_info
int perf_header__fprintf_info(struct perf_session *s, FILE *fp, bool full)
Definition:
header.c:2628
perf_session__read_header
int perf_session__read_header(struct perf_session *session)
Definition:
header.c:3247
perf_pipe_file_header::size
u64 size
Definition:
header.h:67
HEADER_GROUP_DESC
Definition:
header.h:34
perf_pmu
Definition:
pmu.h:22
perf_file_section
Definition:
header.h:49
env.h
perf_event
Definition:
event.h:623
HEADER_STAT
Definition:
header.h:36
HEADER_ARCH
Definition:
header.h:23
perf_event__fprintf_event_update
size_t perf_event__fprintf_event_update(union perf_event *event, FILE *fp)
Definition:
header.c:3595
HEADER_RESERVED
Definition:
header.h:15
get_cpuid
int get_cpuid(char *buffer, size_t sz)
Definition:
header.c:20
perf_event__synthesize_attr
int perf_event__synthesize_attr(struct perf_tool *tool, struct perf_event_attr *attr, u32 ids, u64 *id, perf_event__handler_t process)
Definition:
header.c:3348
HEADER_FEAT_BITS
Definition:
header.h:41
feat_fd::buf
void * buf
Definition:
header.c:70
perf_event__synthesize_attrs
int perf_event__synthesize_attrs(struct perf_tool *tool, struct perf_session *session, perf_event__handler_t process)
Definition:
header.c:3634
perf_event__process_build_id
int perf_event__process_build_id(struct perf_tool *tool, union perf_event *event, struct perf_session *session)
perf_tool
Definition:
tool.h:44
session
static struct perf_session * session
Definition:
builtin-lock.c:34
evsel_list
static struct perf_evlist * evsel_list
Definition:
builtin-stat.c:137
HEADER_EVENT_DESC
Definition:
header.h:29
is_perf_magic
bool is_perf_magic(u64 magic)
Definition:
header.c:2967
perf_file_header::size
u64 size
Definition:
header.h:56
HEADER_FIRST_FEATURE
Definition:
header.h:16
DECLARE_BITMAP
static DECLARE_BITMAP(cpu_bitmap, MAX_NR_CPUS)
HEADER_PMU_MAPPINGS
Definition:
header.h:33
tool
static struct perf_tool tool
Definition:
builtin-diff.c:362
HEADER_CPUID
Definition:
header.h:26
perf_event__synthesize_event_update_scale
int perf_event__synthesize_event_update_scale(struct perf_tool *tool, struct perf_evsel *evsel, perf_event__handler_t process)
Definition:
header.c:3526
perf_event__process_event_update
int perf_event__process_event_update(struct perf_tool *tool, union perf_event *event, struct perf_evlist **pevlist)
perf_header__set_feat
void perf_header__set_feat(struct perf_header *header, int feat)
Definition:
header.c:76
perf_pipe_file_header::magic
u64 magic
Definition:
header.h:66
perf_header__process_sections
int perf_header__process_sections(struct perf_header *header, int fd, void *data, int(*process)(struct perf_file_section *section, struct perf_header *ph, int feat, int fd, void *data))
Definition:
header.c:2856
perf_evsel
Definition:
evsel.h:90
dso
Definition:
dso.h:138
event
#define event
Definition:
parse-events-flex.c:1944
perf_event__process_tracing_data
int perf_event__process_tracing_data(struct perf_tool *tool, union perf_event *event, struct perf_session *session)
HEADER_HOSTNAME
Definition:
header.h:20
HEADER_CMDLINE
Definition:
header.h:28
perf_session__write_header
int perf_session__write_header(struct perf_session *session, struct perf_evlist *evlist, int fd, bool at_exit)
Definition:
header.c:2765
feat_fd
Definition:
header.c:67
HEADER_LAST_FEATURE
Definition:
header.h:40
HEADER_BRANCH_STACK
Definition:
header.h:32
PERF_HEADER_VERSION_2
Definition:
header.h:46
perf_event__synthesize_extra_attr
int perf_event__synthesize_extra_attr(struct perf_tool *tool, struct perf_evlist *evsel_list, perf_event__handler_t process, bool is_pipe)
Definition:
header.c:3663
perf_file_section::size
u64 size
Definition:
header.h:51
HEADER_SAMPLE_TIME
Definition:
header.h:38
event.h
perf_event__synthesize_build_id
int perf_event__synthesize_build_id(struct perf_tool *tool, struct dso *pos, u16 misc, perf_event__handler_t process, struct machine *machine)
Definition:
header.c:3894
perf_header::data_offset
u64 data_offset
Definition:
header.h:78
HEADER_BUILD_ID
Definition:
header.h:18
perf_session::header
struct perf_header header
Definition:
session.h:23
HEADER_OSRELEASE
Definition:
header.h:21
perf_header
Definition:
header.h:75
strcmp_cpuid_str
int strcmp_cpuid_str(const char *s1, const char *s2)
Definition:
pmu.c:584
HEADER_NRCPUS
Definition:
header.h:24
perf_event__synthesize_features
int perf_event__synthesize_features(struct perf_tool *tool, struct perf_session *session, struct perf_evlist *evlist, perf_event__handler_t process)
Definition:
header.c:3382
HEADER_CPUDESC
Definition:
header.h:25
HEADER_AUXTRACE
Definition:
header.h:35
HEADER_CACHE
Definition:
header.h:37
attr
Definition:
attr.py:1
perf_file_header::magic
u64 magic
Definition:
header.h:55
perf_pipe_file_header
Definition:
header.h:65
perf_evlist
Definition:
evlist.h:27
perf_session
Definition:
session.h:22
perf_header::needs_swap
bool needs_swap
Definition:
header.h:77
perf_header_version
perf_header_version
Definition:
header.h:44
HEADER_CPU_TOPOLOGY
Definition:
header.h:30
perf_header__clear_feat
void perf_header__clear_feat(struct perf_header *header, int feat)
Definition:
header.c:81
PERF_HEADER_VERSION_1
Definition:
header.h:45
perf_header__has_feat
bool perf_header__has_feat(const struct perf_header *header, int feat)
Definition:
header.c:86
pmu.h
HEADER_TOTAL_MEM
Definition:
header.h:27
HEADER_VERSION
Definition:
header.h:22
perf_header__set_cmdline
int perf_header__set_cmdline(int argc, const char **argv)
HEADER_MEM_TOPOLOGY
Definition:
header.h:39
perf_header::data_size
u64 data_size
Definition:
header.h:79
perf_header__write_pipe
int perf_header__write_pipe(int fd)
Definition:
header.c:2743
util
header.h
Generated by
1.8.13