内存带宽性能偏低问题处理和经验总结

最近处理了一个关于内存性能偏低的问题,总结一下处理过程和一些内存性能、压测的知识。首先内存的理论带宽值是可以计算出来的,公式如下

64/8*频率*channel数量*70%

举例,客户12根内存在推荐插法下,带宽只有7W多的MB/s,而根据计算,2933的频率,客户机器的理论内存带宽应该在19万MB/s左右。对于一般性能差异,可能主要从BIOS设置着手,对于如此大的性能差距,就要需要考虑内存插法、CPU平台特性相关的问题了,最终客户现场定位下来主要是和使用的工具相关,stream内存性能测试工具有不同编译器的版本,客户使用的是gcc,而在海光CPU平台上gcc编译器的stream亲和性很差,性能表现会很差,如果使用open64编译器的stream,数据可以达到12万以上,尽管还是远小于理论数值,但是12dimm并非CPU厂家推荐的配置,因此也可以理解

总结遇到内存带宽性能偏低时的调优排除思路

  1. 一般先要算一下理论带宽数值,来确定一下目标,并判断差异大小,差异小的只需要进行简单调优,差异大的需要看一些严重影响内存带宽的因素
  2. 如果差距较大,最快速的是查看影响内存带宽性能最大的一个BIOS选项,也就是numa节点的设置,根据测试结果来看,如果numa设置关闭了,数据会非常差。Numa打开之后,数量越多,带宽值也越高。如果差距比较小,需要进行调优,可以把BIOS下的IOMMU和超线程关闭,并考虑CPU性能模式的设置
  3. 内存插法对性能的影响也非常大,通常来说机器默认出厂的内存插法会按照服务器厂商对该数量的推荐插法来,但是推荐插法一般是CPU厂商提供的。服务器厂商的插法不一定就是正确的,可能会出现错误的情况。因此可以根据经验改变插法进行测试,或者直接咨询相关CPU厂商确认
  4. 如果以上均排除过,也可以看下不同编译器的stream工具的结果是否存在差异,不排除一些不够成熟的CPU平台会有这样的问题
  5. 如果这种问题不是普遍情况,而是某个机器上 的个例情况,那理论上和异常的内存有关,这个时候一方面可以通过更换内存条来确认,也可以用内存压测工具确认是否有异常

推荐一个开源的好用的内存压测工具,memtester,使用方法如下。./ memtester [runs]
:内存大小,单位M [runs]:运行次数
比如: ./memtester 2900M 10
指定的内存越多,测试完成一次的时间就越久,下面两张图是指定了64000MB内存进行测试,并用top观察到确实有这么多的内存正在被使用,且因为总内存容量为128G,测试进程也大致占了百分之50的内存


压测命令.PNG

内存压测top.PNG

你可能感兴趣的:(内存带宽性能偏低问题处理和经验总结)