草庐IT

为啥高玩选内存不看频率看时序?一文读懂内存时序

Martin 2023-03-28 原文
DDR5内存的问世,让更多人开始关注内存产品在频率上的更新换代,动辄5000MHz起步的高频设计,确实在数值上给人以震撼和惊艳,也似乎成为了很多用户选购内存产品的不二标准。

从而忽视了在内存产品中,一个极为重要的参数设计,即时序。

也就是各大内存产品上标注的“40-40-40-77”的一连串数值,有高有低。

不同产品的数值,还会出现显著的差异,几乎一个产品一个数值:面对这一连串规律不定的数值,很少有人会关注它们的差异和探究它们到底是啥作用,今天咱们就来盘一盘内存时序。

时序到底是什么?

内存时序,一言以蔽之指的是内存在处理各种任务操作时遇到的固有延迟的一种数值描述,或者更本质更白话一点,时序指的是内存处理工作和操作时的具体延迟时间,从这个定义上而言,时序自然是越小越好;

同时影响内存延迟,或者说描述延迟的时序种类有很多,我们常规产品上列出的4种,是对内存影响最大,最为显著的部分。

它们分别都有着特定的代号,按照顺序分别为CL、tRCD、tRP、tRAS,这四个代号全是缩写,第一个CL,即CAS Latency,它描述的是内存列地址访问的延迟时间,这也是时序中最重要的参数。

第二个tRCD,即RAS to CAS Delay,是指内存行地址传输到列地址的延迟时间;第三个tRP,即RAS Precharge Time,表示内存行地址选通脉冲预充电时间第四个tRAS,即RAS Active Time,描述的是行地址激活的时间。

时序是如何影响工作

理解了主要的时序含义之后,我们还需要明白内存和CPU之间的联结原理,才能真正明白主要时序对于内存性能的影响。

通常情况下,CPU的工作流程是下达一个寻址指令,内存会快速搜索和寻址存在缓存内的文件,我们将寻址的过程想象成在一个有列有行的围棋格上。

当CPU下达搜索A文件时,内存需要要先确定数据具体在围棋格子中的哪一行,那么时序的第二个参数tRCD就代表这个时间,简单来说就是是内存收到行的指令后,需要等待多长时间才能访问这一行。

值得注意的是,由于每一行中数据量十分庞杂,在内存第一步工作中无法准确定位,只能是预估,因而还需要第二步才能完成指令。

当内存确定了A文件在哪一行之后,就需要确认数据在哪一列,只有当行和列全部都确定后,才能锁定A文件的具体地址;而确定列的等待时间,便是时序中CL,换言之就是内存确定行数之后,还需要多久才能访问具体的列。

至于第三个参数,指的是确认了第一行数值后,再确定另外一行所需要等待的时间(时间周期)。

第四个tRAS部分,则是指整个内存完成命令后的总和,它的数值约等于前三个数值的总和,当然时序越高的情况下,他们的差异越巨大。

D4和D5的时序对比

下面我们就通过DDR4和DDR5两种不同内存的时序,探究D4和D5内存的差异。

“40-40-40-77”是某品牌5200MHz的D5产品时序设计,“16-16-16-36”则是该品牌4000MHz的D4产品时序设计。

从时序上来看,二者近乎存在2倍多的数值差异,虽然在绝对频率上D5内存有着显著提升,可在延迟上严重拉跨,无疑对于用户的实际使用产生一定影响。

这也就是为什么众多D5内存,暂时并没有被大量玩家接受的原因。

频率的增长并不能显著提升用户体验,而过高的延迟却如同定时炸弹,不经意间对用户体验产生影响,想要更高频率,同时降低时序,可能是今后内存行业一直需要探索的重要课题。

