1. 内存与缓存现在比较新的处理器一般都有三级缓存,L1 Cache(32KB-256KB),L2 Cache(128KB-2MB),L3 Cache(1M-32M)。缓存慢慢变大,处理器在取数据的时候,优先从缓存去取数据,取不到才去内存取数据。 内存性能指什么 图1 2. 内存与时延显然,越靠近处理器,取数据的速度越块,通过LMBench进行了读数延迟的测验。 内存性能指什么 图2 从上图可以看出:
所以我们在写业务代码的时候,如果想要更快地提升效率,那么使得计算更加贴近处理器则可以获得更好的性能。但是从上图也可以看出,内存的时延都是纳秒为单位,而实际业务中都是毫秒为单位,优化的重点应该是那些以毫秒为单位的运算,而内存时延优化这块则是长尾部分。 3. 内存带宽内存时延与缓存其实可谓是紧密相关,不理解透彻了,则可能测的是缓存时延。同样测验内存带宽,如果不是正确的测验,则测的是缓存带宽了。 为了了解内存带宽,有必要去了解下内存与处理器的架构,早期的处理器与内存的架构还需要经过北桥总线,现在处理器与内存直接已经不需要北桥,直接通过处理器的内存控制器(IMC)进行内存读取操作: 那对应的内存带宽是怎样的呢?测验内存带宽有很多很多工具,linux下一般通过stream进行测验。简单介绍下stream的算法: 内存性能指什么 图3 stream算法的原理从上图可以看出非常简单:某个内存块之间的数据读取出来,经过简单的运算放入另一个内存块。那所谓的内存带宽:内存带宽=搬运的内存大小/耗时。通过整机合理的测验,可以测出来内存控制器的带宽。下图是某云产品的内存带宽数据: -------------------------------------------------------------Function Best Rate MB/s Avg time Min time Max timeCopy: 128728.5 0.134157 0.133458 0.136076Scale: 128656.4 0.134349 0.133533 0.137638Add: 144763.0 0.178851 0.178014 0.181158Triad: 144779.8 0.178717 0.177993 0.180214------------------------------------------------------------- 内存带宽的重要性自然不言而喻,这意味着操作内存的最大数据吞吐量。但是正确合理的测验非常重要,有几个注意事项需要关心:
4. 其他
以上就是关于内存性能指什么问题的解答。 |