2017-06-16 142 views
0

当我读取perf_event_open()manual之后,我有一些关于捕获采样事件中缓冲区大小的问题。什么是Perf缓冲区大小?

在描述中部分,它说,

的取样事件周期性地写入测量然后可以经由MMAP(2)访问的 缓冲器。

当缓冲区溢出时,PMU会触发PMI,我们可以通过mmap()系统调用来访问缓冲区的内容。 (我的理解是否正确?)

但问题是,Perf缓冲区有多大?我可以设置一个新的值(缓冲区长度)来覆盖它吗?

变量__u64 data_sizestruct perf_event_mmap_page中只表示此时的记录大小。

回答

1

当您说您可以使用mmap定期收集perf数据时,您的理解是正确的。

在我开始之前,perf使用两个缓冲区来记录不同类型的事件。 在主环形缓冲区(环形缓冲区包含此辅助缓冲区)下使用辅助缓冲区,以存储不同种类的事件信息。既然你问我主要的性能缓冲区,我会尝试回答这个问题。

您可以修改perf缓冲区大小。根据文档,perf缓冲区大小根据页面定义。它被定义为1 + 2^n页面,其中需要一个页面来存储关于perf使用的环形缓冲区的元数据。

当您尝试记录事件,使用perf record,(阅读PERF记录手册页),你将有一个开关-m这将允许您指定的网页,这将增加/减少PERF环形缓冲区数量。您指定的(mmap)页面的数量必须是的功率(但您也可以直接指定大小)将页数增加1将增加环形缓冲区大小4kB(其中是页面大小,在代码中由12)指定。

但是,据我所知,这个页数只会达到2^31。而且,使用如此巨大的缓冲区将不会有记录任何事件或记录任意事件的风险。

+0

感谢您的回答,我明白了。 :) –