有关为啥高玩选内存不看频率看时序?一文读懂内存时序的更多相关文章

  1. ruby-on-rails - Ruby net/ldap 模块中的内存泄漏 - 2

    作为我的Rails应用程序的一部分,我编写了一个小导入程序,它从我们的LDAP系统中吸取数据并将其塞入一个用户表中。不幸的是,与LDAP相关的代码在遍历我们的32K用户时泄漏了大量内存,我一直无法弄清楚如何解决这个问题。这个问题似乎在某种程度上与LDAP库有关,因为当我删除对LDAP内容的调用时,内存使用情况会很好地稳定下来。此外,不断增加的对象是Net::BER::BerIdentifiedString和Net::BER::BerIdentifiedArray,它们都是LDAP库的一部分。当我运行导入时,内存使用量最终达到超过1GB的峰值。如果问题存在,我需要找到一些方法来更正我的代

  2. ruby-on-rails - Ruby 中的内存模型 - 2

    ruby如何管理内存。例如:如果我们在执行过程中采用C程序,则以下是内存模型。类似于这个ruby如何处理内存。C:__________________|||stack|||------------------||||------------------|||||Heap|||||__________________|||data|__________________|text|__________________Ruby:? 最佳答案 Ruby中没有“内存”这样的东西。Class#allocate分配一个对象并返回该对象。这就是程序

  3. 键删除后 ruby​​ 哈希内存泄漏 - 2

    你好,我无法成功如何在散列中删除key后释放内存。当我从哈希中删除键时,内存不会释放,也不会在手动调用GC.start后释放。当从Hash中删除键并且这些对象在某处泄漏时,这是预期的行为还是GC不释放内存?如何在Ruby中删除Hash中的键并在内存中取消分配它?例子:irb(main):001:0>`ps-orss=-p#{Process.pid}`.to_i=>4748irb(main):002:0>a={}=>{}irb(main):003:0>1000000.times{|i|a[i]="test#{i}"}=>1000000irb(main):004:0>`ps-orss=-p

  4. ruby-on-rails - HTTParty 的内存问题和下载大文件 - 2

    这会导致Ruby出现内存问题吗?我知道如果大小超过10KB,Open-URI会写入TempFile。但是HTTParty会在写入TempFile之前尝试将整个PDF保存到内存吗?src=Tempfile.new("file.pdf")src.binmodesrc.writeHTTParty.get("large_file.pdf").parsed_response 最佳答案 您可以使用Net::HTTP。参见thedocumentation(特别是标题为“流媒体响应机构”的部分)。这是文档中的示例:uri=URI('http://e

  5. ruby - 按数组中出现的频率排序 - 2

    有没有一种有效的方法来做到这一点。我有一个数组a=[1,2,2,3,1,2]我想按升序输出出现的频率。示例[[3,1],[1,2],[2,3]]这是我的ruby​​代码。b=a.group_by{|x|x}out={}b.eachdo|k,v|out[k]=v.sizeendout.sort_by{|k,v|v} 最佳答案 a=[1,2,2,3,1,2]a.each_with_object(Hash.new(0)){|m,h|h[m]+=1}.sort_by{|k,v|v}#=>[[3,1],[1,2],[2,3]]

  6. ruby-on-rails - 内存中具有相同 ID 的更多对象? - 2

    在部署在heroku上的Rails应用程序(v:3.1)中,我在内存中获得了更多具有相同ID的对象。我的heroku控制台日志:>>Project.find_all_by_id(92).size=>2>>ActiveRecord::Base.connection.execute('select*fromprojectswhereid=92').to_a.size=>1这怎么可能?可能是什么问题? 最佳答案 解决方案根据您的SQL查询,您的数据库中显然没有重复条目。也许您的类项目中的size或length方法已被覆盖。我试过find_

  7. ruby - rails 3.0.7 内存泄漏 - 2

    我的两个不同的Rails应用程序的内存有一些奇怪的问题。这两个应用程序都使用rails3.0.7。每个Controller请求分配20-30-50MB的内存。在生产模式下,这个数量减少到5-10。但这是同样的事情。这是两个应用程序使用的gem列表:gem'pg'gem'haml'gem'sass'gem'devise'gem'simple_form'gem'state_machine'gem"globalize3","0.1.0.beta"gem"easy_globalize3_accessors"gem'paperclip'gem'andand'关闭所有这些gem不会给我任何结果。我

  8. ruby - 如何强制 Ruby 释放内存给操作系统 - 2

    正如标题,我有一个处理大量数据的ruby​​程序。该程序占用了所有内存,其中调用了系统命令hostname,并且发生错误无法分配内存-主机名我试过GC.start但它不起作用。那么如何强制ruby释放未使用的内存呢?OK,这是别人的测试代码,最后报错是big_var被回收了。但是内存仍然没有释放。require"weakref"defreportputs"#{param}:\t\tMemory"+`psax-opid,rss|grep-E"^[[:space:]]*#{$$}"`.strip.split.map(&:to_i)[1].to_s+'KB'endbig_var=""#big

  9. ruby - 如何在 Ruby 中从内存中 HTTP 发布流数据? - 2

    我想上传我在运行时用Ruby生成的数据,就像从block中提供上传数据一样。我找到的所有示例仅展示了如何流式传输必须在请求之前位于磁盘上的文件,但我不想缓冲该文件。除了滚动我自己的套接字连接之外,最好的解决方案是什么?这是一个伪代码示例:post_stream('127.0.0.1','/stream/')do|body|generate_xmldo|segment|body 最佳答案 有效的代码。require'thread'require'net/http'require'base64'require'openssl'class

  10. 一文解决关于VLAN所有的疑惑 - 2

    一文解决关于VLAN所有的疑惑VLAN基本概念为什么需要VLAN?怎么在交换机上划分VLAN,VLAN的工作原理有了子网,已经隔离了广播,还需要VLAN干啥?只进行子网划分,不进行VLAN划分VLAN划分与子网划分附加VLAN信息的方法VLAN划分交换机的端口类型(Access和Trunk)一、访问链接二、汇聚链接汇聚链接VLAN间通信为什么要进行VLAN间通信?路由器实现VLAN间通信路由器和交换机的连接方式通信细节三层交换机实现VLAN间通信加速VLAN间通信三层交换机与路由器三层交换机路由器路由器和交换机配合构建LAN的实例使用VLAN设计局域网的特点VLAN增加网络的灵活性不使用VLA

随机推荐