
服务器(无论是物理机还是虚拟机)对于内存都是必不可少的。如何测量内存性能?
1.内存和缓存
当前,相对较新的CPU通常具有三个级别的缓存:L1缓存(32KB-256KB),L2缓存(128KB-2MB),L3缓存(1M-32M)。缓存逐渐变大。当CPU提取数据时,它首先从缓存中提取数据,然后在不可用时在内部访问数据。


2.内存和延迟
显然,离CPU越近,数据获取速度就越快。读取延迟测试是通过LMBench进行的。

从上图可以看出:

英特尔®至强®铂金8163 CPU @ 2. 50GHz该CPU的L1D缓存,L1I缓存为32KB,L2缓存为1M,L3为32M;在相应的缓存中,延迟是稳定的;不同缓存的等待时间呈指数增长;
因此,当我们编写业务代码时,如果我们想更快地提高效率,则可以通过使计算更接近CPU来获得更好的性能。但是,从上图还可以看出,内存延迟以纳秒为单位,而实际业务以毫秒为单位。优化的重点应该是以毫秒为单位的那些操作以及内存延迟优化。这是长尾巴部分。
3.内存带宽
内存延迟和缓存实际上密切相关。如果您不完全了解它,则可能是在测量缓存延迟。还要测试内存带宽,如果测试不正确,那就是缓存带宽。

为了了解内存带宽,有必要了解内存和CPU的体系结构。早期CPU和内存的体系结构也需要通过北桥总线。现在,CPU和内存不需要直接使用北桥,而直接通过CPU的内存控制器(IMC)执行内存读取操作:

对应的内存带宽是多少?有很多工具可以测试内存带宽。通常,测试是在Linux下通过流执行的。下游算法简介:


从上图可以看出流算法的原理非常简单:读取某个存储块之间的数据,并通过简单的操作将其放入另一个存储块中。所谓内存带宽:内存带宽=要传输的内存大小/耗时。通过对整个机器进行合理的测试,可以测量内存控制器的带宽。下图显示了云产品的内存带宽数据:

内存带宽的重要性自然是不言而喻的,这意味着运行内存的最大数据吞吐量。但是正确,合理的测试非常重要,需要注意以下几点:
内存阵列大小设置必须比L3高速缓存的大小大得多,否则将测试高速缓存的吞吐量性能; CPU的数量非常重要。一般而言,一核或二核的计算能力远不是内存。就带宽而言,整机的CPU在有效测试内存带宽之前就已经在运行。当然,运行单核流测试很有意义,它可以测试内存的延迟。4.其他内存与NUMA之间的关系:开启NUMA可以有效地提供内存吞吐量性能并减少内存延迟。流算法的编译方法选择:icc编译可以有效地提供内存带宽性能点。原因是英特尔优化了CPU的指令。通过指令向量化和指令预取操作,可以加速数据读取和写入操作以及指令操作。当然,icc可以编译其他C代码以提高指令效率。
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/shoujiruanjian/article-328006-1.html
你5s多少内存的
已经做了n次作战方案
而且又是密封包装
面