0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

在你的应用程序里内存的访问带宽能够达到多少?

冬至配饺子 来源:开发内功修炼 作者:张彦飞allen 2022-08-30 16:58 次阅读

带宽是存储系统一个的一个非常重要的衡量指标,内存带宽指的是CPU从内存读取或写入数据到内存的速率。我们今天来思考一个问题,在你的应用程序里内存的访问带宽能够达到多少?

1、各代内存规格

理论上内存带宽的计算公式是:Band Width = Speed * Data Width。在这个公式的基础上,我们来看一下各代规格的内存带宽表现。

pYYBAGMN0JaAP-gQAACzK2Ayvr8242.png

图1 各代内存带宽规格

从上图来看,DDR3代的内存 DDR3代1066MHz的带宽都已经达到了8.5GB/s, DDR4代3200MHz更是达到了惊人的25.6G。厂家在进行销售的时候也都是用这个公式来算,言外之意就是告诉你:“我家的产品非常快,大家赶快来买啊!”

厂家这么宣传似乎也不算错,但是有诱导性的谎言在其中。厂家这个数据的基础是内存严格以顺序IO的方式工作,而且把传输的内存地址也当数据来看,进而计算出的结果。但我们在《内存随机访问也比顺序慢,带你深入理解内存IO过程》中明白了的是,内存在并一定是所有的Data Speed周期都在源源不断往外吐数据。在CPU传入了行地址后,内存打开一行需要tRCD+tRP个时钟周期的延迟。输入列地址后,又需要等待CL个时钟周期。而内存作为易失性存储元器件,又需要定时对所有的行进行充电,来保证数据不丢失。所以,在实践中,我们并不是总是能够达到厂家宣传的理论带宽值。

注意:理论带宽值计算时采用的是内存的Speed,也就是其数据频率。而内存的延迟呢,用的是时钟周期。现代的内存在时钟周期的上沿和下沿都可以传输数据,所以数据频率比Speed又慢了一半。对于笔者Speed为1067MHz的内存条,其时钟频率是553MHz。

***说过,实践是检验真理的唯一标准。我们今天就来进行一下实际的测试,看看内存的到底每秒能给我们吐出多少的数据。和前文《实际测试内存在顺序IO和随机IO时的访问延时差异》的测试方法类似,我们今天对方法进行下小改动,用它来测试带宽。

2、顺序IO情况核心测试方法

测试代码主体上和延迟测试差不多,定义一个指定大小的数组,然后以指定步长对其进行访问。

poYBAGMN0KSAadyyAABVCCQzOc0031.png

考虑到内存对齐能提高性能,所以公平起见,我们每次都是按内存位宽去取的(一个double 8个字节,正好是一个内存位宽)。带宽就是一秒内访问过的字节总数,所以我们通过如下代码进行计算。

result = total_accessed_bytes * 1000 / used_microseconds;

3、顺序IO情况带宽测试结果

笔者的服务器上的内存条是DDR3,1067MHz,延迟参数为7-7-7-24。我们进行了多场景的测试。

场景一:固定数组大小2K,调节步长

poYBAGMN0L6AaBI7AAA10fOLvZw392.png

数组为2k,足够小到L1 cache全部都能装的下。这时候其实基本实际内存IO发生的很少,大部分都是更高效的L1 cache的IO,在CPU内部就完成了。但最高值也才6G而已,也没有达到厂家宣称的8GB。

场景二:固定步长为8,数组从32K到64M

pYYBAGMN0NOAbjKSAABDuNLdnFo811.png

数组越大,Cache越装不下,数据访问的IO会更多地往后穿透到L2、L3和内存。L1、L2、L3和内存IO的性能依次递减,因此数组越大,平均带宽就会越低。

场景三:步长为32,数组从32K到64M

poYBAGMN0OiAeO6SAABChIbWD64157.png

步长增加后,穿透到内存的次数进一步增加,带宽进一步下降。这个时候,我们应用程序视角看到的数据带宽已经下降到1GB以下了。

4、再测随机IO情况

前面的测试情况,虽然步长也在变化,但都是有序递增。这样内存的连续两次IO之间,虽然列地址会变,但是行地址极有可能不发生变化,因此效率还是算比较高。我们这次是来彻底随机进行访问,再来看一下。

pYYBAGMN0PmAQ8EyAAA6-fOd-wk416.png

当数组比较小的时候,虽然乱序访问,但是cache能兜住,因此内存IO实际上发生的很少。但当数组增加到64M的时候,再加上哪一级Cache都兜不住了。再加上访问又足够随机,因此都穿透到了内存,而且行的行地址也极大可能发生变化。这时,内存带宽竟然下降到了474M。

5、结论

所以内存的带宽并没有你想象的那么快,在随机IO工作模式的情况下,带宽只有474M而已。现在SSD固态硬盘顺序IO也差不多能达到这个数量级了。所以,我们以后不要鲁莽地说内存比硬盘要快很多。快不快,关键取决于你怎么用!



