我有一个关于当两个相同规格的盒子显示不同结果时对性能的影响的问题
Box1:
lscpu
Architecture: x86_64
CPU op-mode(s): 32-bit, 64-bit
Byte Order: Little Endian
CPU(s): 16
On-line CPU(s) list: 0-15
Thread(s) per core: 1
Core(s) per socket: 8
Socket(s): 2
NUMA node(s): 2
Vendor ID: GenuineIntel
CPU family: 6
Model: 58
Model name: Intel(R) Xeon(R) CPU E5-2690 v2 @ 3.00GHz
Stepping: 0
CPU MHz: 2999.999 <=============
BogoMIPS: 5999.99 <=============
Hypervisor vendor: VMware
Virtualization type: full
L1d cache: 32K
L1i cache: 32K
L2 cache: 256K
L3 cache: 25600K
NUMA node0 CPU(s): 0-7
NUMA node1 CPU(s): 8-15
Box2:
lscpu
Architecture: x86_64
CPU op-mode(s): 32-bit, 64-bit
Byte Order: Little Endian
CPU(s): 16
On-line CPU(s) list: 0-15
Thread(s) per core: 1
Core(s) per socket: 8
Socket(s): 2
NUMA node(s): 2
Vendor ID: GenuineIntel
CPU family: 6
Model: 58
Model name: Intel(R) Xeon(R) CPU E5-2690 v2 @ 3.00GHz
Stepping: 0
CPU MHz: 3000.00 <=============
BogoMIPS: 6000.00 <=============
Hypervisor vendor: VMware
Virtualization type: full
L1d cache: 32K
L1i cache: 32K
L2 cache: 256K
L3 cache: 25600K
NUMA node0 CPU(s): 0-7
NUMA node1 CPU(s): 8-15
对于在两个节点上运行的同一应用程序,我发现 Box1 上的平均负载高出 2 到 3 倍(与 Box2 相比) 我在输出中看到的唯一区别是 lscpu 输出中 CPU MHz 的数字相差一小部分。 为什么我们会看到实际 CPU 的这种差异,并且会因此而产生性能差异吗?
唯一的区别是 bogomips 校准随机得到一个稍低的值,例如晶体振荡器可能会关闭百分之几,或者只是 CPU 核心时钟与 Linux 用于对 bogomips 循环计时的任何时钟之间的纯粹计时工件。
所以这不能解释任何事情,并且与您观察到的任何显着的软件性能差异无关。显然,如果没有任何细节,我们无法告诉您更多信息。
对巨大性能差异的解释的可能猜测可能包括 RAM 配置,比如它们都填充了所有内存控制器吗?
否则几乎肯定会存在一些软件差异。就像运行调试构建一样,或者构建二进制文件的方式、它使用的库、或者内核或内核配置方面存在一些差异。或者运行在不同的数据上,并且您的应用程序对不同的数据敏感。
或者,如果您的 VMware 配置有其中一个虚拟机将其 CPU 核心映射到裸机上较少的物理核心,例如当虚拟机中的内核认为它们不是时,它们会通过超线程进行竞争。或者如果来宾内核有关于 NUMA 的错误信息。
显然,如果您的虚拟机与其他工作负载共享其中一个虚拟机上的裸机!
同一 Xeon CPU 型号的不同实例之间的核心间延迟可能存在细微差异,具体取决于启用的核心在环形总线上的具体位置。 (除了每个核心数量的高端型号外,每个芯片上的一些核心由于缺陷或只是为了市场细分而被熔断。)但这影响非常小,并且仅在核心间延迟方面。
但是对于您关于测量的 CPU 频率有 0.001 MHz 差异的问题来说,这完全是偏离主题的。我们可以有把握地说这不是一个解释。如果您确实想问这个问题,请发布一个单独的问题,并在您的申请中提供完整的详细信息。但可能只有你才能发现一些差异,一些关于相同事物的错误假设。也许在机器上运行一些其他基准测试,特别是预编译以排除编译器差异。