当前位置: 首页 > news >正文

【AXI】读重排序深度

我们以DDR4存储控制器为例,设计一个读重排序深度为3的具体场景,展示从设备如何利用3级队列优化访问效率:


基础设定

  • 从设备类型:DDR4存储控制器(支持4个存储体Bank0-Bank3)
  • 读重排序深度:3(允许同时跟踪3个未完成读请求)
  • 访问延迟特征
    • Bank激活后访问:3周期(低延迟)
    • Bank预充电后访问:7周期(高延迟)
  • 主机请求序列(按时间顺序发送):
    时间点请求标识ARID值目标Bank地址描述
    T0Req A1Bank00x1000首次访问Bank0(需预充电)
    T1Req B2Bank10x2000Bank1已激活(低延迟)
    T2Req C3Bank20x3000Bank2已激活(低延迟)
    T3Req D1Bank00x1004连续地址(同ARID=1)
    T4Req E4Bank30x4000Bank3已激活(低延迟)

从设备处理逻辑(深度=3)

从设备内部有一个容量为3的请求队列,用于暂存未完成的读请求(pending addresses),允许对不同ARID的请求重排序,但严格保证同ARID的顺序。

阶段1:队列填充(T0-T2)
  • T0:接收Req A(ARID=1),队列为空 → 入队,开始处理Bank0预充电(耗时7周期)。
  • T1:接收Req B(ARID=2),队列剩余容量2 → 入队,立即处理Bank1(3周期完成)。
  • T2:接收Req C(ARID=3),队列剩余容量1 → 入队,立即处理Bank2(3周期完成)。

此时队列状态:[Req A(ARID=1), Req B(ARID=2), Req C(ARID=3)](已满)。

阶段2:队列释放与新请求(T3-T4)
  • T3:主机发送Req D(ARID=1),但队列已满(容量3),需等待至少一个请求出队才能入队。
  • T4:主机发送Req E(ARID=4),队列仍满,无法入队(需等待)。
阶段3:响应返回与队列更新(T4-T10)
  • T4(B完成):Bank1完成Req B → 返回数据B(RID=2),队列释放位置,Req D入队(ARID=1)。
  • T5(C完成):Bank2完成Req C → 返回数据C(RID=3),队列再释放位置,Req E入队(ARID=4)。
  • T7(A完成):Bank0完成Req A(预充电+访问耗时7周期)→ 返回数据A(RID=1),队列释放位置。
  • T8(D处理):Req D(ARID=1,目标Bank0)已激活(无需预充电)→ 3周期完成(T11返回数据D)。
  • T9(E处理):Bank3完成Req E(3周期)→ 返回数据E(RID=4)。

最终数据返回顺序

时间点返回数据原始请求说明
T4Data BReq B最早完成的低延迟请求(ARID=2)
T5Data CReq C次早完成的低延迟请求(ARID=3)
T7Data AReq A高延迟请求(ARID=1,必须先返回)
T9Data EReq E新入队的低延迟请求(ARID=4)
T11Data DReq D同ARID=1的后续请求(必须在A之后)

深度=3的核心优势

  1. 并行处理能力:同时跟踪3个未完成请求,允许从设备在Bank0(高延迟)处理期间,并行完成Bank1、Bank2的低延迟请求(T0-T5期间同时处理3个请求)。
  2. 资源利用率提升:原本需等待Bank0完成(T7)才能处理后续请求,但通过队列缓冲,T4-T5已释放两个位置,提前处理了Req D和Req E。
  3. 吞吐量对比
    • 严格顺序(深度=1):需依次处理A→B→C→D→E,总耗时≈7(A)+3(B)+3(C)+3(D)+3(E)=19周期。
    • 深度=3:实际总耗时≈11周期(T0-T11),吞吐量提升约42%。

关键约束验证

  • 同ARID保序:Req D(ARID=1)必须在Req A(ARID=1)之后返回(T11在T7之后)。
  • 跨ARID乱序:B、C、E(不同ARID)的返回顺序与请求顺序(B→C→E)无关(实际返回顺序B→C→E)。
  • 深度限制:队列容量3,T3-T4时因队列已满,Req D和E需等待队列释放后才能入队。

此例直观展示了读重排序深度为3时,从设备如何通过有限的乱序能力,在保证协议规范的前提下,显著提升存储访问效率。

http://www.dtcms.com/a/272001.html

相关文章:

  • Scala实现网页数据采集示例
  • linux的用户和权限(学习笔记
  • 西门子200SMART如何无线联三菱FX3U?御控工业网关实现多站点PLC无线通讯集中控制!
  • MiniGPT4源码拆解——models
  • 膨胀卷积介绍
  • QPC框架中状态机的设计优势和特殊之处
  • 大模型在膀胱癌诊疗全流程预测及应用研究报告
  • 【Linux基础命令使用】VIM编辑器的使用
  • 【个人笔记】负载均衡
  • Linux小白学习基础内容
  • LUMP+NFS架构的Discuz论坛部署
  • 可视化DIY小程序工具!开源拖拽式源码系统,自由搭建,完整的源代码包分享
  • Spring Boot 3.4 :@Fallback 注解 - 让微服务容错更简单
  • 分桶表的介绍和作用
  • OpenSearch 视频 RAG 实践
  • GO 启动 简单服务
  • 【YOLO脚本】yolo格式数据集删除缺失删除图片和标签
  • 青岛门卫事件后:高温晕厥救援技术突破
  • 文件系统----底层架构
  • 如何处理mocking is already registered in the current thread
  • IDEA 安装AI代码助手GitHub Copilot和简单使用体验
  • Apache http 强制 https
  • 百度文心ERNIE4.5部署与性能白皮书:FastDeploy加速方案+全系列模型实测数据对比
  • DVWA靶场通关笔记-弱会话IDs(Weak Session IDs Medium级别)
  • mmu 是什么?core和die是什么?
  • 计算机网络实验——无线局域网安全实验
  • UE 植物生长 Motion Design
  • 深度学习-正则化
  • 【SkyWalking】服务端部署与微服务无侵入接入实战指南
  • 【spring boot】三种日志系统对比:ELK、Loki+Grafana、Docker API