审核编辑:刘清

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • DDR
    DDR
    +关注

    关注

    11

    文章

    711

    浏览量

    65230
  • 带宽
    +关注

    关注

    3

    文章

    908

    浏览量

    40845
  • 时钟
    +关注

    关注

    10

    文章

    1720

    浏览量

    131364
  • 存储系统
    +关注

    关注

    2

    文章

    404

    浏览量

    40834
收藏 人收藏

    评论

    相关推荐

    什么是RAM内存 RAM内存对电脑性能的影响

    所有存储的数据。RAM的主要作用是提供快速的数据访问,以便CPU(中央处理器)能够高效地执行程序和处理任务。 RAM内存对电脑性能的影响 RAM对电脑性能的影响是显著的,以下是几个关键
    的头像 发表于 11-11 09:38 396次阅读

    这个机子内存是不是集成到板子上了,哪里可以插个接口访问内存

    我这个机子内存是不是集成到板子上了呀,哪里可以插个接口访问内存呀。
    发表于 08-30 09:04

    有没有能够接受20M带宽或者更高带宽的比较器型号?

    最近在做一个信号整形,需要把正弦波整成方波,想请教一下有没有能够接受20M带宽或者更高带宽的比较器型号?或者是有没有其他较好的方案能处理呢?
    发表于 08-20 07:38

    opa859有单位增益和增益带宽积,并且单位增益带宽是增益带宽积的两倍,为什么?

    opa859有单位增益和增益带宽积,并且单位增益带宽是增益带宽积的两倍,为什么呢?正常应该是相等,或者增益带宽积大于单位增益
    发表于 08-02 07:34

    租用服务器时,从哪些方面来评测是否达标的?

    在租用服务器时,可以从以下几个方面来评测是否达标: 1、硬件配置: CPU:了解服务器的处理器型号、核心数和频率,确保其能够满足应用程序的性能需求。 内存:了解服务器的内存容量和类型,
    的头像 发表于 06-12 10:50 252次阅读

    应用程序中的服务器错误怎么解决?

    在使用应用程序时,可能会遇到服务器错误的问题。这种错误通常会导致应用程序无法正常运行 ,给用户带来不便。下面将介绍应用程序中的服务器错误及其解决方法,帮助您快速解决这一问题。
    的头像 发表于 03-12 15:13 5774次阅读

    如何在ModusToolbox™中检查和设置应用程序内存地址?

    如何在ModusToolbox™中检查和设置应用程序内存地址?
    发表于 03-01 10:16

    CW32L052 DMA直接内存访问

    CW32L052支持DMA(Direct Memory Access),即直接内存访问,无需CPU干预,实现高速数据传输。数据的传输可以发生在: • 外设和内存之间 :例如ADC采集数据到内存
    的头像 发表于 02-28 16:48 884次阅读
    CW32L052 DMA直接<b class='flag-5'>内存</b><b class='flag-5'>访问</b>

    SK海力士加大高带宽内存生产投入

    SK海力士近日宣布,将进一步扩大高带宽内存生产设施的投资,以满足高性能AI产品市场的不断增长需求。
    的头像 发表于 01-29 16:54 921次阅读

    谷歌发布新的AI SDK,简化Gemini模型与Android应用程序的集成

    。开发者无需直接使用 REST API,也无需为在 Android 应用程序访问 Gemini 模型实现服务器端服务。
    的头像 发表于 01-03 16:29 903次阅读

    ug内部错误,内存访问违例怎么解决

    ug内部错误,内存访问违例怎么解决 内部错误和内存访问违例是编程中常见的问题,它们可能会导致应用程序崩溃、数据丢失或系统不稳定。在本文中,我
    的头像 发表于 12-27 16:27 6073次阅读

    weblogic设置jvm内存大小

    WebLogic是一种Java EE应用服务器,用于构建和部署企业级Java应用程序。在配置WebLogic服务器时,设置JVM的内存大小非常重要,这可以提高应用程序的性能和可靠性。本文将详细介绍
    的头像 发表于 12-05 14:44 2972次阅读

    jvm内存溢出该如何定位解决

    在Java应用程序中,JVM(Java虚拟机)内存溢出是指Java应用程序试图分配的内存超过了JVM所允许的最大内存大小,导致
    的头像 发表于 12-05 11:05 1292次阅读

    jvm内存溢出故障排查

    JVM内存溢出是常见且令人头疼的问题,特别是在运行大型Java应用程序或长时间运行的应用程序时。当JVM分配给应用程序内存不足以处理
    的头像 发表于 12-05 11:04 781次阅读

    开发java应用程序的基本步骤是

    Java应用程序。确定您希望应用程序能够执行的任务和提供的功能。这将有助于指导您在开发过程中进行决策并确定实现代码的方式。 2.设计应用程序:在开始编写代码之前,您应该设计
    的头像 发表于 11-28 16:52 1524次阅读