SDRAM是如何“提速”的?
各位同学大家好,欢迎继续做客电子工程学习圈,今天我们继续来讲这本书,硬件系统工程师宝典。
上篇我们了解了FLASH可分为NOR FLASH和NAND FLASH,NOR FLASH一般用于代码运行及擦除或编程较少的场合,NAND FLASH用于擦除、编程速度快,但是不用于直接运行代码的场合。今天我们来讲一讲SDRAM的相关知识。
SDRAM
SDRAM指同步动态随机存储器,同步指的是Memory工作需要同步时钟,内部命令发送和数据传输都以同步时钟为基准;动态指的是存储阵列要不断地刷新保证数据不丢失;随机指的是数据不是线性存储而是自由指定进行数据读/写。
SDRAM的内部存储结构如下图所示:
SDRAM内部的存储结构
我们在进行取址操作时,需要依次获取Bank数、行地址、列地址,从而找到要读取或写入的数据。在系统设计时,Memory的容量如下计算:
例如,某SDRAM的行地址信号为A0~A12,列地址信号线为A0~A9,A11,数据信号线为DQ0~DQ7,位宽为8,Bank数是4,则Memory的容量是213*211*4*8bit=512Mbit。
那么,我们在选型时,要确认Bank数、行地址数、列地址数是否和CPU匹配,Memory的位宽是否支持。
DDR SDRAM
DDR SDRAM(Double Data Rate SDRAM)是指双倍速率同步动态随机存储器。其中双倍指的是DDR内存除了像SDRAM一样在时钟上升期进行数据传输外,在时钟下降期也可以进行数据传输,因此DDR内存更快。
DDR SDRAM的Memory容量计算和SDRAM是一样的,DDR SDRAM在数据采样上不再依赖于时钟信号采样,而是采用DQS(数据选通信号,Data Strobe)进行采样。在写操作时,数据由CPU发往DDR,DDR数据接收端利用DQS的边沿对DQ进行采样;读操作时,数据由DDR发送给CPU,在接收端的存取器利用DQS的边沿对DQ采样。DDR SDRAM的数据采样依赖DQS信号,而地址、命令和控制信号等单端信号仍采用时钟信号采样。
DDR2 SDRAM
DDR2 SDRAM简称DDR2,是第二代双倍数据率同步动态随机存取存储器(Double-Data-Rate Two Synchronous Dynamic Random Access Memory)。DDR2的实际工作频率是DDR的两倍,得益于DDR2内存拥有两倍于DDR内存的预读取能力,如下图所示:
DDR和DDR2预读取能力的对比
除了预读取能力的提升,DDR2 SDRAM既可以采用单端DQS信号,也可采用差分DQS信号,使用差分信号以减少信号串扰的影响。另外,DDR2 SDRAM采用SSTL-1.8电平,在相同存储容量和相同数据传输率的情况下,DDR2具有更低的功耗。
DDR3 SDRAM
DDR3是在DDR2基础上采用的新型设计,与DDR2 SDRAM相比具有功耗、发热量较小、工作频率更高等优势。
DDR3的内部是一个存储阵列,类似一张表格,将数据“填”进去,如下图所示:
DDR3存储阵列的等效表格
那么,我们芯片寻址就跟检索表格一样,先指定一个行(Row),再指定一个列(Column),就可以准确地找到所需要的单元格(存储单元),这个表格对应的就是逻辑Bank(Logical Bank)。图中黑格的位置表示根据寻址命令B1、R2、C6确定的位置,寻址的流程也就是先指定Bank地址,再指定行地址,然后指定列地址,最终确定寻址单元。
DDR3和DDR2的信号种类是一样的,其中DDR3不再支持单端DQS数据选通信号,全部采用差分数据选通信号,DDR3对DQS与Clock没有严格的时序要求,而DDR2对DQS与Clock有严格的时序要求。DDR3供电采用1.5V,接口电平逻辑满足SSTL_1.5V。
DDR4 SDRAM
内存颗粒的演变如下图所示:
内存颗粒的演变
可以看出,DDR4在2014年开始崛起,在2015年后开始迅速占领市场。DDR4内存的运行频率提升至2133~4266MHz,电压降低至1.2V、1.1V。另外,与DDR3相比,DDR4的接口引脚增加了,ACT_n命令激活输入信号,BG0-BG1用于选择哪个Bank被激活,PAR输入命令和地址信号的奇偶校验,ALERT_n报警的输入和输出信号,VPP用于DRAM激活的2.5V供电引脚等。
另外,整理了一些电子工程类的资料,分享给大家,目前有模拟电路、单片机、C语言、PCB设计、电源相关、FPGA、EMC、物联网、Linux相关学习资料,还有针对大学生的资料包,后续还会有更多资料分享给大家,助力大家学习,成就梦想~
博主福利:点击链接免费获取电子工程类学习资料「链接」
SSD新范式 |数据中心SSD测试 之Windows篇(一)
数据中心/企业级SSD的测试是一个非常庞杂的工程,但许多用户和经销商并没有充分理解这一点。为了让大家对数据中心SSD的测试有更深入的了解,我们准备了本系列的文章。
环境与工具
数据中心SSD通常是用在服务器或者工作站当中的。主要的运行环境(操作系统)是Windows、Windows Server,以及各式Linux系统,如CentOS、Ubuntu,还有国产的OpenEuler、龙蜥、OpenCloudOS等。
Linux是大多数服务器使用的操作系统,Linux系统下最常用的测试软件是FIO。但考虑到Linux的部署、命令行操作还是有一定的操作门槛,这方面的内容我们将来再做展开。
在多数人更为熟悉的Windows系统下,常用于数据中心SSD测试的工具软件是IOmeter。IOmeter不需要安装,压缩包内只有两个文件,直接运行其中的“IOmeter.exe”文件即可。
一些数码大V在消费类SSD中也会使用IOmeter以体现其专业度。这种“专业”会包括两方面:其一,IOmeter的界面比CystalDiskMark、TxBENCH、AS SSD等“快餐”测试软件要复杂得多,会给人营造艰深晦涩的感觉。
其二,IOmeter确实可以提供“快餐”软件所缺乏的数据,典型的成果包括诸如“万秒图”之类的。“万秒”意味着可以给SSD比较重的负荷,说服力也会高很多。而工作负荷的轻重,不仅仅是高低档消费类SSD的区别,也是数据中心SSD与消费类SSD的根本区别。
SSD工作负荷的轻重,主要体现在几个方面:
1、 队列深度
2、 混合读写
3、 持续时间
这几方面的内容我们会在相关的测试项目中逐步展开。同时,我们先通过消费者熟悉的快餐测试软件帮助读者理解测试项目的内涵,并在此基础上逐步过渡到IOmeter,再进阶到FIO的应用。
测试最基本的设置:
数据包大小
略有SSD测试常识的人都知道,需要考察几种性能:顺序读、顺序写、随机读、随机写。
那么,顺序和随机的定义是什么?
先说随机。现代操作系统的内存和文件系统都是页式管理,以4KB为单位。基于磁盘的512Byte扇区概念对SSD而言意义不大。因为NAND Flash的基本存储单元是页,容量一般为2KB或者4KB,这是最小的读写单元。因此,综合操作系统和NAND Flash的特点,4KB的数据块会被看做是最基本、最通用的操作单元,公认用这个容量的数据包当做“随机”读写的代表。
考虑到应用或者SSD的特点,在某些测试中8KB、16KB这样的数据会更有实际意义。譬如Oracle数据库的默认块大小是8KB,也可以被设为2KB~64KB不等。再譬如Solidigm D5-P5316、P5336等大容量SSD使用了64KB或者16KB大小的间接单元(IU,indirection unit),它们可以接受4KB的写入,但使用更大的数据单元会更有效率。使用这些软硬件的用户都会进行针对性的优化,对应的,测试软件在考察随机性能时也应该进行相应的设置。
刚才说的是“随机”读写的尺度与“页”相关,那么,“顺序”读写的尺度就与块相关了。若干NAND Flash的页会组成一个块,典型的是64个页。常见的块容量可能是128KB、256KB、512KB。NAND Flash的擦除是以块为单位的。因此,128KB数据包的读写可以看作是顺序操作的最小单元,1到4个数据块正好填满一个块。也有的测试会使用较大的单元,如IOmeter的预设是256KB,CrystalDiskMark预设了1MB等,这些数据包的容量可能更接近NAND Flash的实际块容量。
以人们熟悉的CrystalDiskMark为例,左侧的色块是SEQ1M、SEQ128K、RND4K,代表的就是顺序读写(1MB数据包)、顺序读写(128KB数据包)、随机读写(4KB数据包)。
综上,设置正确的数据包大小,就是考察SSD的随机或顺序读写的性能。最普适的设置是4KB和128KB,酌情按照需要额外增加特定的数据包大小。
对测试成绩影响最大的设置:
队列深度
要想在SSD测试中获得理想的成绩,最值得留意的重点是设置适宜的队列深度。
对于个人电脑,需要同时访问SSD的应用程序并不多,主要就是前台运行的软件(如游戏、图形图像软件)会断续读写较大的文件,以及后台运行的通讯工具(包括电子邮箱、即时通讯工具)偶尔接收信息,持续时间较长但吞吐量比较小的行为主要是后台上传下载一些文件或者系统更新等。整体而言,消费类SSD的工作队列深度在1~4之间。
服务器面对的情况就不一样,其会同时服务多个用户/租户,其并行操作的规模要大得多,平均到每个SSD的工作队列深度通常在16~64的水平。
常用的测试软件大多可以模拟比较大规模的访问,譬如CystalDiskMark,其4KB随机写测试的默认设置是线程数为1,队列32——ATA协议的最大队列深度就是32。而针对NVMe SSD的预设为线程16、队列32,也就是界面中简写的“Q32T16”。
实际的队列深度就是队列数乘以线程数,Q32T16就是32×16=512,总共可以向SSD发出512队列深度的操作请求。NVMe协议可以接受64K之多的队列,而且还可以优化操作顺序,原则上队列深度越大,平摊下来的指令延迟相对越小,IOPS会越高。因此,在使用CystalDiskMark做测试时,如果忘记选择NVMe模式,那就是使用较小的32队列深度进行随机测试,成绩就会差一些。
深究一下队列和线程
队列深度是我们设置的队列数和线程数的积。理论上来说,对于SSD而言,线程1×队列512,与线程16×队列32,由于乘积相同,其实是等效的。
较多的线程可以充分发挥现代处理器核心数量的优势,有可能带来更优的测试数据,但这并不绝对,这是因为跨处理器内核甚至跨插槽的操作也可能会带来预期以外的结果。相对而言,线程1得到的测试数据更容易复现。因此,在实际的测试当中,我们会建议分别考察1个线程和8/16个线程的结果。
多线程的测试还有更为复杂的设置技巧,譬如让不同线程写入不同的区域,这会带来更可靠的性能。
较大的队列深度有利于获得更高的IOPS,让数据更好看。但对于消费类SSD,深队列的测试数据参考价值不高,大家还是看浅队列(Q1T1)的数据更有参考价值。对于数据中心SSD,一般官方公布的4KB随机读写测试的数据是在256队列深度下的。更大的队列深度,如512,可以体现特别极端的情况,但实际应用中很少发生,因为积压太多请求也意味着累积的延迟非常大,会拖慢整个系统的响应。如果服务器真的会有这么大的负荷,那应该建议配置更多的SSD来分担。
小结
今天,大家对SSD测试的基本参数就算入门了,对常见测试软件提供的预设信息可以做到“知其然,知其所以然”。对于IOmeter,我们只是初步展示其界面,其中有许多的预设项目,经过本节文章,大家也能够有所理解。下一节,我们将详细讲解IOmeter的设置,以及一些稍微高级的测试设计技巧。
关于 Solidigm
Solidigm 是全球领先的创新 NAND 闪存解决方案提供商。Solidigm致力于成就客户,激发数据无限潜能,推动人类发展进步。源自于英特尔出售的NAND和SSD业务,Solidigm公司于 2021 年 12 月正式成立,目前是半导体领导者SK 海力士在美国的独立子公司。Solidigm 总部位于美国加州兰乔科尔多瓦,拥有 2000 多名员工,在全球 20 个地区设有办事机构。如欲了解有关 Solidigm 的更多信息,请访问[https://solidigm.com],或关注微信公众号[SolidigmChina]。"Solidigm"是SK hynix NAND Product Solutions Corp (d/b/a Solidigm) 的商标。
相关问答
51单片机短接什么脚可以 擦除flash ?在51单片机中,要擦除Flash可以短接PSEN脚和EA/VPP脚,将PSEN拉低时,单片机将会认为要执行外部程序,这时通过给EA/VPP脚接地,可以将单片机工作模式切换为ISP模...
写 flash 时为什么需要先 擦除 ?Flash的编程原理都是只能将1写为0,而不能将0写为1。所以在Flash编程之前,必须将对应的块擦除,而擦除的过程就是把所有位都写为1的过程,块内的所有字节变为0xF...
NAND Flash 和Nor Flash 到底有什么区别?1、存储架构不同NORFlash架构提供足够的地址线来映射整个存储器范围。这提供了随机访问和短读取时间的优势,这使其成为代码执行的理想选择。另一个优点是100%...
如何彻底清除 flash 缓存?彻底清除flash缓存的方法是通过以下步骤:1.打开浏览器设置:在浏览器的菜单栏中找到设置选项,一般表示为一个齿轮或三个水平线的图标。2.进入高级设置:在设...
norflash和 nandflash 的区别?NANDflash和NORflash的区别一、NANDflash和NORflash的性能比较flash闪存是非易失存储器,可以对称为块的存储器单元块进行擦写和再编程。任何flash器件的....
如何在 Flash 中把图片不必要的部分裁剪掉?1、首先把图片导入到flash舞台,若直接用橡皮擦去擦除背景,是不能操作的,擦后,也会恢复原样。2、接着用鼠标左键单击点下图片。3、然后,按住键盘上的CTRL...
flash如何 去掉边线?图像,把填充色设置为无,然后...1、首先同时按住Ctrl键加B键打散对象,然后把轮廓线全部选中,点击Delete键删除即可;2、把整个图全部选中,点击格式选项卡,选择...
怎么彻底卸载ADOBE FLASH 11.1-ZOL问答第二c:\windows\system32\macromed\flash把文件夹删掉!不行用qq电脑管家粉碎。第三:开始运行regedit打开注册表顺序展开hkey_local_mach...
Adobe Flash 怎么使用橡皮擦工具 擦除 图形?_溜溜自学网[回答]1、双击flash图标,打开操作界面;在界面的左边是工具箱;橡皮擦的图标是一块粉红色的橡皮擦图形,如下图所示;2、点击“橡皮擦”工具后,在下方即弹出与...
flash 代码中的清除怎么写?你要清除什么?比如清除画线代码中的线条,用clear()清除帧频函数,用delete,如deleteonEnterFramemc如果是用脚本创建出来的,可以用removeMovieClip语句...