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 是面向“控制命令”的寄存器级触发机制,它们分别对应流处理、事务处理和控制处理三种完全不同的设备抽象模型。
浙公网安备 33010602011771号