首先我们看一下对应的perf_header
struct perf_event_header {
__u32 type;
__u16 misc;
__u16 size;
};
-
type (
__u32
): 表示 perf 事件的类型。每种类型的事件都有其特定的值,例如PERF_RECORD_SAMPLE
表示采样事件,PERF_RECORD_LOST
表示丢失事件等。 -
misc (
__u16
): 包含一些额外的信息。例如,它可以指示事件发生时的 CPU 模式(用户模式、内核模式等),这可以通过PERF_RECORD_MISC_CPUMODE_MASK
来获取。 -
size (
__u16
): 表示 perf 事件记录的总大小(以字节为单位)。这个大小包括了struct perf_event_header
本身以及后续的事件特定数据。
这个结构体是 perf 事件数据格式的核心部分,每个 perf 事件记录都以它作为开始。在处理 perf 事件时,用户空间程序首先读取这个头部,然后根据 type
字段确定后续数据的格式,并使用 size
字段来确定整个记录的长度。
介绍完这个定义,我们继续看下面的定义:
//普通的事件
typedef struc