我正在使用perf_event实用程序来收集内核空间中的PEBS示例。如何从perf_sample_data获取上下文信息(中断/ nmi上下文,程序上下文)?我可以看到perf_regs包含寄存器信息。哪个寄存器位指示样本的上下文?
更新
我在用户空间使用perf_event_open并在perf事件处理程序中修改内核。我正在为Intel Broadwel机器配置具有以下属性(mem trans detired)的perf_event。
struct perf_event_attr pe = {
.type = PERF_TYPE_RAW,
.size = sizeof(struct perf_event_attr),
.sample_period = 10003,
.sample_type = PEBS_SAMPLE_TYPE,
.exclude_user = 1,
.exclude_kernel = 0,
.exclude_hv = 0,
.disabled = 0,
.config = 0x1cd,
.config1 = 0x3,
.precise_ip = 3,
.exclude_callchain_kernel = 0,
.read_format = PERF_FORMAT_GROUP | PERF_FORMAT_ID,
.task = 1,
};
perf_event_open(&pe, processId, -1, -1 /*group*/, 0);
在内核空间perf事件处理程序中,我在每个示例事件上都有perf_sample_data。如何知道样本是从中断处理程序中获取还是样本来自进程上下文?