【问题标题】:How to calculate the performance of a algorithm on a high-performance machine through a machine whose performance is low in performance testing?如何通过性能测试中性能低的机器来计算算法在高性能机器上的性能?
【发布时间】:2015-11-09 12:14:06
【问题描述】:

例如,如果我想计算推荐算法的性能,我在具有两个 4G 内部存储的 linux 机器上对其进行测试。结果是:响应时间-40ms,cpu负载:2,虚拟用户数为20,RAM消耗为70%。那么该算法在负载为 4 的 4 核 8G 内部存储(或 8 核 16G 存储...)的 linux 机器上的性能如何? PS:操作系统是“Red Hat Enterprise Linux Server release 5.7 (Tikanga)”,程序在jvm上运行。双机的操作系统和运行环境是一样的。我知道理想情况下负载为 4 时性能翻倍,负载为 2 时结果相同,但实际上结果不同。 所以,问题是:如果我们知道以下参数:

cpu 负载:x

响应时间:y ms

虚拟用户数:z(并发数)

内存消耗:m%

对于低性能机器上的算法,我们可以计算它在高性能机器上的性能(或 tps)吗?如果可以,怎么做?如果不能,是参数不够还是结果参差不齐?

为了简化问题,我想考虑两种极端情况。首先,应用程序只是计算,也就是说,算法只计算数据,所以它只与cpu有关(负载和cpu可能会高一倍)。第二种情况是,算法只从web读取数据,也就是说它不计算任何东西(负载可能很高,但cpu很低)。

【问题讨论】:

  • 您的应用程序(CPU、磁盘、RAM)的瓶颈是什么?如果你不能明确指出其中之一,并且三个都很重要,那么还有像cache 这样的东西,它可以显着(按顺序)提高性能。
  • 你是对的,我改变了我的问题。为了简化问题,我假设我没有在代码中使用任何缓存。

标签: linux performance


【解决方案1】:

一般来说,你不能。并不真地。是的,这主要是因为我们所体验的“性能”确实以非常复杂的方式依赖于环境。

但还是有希望的:在某些情况下,您了解软件的工作原理并且您会发现运行的硬件存在明显的瓶颈。在这种情况下,当“更大”来自于添加瓶颈资源时,您可以在非常有限的范围内对您的软件在“更大”机器上的性能进行有根据的猜测。猜测将一直有效,直到您将瓶颈资源扩展到不再是瓶颈为止。通常,另一个资源会悄悄地接管。

例如,让我们考虑一个非常简单的受 CPU 限制的算法的情况,例如在具有慢速硬盘的 2 核机器上编译 PhantomJS。您的计量工具以 95+% 和 1 小时的总运行时间显示 2 个内核。当您知道并行化将扩展到更多内核时,无论您是否添加 PB 内存和超高速 SSD,您都可以放心地期望在 4 核机器上运行 30 分钟。但是,当您添加许多内核时,情况可能会发生变化,例如就像我生产机器上的 80 一样。编译器可能无法有效地并行化,或者您的磁盘将无法足够快地读取和写入文件以使所有内核都处于攻击状态。 SSD 可能会有所帮助。或者您尝试添加更多内存。但是这会支持你的编译吗?您只能猜测,除非您对所使用的所有软件有非常透彻的了解。当你投入其中时,你的筹码很可能会给你带来很多惊喜。

从这个问题来看,我们对您的案例知之甚少,但您似乎期望您的工作是单线程的并且纯粹受 CPU 限制。在这种情况下,您会期望用户数量或单核性能的完美扩展,直到您达到给定硬件的上限。看起来它不是,所以你的工作就是找出瓶颈在哪里。它是软件开发中最复杂的任务之一并且它与性能调整紧密交织在一起,因为一旦您了解了瓶颈所在,您可能会得出下一步要扩展什么资源或您可以优化您的软件,以更加谨慎地使用该资源。

您的问题(关于 CPU 和/或网络)的后续扩展表明您已经在朝着正确的方向思考。

【讨论】:

  • 还有一个问题。您说“编译器可能无法有效地并行化,或者您的磁盘将无法足够快地读取和写入文件以使所有内核都处于攻击状态”,这是正确的。但是如果是生产机的硬件配置是开发机的两倍(包括内存或者核心等)呢?我们可以估计一个可能的值吗?或者我们如何评估任务调度对不同机器的影响?
  • 在您问题的扩展中,您表示还涉及网络访问。互联网访问也会有双倍带宽吗? Web 服务的服务器也会翻倍吗?更重要的是:当您提供“双重”资源时:您的软件是否真的利用了它?或者即使是对一种资源的最轻微扩展也能提高您的表现?你不仅要了解你的代码,还要了解底层的编程环境、数据库、操作系统,甚至互联网。很抱歉,但没有灵丹妙药。
  • 你是对的。性能视实际情况而定。但我还是很好奇。如果可能的话,我会发布一些具体的应用程序来分析。
猜你喜欢
  • 2012-07-15
  • 1970-01-01
  • 1970-01-01
  • 2011-08-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-12
  • 1970-01-01
相关资源
最近更新 更多