限制CPU速度进行性能分析

11

我正在尝试优化应用程序中的几个瓶颈,该程序应该在广泛的CPU和架构上运行(其中一些非常接近嵌入式设备)。

然而,由于我的CPU速度过快,我的分析器结果并不真正显著。是否有任何方法(最好在Windows或Mac OS X下)限制我的CPU速度以进行分析?

我考虑使用虚拟机,但没有找到带有这种功能的虚拟机。

6个回答

4

3
这是一个常见的误解,认为你需要知道代码运行速度才能知道性能问题所在。那混淆了问题发现和问题测量的概念。 我使用的方法如下。
如果程序中有一些浪费性逻辑,无论在什么样的 CPU 上运行,都会是浪费的。
你需要知道的是它在哪里。对于测量,你不需要知道它有多大;你只需要知道它足够大需要被修复。
通常存在许多不同大小的问题。你可能会首先发现最大的问题,但无论你以何种顺序解决它们,每一个被解决的问题都会使发现剩余问题变得更容易,因为它们占比更大。

你说得有道理,但首先你必须找出是否存在问题。如果你的代码效率低下,但是这种低效被I/O等待时间所掩盖,那么优化它就没有意义。因此,系统组件之间的速度关系对性能测试很重要,这就是为什么他需要降低CPU速度的原因。 - sleske
@sleske:这就是为什么我不喜欢过分区分CPU时间和阻塞时间。性能缺陷可能由其中任何一个过多引起,但OP并没有真正提到I/O。我的观点是,在1ghz和1hz时,用10个指令来完成一项任务,而1个指令就足够了,这样做同样浪费。我认为百分比比时间更重要,以便隔离浪费。 - Mike Dunlavey
1
@sleske:...我觉得我表达得不太好。这里有一个例子(https://dev59.com/mnNA5IYBdhLWcg3whuV_#927773),其中存在一系列性能问题,大小差异约为2个数量级,其中之一是I/O问题。在解决了一些更大的问题后,最终发现I/O问题最为突出。如果CPU速度不同,这个问题将出现在不同的时间点上。 - Mike Dunlavey
真实的、好的例子。"那只是在不同的时间点出现而已":这正是我的观点。如果目标系统的CPU速度较慢,优化CPU使用率会更经济,如果OP想要这样做,他/她需要一个“慢”CPU。否则,他/她将进行大量的I/O优化,只发现I/O时间被目标系统上的CPU运行时间所压倒。 - sleske
@sleske:我认为我们完全同意 :) 我只是想指出,如果你可以忽略I/O,那么CPU的速度对于尽可能使代码快速运行而言并没有任何影响。我之所以这样说,是因为在衡量速度及其准确性方面有太多的强调,而这仅适用于评估调优结果,并且在定位需要调优的内容方面价值有限。无论如何,您提出了很好的观点,谢谢。 - Mike Dunlavey

1

很抱歉,我不知道除了在你的地区寻找旧硬件之外还有什么答案。 CPU并不是唯一可以(通常)影响事情的变量。 L1 / L2缓存大小,内存总线速度,内存速度/延迟,硬盘速度等在许多应用程序中都是重要因素。


0
我考虑过使用虚拟机,但没有找到具有这种功能的虚拟机。
为什么需要显式提供该功能的虚拟机?只需在主机操作系统中限制虚拟机的 CPU 使用率(在那里它只是常规进程)即可达到完全相同的效果。
您可以在 Linux 上使用 cpulimit 进行此操作;类似的解决方案也存在于 MS Windows 上。

这会导致CPU非常不稳定,例如前半秒快速运行,然后在接下来的半秒钟内没有任何运行——这取决于虚拟机系统的工作方式。 - Ian Ringrose

0
最近在Downloadsquad.com上有一个应用程序。我不记得它的名字,但它可以处理一些有趣的事情,比如处理器和任务管理器。它可能只是用来管理哪个CPU上有哪些应用程序,但也许它会给你这个。今天下午我会试着找到它,如果我找到了,我会回复你的。

0
许多分析工具(例如oprofile - 但这只适用于Linux)允许您设置它们收集数据的频率。请查看您的分析工具是否支持此功能,如果不支持,请尝试使用另一个支持此功能的工具。

我认为他想要减慢CPU的速度,以便CPU速度与其他操作(如I/O、用户输入等)之间的关系更接近于旧系统上的关系。我不明白增加收集频率如何有助于解决这个问题。 - sleske
@sleske 我认为他的意思是CPU速度非常快,因此收集了很少的性能样本,因此没有返回有意义的数据。 - Greg Rogers

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接