理解内存的Rank、位宽以及内存颗粒内部结构

2025-12-17 10:32:16

内存字符串标识中的 2 R 表示该内存有 2 个 Rank。

2 R 后面的 * 4 表示每个内存颗粒的位宽是 4 bit。因为 CPU 要同时读写 64 bit 的数据。所以

对于位宽为 4 的颗粒,需要 16 个 Chip 来组成一个 Rank

对于位宽为 8 的颗粒,需要 6 个 Chip 来组成一个 Rank

对于位宽为 16 的颗粒,需要 4 个 Chip 来组成一个 Rank

对于位宽为 4 的颗粒,需要 16 个 Chip 来组成一个 Rank

对于位宽为 8 的颗粒,需要 6 个 Chip 来组成一个 Rank

对于位宽为 16 的颗粒,需要 4 个 Chip 来组成一个 Rank

例如,下面的笔记本内存条,是 1 R * 16。表示的是该内存条只有 1 个 Rank。每个 Chip 内存颗粒的位宽是 16 bit。

而一个 Rank 需要提供 64 位的数据,则需要 64 / 16 = 4 个 Chip 来组成一个 Rank 来同步地工作。从实物图中也确实可以看到,该内存条正反面加起来只有 4 个 Chip,

再比如,下面的笔记本内存条,是 2 R * 8。表示的是该内存条有 2 个 Rank,每个 Chip 内存颗粒的位宽是 8 bit。

一个 Rank 需要 64 / 8 = 8 个 Chip 来组成一个 Rank。则两个 Rank 总共需要 16 个 Chip。从内存条的实物图中看到,该内存条的正反面确实总共有 16 个 Chip。

内存颗粒 Chip 内部结构

一个内存是由若干个黑色的内存颗粒构成的。每一个内存颗粒叫做一个 chip。在每个 chip 内部,又是由一层层的 bank 组成的。

在每个 bank 内部,就是电容的行列矩阵结构了。

这个矩阵由多个方块状的元素构成,这个方块元素是内存管理的最小单位,也叫内存颗粒位宽。在一个位宽中。有若干小电容。

对于 1 R * 16 的内存条,一个位宽有 16 个 bit 位

对于 2 R * 8 的内存条,一个位宽有 8 个 bit 位

对于 1 R * 16 的内存条,一个位宽有 16 个 bit 位

对于 2 R * 8 的内存条,一个位宽有 8 个 bit 位

值得注意的是,由于内存访问太慢了。所以 CPU 每次向内存请求数据的时候,并不只是请求一个 64 bit 的数据就完事了,而是会请求更多的数据然后用自己的 L1、L2、L3等模块缓存起来。下次如果访问的数据位于缓存中的话,就可以不用再发起内存 IO 了。一次请求的数据大小是 64 * 8 bit = 64 字节,这也是一个 Cache Line 的大小。

对于内存来说,一次 Cache Line 64 字节的访问属于是一次 Burst IO,需要内存连续工作多次,输出多个 64 字节。所以,内存在排列和组织二维矩阵结构的时候,会按方便 Burst IO 的方式来组织,实际二维矩阵单元中存储的字节数会比位宽要大。

例如下面是一个美光(Megon)内存 Chip 的内部结构。

在该 Chip 中,总共有 8 个 bank,每个 bank 是一个 32768 行 * 128 列的二维矩阵,每个二维矩阵单元存储的数据大小是 64 比特。

则该 Chip 总共可存储的数据大小是 8 * 32768 * 128 * 64 = 2147483648 比特。

换算成 MiB 2147483648 字节/(1024*1024*8) = 256 MiB

总结

内存标识字符串中的第二段是非常重要的表示内存物理结构的标识。它清楚地写明了当前内存条总共有几个 Rank,每个 Chip 中的位宽是多少。进而也能推算出 1 个 Rank 中有多少个 Chip 组成。例如

2R*4 表示的是内存条有 2 个 Rank,每个 Chip 的位宽大小是 4。可以推算出每个 Rank 需要 64/4 = 16 个 Chip 颗粒。这种内存常见于服务器内存。内存颗粒越多,就可以组成更大容量的内存条。

2R*8 表示的是内存条有 2 个 Rank,每个 Chip 的位宽大小是 8。可以推算出每个 Rank 需要 64/8 = 8 个 Chip 颗粒。这种规格常见于台式机。

1R*16 表示的是内存条有 1 个 Rank,每个 Chip 的位宽大小是 16。可以推算出每个 Rank 需要 64/16 = 4 个 Chip 颗粒。这种内存常见于笔记本内存条。因为内存颗粒越少,则体积越小。

2R*4 表示的是内存条有 2 个 Rank,每个 Chip 的位宽大小是 4。可以推算出每个 Rank 需要 64/4 = 16 个 Chip 颗粒。这种内存常见于服务器内存。内存颗粒越多,就可以组成更大容量的内存条。

2R*8 表示的是内存条有 2 个 Rank,每个 Chip 的位宽大小是 8。可以推算出每个 Rank 需要 64/8 = 8 个 Chip 颗粒。这种规格常见于台式机。

1R*16 表示的是内存条有 1 个 Rank,每个 Chip 的位宽大小是 16。可以推算出每个 Rank 需要 64/16 = 4 个 Chip 颗粒。这种内存常见于笔记本内存条。因为内存颗粒越少,则体积越小。

至于每个 Chip 内存颗粒中有多少个二维矩阵元素,为了支持 Burst IO,也为了节约地址线数量。一般每个二维矩阵元素中存储的数据要比位宽更大一些。

什么?电脑内存又不够用了?我来拯救你!

腾讯二面:Redis 内存淘汰策略有哪些?过期数据如何删除?

为什么编程更关注内存而很少关注CPU?

把个人电脑上的 CPU 拔下来插到服务器上行不行?

电脑死机的时候,CPU到底在做什么?

什么?电脑内存又不够用了?我来拯救你!

腾讯二面:Redis 内存淘汰策略有哪些?过期数据如何删除?

为什么编程更关注内存而很少关注CPU?

电脑死机的时候,CPU到底在做什么?返回搜狐,查看更多

最新发表
友情链接