如何在Linux内核中禁用perf子系统?


15

我正在运行一些基准测试。我的基准测试运行程序会监控实验之间的dmesg缓冲区,寻找可能影响性能的任何内容。今天它抛出了这个:

[2015-08-17 10:20:14警告] dmesg似乎已更改!差异如下:
--- 2015-08-17 09:55:00
+++ 2015-08-17 10:20:14
@@ -825,3 +825,4 @@
 [3.802206] [drm]启用RC6状态:RC6打开,RC6p关闭,RC6pp关闭
 [7.900533] r8169 0000:06:00.0 eth0:链接
 [7.900541] IPv6:ADDRCONF(NETDEV_CHANGE):eth0:链接已准备就绪
+ [236832.221937] perf中断花费的时间太长(2504> 2500),将kernel.perf_event_max_sample_rate降低为50000

经过一番搜索,我现在知道这与Linux内核中称为“ perf”的性能分析子系统有关。我认为我们不需要这个,所以我想完全禁用它。

再次搜索,发现sysctl perf_cpu_time_max_percent可以提供帮助。这里有人建议通过将其设置为0来禁用它。在这里阅读更多内容:

perf_cpu_time_max_percent:

提示内核应将多少CPU时间用于处理性能采样事件。如果性能子系统被告知其采样数已超过此限制,它将降低其采样频率以尝试减少其CPU使用率。

在NMI中会进行一些性能采样。如果这些样本出乎意料地花费太长时间执行,则NMI可能会紧挨在一起堆叠在一起,以致其他任何东西都不允许执行。

0:禁用该机制。无论花费多少CPU时间,都不要监视或校正perf的采样率。

1-100:尝试将perf的采样率限制为该CPU百分比。注意:内核会计算每个样本事件的“预期”长度。这里的100表示​​预期长度的100%。即使将其设置为100,如果超过此长度,您仍可能会看到样品节流。如果您确实不关心消耗了多少CPU,则设置为0。

在我看来,这听起来像0,意味着不再检查分析采样率,但是freq子系统保持运行状态(?)。

谁能阐明如何使用freq完全禁用内核性能分析?

编辑:有人建议我尝试在没有性能的情况下构建内核,但是我什至认为这是不可能的。该选项似乎不可切换:

菜单配置

EDIT2:经过更多阅读后,我决定可以将其设置kernel.perf_event_max_sample_rate为零。即每秒没有样本。但是,您也不能做到这一点(source):

提交02f98e3e36da106338b7c732fed516420fb20e2a
作者:纳特·彼得森(Knut Petersen) 
日期:2013年9月25日星期三14:29:37 +0200

perf:将1强制为perf_event_max_sample_rate的下限

编辑3:FWIW perf_cpu_time_max_percent设置为25,这意味着内核花费了其硬件采样时间的25%以上。这对于基准测试机是不可接受的。

我现在确定将其设置perf_cpu_time_max_percent为零只会使情况恶化,因为内核将继续使用其25%以上的时间读取硬件寄存器。该错误会触发以调整采样率,从而尝试确保内核满足其配额(使用小于25%的时间作为perf)。25%仍然太高恕我直言。

如果我真的不能禁用性能,则最好的折衷办法可能是设置perf_event_max_sample_rate为1。

EDIT4:一位朋友建议我可能对的含义有误解perf_cpu_time_max_percent,因此上述说法可能不正确。值25表示内核使用了为服务性能中断保留的任意长度的25%以上。

编辑5:

如注释中所指出,-*-对perf选项的使用表明该功能是由另一个启用的功能强制启用的。如果我查看help,它会显示以下功能:

救命

我认为我不能在这里赢球。布尔公式selected by

如果您的目标是X86,或者...

我刚刚检查了X86_64的定位确实可以启用CONFIG_X86。这样看来,一旦您瞄准X86或X86_64,您就会获得性能。

因此,我想将我的问题稍微更改为:

我可以使用哪些性能设置来最小化内核在性能例程中所花费的时间?

请记住,总体目标是控制基准的随机变化源。如果无法禁用性能,如何最大程度地减少对基准的影响?


1
您应该能够在前一个屏幕上禁用性能。
迈克尔·汉普顿

1
您是说“分析支持”吗?如果禁用此功能,我仍然无法取消选中上图所示的选项。另外,如果我检查.config,则有CONFIG_HAVE_PERF_EVENTS=yCONFIG_PERF_EVENTS=y。我不认为这是残疾人行为。
Edd Barrett

2
该消息是信息性的。内核会自动确定在不影响系统性能的情况下可以使用的采样率,并且即使未激活甚至没有安装perf也会记录该采样率。当系统负载较高或有频率缩放比例时,您通常会收到这些消息。
布赖恩

1
该符号-*-确实表示某些子系统取决于perf模块。Help显示了需要禁用以将选项更改为[*]或的依赖关系树[M]
Rufo El Magufo 2015年

4
我修改了问题以考虑到这一点。简而言之,在X86_64上perf似乎是必需的。
Edd Barrett

Answers:


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.