x86-64"线性地址"来自Linux用户空间的PEBS?

时间:2015-09-30 15:03:55

标签: linux linux-kernel x86-64

是否可以直接从Linux用户空间进程使用Haswell CPU功能PEBS(基于精确事件的采样)而不是使用内核接口?

我已成功使用RDPMC指令从用户空间访问性能计数器,并仅使用内核进行WRMSR。这让我很开心。

现在我想要访问PEBS。为此,我需要使用MSR IA32_DS_AREA来提供"调试存储"记忆区。但是,我不知道如何分配这个内存以及我需要使用的地址。我可以分配2MB的连续物理内存(带有mlock()的Linux HugeTLB)。我也可以解析这个内存的物理地址(通过procfs)。但是,我不确定虚拟地址或物理地址是否适合作为"线性地址"供应MSR。 (我担心的是,地址可能必须位于我无法访问的内核虚拟地址空间中。)

如何在不编写自定义内核模块的情况下为IA32_DS_AREA准备合适的内存并记录PEBS事件?

1 个答案:

答案 0 :(得分:0)

是的,可以使用perf基础设施(避免使用RDPMC / WRMSR)。您可以在this Github repo中找到几个示例,更具体地说,tests/record_sample目录中的测试有多个示例,通过perf使用PEBS基础结构。