news 2026/1/1 1:03:39

内存控制器(memory controller)架构及其工作原理

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
内存控制器(memory controller)架构及其工作原理

内存控制器(memory controller)架构及其工作原理
前置知识:

Linux 内核中常见地址的设计原理及其API使用:
https://mp.weixin.qq.com/s/MUSAvyDBue7rPbkKYmrLVQ

DMA 硬件寄存器及kernel driver软件设置:

https://mp.weixin.qq.com/s/ury8IbSzQkLNxEiMUkNo2w
PCIe Direct Memory Access (DMA) - 软硬件工作原理完全手册

PCIe信号链路架构及其Linux kernel系统软件完全开发指南

基于统一协议GPU芯片高速互联Infinity Fabric的研究 (二)

基于统一协议CPU芯片高速互联Infinity Fabric的研究 (一)

完整文章: 请关注公众号获取


请关注微信公众号:颇锐克科技共享


内存控制器是一个关键却常被忽视的组件,它决定了现代计算系统的性能和效率。让我们来详细解析其架构和工作原理。

一、前言

什么是内存控制器?

其核心是,内存控制器 是一个管理进出计算机主内存(DRAM,如 DDR4 或 DDR5)数据流的数字电路(硬件)。它充当 CPU/系统其余部分与内存模块之间的“交通警察”或“翻译器”。

关键演变:

· 北桥(历史): 在旧系统中,内存控制器是主板上一个独立的芯片,是“北桥”芯片组的一部分。

· 集成内存控制器(IMC - 现代): 自 2000 年代中期(AMD Athlon 64,后来的 Intel Nehalem)以来,内存控制器已直接集成到 CPU 芯片中。这极大地减少了延迟(访问内存的时间)并增加了带宽,因为通信不再需要通过速度较慢的前端总线进行片外传输。

二、memory contoller 架构


如内存控制器架构可知:现代 IMC 是一个复杂的片上系统(SoC)模块,包含几个专用单元:

  1. 内存通道控制器:

    · IMC 被划分为独立的通道(例如,双通道、四通道)。每个通道可以同时与一组内存模块通信,从而倍增有效数据带宽。每个通道都有自己的控制器、数据缓冲区和 I/O 引脚。

  2. 命令调度器与队列:

    · 这是操作的大脑。它接收来自 CPU 核心(通过系统代理/缓存层次结构)的读/写请求。

    · 它不按接收顺序(FIFO)执行请求。相反,它使用复杂的调度算法来重新排序命令,以最小化由 DRAM 内部时序造成的延迟,这个过程称为命令调度或重排序。这能最大化效率和带宽。

  3. 地址解码器与转换器:

    · CPU 使用物理地址请求数据。控制器将其转换为特定的 DRAM 语言:Bank、Row 和 Column 地址。

    · Rank 和 DIMM 选择逻辑也在这里处理(确定访问哪根内存条以及内存条的哪一面)。

  4. PHY(物理层接口):

    · 这是电气接口,负责物理驱动内存总线到 DIMM 插槽的信号。

    · 它处理高速串行化/反串行化(SerDes)、阻抗校准和时序同步。它负责实际的“物理”协议(DDR4/5)。

  5. 刷新逻辑:

    · DRAM 单元将数据存储在会泄漏电荷的小电容器中。控制器必须定期刷新每一行(读取并重写)以防止数据丢失。这是由控制器自主管理的后台任务。

  6. 错误校正码逻辑(如果支持):

    · 计算并检查数据的额外奇偶校验位,以检测和纠正单位错误(有时是多位错误)。对服务器和工作站至关重要。

三、读/写/Qos sequence 及data path

3-1. 数据访问流程架构

3-2. 读操作

让我们追踪一个 CPU 内存读取请求:

CPU Core → L1/L2 Cache (Miss) → L3 Cache (Miss) →
System Agent → IMC Scheduler → Arbiter (QoS Decision) →
Channel Scheduler → PHY → DDR Interface → DIMM →
Bank Activation → Row Buffer → Column Read →
Data Return: DIMM → DDR Interface → PHY →
Read Data Buffer → System Agent → CPU Core

  1. 请求生成: CPU 核心发生缓存未命中(所需数据不在其 L1/L2/L3 缓存中)。它生成一个针对物理内存地址的读取请求。该请求被发送到 CPU 内的集成内存控制器。

  2. 队列与调度: 请求进入调度器的命令队列。调度器查看所有待处理请求(读和写)并应用其算法。它可能会:

    · 优先处理读请求而非写请求(读取延迟通常更关键)。

    · 将命令分组到相同的 DRAM Bank 或 Row,以避免打开/关闭行的开销(行缓冲区命中)。

    · 这种重排序对 CPU 是透明的;CPU 总是获得正确的数据,只是顺序可能不同。

  3. 地址转换与命令发出: 调度器选择下一个要处理的最佳请求。地址解码器将物理地址转换为 (通道) -> (DIMM) -> (Rank) -> (Bank) -> (Row) -> (Column)。

    然后控制器在所选通道的总线上发出一系列精确的低级 DRAM 命令:

  4. DRAM 访问序列(关键路径):

    · 激活(RAS): 向特定的 Bank 和 Row 发送“行激活”命令。这会打开一行(将整行存储单元,数千个比特,复制到该 Bank 的行缓冲区中)。这是一个相对较慢的操作(tRCD 时序)。

    · 读取(CAS): 等待行准备就绪后,发出带列地址的“列读取”命令。这会从行缓冲区中选择要输出的特定字节。

    · 数据传输: DRAM 将请求的数据(一个突发传输,通常为 64 字节或更多,取决于架构)置于数据总线上。内存控制器上的 PHY 接收此数据。

    · 预充电: 最终,必须关闭已打开的行,以便为 Bank 的新访问做准备。这可以在读取后立即执行或延迟执行(自动预充电)。此时序为 tRP。

  5. 数据返回 CPU: 内存控制器接收数据突发,可能进行 ECC 检查,然后将其转发回 CPU 核心的缓存层次结构,填充原始的缓存行。核心现在可以继续其操作。

