大数跨境
0
0

内存基础知识(二十)-- 又当又立的内存,要"聚"又要"散"

内存基础知识(二十)-- 又当又立的内存,要"聚"又要"散" IT知识刺客
2025-11-25
0
导读:内存控制器在这里做了个折中,Chip中不是有4个BG吗,我只使用2个。在8KB内,以Line为单位,在两个BG中轮流切换。既要分散,也不要太分散。页大小不是8KB吗,因为流量被分散到了两个BG中,因此
这是内存基础知识系列的第20篇,你可以在 基础软件开发 ,找到前19篇。
上一篇内存基础知识(十九)-- 奇怪的流量分布:在BankGroup层观测流量 我详细介绍了我的内存流量测试程序,它很简单,主要代码不过10行左右。它其实是以”Line“为单位,发起内存读请求。
一个Line 64字节。上一篇的测试中,我读了3个Line,在BG层观察流量的结果,这3个Line是如下分布的:
图1
图1是上一篇中的图,本篇换成图2继续讲述。
图2
图2主要突出如下信息:
一个Chip包含 4 个BG(BankGroup),每个BG又包含4个Bank
流量测试程序发起的3个Line的读请求,如图2所示,第1个Line来自于BG 1; 第二个Line来自于BG 0; 第三个Line又回到BG 1。
内存基础知识(十四)-- 让内存条中的“页”现出原形中,我们已经测试出来内存流量以8192字节为单位,在多个RANK间来回切换。我们还因此称8KB为RANK层的“页”。
在BG层,流量以64字节为单位,也就是以Line为单位了,在两个BG间来回切换。
内存基础知识(五)-- BankGroup前传篇开始,我用三篇内容,描述了BG物理层面的特性。一句话总结,每个BG都很独立,有很好的并发性。
内容控制器(MC)以Line(64字节)为单位,轮流使用BG,可以更好的分散压力、提升吞吐、缩短延迟。
让多个BG一起工作,一个BG正在行选通时,另一个可以CAS,等等。
注:行选通、CAS这些名词在内存系列前10篇中有详细介绍
但是,一个Chip中有4个BG,图2中也有表现这一点。为什么只使用了其中的两个呢?
为什么不在4个BG中来回切换呢?4个BG轮流用,压力不是更分散吗?
原因很简单,如果你仔细阅读了本系列前面所有文章,自然就知道,内存条在现有主频、制程工艺限制下,搞了很多花招提升性能、吞吐。这其中最重要的有两个:
  • 多Bank Group
  • Row Buffer
row buffer来自于Memory Array,前面有过详细解读,这里不再重复。简单总结下,Memory Array列大小1024bit,单个row buffer也是1024bit。一个RANK所有Bank中row buffer合起来,就是8KB。
每次内存读写,都要把8KB读到Row Buffer中,再从row buffer读出(或写入)目标列的数据。(然后row buffer中的数据会再写回对应的行
如果只从单一一个BG、Bank连续的读,可以最大程度使用Row Buffer,省去了“行选通”过程,只需要CAS,从row buffer中读出目标列数据即可。
但只使用一个BG/Bank,又无法利用“多BG”分散压力。
我想表达的是,多BG和Row Buffer,是相反的两个特性。前者要求分散,后者要求聚集、连续。
主频的提升,是普适的。当主频提升有限,或不再提升时。依赖各种特性的提升,很多是相冲突的内存是这样,CPU也一样
内存控制器在这里做了个折中,Chip中不是有4个BG吗,我只使用2个。
在8KB内,以Line为单位,在两个BG中轮流切换。既要分散,也不要太分散。
页大小不是8KB吗,因为流量被分散到了两个BG中,因此我只使用4KB。
如果使用4个BG,只使用row buffer的四分之一,row buffer的利用不是特别充分。Row Buffer利用充分了,多BG又没用上。
所以,就在二者间做个折中。4个BG只用2个,8KB row buffer只使用一半。
这就是内存控制器选择的策略。MC其实认为我们并不会经常性的、连续的读写。
但是,我如果真的想连续的读写内存呢?所有Bank已经把总计8KB加载到Row Buffer中了,读完前4KB后,后4KB弃之不用,因为后4KB对应的物理地址,可能和前4KB离的很远。
在了解了这些硬个特性后,只要合理的安排数据,可以完整的读(写)完Row Buffer,在当今无法突破的内存墙下,还是可以有点提升的。
或者把数据分散到4个BG中,最大化的利用多个BG提升吞吐,也是有提升的。
MC在做了个折中,我们可以根据我们的情况,在聚或散上,做到极致,更充分发挥硬件潜能。
本篇先到这儿,后续我们逐步揭晓,如何在现有硬件条件下,最大化利用硬件潜能。

最后附上内存系列前18篇,包括NUMA系列(NUMA的基础知识马上就要用到了);
不能说的秘密--内存竟然有隐藏带宽
内存基础知识(二)
内存基础知识(三)-- BANK
DDR5核心频率只有200MHz(兆赫兹):真的假的
内存基础知识(五)-- BankGroup前传
内存基础知识(六)-- BankGroup登场
内存基础知识(七)-- BankGroup正传
内存基础知识(八)-- 如何统计内存流量
内存基础知识(九)-- 内存通道(Channel)详解
内存基础知识(十)-- 内存控制器是怎么完成读操作的
内存基础知识(十一)-- 查询内存通道编号
内存基础知识(十二)-- 如何得到精确的流量数据
内存基础知识(十三)-- 在RANK层精细统计内存流量
内存基础知识(十四)-- 让内存条中的“页”现出原形

内存基础知识(十五)-- 使用perf分析内存流量瓶颈

内存基础知识(十六)-- Rank/Chip/BG/Bank,软硬结合彻底搞懂内存底层结构

内存基础知识(十七)-- 什么是内存地址

内存基础知识(十八)-- 虚拟地址/物理地址/内存地址, 有何不同

另外,我之前还写过一个 NUMA 系列,NUMA相关的基础知识,马上也要用到了:

NUMA的逆行人生:一文讲清什么是NUMA

NUMA的逆行人生:一文讲清什么是NUMA(第二弹)

NUMA的逆行人生:一文讲清什么是NUMA(第三弹)

NUMA的逆行人生:一文讲清什么是NUMA(第四弹)

NUMA的逆行人生:一文讲清什么是NUMA(第五弹)

NUMA的逆行人生:一文讲清什么是NUMA(大结局)

还有这个系列,讲CPU执行阶段流水线的,虽然和内存没有直接关系,但个人感觉相当不错,值得阅读:

跟着苍老师学体系结构:深入突破基础软件开发(一)

深入突破基础软件开发(二)

深入突破基础软件开发(三)

深入突破基础软件开发(大结局)

【声明】内容源于网络
0
0
IT知识刺客
基础软件开发 HPC(高性能计算) HPC数据库研发 数据库内核 向量计算 计算机体系结构 数据库 DBA CPU原理
内容 83
粉丝 0
IT知识刺客 基础软件开发 HPC(高性能计算) HPC数据库研发 数据库内核 向量计算 计算机体系结构 数据库 DBA CPU原理
总阅读26
粉丝0
内容83