自学内容网 自学内容网

【IO】关于DMA、零拷贝技术笔记

什么是DMA

DMA(Direct Memory Access,直接内存访问)控制器是一种硬件组件,它允许外部设备直接与系统内存进行数据传输,而无需中央处理器(CPU)的直接干预。DMA 控制器的设计和实现原理旨在提高数据传输的效率和系统的整体性能。

DMA实现原理是什么?

  1. 硬件架构
    DMA 控制器:DMA 控制器是一个专门的硬件模块,通常集成在芯片组或外设控制器中。
    总线接口:DMA 控制器通过系统总线与内存和其他外设连接,能够直接访问内存和外设。
  2. 工作流程
    初始化:
    CPU 配置:CPU 通过编程设置 DMA 控制器的寄存器,指定源地址、目标地址、传输长度等参数。
    启动传输:CPU 发出命令启动 DMA 控制器,DMA 控制器接管数据传输任务。
    请求总线控制权:
    总线请求:DMA 控制器向总线仲裁器发出总线请求信号。
    总线授权:总线仲裁器根据优先级和当前总线状态决定是否授予 DMA 控制器总线控制权。
    数据传输:
    数据读取:DMA 控制器从源地址读取数据。
    数据写入:DMA 控制器将数据写入目标地址。
    传输模式:根据配置的传输模式(单字节/字传输、块传输、请求传输),DMA 控制器可以一次传输一个字节或多个字节。
    释放总线控制权:
    单字节/字传输:每次传输一个字节或字后,DMA 控制器释放总线控制权。
    块传输:传输完所有数据后,DMA 控制器释放总线控制权。
    完成通知:
    传输完成中断:数据传输完成后,DMA 控制器生成中断信号,通知 CPU 数据传输已完成。
    错误中断:在传输过程中发生错误时,DMA 控制器生成中断信号,通知 CPU 处理错误。
  3. 控制逻辑
    寄存器:DMA 控制器内部有一组寄存器,用于存储传输参数和状态信息。
    源地址寄存器:存储数据传输的起始地址。
    目标地址寄存器:存储数据传输的目标地址。
    传输长度寄存器:存储需要传输的数据量。
    状态寄存器:存储传输的状态信息,如传输完成标志、错误标志等。
    状态机:DMA 控制器内部有一个状态机,用于管理数据传输的不同阶段,如请求总线、传输数据、释放总线等。

DMA的使用开销,也就是带来的问题有哪些?

  1. 硬件成本:
    额外硬件:DMA 控制器需要额外的硬件资源,包括寄存器、状态机、总线接口等。
    芯片面积:集成 DMA 控制器会增加芯片的面积和复杂性,从而增加制造成本。

  2. 总线竞争
    总线带宽:DMA 控制器在传输数据时,会占用系统总线,可能会导致其它设备或CPU无法访问总线,影响系统性能。
    总线仲裁复杂度提升:总线仲裁器需要管理多个设备对总线的请求,增加了系统的复杂性和延迟。

  3. 内存碎片方面
    DMA传输数据通常需要连续的内存区域,若内存碎片严重,可能需要额外内存管理操作来进行处理。

  4. 中断开销
    DMA虽然减少了CPU的参与,但是在数据传输完成时,需要生成中断信号进行通知CPU,CPU需要处理这些终端,从而增加了系统CPU中断处理的开销。

  5. 设计复杂度提升
    DMA技术,可以抽象理解为多了一层中间层。
    需要依据业务需求进行配置相关控制器参数,所以有一定使用难度;
    上游若是出了问题,比如传输失败、超时等,则可能是中间层出了问题,还需要进行逐个排查。

什么是零拷贝(ZC)

零拷贝是一种思想,目标是降低内存拷贝次数。

DMA技术仅仅是减少了CPU上下文切换、调用负担。上层系统减少了一次拷贝,但是这次拷贝是交给了DMA控制器进行执行,从整体(DMA+原系统)上来说,并没有减少拷贝次数。

  1. 传统方式(原系统两次拷贝):
    步骤:
  • 数据从外部设备(如磁盘或网络接口卡)传输到内核缓冲区。(原系统)
  • 数据从内核缓冲区拷贝到用户空间缓冲区。(原系统)
    特点:数据需要经过两次拷贝,增加了 CPU 和内存的开销。
  1. DMA 方式(DMA控制器一次拷贝 + 原系统一次拷贝):
    步骤:
  • DMA控制器,将数据从外部设备直接传输到内核缓冲区。(使用 DMA 控制器)
  • 原系统,将数据从内核缓冲区拷贝到用户空间缓冲区。(原系统)
    特点:数据只需要一次拷贝,减少了 CPU 的负担,但仍然存在一次拷贝。

DMA 技术的主要作用是:

  1. DMA 控制器:DMA 控制器可以直接访问系统内存,而无需 CPU 的直接干预。这意味着数据可以从外部设备(如磁盘、网络接口卡)直接传输到目标内存地址,或者从内存直接传输到外部设备。
  2. 绕过 CPU:由于数据传输由 DMA 控制器管理,CPU 可以继续执行其他任务,从而避免了 CPU 的参与和额外的拷贝操作。

原文地址:https://blog.csdn.net/qq_37286579/article/details/144112378

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!