首页
学习
活动
专区
圈层
工具
发布

【实测】基于开源硬加速平台RIFFA架构的PCIe DMA性能测试及分析

>测试环境 (1)Xilinx Virtex-7开发平台一块,网线一条; (2)64位Linux系统(内核版本:Ubuntu 16.04 LTS)主机一台、PCIe驱动和功能测试应用; (3)64位Windows...系统调试工程机一台,硬件开发软件Xilinx Vivado 2019.2; 图5:板级测试连接图 板级测试的拓扑结构如图5所示,在64位的Linux系统主机上装载了与SG DMA控制器适配的PCIe驱动和功能测试应用...(3)在Linux系统主机上输入lspci命令查看Virtex-709开发板是否被主机识别为PCIe设备;输入lsmod命令检查PCIe驱动是否装载成功;输入dmesg命令查看PCIe设备的详细信息,并核对这些信息的正确性...(4)读写配置空间测试:在Linux主机上输入lspci -xxx命令读取PCIe配置空间详细信息,使用setpci命令向PCIe标准配置空间写入数据。...图8:传输1KB数据量时,统计DMA读操作时间 如图9所示,在Linux主机的终端下输入.

5.5K21
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    深入理解SR-IOV和IO虚拟化

    长期从事Linux内核驱动开发、Linux内核开发和Linux系统虚拟化(QEMU/KVM),喜欢分析Linux内核子系统基本原理并撰写技术博客,长期关注kernel、QEMU的开源项目,经常参加相关开源社区活动...2.2 软件支持 Linux系统下,基于SR-IOV有三种应用场景:HostOS使用PF、HOstOS使用VF、将VF直通到VM(虚拟机),见图2.2.1: 图2.2.1 Linux系统中PCI驱动框架...3.1.2 VFIO VFIO(Virtual Function I/O)是基于IOMMU为HostOS的用户空间暴露PCIe设备的配置空间和DMA。...3.1.3 QEMU/KVM PCI设备直通 QEMU/KVM 的PCI设备直通QEMU的核心工作主要有两部分: 1) 读取PCIe设备信息 通过VFIO接口读取PCIe设备的配置空间和DMA信息, 2...) 为虚拟机创建虚拟PCIe设备 为虚拟机创建虚拟PCIe设备,虚拟PCIe设备的寄存器规划和DMA信息是物理PCIe设备在虚拟机中的映射。

    12.6K54

    基于瑞芯微 RK3588 的 ARM 与 FPGA 交互通信实战指南

    PCIe通信案例(DMA方式)案例说明案例功能:ARM端基于PCIe总线(开启PCIe DMA)对FPGA BRAM进行读写测试。...程序原理说明:ARM端:采用PCIe DMA方式;将数据写入至dma_memcpy/pcie_dma_memcpy驱动申请的连续内存空间(位于DDR);配置PCIe DMA,如源地址、目标地址、传输的数据大小等...-x86_64_aarch64-linux-gnu/bin/:$PATHHost# make KDIR=/home/tronlong/RK3588/rk3588_linux_release_v1.2.1...评估板默认内核镜像未支持PCIe RC接口测试,请将产品资料“4-软件资料\Debian\Kernel\image\linux-5.10.160-[版本号]-[Git序列号]\”目录下boot-enable-pcie.img...CC=aarch64-linux-gnu-gcc关键代码(ARM端)(1)将内存设备地址映射至虚拟地址。

    50110

    基于PCIe3.0X16的的100G光纤采集存储设备

    软件系统基于 Qt 5.15框架(C++开发)与 Visual Studio 2015 环境构建,支持跨平台部署(Windows/Linux),核心功能覆盖设备控制、状态监控、数据管理全流程。...驱动与通信层XDMA引擎:① 基于 Xilinx XDMA IP核 实现FPGA与上位机的PCIE 3.0 ×16高速通信② 支持 DMA零拷贝传输,双向传输带宽稳定维持 8GB/s以上③ 提供 独立DMA...跨平台支持Windows/Linux双版本Windows版:基于 WinDriver PCIe驱动/XDMA,兼容Win7/10/11(64位)Linux版:采用 内核态Char驱动,支持Ubuntu...上位机软件软件系统基于 Qt 5.15框架(C++开发)与 Visual Studio 2015 环境构建,支持跨平台部署(Windows/Linux)。...QDMA有效读写速度PCIE速率读写3.0 X1613280MB/s13360MB/sPCIe 3.0 x16 C2H DMA速率DMA0DMA1DMA2DMA3DMA4DMA5DMA6DMA7速率1660MB

    26810

    1分钟学会如何提升PCIe通信速率,基于RK3568J + FPGA国产平台!

    7 64bit、Windows 10 64bitLinux开发环境:VMware15.5.5、Ubuntu18.04.4 64bitU-Boot:U-Boot-2017.09Kernel:Linux-...4.19.232、Linux-RT-4.19.232LinuxSDK:LinuxSDK-[版本号](基于rk356x_linux_release_v1.3.1_20221120)硬件平台:创龙科技TL3568F-EVM...函数启动DMA,通过PCIe总线将数据搬运至FPGA DRAM;e)程序接收驱动上报input事件后,将通过ioctl函数获取DMA搬运数据耗时,并计算DMA传输速率(即写速率);f)读操作:通过ioctl...函数启动DMA,通过PCIe总线将FPGA DRAM中的数据搬运至dma_memcpy驱动申请的连续内存空间(位于DDR);g)程序接收驱动上报input事件后,将数据从内核空间读取至用户空间,然后校验数据...(2) FPGA端程序原理说明如下:a)实现PCIe Endpoint功能;a)处理PCIe RC端发起的PCIe BAR0空间读写事务;b)将PCIe BAR0读写数据缓存至FPGA DRAM中。

    78220

    PCIe(一)、PCIe PIO分析一

    一、PCIe基础知识 1.1 关于接口 PCIe2x接口,对比其他系列,该接口包含2对发送与接收接口, 数据部分包含双向八个接口: PETp0与PETn0:发送器差动线对,通道0 PETp1与PETn1...1.2 TLP包 1.2.1 AXI-Stream总线上的数据 在赛灵思7系列FPGA中,使用AXIStream总线进行通信,PCIe的TLP包使用AXI总线传输,在AXI总线上数据大端对齐,即高位数据在地址的高位...在使用强序模型时,在数据的整个传送路径中,PCIe设备在处理相同类型的TLP时,如PCIe设备发送两个存储器写TLP时,后面的写TLP必须等待前一个存储器写TLP完成后才能被处理,几遍当前报文在传输过程中阻塞...但是对于不同类型的TLP间可以乱序通过同一条PCIe链路。 在使用Realaxed Ordering模型时,后一个写TLP可以越过前一个存储器写TLP提前执行,从而能提高PCIe总线利用率。...1.2.3 TLP的路由 TLP的路由指的是TLP通过Switch或者PCIe桥片时采用哪一条路景,最终到达EP或者RC(Root Complex,跟联合体)的方法,一共有三种:基于地址的路由、基于ID

    3.7K30

    最新的全国产RK3568J+FPGA PCIe实时通信方案来了

    RK3568J + FPGA典型应用场景 pcie_dma_memcpy_io_irq案例本文主要介绍基于RK3568J + FPGA的PCIe实时通信案例,适用开发环境如下。...-4.19.232、Linux-RT-4.19.232LinuxSDK:LinuxSDK-[版本号](基于rk356x_linux_release_v1.3.1_20221120)硬件平台:创龙科技TL3568F-EVM...工业评估板(基于瑞芯微RK3568J + 紫光同创Logos-2)案例说明案例通过PCIe DMA在FPGA端(PCIe EP)与ARM端(PCIe RC)之间建立高速数据传输通道,由FPGA端按键触发...RS232 UART0串口终端将打印GPIO中断次数、GPIO中断响应到启动PCIe DMA的耗时、PCIe平均读写速率、PCIe读写耗时、误码率等相关信息,如下图所示。...从上图RS232 UART0串口终端的打印信息可知,FPGA GPIO中断响应到启动PCIe DMA的最大耗时为4us。

    60410

    057_逆向工程高级技术:硬件辅助逆向分析实战指南——从CPU特性到固件提取的全方位解析

    这些硬件特性主要包括: 处理器调试功能: 调试寄存器(DR0-DR7) 性能监控计数器 分支跟踪缓冲区 系统架构特性: DMA(直接内存访问) PCIe配置空间 系统管理模式(SMM) 专用硬件接口...技术: 实时内存监控: 使用DMA设备持续监控内存变化 设置内存修改触发条件 捕获加密密钥或敏感数据 跨系统DMA分析: 通过PCIe设备实现跨系统内存访问 分析多系统间的通信 提取分布式系统中的关键信息...通过DMA直接读取 PCIe设备逆向工具: PCILeech PCIeScreamer OpenFHEM 7.4 PCIe安全分析与漏洞挖掘 PCIe设备可能存在多种安全漏洞: 常见PCIe漏洞...操作 中断处理 安全访问控制 操作系统兼容性: Windows驱动(WDM/WDF) Linux驱动(内核模块) 跨平台驱动设计 驱动开发示例: // Linux内核模块示例(简化) #include...linux/module.h> #include linux/kernel.h> #include linux/pci.h> static int my_pci_probe(struct pci_dev

    18010

    DMA方式

    1.DMA方式的特点 主存和DMA接口之间有一条直接数据通路。由于DMA方式传送数据不需要经过CPU,因此不必中断现行程序,I/O与主机并行工作,程序和传送并行工作。...2.DMA控制器的组成 对数据传送过程中进行控制的硬件称为DMA控制器(DMA接口)。...当I/O设备需要进行数据传送时,通过DMA控制器向CPU提出DMA传送请求,CPU响应之后让出系统总线,由DMA控制器接管总线进行数据传送。 1)接受外设发出的DMA请求,并向CPU发出总线请求。...DMA请求触发器:每当I/O设备准备好数据后给出一个控制信号,使DMA请求触发器置位。...由此可见,DMA控制器必须具有控制系统总线的能力。 3.DMA的传送方式 主存和DMA控制器之间有一条数据通路,因此主存和I/O设备之间交换信息时。不通过CPU。

    4.5K12

    32.Linux-2440下的DMA驱动(详解)

    DMA中断 1.1在linux中,分配释放DMA缓冲区,只能使用以下几个函数 1)  /*该函数只禁止cache缓冲,保持写缓冲区,也就是对注册的物理区写入数据,也会更新到对应的虚拟缓存区上*/ void...和DMASKTRIGn[1]=1才有效,DMA传输时,该位自动清0 1.3接下来就开始讲linux注册DMA中断 首先,DMA的每个通道只能有一个源- >目的,所以输入命令 cat /proc/interrupts...,找到DMA3中断未被使用 所以在linux中使用: request_irq(IRQ_DMA3, s3c_dma_irq, NULL, "s3c_dma", 1);// s3c_dma_irq:中断服务函数...,还是直接两个地址之间的拷贝 -> 2.2)若是DMA启动,则设置DMA的相关硬件,并启动DMA传输 2.1 所以,驱动代码如下所示: #include linux/module.h> #include...linux/kernel.h> #include linux/fs.h> #include linux/init.h> #include linux/delay.h> #include linux

    4.8K90

    虚拟化与云计算硬核技术内幕 (12) —— 独立自主,自力更生 (中)

    GPU属于PCIe设备,将PCIe设备直通给虚拟机所需要的,就是让虚拟机能够访问到PCIe的配置空间,并为PCIe设备在虚拟机的内存地址空间中分配DMA空间,以及让PCIe设备的MSI中断可以直通给虚拟机...这样,虚拟机读写PCIe配置空间的问题,和为PCIe设备分配DMA地址问题,实质上就成了一个问题——将PCIe设备在宿主机上的配置空间地址和DMA地址,映射成为虚拟机可以访问的地址!...当PCIE设备完成第一阶段的初始化后,驱动程序会向操作系统申请用于给外设进行DMA的内存空间。显然,GuestOS向操作系统申请到的内存地址是GVA。...当PCIE设备需要DMA的时候,会对GPA进行操作—— 在这里出问题了。PCIE DMA地址应当是GPA对应的HPA! 幸好,IOMMU阻止了这一切。...如上图,Linux内核对dma_map_mage函数和pci_map_page()函数做了修改。如果发现自己是虚拟机(非DMA Direct Mapping),会将地址翻译的工作重定向到IOMMU。

    1K10

    PCIE时钟解说

    接上篇文章《clock oscillator,generator,buffer选型杂谈》,今天我们来说下PCIE时钟的要求: 首先先看下PCIE架构组件:下图中主要包括了CPU(ROOT COMPLEX...),PCIE SWITCH,BUFFER以及一些PCIE ENDPOINT;而且可知各个器件的时钟来源都是由100MHz经过Buffer后提供。...接着上图的架构,我们来简单看下PCIE时钟的三种架构: Common Clock Architecture:所有设备的参考时钟分布必须匹配到15英寸以内在系统板上。...鉴于PCIE时钟要求多且复杂的,故此文章主要鉴于上一篇文章,给出主要的参数要求,其它详细的要求以及测试方法,后续有机会再编写分享。...抖动:如下CC模式的要求: 注意:上图给出的是CC时钟架构下的抖动要求;仿真PCIE4.0时候,抖动是按照0.7ps RMS来的;仿真PCIE5.0时候,抖动是按照0.25ps RMS来的;因为标准考虑了实际系统中的额外噪声

    1.2K01

    什么是DMA?DMA究竟有多快!

    直接内存访问(Direct Memory Access,DMA):在计算机体系结构中,DMA 是一种数据传输方式,允许外部设备直接访问计算机的内存,而无需通过中央处理单元(CPU)的干预。...那么,DMA究竟有多快呢? 实践出真知 恰好,最近有个多通道数据采集的项目,受限于通道数多、分辨率高,而系统带宽有限,为了尽可能充分利用有限带宽,就得想办法优化时序,把时间都留给数据采集和传输。...优化方向就是DMA。 硬件链路是ADC通过SPI接口将数据发送给STM32单片机,单片机再将数据发送到上位机。 咱们的目标就是优化SPI这边,先看普通采集模式。...再看下,开启DMA之后的效果。SPI可以连续工作,时钟速率稳定在20MHz,高效工作。 这就是DMA的强大之处! 问题来了,为什么上图中的波形,有这么大的震荡呢?

    1.3K10

    宋宝华:那些年你误会的Linux DMA(关于Linux DMA ZONE和API最透彻的一篇)

    创作目的 互联网、Linux内核书籍上充满了各种关于Linux DMA ZONE和dma_alloc_coherent、dma_map_single等的各种讲解,由于很多童鞋缺乏自身独立的思考,人云亦云...那么ISA上面假设有个网卡,要DMA,超过16MB以上的内存,它根本就访问不到。所以Linux内核干脆简单一点,把16MB砍一刀,这一刀以下的内存单独管理。...比如我在CSR工作的时候,CSR的primaII芯片,尽管除SD MMC控制器以外的所有的DMA都可以访问整个4GB内存,但MMC控制器的DMA只能访问256MB,我们就把primaII对应Linux的...下面我们架空历史,假设有一个如下的芯片,里面有5个DMA,A、B、C都可以访问所有内存,D只能访问32MB,而E只能访问64MB,你觉得Linux的设计者会把DMA ZONE设置为多大?...当我grep内核源代码的时候,我发现部分SoC确实是这样实现的: baohua@baohua-VirtualBox:~/develop/linux/arch/arm$ git grep arm_coherent_dma_ops

    9.9K57
    领券