当两个相同规格的盒子显示不同的结果时,我有一个关于性能影响的问题。
Box1: lscpu体系结构: x86_64 CPU操作模式:32位,64位字节顺序:小终端CPU :16个在线CPU列表:每个核心:1个核心:8个套接字:2个NUMA节点:2个供应商ID: GenuineIntel系列:6个型号:58个型号名称:英特尔(R) Xeon(R) CPU E5-2690 v2 @ 3.00GHz步进:0 CPU MHz: 2999.999 <============= BogoMIPS: 5999.99 <=============超级管理程序供应商: VMware虚拟化类型:完全L1d缓存: 32K L1i缓存: 32K L2缓存:256 k L3缓存:25600 K NUMA node0 CPU(s):0-7 NUMA node1 CPU: 8-15
Box2: lscpu体系结构: x86_64 CPU操作模式:32位,64位字节顺序:小终端CPU :16个在线CPU列表:每个核心:1个核心:8个套接字:2个NUMA节点:2个供应商ID: GenuineIntel系列:6个型号:58个型号名称:英特尔(R) Xeon(R) CPU E5-2690 v2 @ 3.00GHz步进:0 CPU MHz: 3000.00 <============= BogoMIPS: 6000.00 <=============超级管理程序供应商: VMware虚拟化类型:完全L1d缓存: 32K L1i缓存: 32K L2缓存:256 k L3缓存:25600 K NUMA node0 CPU(s):0-7 NUMA node1 CPU: 8-15
对于运行在两个节点上的同一个应用程序,我看到Box1上的负载平均比Box1高2倍到3倍(与Box1相比),我在输出中看到的唯一不同就是在lscpu输出中,CPU MHz中的数字被一个分数的值所抵消。为什么我们在实际CPU上会看到这样的差异,因为这会不会有额外的差异呢?
发布于 2022-03-11 09:16:46
唯一的区别是,博戈米普的校准随机得到一个稍低的值,例如,一个晶体振荡器可能会降低百分之一,或者仅仅是CPU核心时钟和Linux用来计时博戈米普循环的时钟之间的一个纯粹的计时伪影。
因此,这并不能解释任何事情,而且与您所观察到的任何重要的软件性能差异无关。显然,如果没有任何细节,就不能告诉您更多的内容。
对于一个很大的perf差异的解释,可能的猜测可能包括RAM配置,比如它们都填充了所有内存控制器吗?
否则,几乎肯定会有一些软件差异。就像运行一个调试版本,或者在构建二进制文件的方式上,或者在它使用的库中,或者在内核或内核配置中,都有一些不同。或者在不同的数据上运行,您的应用程序对不同的数据很敏感。
或者,如果您的VMware配置中有一个VM将其CPU核心映射到裸露金属上的较少物理核,例如,当VM中的内核假设内核不是超线程时,就会通过超线程进行竞争。或者如果来宾内核有关于NUMA的错误信息。
显然,如果您的VM是与其他一些工作负载共享其中之一的裸金属!
同一Xeon CPU模型的不同实例之间的内核间延迟可能略有差异,具体取决于启用的内核在环形总线上的位置。(除了每一个核心数的高端模型外,每个模具上的一些核心由于缺陷或只是为了市场细分而被熔化。)但这是一个非常小的影响,只在核心间的延迟。
但是对于你的问题来说,这是一个关于测量的CPU频率的.001 MHz差异的非主题。我们可以有把握地说这不是一个解释。如果你真的想问这个问题,你可以发布一个单独的问题,上面有你的申请的全部细节。但很可能只有你能找到一些不同的东西,一些错误的假设,一些相同的东西。可能在机器上运行其他一些基准测试,特别是预编译,以排除编译器之间的差异。
https://stackoverflow.com/questions/71434827
复制相似问题