[转]浅谈scatter-gather DMA

在正文开始之前需要先搞明白以下几个问题:
1. 什么是DMA?

DMA的中文名称叫做 直接内存访问,是一种不需要CPU参与,就能实现数据搬移的技术(从一个地址空间到另一个地址空间)。

2. DMA有什么用?

一定程度上解放CPU,对于实现  高效嵌入式系统 与  加速网络数据处理  有极其重要的作用。

3. DMA的实现简述

在实现DMA传输时,是由DMA控制器直接掌管总线,因此,存在着一个总线控制权转移问题。即DMA传输前,CPU要把总线控制权交给DMA控制器,而在结束DMA传输后,DMA控制器应立即把总线控制权再交回给CPU。一个完整的DMA传输过程必须经过DMA请求、DMA响应、DMA传输、DMA结束 4个步骤。

 

scatter-gather DMA 与 block DMA
传统的block DMA 一次只能传输物理上连续的一个块的数据, 完成传输后发起中断。而scatter-gather DMA允许一次传输多个物理上不连续的块,完成传输后只发起一次中断。 

传统的block DMA像这样:

 

先进的scatter-gather DMA像这样:

 

这样做的好处是直观的,大大减少了中断的次数,提高了数据传输的效率。

 

scatter-gather DMA的应用

dpdk在ip分片的实现中,采用了一种称作零拷贝的技术。而这种实现方式的底层,正是由scatter-gather DMA支撑的。dpdk的分片包采用了链式管理,同一个数据包的数据,分散存储在不连续的块中(mbuf结构)。这就要求DMA一次操作,需要从不连续的多个块中搬移数据。附上e1000驱动发包部分代码:

uint16_t
eth_em_xmit_pkts(void *tx_queue, struct rte_mbuf **tx_pkts,
        uint16_t nb_pkts)
{
    //e1000驱动部分代码
    ...
    m_seg = tx_pkt;
    do {
        txd = &txr[tx_id];
        txn = &sw_ring[txe->next_id];
 
        if (txe->mbuf != NULL)
            rte_pktmbuf_free_seg(txe->mbuf);
            txe->mbuf = m_seg;
 
        /*
        * Set up Transmit Data Descriptor.
        */
        slen = m_seg->data_len;
        buf_dma_addr = rte_mbuf_data_iova(m_seg);
 
        txd->buffer_addr = rte_cpu_to_le_64(buf_dma_addr);
        txd->lower.data = rte_cpu_to_le_32(cmd_type_len | slen);
        txd->upper.data = rte_cpu_to_le_32(popts_spec);
 
        txe->last_id = tx_last;
        tx_id = txe->next_id;
        txe = txn;
        m_seg = m_seg->next;
    } while (m_seg != NULL);
 
    /*
    * The last packet data descriptor needs End Of Packet (EOP)
    */
    cmd_type_len |= E1000_TXD_CMD_EOP;
    txq->nb_tx_used = (uint16_t)(txq->nb_tx_used + nb_used);
    txq->nb_tx_free = (uint16_t)(txq->nb_tx_free - nb_used);
    ...
}

 


---------------------
版权声明:本文为优快云博主「Alan. W」的原创文章,遵循CC 4.0 by-sa版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.youkuaiyun.com/weixin_38006908/article/details/87375404

转载于:https://www.cnblogs.com/tubujia/p/11310208.html

Virtual Network----网卡offload特性和网络加速技术简述 文章目录Virtual Network----网卡offload特性和网络加速技术简述前言实例实操TCP/IP协议栈简介DMARSSNAPIChecksum offloadScatter/GatherTSOJumbo FramesGSOLROGROUFOtx-udp_tnl-segmentation Virtual Network----网卡offload特性和网络加速技术简述 前言 当前越来越多的网卡设备支持 offload 特性,来提升网络收/发性能。offload 是将本来该操作系统进行的一些数据包处 阅读详情

相关推荐

PYNQ开发板使用-使用DMA进行数据搬移-Scatter Gather(sg) DMA transfer 模式

