1、什么是DMA
DMA(Direct Memory Access,直接存储器访问)是一种高速的数据传输方式,允许在外部设备和存储器之间直接读写数据。数据既不通过CPU,也不需要CPU干预。整个数据传输操作在DMA控制器的控制下进行。但是这种方式存在多次访存的情况,而且还存在内存一致性问题,基于此intel提出DDIO技术,是对传统DMA技术的一个优化。DDIO允许I/O设备(如支持该技术的网卡)将数据直接写入或读取CPU的最后级缓存(LLC),而非内存。既然DDIO允许设备直接访问CPU的LLC,那么访问的过程中会涉及到pcie?带着这个疑问,我们继续探究第二个问题。
2、DDIO与PCIE的关系
正如上篇文章所讲,PCIe作为一种高速串行计算机扩展总线标准,是连接CPU与各种I/O设备(如网卡、存储控制器等)的主要通道。在采用DDIO技术的系统中,数据传输路径如下:当一个支持DDIO的I/O设备(如网卡)接收到数据时,它可以通过PCIe总线直接将这些数据传送给CPU的最后级缓存(LLC)。这个传输过程利用了PCIe提供的高速互连能力和数据带宽,即使得数据不必先经过内存,而是直接进入CPU缓存,减少了数据在内存和CPU之间来回移动的延迟。PCIe在此过程中扮演着关键角色,提供了高速、双向、点对点的数据传输信道,使得DDIO技术得以实现高效的数据交换。因此,DDIO技术的成功实施离不开PCIe总线所提供的高性能连接基础架构。
3、DMA的工作原理
3.1 初始化阶段
(1)网卡启动被设备识别时,告知CPU其具有DMA功能,并要求CPU分配一段连续的内存供DMA使用
(2)CPU根据设备的需求,在物理内存中预留一段区域并将其对应的物理地址提供给设备。这段内存区域被称为DMA缓冲区。
3.2 设置控制器
(1)DMA控制器是连接设备和内存之间的硬件组件,它负责管理DMA事务。
(2)设备驱动程序通常会设置DMA控制器的参数,如传输的方向(读或写)、源地址(设备地址或内存地址)、目的地址(内存地址)、传输大小等,并将这些参数存储在DMA