当前位置: 首页 > Linux

揭穿内存厂商的“谎言”,实测内存带宽的真实性能

时间:2023-04-07 02:05:19 Linux

带宽是一个存储系统非常重要的指标。内存带宽是指CPU从内存读取数据或向内存写入数据的速率。今天我们来思考一个问题,你的应用中内存访问带宽是多少?每一代内存带宽计算内存带宽的理论公式为:BandWidth=Speed*DataWidth。在这个公式的基础上,我们来看看各代规格的内存带宽表现。从上图来看,DDR3内存DDR3一代1066MHz带宽达到了8.5GB/s,DDR4一代3200MHz达到了惊人的25.6G。制造商也使用这个公式来计算他们何时销售。言下之意是告诉你:“我的产品很快,大家赶紧去买吧!”in.厂家数据的依据是内存严格按照顺序IO的方式工作,传输的内存地址也当做数据,然后计算结果。但我们在《内存随机访问也比顺序慢,带你深入理解内存IO过程》中理解的是,内存的存在并不一定意味着所有的DataSpeed周期都在不断地吐出数据。CPU传入行地址后,需要延迟tRCD+tRP时钟周期才能打开一行内存。输入列地址后,需要等待一个CL时钟周期。内存作为易失性存储元件,需要定时对所有行进行充电,以保证数据不丢失。因此,在实践中,我们并不总是能够达到厂商标榜的理论带宽值。注:理论带宽值是使用内存的Speed计算的,即它的数据频率。至于内存的延迟,就是用时钟周期。现代存储器可以在时钟周期的上升沿和下降沿传输数据,因此数据频率比Speed慢一半。对于Speed为1067MHz的记忆棒,其时钟频率为553MHz。邓爷爷说,实践是检验真理的唯一标准。今天来实际测试一下,看看内存每秒能为我们吐出多少数据。和上面《实际测试内存在顺序IO和随机IO时的访问延时差异》的测试方法类似,我们今天对方法做一个小改动,用它来测试带宽。顺序IO案例的核心测试方法类似于测试代码主体中的延迟测试,定义一个指定大小的数组,然后以指定的步长访问它。voidinit_data(double*data,intn){inti;对于(i=0;i