上一篇使用了axi_cdma的简单传输模式,发现在板级支持包里有他的SG_intr和SG_poll模式的使用例程。因此想尝试sg模式在并发处理上的效果。本篇目的:学习如何使用AXI_CDMA_SG_MODE,并且与上一篇simple Mode的工作效率进行对比。(目前应用中出现了某个配置上的错误导致传输中断,打印状态寄存器发现是DMA解码错误,使用的就是官方例程bsp_xaxicdma_examp...

YGLeeeon的博客 3863

浅谈scatter-gather DMA

在正文开始之前需要先搞明白以下几个问题: 1. 什么是DMA? DMA的中文名称叫做 直接内存访问,是一种不需要CPU参与,就能实现数据搬移的技术(从一个地址空间到另一个地址空间)。 2. DMA有什么用? 一定程度上解放CPU,对于实现 高效嵌入式系统 与 加速网络数据处理 有极其重要的作用。 3. DMA的实现简述 在实现DMA传输时,是由DMA控制器直接掌管总线,因此,存在着一个总线控制权转移问题。即DMA传输前,CPU要把总线控制权交给DMA控制器,而在结束DMA传输后,DMA控制器...

流风回雪的博客 2841

安路科技FPSoC开发实战:从芯片特性到边缘计算应用

本文深入解析安路科技FPSoC芯片在边缘计算领域的开发实战,重点介绍SALDRAGON系列芯片的异构计算架构优势,包括RISC-V/ARM处理器与FPGA的协同工作。通过工业控制和智能视觉应用案例,展示硬件加速实现与低功耗设计技巧,帮助开发者高效利用FPSoC进行边缘计算应用开发。

weixin_29248611的博客 375

DMA的Scatter/Gather

Scatter:离散 Gather:聚合 场景1: 将一片连续内存数据搬运到一片不连续的的内存空间(且间隔是相等的) 源内存:连续 目的内存:离散 这个时候就可以用到DMA的Destination Scatter Transfer 场景2: 将一片内存区域中等间隔的多段数据拷贝到一段连续内存中(常见的2D矩形抠图就是这种场景的典型应用) 源内存:分散 目的内存...

Lenz_s_law的开发记录本 1万+

2006NOIP普及组真题 4. 数列

从上述推理中,我们发现要输出的幂次和中的第 N 项(也就是幂次和中的序号N),对应的二进制位数和幂次和对应的二进制位数相同。当 k=3 时,k的幂次为1, 3, 9, 27, 81…,即第0位,第2位均为1,转成 k 进制(k=3)时。,即第2位,第3位均为1,转成 k 进制(k=3)时。转成 k 进制(k=3)时的幂次和为。,即第0位,第1位,第2位均为1,(即第0位,第1位,第2位均为1)N=12时,12的二进制是。(即第0位,第2位均为1)(即第2位,第3位均为1)结论:这道题就变成了。

weixin_40252159的博客 1513

麒麟系统下PaddleOCR的离线部署实战:从环境搭建到模型优化

本文详细介绍了在国产麒麟操作系统上离线部署百度PaddleOCR的完整实战流程。从系统环境准备、Conda虚拟环境搭建,到PaddlePaddle框架和PaddleOCR的离线安装,再到预训练模型的本地部署与优化技巧,提供了全面的文字识别解决方案。重点解决了离线环境下依赖包管理、模型量化加速等核心问题,并附带了批量处理与内存监控的进阶代码,适用于对数据安全有严格要求的政务、金融等场景。

docker7nomad的博客 963

【转】scatter/gather DMA介绍

在正文开始之前需要先搞明白以下几个问题: 1. 什么是DMA? DMA的中文名称叫做 直接内存访问,是一种不需要CPU参与,就能实现数据搬移的技术(从一个地址空间到另一个地址空间)。 2. DMA有什么用? 一定程度上解放CPU,对于实现 高效嵌入式系统 与 加速网络数据处理 有极其重要的作用。 3. DMA的实现简述 在实现DMA传输时,是由DMA控制器直接掌管总线,因此,存在着...

Jim 2013

银河麒麟V10开机卡Logo?别慌,手把手教你进单用户模式修复(附详细命令)

本文详细解析银河麒麟V10操作系统启动时卡Logo的故障原因,并提供进入单用户模式的完整解决方案。通过GRUB引导菜单修改启动参数,执行文件系统检查、图形服务修复等关键命令,帮助用户快速恢复系统正常运行,适用于运维人员和普通用户应对紧急启动问题。

weixin_30522183的博客 391

2021年二月下旬文章导读与开源项目仓库 | scatter-gather DMA,SR-IOV,ARP欺骗,中断,Lockdep,virtio,vhost

目录 文章目录 开源项目仓库 [转]浅谈scatter-gather DMA SR-IOV:网卡直通技术 [黑客入门] 连接公共WIFI有多危险(ARP欺骗) DPDK ACL算法介绍 文章目录 Linux PCI驱动框架分析(一)https://www.cnblogs.com/LoyenWang/p/14165852.html Linux PCI驱动框架分析(二)https://www.cnblogs.com/LoyenWang/p/14209318.html Linux PCI.

RToax 1376

AI穿透式智慧粮仓

本报告基于 2025-2026 年全国多地智慧粮储实践案例,系统分析了 "AI + 穿透式" 智慧粮储体系的技术架构、AI 算法应用、提质增效成效、区域差异化特点及未来发展趋势。该体系通过多模态感知、智能算法与管控平台的深度融合,实现粮食存储全流程精准感知、智能预警与科学调控,显著降低储粮损耗与运营成本,大幅提升储粮安全水平与管理效率。报告梳理了各地差异化实践路径,提出针对性发展建议,为推动我国粮食仓储高质量发展、筑牢国家粮食安全防线提供参考。

reset2021的博客 227

【WRF运行报错】总结WRF运行时报错及解决方案(持续更新)

总结WRF运行时报错及解决方案(持续更新)

WW、forever的博客 1629

Linux DMA-BUF内存共享机制浅谈

DMABUF是Linux下流媒体零拷贝传输的基石,通过“导出-传递-导入”的流程,解决了跨驱动内存共享的效率问题。它能帮你实现“摄像头采集→编码→显示”的低延迟 pipeline,提升产品竞争力。后续可深入研究的方向:结合V4L2-HEVC或DRM Prime接口优化DMABUF的使用;用GStreamer或FFmpeg的DMABUF插件快速搭建原型;(查看DMABUF使用情况)、perf(分析拷贝开销)。惠州大亚湾。

jongden的专栏 996

YOLO11改进 | 卷积模块 | 轻量化GSConv替换普通的conv

yolo11,GSConv,卷积模块

kay_545 3955

常见网络加速技术浅谈(一)

TCP/IP协议栈简介 当用户需要向网络发送数据的时候,用户实际上是通过应用程序来完成这项工作。应用程序向一个描述了对端连接的文件描述符(File Description)写数据。 之后位于操作系统内核的TCP/IP协议栈,从文件描述符收到数据,完成TCP分段(如果是TCP连接的话),加TCP,IP,Ethernet Header。在加这些Header的时候,也涉及到一些内容的计算,例如校验和,序列号。 最后,操作系统内核通过网卡的驱动,告知网卡需要发送的数据,这里的数据是长度合适,并且封装了各种协议头的网

bob的博客 2287

S7-200SMART 的运动控制(一)向导配置具体步骤(图文)

S7-200SMART 的运动控制(一)向导配置具体步骤(图文)

Robot_PLC_HMI_Automation 3849

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

浅谈 Linux下的零拷贝机制

什么是零拷贝 维基上是这么描述零拷贝的:零拷贝描述的是CPU不执行拷贝数据从一个存储区域到另一个存储区域的任务,这通常用于通过网络传输一个文件时以减少CPU周期和内存带宽。 零拷贝给我们带来的好处: 减少甚至完全避免不必要的CPU拷贝,从而让CPU解脱出来去执行其他的任务 减少内存带宽的占用 通常零拷贝技术还能够减少用户空间和操作系统内核空间之间的上下文切换 Linux系统的“用户空间”和“内核空间” 从Linux系统上看,除了引导系统的BIN区,整个内存空间主要被分成两个部分:内核空间(Kernel sp

weixin_37073932的博客 291

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

浅谈SSD的寻址双雄:PRP和SGL 实现的底层逻辑和原理

当主机(CPU/内存)需要向SSD发送命令(如读、写)时,最关键的问题之一是如何高效、准确地告诉SSD控制器数据在主机内存中的位置(对于写命令)或者SSD控制器应该将数据放到主机内存的哪个位置(对于读命令)。对齐要求: PRP机制严格要求每个描述的内存区域都必须是物理内存页对齐(4KB边界) 且大小为整数个4KB页(除了最后一个PRP描述的数据块可能小于4KB,但必须起始于页边界)。基于物理页面的离散列表: PRP的核心思想是将要传输的数据所占据的主机物理内存描述为一个或多个物理内存页(4KB) 的列表。

sinat_37817094的博客 987

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

浅谈NVME协议的SGL描述符的实现原理和应用

SGL(Scatter/Gather List)就是解决这个问题的机制:它提供一个链表结构(SGL描述符链),链表中每个节点(SGL描述符)精确描述一个连续的物理内存块(地址+长度),整个链表按顺序描述了所有需要传输的分散内存块。4.当处理第一个数据块时,第二个描述符 (Addr_Desc2) 很可能已经通过预取到达控制器缓存,可以立即解析,并启动对第二个数据块 (Addr_Data2, Len2) 的DMA和对下一个描述符(如果有)的预取。0: 表示有后续描述符。描述符所代表的连续物理内存块的字节长度。

sinat_37817094的博客 1018

常见网络加速技术浅析(一)

网络加速技术的分析 能够更好的理解网络的加速技术

weixin_44260459的博客 1035

Scatter-gather DMA 与 block DMA

Scatter-gather DMA方式是与block DMA方式相对应的一种DMA方式。 在DMA传输数据的过程中,要求源物理地址和目标物理地址必须是连续的。但是在某些计算机体系中,如IA架构,连续的存储器地址在物理上不一定是连续的,所以DMA传输要分成多次完成。 如果在传输完一块物理上连续的数据后引起一次中断,然后再由主机进行下一块物理上连续的数据传输,那么这种方式就为bloc...

kouriba 1067

DMA Engines之Scatter-Gather DMA

DMA Engines之Scatter-Gather DMA 在实现PCIe总线传输时看到有Scatter-Gather DMA运输方式,特此记录一下。 首先对常规的DMA基本知识进行简单描述 DMA(Direct Memory Access)即直接内存访问,无需CPU干预情况下即可直接由DMA模块硬件实现数据的快速传输。由于DMA传输方式不需要CPU参与,没有取指令、取数据等CPU操作,因而传输数据更快。早在8086的应用中就已经有了Intel的8237这种典型的DMA控制器。 微控制器的硬件系统一般

一起交流学习 1587

ZYNQ使用AXI DMA(Scatter/Gather)模式进行PL与PS数据交互附源码(ps端移植freertos或者裸机)

ZYNQ使用AXI DMA(Scatter/Gather)模式进行PL与PS数据交互附源码 #include "xaxidma.h"#include "xparameters.h"#include "xil_exception.h"#include "xdebug.h"#include "xscugic.h"#include "xaxidma_hw.h"#define DMA_DEV_ID XPAR_AXIDMA_0_DEVICE_ID#define MEM_BASE_ADDR

qq_69993439的博客 5193

什么是scatter / gather

scatter/gather方式是与block dma方式相对应的一种dma方式。         在dma传输数据的过程中,要求源物理地址和目标物理地址必须是连续的。但在有的计算机体系中,如IA,连续的存储器地址在物理上不一定是连续的,则dma传输要分成多次完成。         如果传输完一块物理连续的数据后发起一次中断,同时主机进行下一块物理连续的传输,则这种方式即为bloc

lichengtongxiazai的专栏 3469

block DMA & scatter-gather DMA

上面提到的数据拆分,其实只是设备驱动层面的操作——驱动会根据硬件的 DMA 传输能力、物理地址的连续性以及应用层传入的缓冲区特征,将一次用户请求拆分成若干个物理上连续的片段(segment)。看到这里,我们就会发现,在有 IOMMU 的前提下,DMA 传输数据需要的源地址、目的地址发生了本质变化,不再是需要连续的物理地址了。从这里就可以发现,有了 IOMMU 之后,实际上,DMA 的源地址、目的地址,就不再是连续物理地址,而是虚拟地址了。我们这里以 SPI 控制器驱动为例,讲解 DMA 传输的拆分问题。

日常学习记录 1443

一步步学习zynq软硬件协同开发(AX7021)【AXI-DMA】:AXI-DMA Scatter/Gather Mode(SG模式)

AXI-DMA有几种模式,其中最难使用的莫过于Scatter/Gather模式,以下简称sg模式,axi_dma的框架如下: 在AX7021上,有4路PL端的网口,该网口的驱动和PS端的驱动有所差别,移植到我们自己的RTOS下,需要重新做驱动,除了phy的配置,mac的配置,最关键的部分在于网络协议栈的描述符的处理,这里也就要涉及到sg模式的使用,要对网络协议栈也有比较强的理解。 该部分的...

Deep_l_zh的博客 9228
上一篇: [转]SDRAM/DDR/DDR2/DDR3/DDR4
下一篇: [原]modelsim仿真altera ip核出现"Failed to open file xxx.hex" for reading
ddk43521
博客等级 码龄12年 26粉丝 0原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值