[转帖]从DDR到DDR4,内存核心频率基本上就没太大的进步!
https://zhuanlan.zhihu.com/p/84194049
从2001年DDR内存面世以来发展到2019年的今天,已经走过了DDR、DDR2、DDR3、DDR4四个大的规格时代了(DDR5现在也出来了)。内存的工作频率也从DDR时代的266MHz进化到了今天的3200MHz。这个频率在操作系统里叫Speed、在内存术语里叫等效频率、或干脆直接简称频率。这个频率越高,每秒钟内存IO的吞吐量越大。但其实内存有一个最最基本的频率叫核心频率,是实际内存电路的工作时的一个振荡频率。它是内存工作的基础,很大程度上会影响内存的IO延迟。我今天想给大家揭开另外一面,这个叫核心频率的东东其实在最近的18年里,基本上就没有什么太大的进步。
内存Speed
在Linux上可以查看到你机器上内存的Speed。
# dmidecode | grep -P -A16 "Memory Device"
Memory Device
Array Handle: 0x0009
Error Information Handle: Not Provided
Total Width: 72 bits
Data Width: 64 bits
Size: 8192 MB
Form Factor: DIMM
Set: None
Locator: DIMM02
Bank Locator: BANK02
Type: Other
Type Detail: Unknown
Speed: 1067 MHz
Manufacturer: Micron
Serial Number: 65ED91DC
Asset Tag: Unknown
Part Number: 36KSF1G72PZ-1G4M1
......
上述命令可以看出每一个插槽上内存物理设备的情况,由于结果太长我只抽取了其中一个内存的信息列了出来。对于我们开发者来说,其中有两个数据比较关键。
- Speed: 1067 MHz: 每秒能进行内存数据传输的速度,
- Data Width: 64 bits: 内存工作一次传输的数据宽度
我的机器上所有的内存条的Speed都是1067(大家别笑话,因为我的测试机器是线上过保淘汰下来的机器,所以老了一点点)。 把Data Width和Speed相乘后得到的就是数据带宽了。我们把历史上各个阶段的内存的Speed和带宽汇总了一下,如下图。
图1 各代内存频率
内存背后的秘密-核心频率
通过Linux我们只看到了内存的一个Speed,它是数据传输的频率。这个频率又叫Data Speed,或等效频率。各个商家在内存的销售页面上也把这个频率标在特别明显的位置,提醒消费者他家的内存有多快多快。但其实从内存条的技术参数上来讲,有个最为重要的频率,是核心频率,它是内存电路的震荡频率,是内存一切工作的基石。
我们来看一下各代内存的更全面详细的数据。
图2 各代内存的核心频率与技术提升手段
我汇总了从SDR时代,一直到目前主流的DDR4的内存的频率表对比。大家可以看到核心频率已经多年没有实质性进步了,这是受物理材料的极限限制,内存的核心频率一直在133MHz~200MHz之间徘徊。我们所看到的内存Speed是在这个核心频率的基础上,通过各种技术手段放大出来的。之所以我们感觉内存在越来越快,就是放大技术手段在不断进步而已。
- SDR时代:在最古老的SDR(Single Data Rate SDRAM)年代里,一个时钟脉冲只能在脉冲上沿时传输数据,所以也叫单倍数据传输率内存。这个时期内存的提升方法就是提升内存电路的核心频率。
- DDR时代:但是内存制造商们发现核心频率到了200MHz再提升的话,难度就很大了。所以在电路时钟周期内预取2bit,输出的时候就在上升期和下降期各传输一次数据。所以核心频率不变的情况下,Speed(等效频率)就翻倍了。
- DDR2时代:同样是在上下沿各传一次数据,但将Prefech提升为4,每个电路周期一次读取4bit。所以DDR2的Speed(等效频率)就达到了核心频率的4倍。
- DDR3时代:同样也是上下沿各传一次数据,进一步将Prefect提升为8。所以DDR3的等效频率可以达到核心频率的8倍。
- DDR4时代:这时预取的提升已经非常困难,所以和DDR3一样,Prefech仍然为8。内存制造商们又另辟蹊径,提出了Bank Group设计。允许各个Bank Group具备独立启动操作读、写等动作特性。所以等效频率可以提升到核心频率的16倍。
内存还有个概念叫IO频率、也叫时钟频率。简单理解为将DDR内存的Speed频率除以2,就是内存的IO频率。这个必须和CPU的外频相匹配才能工作。例如对于DDR3来说,假如核心频率133Mhz的内存工作频率下,匹配533MHz的CPU外频,其IO频率就是533Mhz。数据传输因为上下沿都可以传,所以是核心频率的8倍,也就是1066MHz。
我曾试图在Linux下找到能查看核心频率和IO频率的命令,但是没有找到,在售的各种内存条似乎也很少会提及它。 但我们是IT从业人员,非普通用户。因此我觉得大家有必要来了解这个原理。(事实上,这两个频率会影响后面讨论的内存的延迟参数,而延迟参数又决定了内存的真正性能)
汇总一句话,内存真正的工作频率是核心频率,时钟频率和数据频率都是在核心频率的基础上,通过技术手段放大出来的。内存越新,放大的倍数越多。但其实这些放大手段都有一些局限性。比如你的内存数据存储并不连续,这时候DDR2、DDR3的数据预取对你帮助并不大。再比如你的进程数据都存在一个Bank Group里,你的进程内存IO就根本不会达到DDR4厂家宣传的速度。
扩展知识:内存延迟
除了频率以外,内存还有几个比较重要的参数,但是同样在Linux里没有找到查看的命令。内存的销售页面想找到这几个参数也不是特别容易。
所有的内存条都有CL-tRCD-tRP-tRAS四个参数。其中最重要的是CL-tRCD-tRP这三个参数,只要你费点劲,所有的在售内存你都能找到这3个值。例如经典的DDR3-1066、DDR3-1333及DDR3-1600的CL值分别为7-7-7、8-8-8及9-9-9。现在京东上一条比较流行的台式机内存金士顿(Kingston)DDR4 2400 8G,其时序是17-17-17。
第四个参数有时候会被省略。原因有二,第一:现在的开发者不需要直接和内存打交道,而操作系统呢又做的比较内存友好,很少会有这个开销真正发生。第二,这个开销的值要比其它的值大很多,实在不太好看。商家为了内存能多卖一些,干脆就避而不谈了。
好了,问题来了。为什么内存越进步,延迟周期反而会变大了呢?
这就是因为标示延迟周期数是用延迟时间除以内存时钟周期(Speed/2)得出来的。这其实不算太科学,最直接的办法应该是用延迟时间来评估。延迟时间很大程度上是受内存的核心频率的制约的。而这些年核心频率又基本上没有进步,所以延迟时间也不会有实质的降低。假定延迟时间不变,而时钟周期翻倍了,这样延迟周期看起来就是新的内存更大。
今天就带大家了解到这里,后面我会用实验来让你理解你的内存的实际延时。
欢迎关注个人公众号“开发内功修炼”,打通理论与实践的任督二脉!
[转帖]从DDR到DDR4,内存核心频率基本上就没太大的进步!的更多相关文章
- [转帖]鲁大师Q3季度PC内存排行:DDR3彻底淘汰 DDR5要来了
鲁大师Q3季度PC内存排行:DDR3彻底淘汰 DDR5要来了 https://www.cnbeta.com/articles/tech/902347.htm 10月23日消息,今天鲁大师公布Q3季度P ...
- Unity3D占用内存太大的解决方法
原地址:http://www.cnblogs.com/88999660/archive/2013/03/15/2961663.html 最近网友通过网站搜索Unity3D在手机及其他平台下占用内存太大 ...
- 解决持久化数据太大,单个节点的硬盘无法存储的问题;解决运算量太大,单个节点的内存、CPU无法处理的问题
需要学习的技术很多,要自学新知识也不是一件容易的事,选择一个自己比较感兴趣的会是一个比较好的开端,于是,打算学一学分布式系统. 带着问题,有目的的学习,先了解整体架构,在深入感兴趣的细节,这是我的计划 ...
- jvm内存快照dump文件太大,怎么分析
1.场景 通常,使用eclipse的mat图形化工具打开dump的时候都会内存溢出. 对于比较小的dump,eclipse可以打开,但一旦dump文件太大,eclipse就有点束手无策. 这时候怎么办 ...
- (转)Unity3D占用内存太大的解决方法
自:http://www.cnblogs.com/88999660/archive/2013/03/15/2961663.html 最近网友通过网站搜索Unity3D在手机及其他平台下占用内存太大. ...
- Idea闪退问题-内存不能给太大
Idea闪退问题-内存不能给太大 学习了:https://blog.csdn.net/qq_17776287/article/details/77529455 学习了:https://blog.csd ...
- Unity3D占用内存太大怎么解决呢?
最近网友通过网站搜索Unity3D在手机及其他平台下占用内存太大. 这里写下关于Unity3D对于内存的管理与优化. Unity3D 里有两种动态加载机制:一个是Resources.Load,另外一个 ...
- tflearn 数据集太大无法加载进内存问题?——使用image_preloader 或者是 hdf5 dataset to deal with that issue
tflearn 数据集太大无法加载进内存问题? Hi, all! I'm trying to train deep net on a big dataset that doesn't fit into ...
- beyond compare解决特殊字符无法输出、多sheet页无法对比以及文件太大超出系统内存问题的Excel转txt脚本
beyond compare解决特殊字符无法输出.多sheet页无法对比以及文件太大超出系统内存问题的Excel转txt脚本 ' XLS_to_CSV.vbs ' ' Converts an Exce ...
- php 因循环数据 赋值变量 占用内存太大 提示错误
Fatal error: Allowed memory size of 134217728 bytes exhausted 网上很多解决方法:就简单记录下 一个csv导入功能 由于数据太多 占用内存太 ...
随机推荐
- 17、Flutter StatelessWidget 、 StatefulWidget
在Flutter中自定义组件其实就是一个类,这个类需要继承StatelessWidget/StatefulWidget. StatelessWidget是无状态组件,状态不可变的widget Stat ...
- Flink实时处理入门
Flink实时处理入门 1.Flink框架介绍 Flink 诞生于欧洲的一个大数据研究项目 StratoSphere.它是由 3 所地处柏林的大学和欧洲其他一 些大学在 2010~2014 年共同进行 ...
- 开源的代名词「GitHub 热点速览」
当开发者谈论开源时,通常会想到 GitHub,它不仅仅是一个代码托管平台,更是一个汇聚了全球开发者的社交中心.过去,开发者发布一款软件后,都是在自己的小圈子里默默努力和交流,现在通过 GitHub 平 ...
- IoT与鸿蒙、低代码、生成式AI,引爆技术浪潮——华为云开发者日南京站成功举办
本文分享自华为云社区<IoT与鸿蒙.低代码.生成式AI,引爆技术浪潮--华为云开发者日南京站成功举办>,作者:华为云社区精选 . 近日,华为云开发者日HDC.Cloud Day南京站成功举 ...
- 2种GaussDB(DWS)查看作业运行信息方式
摘要:提供以作业基本单位的作业统计视图pgxc_session_wlmstat,便于用户观察运行作业和排队作业信息. 本文分享自华为云社区<GaussDB(DWS)如何查看作业运行信息>, ...
- 云小课|云小课带你玩转可视化分析ELB日志
阅识风云是华为云信息大咖,擅长将复杂信息多元化呈现,其出品的一张图(云图说).深入浅出的博文(云小课)或短视频(云视厅)总有一款能让您快速上手华为云.更多精彩内容请单击此处. 云日志服务支持可视化查看 ...
- 再谈BOM和DOM(7):HTML DOM Event 对象属性及DOM事件详细列表
之前写<再谈BOM和DOM(4):HTML DOM Event 对象>时候,对event对象及各种dom事件没有详细道来,这里些表格.备查. Event 对象 Event 对象代表事件的状 ...
- 引用 AspNetCoreRateLimit => StatusCode cannot be set because the response has already started.
app.UseIpRateLimiting(); #需要放在前面,否则抓去不准,还有可能会出现下列错误 本次出现这个错误,是因为 .Net Core 跨域 里面的这行:httpContext.Res ...
- Python Type Hints 从入门到实践
Python 想必大家都已经很熟悉了,甚至关于它有用或者无用的论点大家可能也已经看腻了.但是无论如何,它作为一个将加入高考科目的语言还是有它独到之处的,今天我们就再展开聊聊 Python. Pytho ...
- 【OpenSSL】Visual Studio 2019配置OpenSSL 3.0开发环境
OpenSSL从1.0.2版本升级为3.0.3版本后,需要对代码进行重构.如果不可用的代码太多,需要重新开一个项目.重新配置开发环境. [第一步]登录http://slproweb.com/,下载Wi ...