首页 > 系统相关 >DDR内存基础知识和带宽测试

DDR内存基础知识和带宽测试

时间:2024-11-16 10:19:10浏览次数:1  
标签:DDR BenchMark 带宽 基础知识 频率 lat mbw

一、DDR基础知识

1. 几个频率

(1) 核心频率:真实运行频率。

(2) 倍增系数:DDR通过数据预取技术放大速率,每代ddr倍率是固定的,ddr=2, ddr2=4, ddr3=8, ddr4=8, ddr5=16

(3) 有效频率;厂商标注的频率,可以理解为数据传输速率。厂商也想逐步淡化其它频率的概念,只让我们记住有效频率。其实有效频率就是核心频率*倍增系数得来的,在理想情况下能代表我们内存数据传输频率。

(4) IO频率:又叫时钟频率,它是有效频率的一半。

2. 厂商标注信息:DDR5-6400

这个6400就是有效频率,单位是MT/s(Million Transfer)。

3. 内存通道

若是把内存传输比作行车的道路,那么道路的宽度自然很重要,当前民用级别的设备大都支持双通道,DDR很好理解,单个通道64Bit,双通道乘以2即可。而DDR5有所谓的单条即可支持双通道的技术,但是这个双通道
并没有比DDR4的位宽更大,因为单个通道仅是32Bit,如果你插入2条DDR5组成双通道,将会是4*32Bit,这实际上是和DDR4的总位宽是一样的。

4. 传输带宽

传输带宽 = 有效频率 * 通道位宽 / 8 //通道位宽单位是Bit,转换成Byte需要除以8

小编DDR5-6400双通道LPDDR5的传输带宽 6400 * 4*32 / 8 = 96GB/s

5. 根据DDR频率计算带宽

传输带宽 = 2 * DDR频率 * 通道位宽 / 8 //乘以2是因为上升沿和下降沿都传输数据

二、带宽测试

  1. mbw是一个开源的用来测内存带宽的工具,代码网址:https://github.com/raas/mbw

编译执行,只提取其中的mbw.c文件,在 frameworks/native/cmds 下创建mbw目录,如下实现Android.bp,执行make mbw命令进行编译。

Android.bp:

cc_binary {
    name: "mbw",
    srcs: ["mbw.c"],
    cflags: [
        "-Wall",
        "-Werror",
    ],

    shared_libs: [
        "libbase",
    ],
}

使用方法:

/data/local/tmp # ./mbw -h
mbw memory benchmark v1.5, https://github.com/raas/mbw
Usage: mbw [options] array_size_in_MiB
Options:
        -n: number of runs per test (0 to run forever)
        -a: Don't display average
        -t0: memcpy test
        -t1: dumb (b[i]=a[i] style) test
        -t2: memcpy test with fixed block size
        -b <size>: block size in bytes for -t2 (default: 262144)
        -q: quiet (print statistics only)
(will then use two arrays, watch out for swapping)
'Bandwidth' is amount of data copied over the time this operation took.

The default is to run all tests available.

-n0: 0是无限执行t0-t2中的一项。

一共有三种测试模式,分别对应t0 t1 t2,默认参数下,三种模式各执行10次,并打印出10次的平均值。其中t0对应的是memcpy(),一次性拷贝通过命令行参数指定的内存块的大小,单位MB。t1对应的是b[i]=a[i]这种逐字节拷贝的格式。t2对应的是每次memcpy()指定大小内存块,可以-b指定每次拷贝的大小,不指定的话默认是256KB。

执行 ./mbw 512 即可测试了。

  1. 使用举例

先stop减少干扰,然后执行 ./mbw -n0 -t2 -b32 512 让其恒运行,然后qnx侧执行 ./sysprofiler_app --ddr,看 DDR DDR_BW_TOTAL(MB/s) 这一列,它的值将近是mbw的两倍(拷贝率包括读一次和写一次).

sysprofiler_app 可以测试ddr实时带宽

mbw 不能测试实时带宽,只能测试最大ddr带宽

注:跑8个-b256的看起来测到的结果最大。

二、ARM_BenchMark 工具包

除此之外,还有一个类似的工具,叫 bw_mem,保存在 ARM_BenchMark 工具包中:

ARM_BenchMark: https://github.com/tonyho/ARM_BenchMark/tree/master/lmbench/bin/arm-linux
lmbench: https://github.com/foss-for-synopsys-dwc-arc-processors/lmbench/tree/master/src //上面工具包中已包含

