DMA引擎

DMA


三种 DMA 引擎(Ring DMA / Queue-based DMA / Mailbox DMA

一、三种 DMA 引擎定义

1️⃣ Ring DMA(环形DMA)

连续流数据引擎:硬件按环形 descriptor 自动搬运数据

典型:NIC / Wi-Fi / 音频 / 视频


2️⃣ Queue-based DMA(队列DMA)

任务执行引擎:CPU提交任务,设备执行并返回完成结果

典型:NVMe / RDMA / GPU


3️⃣ Mailbox DMA(寄存器DMA)

控制型DMA:CPU写寄存器触发一次性传输或动作

典型:MCU外设 / SoC IP / 简单DMA控制器


二、核心差异表

维度 Ring DMA Queue-based DMA Mailbox DMA
抽象模型 流(stream) 事务(task) 控制(command)
数据结构 circular ring SQ/CQ队列 register + IRQ
并发能力 高(连续流) 很高(多队列)
CPU参与 很低 中等(提交+轮询)
语义 packet / buffer IO / command control action
完成通知 interrupt / poll CQE interrupt
典型设备 NIC / USB / audio NVMe / GPU / RDMA SPI / I2C / UART DMA

三、结构图(核心对比)

三种 DMA 架构统一图

┌────────────────────────────────────────────────────────────┐
│                      CPU / Software                        │
│                                                            │
│  Ring DMA        Queue DMA             Mailbox DMA         │
│  (netdev)        (blk-mq / GPU)        (reg-based)        │
│                                                            │
│  RX/TX ring      SQ / CQ queues        registers          │
│  ┌───────┐       ┌──────────┐         ┌──────────┐        │
│  │ desc0 │       │ SQ entry │         │ CTRL REG │        │
│  │ desc1 │       │ SQ entry │         │ STATUS   │        │
│  │ desc2 │       │ SQ entry │         │ CMD      │        │
│  └───────┘       └──────────┘         └──────────┘        │
│       ↓                 ↓                    ↓              │
└───────┼─────────────────┼────────────────────┼─────────────┘
        │                 │                    │
        ▼                 ▼                    ▼
┌────────────────────────────────────────────────────────────┐
│                      DMA / Device Engine                   │
│                                                            │
│  Ring DMA          Queue DMA           Mailbox DMA         │
│  ─────────         ──────────          ───────────         │
│  circular fetch    command executor    single action       │
│  auto index++      scheduler           state machine       │
│                                                            │
└────────────────────────────────────────────────────────────┘
        │                 │                    │
        ▼                 ▼                    ▼
   Streaming IO      Parallel IO         Control action
 (packets/data)     (requests)          (config/trigger)

四、三种 DMA 的“本质区别”(关键理解)


✔ 1️⃣ Ring DMA:连续流模型

核心思想:

“设备永远在跑,CPU只维护缓冲池”

特点:

  • descriptor 是循环数组
  • DMA自动推进 index
  • 非常适合 packet / stream

为什么快:

  • 无 per-request setup
  • cache friendly
  • pipeline continuous

✔ 2️⃣ Queue-based DMA:事务模型

核心思想:

“CPU提交任务,设备执行任务,完成后返回结果”

特点:

  • SQ(提交)
  • CQ(完成)
  • 支持并发 queue depth

为什么强:

  • 支持复杂 IO
  • 支持并行执行
  • 支持优先级调度

✔ 3️⃣ Mailbox DMA:控制模型

核心思想:

“CPU写寄存器,设备执行一个动作”

特点:

  • 无 ring
  • 无 queue
  • 强同步
  • 低复杂度

为什么简单:

  • 实现成本最低
  • 适合 SoC 控制外设

五、三种 DMA 的演进关系

Mailbox DMA
     ↓(扩展并发)
Queue-based DMA
     ↓(流化 + zero-copy)
Ring DMA

但现实不是线性替代,而是:

✔ 三种模型并存,各自服务不同设备类型


六、工程本质总结(非常重要)

✔ 三者不是“性能等级”,而是“语义层级”

层级 模型 核心问题
控制层 Mailbox “做不做?”
事务层 Queue “做什么任务?”
数据流层 Ring “怎么持续搬数据?”

七、一句话总结

Ring DMA 是面向“持续数据流”的硬件循环引擎,Queue-based DMA 是面向“离散任务”的执行队列系统,Mailbox DMA 是面向“控制命令”的寄存器级触发机制,它们分别对应流处理、事务处理和控制处理三种完全不同的设备抽象模型。



posted @ 2026-07-06 12:26  王阳开  阅读(12)  评论(0)    收藏  举报