如何衡量内存的性能

一台服务器,不管是物理机还是虚拟机,必不可少的就是内存,内存的性能又是如何来衡量呢。
1. 内存与缓存
现在比较新的cpu一般都有三级缓存,l1 cache(32kb-256kb),l2 cache(128kb-2mb),l3 cache(1m-32m)。缓存逐渐变大,cpu在取数据的时候,优先从缓存去取数据,取不到才去内存取数据。
2. 内存与时延
显然,越靠近cpu,取数据的速度越块,通过lmbench进行了读数延迟的测试。
从上图可以看出:
intel(r) xeon(r) platinum 8163 cpu @ 2.50ghz 这款cpu的l1d cache,l1i cache为32kb,而l2 cache为1m,l3为32m;
在对应的cache中,时延是稳定的;
不同缓存的时延呈现指数级增长;
所以我们在写业务代码的时候,如果想要更快地提高效率,那么使得计算更加贴近cpu则可以获取更好的性能。但是从上图也可以看出,内存的时延都是纳秒为单位,而实际业务中都是毫秒为单位,优化的重点应该是那些以毫秒为单位的运算,而内存时延优化这块则是长尾部分。
3. 内存带宽
内存时延与缓存其实可谓是紧密相关,不理解透彻了,则可能测的是缓存时延。同样测试内存带宽,如果不是正确的测试,则测的是缓存带宽了。
为了了解内存带宽,有必要去了解下内存与cpu的架构,早期的cpu与内存的架构还需要经过北桥总线,现在cpu与内存直接已经不需要北桥,直接通过cpu的内存控制器(imc)进行内存读取操作:
那对应的内存带宽是怎样的呢?测试内存带宽有很多很多工具,linux下一般通过stream进行测试。简单介绍下stream的算法:
stream算法的原理从上图可以看出非常简单:某个内存块之间的数据读取出来,经过简单的运算放入另一个内存块。那所谓的内存带宽:内存带宽=搬运的内存大小/耗时。通过整机合理的测试,可以测出来内存控制器的带宽。下图是某云产品的内存带宽数据:
function best rate mb/s avg time min time max time copy: 128728.5 0.134157 0.133458 0.136076 scale: 128656.4 0.134349 0.133533 0.137638 add: 144763.0 0.178851 0.178014 0.181158 triad: 144779.8 0.178717 0.177993 0.180214
内存带宽的重要性自然不言而喻,这意味着操作内存的最大数据吞吐量。但是正确合理的测试非常重要,有几个注意事项需要关注:
内存数组大小的设置,必须要远大于l3 cache的大小,否则就是测试缓存的吞吐性能;
cpu数目很有关系,一般来说,一两个核的计算能力,是远远到不了内存带宽的,整机的cpu全部运行起来,才可以有效地测试内存带宽。当然跑单核的stream测试也有意义,可以测试内存的延时。
4. 其他
内存与numa的关系:开启numa,可以有效地提供内存的吞吐性能,降低内存时延。
stream算法的编译方法选择:通过icc编译,可以有效地提供内存带宽性能分。原因是intel优化了cpu的指令,通过指令向量化和指令prefetch操作,加速了数据的读写操作以及指令操作。当然其他c代码都可以通过icc编译的方法,提供指令的效率。

浅谈一种基于嵌入式PC的PIII计算机系统设计与实现
FSG13频谱分析仪13.6GHz
千呼万唤始出来的DDR5 DIMM插槽连接器,买它!
惠普散热门尽显大厂风范:暗影精灵3 Plus笔记本宣传失误 为消费者提供三倍赔付
欧洲航空培训中心BAA培训将采购9架Reality Seven全飞行模拟器
如何衡量内存的性能
Force10推出开放式自动化框架方案
超低功耗MSP430TM USB 微控制器应用设计
中国手机市场在今年2月份的出货量为何会暴跌
华为Q3轻薄笔记本电脑中国市占达24.3% 位居第一
华为将以“5「机」协同,共创新价值”为主题参会参展
reVISION惊艳登场,Xilinx让视觉导向机器学习更简单!
思特威推出全新2.3MP车规级Sensor+ISP二合一全局快门图像传感器
为什么要规定额定电压?额定电压输出电流怎么测试?
腾讯红魔游戏手机6正式上架京东商城开启预约
把握全球人工智能发展态势 找准突破口和主攻方向
THUNDERLINE-Z玻璃绝缘体表面贴装钟销介绍
EMI三相滤波器的技术参数和应用
aptX Adaptive解决无线耳机三大困扰
基于三极管的恒流电路设计