~/tmp/ARM_BenchMark$ ls
Bench-bin  dhrystone-src  docs  fhourstones  Linpack  lmbench  pi_css5_src  README.md  ReadMe.txt  whetstone
~/tmp/ARM_BenchMark$ ls Bench-bin/  //可执行文件
dhrystone  linpack  pi_css5  SearchGame  whetston
~/tmp/ARM_BenchMark$ ls lmbench/bin/arm-linux/   //可执行文件
bw_file_rd  bw_unix    hello          lat_fcntl             lat_fs_open_close      lat_ops        lat_rand    lat_syscall       lat_usleep  loop_o   par_ops
bw_mem      cache      lat_cmd        lat_fifo              lat_fs_write_truncate  lat_pagefault  lat_rpc     lat_tcp           line        memsize  stream
bw_mmap_rd  disk       lat_connect    lat_fs                lat_http               lat_pipe       lat_select  lat_udp           lmbench     mhz      timing_o
bw_pipe     enough     lat_ctx        lat_fs_chown          lat_mem_rd             lat_pmake      lat_sem     lat_unix          lmdd        msleep   tlb
bw_tcp      flushdisk  lat_dram_page  lat_fs_create_unlink  lat_mmap               lat_proc       lat_sig     lat_unix_connect  lmhttp      par_mem
  1. Dhrystone:整数运算、字符串拷贝测试。
  2. Whetstone:浮点数运算测试。测量浮点数运算的速度和效率。它使用了许多C函数,包括sin、cos、sqrt、exp和log等浮点数和整数数学运算,数组访问、条件分支和过程调用。此测试同时测量整数和浮点数算术。

标签:DDR,BenchMark,带宽,基础知识,频率,lat,mbw
From: https://www.cnblogs.com/linhaostudy/p/18549065

相关文章

  • Chromium源码分析一:基础知识
    目录Webkit、chromium、Googlechrome各模块结构图进程模型代码结构我的衣食父母基于Chromium实现小程序功能,现在已经开发维护代码一年多了,抽时间对公开的知识做个笔记总结。本文内容源于《WebKit技术内幕》Webkit、chromium、GooglechromeWebKit是一个开源的浏览器引擎,包含......
  • JAVA部分基础知识点(四)【持续更新】
    1.方法重写当子类觉得父类中的某个方法不好用,或者无法满足自己的需求时,子类可以重写一个方法名称、参数列表一样的方法,去覆善父类的这个方法,这就是方法重写。【注意:重写后,方法的访问,Java会遵循就近原则】方法重写的其它注意事项:重写小技巧:使用Override注解,他可以指定java......
  • IpAddressServiceImplTest的一些准备
    AllIpAddressCheckRequest类只有一个属性,ListipAddressList,AllIpAddressCheckResponse类有两个属性,Booleanresult和HashMap<String,Boolean>map,RespUtils定义如下publicclassRespUtils{privatestaticfinalLoggerlog=LoggerFactory.getLogger(RespUtils.class);pr......
  • Unable to load io.netty.resolver.dns.macos.MacOSDnsServerAddressStreamProvider,
     macm1启动项目,报错,“Unabletoloadio.netty.resolver.dns.macos.MacOSDnsServerAddressStreamProvider,fallbacktosystemdefaults.ThismayresultinincorrectDNSresolutionsonMacOS.”,出现这个问题是因为使用了spring-cloud-starter-gateway依赖,这需要额外安装......
  • 【网络云计算】2024第46周周考-磁盘管理的基础知识-RAID篇
    文章目录1、画出各个RAID的结构图,6句话说明优点和缺点,以及磁盘可用率和坏盘数量,磁盘总的数量2、写出TCP五层模型以及对应的常用协议【网络云计算】2024第46周周考-磁盘管理的基础知识-RAID篇1、画出各个RAID的结构图,6句话说明优点和缺点,以及磁盘可用率和坏盘数量,磁......
  • HBase基础知识分享(二)
    HBase的Split机制Region的分裂策略HBase中的Region存储的是一张表的数据。当Region中的数据条数过多时,会直接影响查询效率,过大的Region会被拆分为两个Region,HMaster会将这些分裂的Region分配到不同的RegionServer上,最终达到负载均衡的目的,这是HBase的一个优点。常见的Region分......
  • 从0搭建一个FIFO模块-01(基础知识)
    1.FIFO介绍基本概念FIFO(FirstIn,FirstOut)是一种常用的数据结构,用于存储和处理数据。它的工作原理与排队的顺序类似,遵循"先进先出"的原则。即,第一个进入FIFO的数据会是第一个被取出的数据。在FPGA设计中,可以使用AM作为FIFO的存储单元,再通过控制逻辑来管理读写操作和指针......
  • 【Ubuntu】查看系统中的CPU和DDR的使用状态
    目录一查看CPU状态二查看内存(DDR)状态一查看CPU状态top 或 htop:实时显示系统资源使用情况,包括CPU使用率、负载等。htop比top更直观,因为它提供了彩色的UI和鼠标支持,但需要先安装。 top命令是一个强大的系统监视工具,它可以实时显示系统中各个进程的资源占用状况,包括......
  • mysql基础知识2
    登录mysql数据库注:文中mysql版本为8.0而并非5.7使用命令行登录在操作系统中打开命令行工具/或使用xshell等ssh登录使用命令行登录数据库:根据所使用的数据库类型,输入相应的命令行登录命令。mysql-u[用户名]-p[密码]-P3306-h[数据库地址]-u用户名-p密码-P端口-h......
  • mysql基础知识(3)
    MySQL中有哪些重要的日志文件?错误日志:记录MySQL服务器运行过程中的错误信息。查询日志(GeneralLog):记录数据库执行的所有命令。慢查询日志:记录执行时间超过预设阈值的查询语句。redolog(重做日志):用于在系统崩溃时恢复未提交的数据。undolog(回滚日志):用于事务回滚时恢复数......