3-3 写操作

CPU Core → System Agent → Write Data Buffer →

IMC Scheduler → Arbiter (Priority Assignment) →

Channel Scheduler → Write to Open Row (if possible) →

PHY → DDR Interface → DIMM → Bank → Row Buffer →

Data Written → Acknowledge

3-4 Qos

Multiple Request Sources → System Agent →

IMC Scheduler (with priority tags) → Arbiter/QoS →

Channel Allocation Based on:

  1. Request Type (Read/Write)

  2. Source Priority (CPU/GPU/I/O)

  3. Latency Requirements

  4. Bandwidth Allocation

四、高级功能与优化

· Bank 交错: 交错访问不同的 Bank 以隐藏延迟(当一个 Bank 在激活时,另一个可以读取数据)。

· 命令重叠: 允许对不同 Bank 的某些命令同时进行。

· 写缓冲: 控制器可以在数据完全写入较慢的 DRAM 之前,立即确认来自 CPU 的写操作(将其存储在小型快速缓冲区中),从而使 CPU 无需等待即可继续工作。

· 电源管理: 在空闲期间为 DRAM 实现低功耗状态(如自刷新)以节省能源。

五、总结

为何如此重要?

· 性能: 调度器的效率直接影响有效内存带宽和平均访问延迟,这是决定整体系统性能的主要因素,尤其是在数据密集型任务中(游戏、科学计算、数据库)。

· 兼容性: 它确保 CPU 能与行业标准的 JEDEC 内存协同工作,并能执行内存训练(在启动时校准时序)以确保稳定性,尤其是对于超频(XMP/EXPO)内存。

· 系统稳定性: 正确管理刷新、时序参数(CL、tRCD、tRP、tRAS)和电压对于系统稳定至关重要。

总而言之,内存控制器是一个复杂的协调器,它弥合了 CPU 对数据的无尽需求与 DRAM 复杂且受物理规律支配的行为之间的鸿沟,将简单的读/写命令转化为高度优化的电信号交响乐,使您的系统能以最高效率运行。

谢谢关注,后续会持续分享关于AI,GPU,Linux开发,操作系统,图形学,高性能计算,芯片行业讯息。欢迎感兴趣的伙伴关注微信公众号参与讨论沟通:

请关注公众号获取完整系统资料


请关注微信公众号:颇锐克科技共享


版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2025/12/24 2:40:38

5分钟搭建map遍历原型

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容: 快速创建一个map遍历概念验证原型,展示核心功能和用户体验。点击项目生成按钮,等待项目生成完整后预览效果 最近在开发中经常需要处理map数据结构&#xff0…

作者头像 李华
网站建设 2025/12/24 3:18:47

打造个人专属复古游戏博物馆:Emupedia完整部署指南

🎮 项目核心价值解析 【免费下载链接】emupedia.github.io The purpose of Emupedia is to serve as a nonprofit meta-resource, hub and community for those interested mainly in video game preservation which aims to digitally collect, archive and preser…

作者头像 李华
网站建设 2025/12/24 6:50:05

快速验证:用Docker容器测试文件下载方案

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容: 创建一个Docker-based的Linux文件下载测试环境。包含:1. Dockerfile配置多种下载工具(wget/curl/axel/aria2c等);2. 示例测试文件服务…

作者头像 李华
网站建设 2025/12/23 19:47:55

产品经理必备:用快马5分钟搞定页面原型居中布局

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容: 创建一个产品原型设计工具页面,左侧是配置面板可以设置:布局类型(居中、左对齐、右对齐)、容器尺寸、背景色、内容类型(文…

作者头像 李华
网站建设 2025/12/30 18:33:06

GLM-4.6大模型:200K上下文窗口与智能体工具调用的技术革命

GLM-4.6大模型:200K上下文窗口与智能体工具调用的技术革命 【免费下载链接】GLM-4.6 GLM-4.6在GLM-4.5基础上全面升级:200K超长上下文窗口支持复杂任务,代码性能大幅提升,前端页面生成更优。推理能力增强且支持工具调用&#xff0…

作者头像 李华