基于 CPU 类型的 JVM 性能

JVM performance based on CPU type

我不知道是否有直接的答案。我有不同 CPU 类型的规格。例如,两个实例 A 和 B。 我想在 A 和 B 中 运行 一些简单的 java 控制台应用程序。根据他们的规范,我可以在知道 A 上的 运行 时间后假设 B 的 运行 时间吗?

第二个问题是关于核心数字的。那么,我是否可以在知道具有 j 核的同一台机器上的结果后假设具有 i 核的机器的时间 运行?

是否有一些近似值?我说的实例是 Amazon EMR 实例。

谢谢。

Based on their specifications, can I [estimate] the runtime of B after knowing the runtime on A?

答案是否定的。或者至少,没有任何准确性或信心。应用程序的性能通常取决于算法的内存访问模式、内存缓存和虚拟内存硬件之间的复杂交互。如果您将应用程序视为黑盒,则无法预测这些,即使您了解它在做什么,也很难对其进行建模。 GC 也可能有同样的不可预测的行为。

Can I [estimate] the runtime of machine with i cores after knowing the result on the same machine with j cores?

答案是否定的。随着内核数量的增加,应用程序性能在很大程度上取决于您设计和实现应用程序的方式。在最好的情况下,您可以线性加速……达到平台内存系统的极限。在最坏的情况下,您根本无法获得任何加速。


唯一可行的解​​决方案是进行猜测...然后尝试各种替代平台,看看您的应用程序在这些平台上的表现如何。

I don't know if there is a straightforward answer to this. I have the specifications of different CPU types. For example, two instances,A and B. I want to run some simple java console application in A and B. Based on their specifications, can I assume the runtime of B after knowing the runtime on A?

您可以使用 PassMark 等基准查看相对性能来猜测它。但是,您会看到本应更快的系统实际上更慢的情况。这只是一个非常粗略的估计。

Second questions is about the core numbers. So, can I assume the runtime of machine with i cores after knowing the result on the same machine with j cores?

说你拥有双倍的核心数量,你将获得双倍的性能是极不可能的。

  • 您的应用程序可能无法按内核数量进行扩展,因为您的瓶颈可能是其他资源,例如网络,或者磁盘,或者你的程序有太多的顺序编码。
  • 当您拥有更多内核时,这些内核的速度往往会持续变慢,因为插槽只能产生这么多热量。

Is there some approximations on this? The instances I am talking are Amazon EMR instances.

如果说的是虚拟机而不是真机,那就更难估计了。您可能会发现具有相同规格的两个虚拟机的性能并不相同。例如由于您的应用程序可能 运行 在不同的时间在不同的机器上运行,您可能会发现它的性能会有所不同,即使机器的规格应该大致相同。