基于PCIe总线的多路复用DMA高速传输系统的设计

来源:本站
导读:目前正在解读《基于PCIe总线的多路复用DMA高速传输系统的设计》的相关信息,《基于PCIe总线的多路复用DMA高速传输系统的设计》是由用户自行发布的知识型内容!下面请观看由(电工技术网 - www.9ddd.net)用户发布《基于PCIe总线的多路复用DMA高速传输系统的设计》的详细说明。
简介:文章针对双处理器设备问的数据通信提出了基于PCIe非透明桥的高速传输系统的设计方法。该方法应用于视频转码设备,实验结果表明当转码设备作为外设与PC主机进行通信时,采用多路虚拟DMA方法的数据传输总带宽可以稳定的达到1100MB/s,为实现多路实时转码提供了前提保证。文中还重点介绍了虚拟DMA通道的实现、双系统问通信模型的设计及传输系统性能优化分析。

0 引言

两个处理器系统的数据通信方式可以采用网络通信方式或者总线连接通信方式等。网络通信的带宽约为1Gbps~4Gbps即 128MB/s~512MB/s,在不同的工作条件下,网络带宽不同,网络信号存在不稳定性,这使得系统问建立的通信系统存在影响传输速率的不可控因素。 PCI Express作为目前使用最流行的总线,广泛用于主机与外部设备间通信,16bit总线宽度的PCI Express2.0速率达到16GB/s(双工),远远超过了网络通信速率且不需要配置网络环境。

本文设计的传输系统应至少提供8路传输通道供转码设备与主机进行通信,然而在以PCIe接口芯片设计传输系统时,芯片中有限的DMA通道(一般为4路)难以满足转码设备多路实时转码的传输要求。因此,如何实现多路虚拟DMA通道、传输速率满足要求且保证各通道传输速率均衡是软件设计的重点。在此之上,文中将进一步探讨如何降低传输系统对处理器系统CPU资源的占用率。

1 系统模型设计及系统通信机制

1.1 系统模型设计

数据传输系统软件模型可分为3个层次,包括设备驱动层、系统应用层和用户接口层。系统结构如图1所示。

基于PCIe总线的多路复用DMA高速传输系统的设计

薛巨峰,副教授/硕士,主研领域:自动化控制技术和加工工程自动化技术。黄爱娟,硕士生,研究方向:计算机应用技术。

由图1可知传输系统由设备驱动模块、DMA管理模块、系统通信模块、客户端通信模块和客户端API组成。

设备驱动程序用于在处理器系统中识别PCIe接口芯片设备;DMA管理模块(只在主机端存在)用于管理和分配处理器系统需要进行数据传输时对DMA通道的使用请求并完成数据传输功能;系统通信模块用于处理器系统间的消息传递;客户端通信模块负责响应客户端与传输系统的链接请求和数据传输请求;客户端 API(Client Register)是提供给用户进行链接和传输请求的函数接口。

1.2 系统通信机制

在主从机端分别运行传输系统应用程序(Plx_Server)完成传输系统的建立,Plx_Server等待客户端调用Client Register进行链接请求。当主从机端的Plx_Server都有可配对的客户端链接请求,则为可配对客户端建立1路虚拟DMA传输通道。客户端使用Plx_Server为其分配的传输句柄(Client Socket)即可实现数据收发和断开传输链接。

2 系统硬件设计

开发PCIe接口可以采用FPGA设计PCIe接口,但由于PCIe总线规范较复杂,这种开发方法难度很大;而采用专用PCIe接口芯片,可以免除繁琐的时序分析,缩短开发周期,降低开发成本。本系统选择后者,PCIe接口芯片选择为PLX公司开发的PEX8619接口芯片。

PCIe桥连接方式有2种:透明桥(Transparent Bridge)和非透明桥(Non-Transparent Bridge)。总系统中存在两个独立的处理器,此时使用透明桥方式不利于整个系统的配置与管理,可能出现PCIe总线地址的映射冲突,此外不能使用PCIe透明桥连接两个PCIe Agent设备,如x86处理器。采用非透明桥可有效的解决这些问题,提高PCIe传输系统的可移植性。非透明桥不是PCIe总线定义的标准桥片,但是这类桥片在连接两个处理器系统中得到了广泛的应用。

PEX8619支持NT桥功能,芯片在智能配置器模式下的软件模型如图2所示。

基于PCIe总线的多路复用DMA高速传输系统的设计

在图2中有两个用于设备识别的配置空间寄存器(CSR),离内部虚拟PCIe总线较近的称之为虚拟接口(Virtual Interface),离得较远的称之为链路接口(Link Interface)。

在智能配置器模式中,NT桥链路端口连接的是从机的地址域,从机系统只管理NT桥链路接口Type 0功能(NT设备功能)。NT桥虚拟端口连接的是主机的地址域,主机管理所有NT桥虚拟接口Type 0功能和Type 1功能(DMA引擎功能)。跨域传输是通过地址转换机制的路由来完成的。

3 系统软件设计

3.1 设备驱动程序

主从机端分别安装PLX公司提供的PLX_SDK_v7_11_Final设备驱动程序,从机端识别出NT桥的NT设备,主机端识别出NT桥的NT设备和DMA引擎。

3.2 系统应用程序

PCIe传输系统Plx_Server与客户端API(Client_Register)是一对多的关系,传输系统最多允许128对客户端进行链接和数据传输,传输系统的函数关联图如图3所示。

基于PCIe总线的多路复用DMA高速传输系统的设计

3.2.1 系统初始化

系统初始化主要是对PCIe设备进行初始化配置 和地址映射等工作。调用系统库函数PlxPci_Device Find找到NT设备和DMA设备(只在主机端有),并获得设备描述符。使用PlxPci_PciBarMap函数将NTBar0、DMA Bar0(只在主机端有)和NT Bar2~NT Bar5映射到用户虚地址空间。使用PlxPci_PhysicalMap函数申请128个大小为4MB的物理内存并将其映射到用户虚地址空间作为DMA数据缓冲区使用。这些寄存器的作用如表1所示。

基于PCIe总线的多路复用DMA高速传输系统的设计

3.2.2 DMA管理模块

使用规定传输系统最多允许建立128对传输通道,而PEX8619芯片上只有4个DMA通道。面对128路虚拟传输通道和4路DMA物理通道的不匹配,系统中使用分时复用DMA通道的方法解决这一矛盾。

首先,分时复用要解决共享内存资源的分配,DMA数据缓冲区大小为128x4MB。为达到资源利用最大化及公平性,每一次虚拟传输通道的建立与断开都要为现存的每一路传输通道重新计算和分配DMA数据缓冲区。每一路传输通道可用于接收或发送数据的缓冲区大小计算公式为:128×4/channel total×1/2,其中channel_total为总通道数。

其次,需要解决DMA通道的使用分配。在多线程机制下对DMA通道请求队列的管理有2种方案,队列管理方案如图4所示。

基于PCIe总线的多路复用DMA高速传输系统的设计

在方案一中,每个虚拟通道的线程把自己的DMA请求(DMA_Req)放入DMA请求队列(DAM_Queue)中,Oueue Read负责从队列中取出DMA请求。在此使用锁机制,将队列写操作作为临界区,在锁定的临界区只允许让一个线程访问,其它线程排队等待。这样的方案设计简单易懂好管理,然而在实际的测试中,由于线程资源及调度是由操作系统来完成的,测试结果表明各个通道的DMA_Req并不能公平地写入队列,DMA物理通道并不能公平的服务于每一路虚拟通道,导致了各个通道间传输速率不均衡。

在方案二中,各个虚拟通道把自己的DMAReq写入自己的DMA_Queue中,Queue_Read通过轮询的方式读取各个DMA_Queue的DMA 请求,测试结果表明DMA物理通道资源能被公平的分配且请求处理效率更高。因此传输系统的DMA请求队列管理采用方案二实现。

3.2.3 系统通信模块

主机与从机两个处理器系统天然的分离特性,使得性能与正确性产生矛盾,如果两端的消息通信只是简单的发送/接收和处理,不能保证两端不同时使用同一资源。因此为传输系统规定了一个有顺序语义的通信机制如图5所示。

基于PCIe总线的多路复用DMA高速传输系统的设计

图5中黑色箭头表示的是程序的执行顺序,白色部分代表了对主机端消息的处理,黑色部分代表了对从机端消息的处理。主从机端皆有一个消息队列,所有需要发送的消息(msgQ)都先存入消息队列中,主机和从机端通过令牌机制来轮流向对方递送消息。如果一方消息队列为空,也需要让度令牌,使得对方能继续递送消息。以主机机端为例,其消息处理过程如下:(1)等待从机端发送让度令牌的消息Ack;(2)收到Ack后接收从机端的发送的消息Req;(3)对消息进行处理并且准备要发送给对方的Ack和从消息队列中取出msgQ(若消息队列为空,则填入NULL);(4)向对方发送Ack和msgQ。从机端的消息处理与主机端是一一对应的。

系统中使用NT桥的8个32位的MailBox寄存器来实现主从机的消息通信,MailBox寄存器是NT桥的链路端口和虚拟端口共有的,都可见可读可写。

令牌跳跃式的消息传递机制是否会成为整个传输系统提升传输速率的瓶颈,将在下文的实验测试中给出结论。

3.2.4 客户端通信模块

使用“Abstract”样式。为了提供一个简易通用的客户端接口,Plx_Server和Client_Register的进程间通信使用Socket实现。传输系统的主程序Plx_Server通过创建服务器(Server Socket)未向连接服务器的客户端(Client Register)提供服务。服务包括了数据收发请求,连接建立/端开请求等。Plx_Server处理Client_Register连接请求的流程如图6所示。

基于PCIe总线的多路复用DMA高速传输系统的设计

在图6中客户端的连接注册、客户端配对和建立传输通道都是由主机端完成的,从机端的连接注册需要交付给主机端来完成。

3.2.5 客户端API

调用客户端API(Client_Register)完成连接配对请求后,Client_Register将返回一个Socket描述符。用户只需要参考标准Socket编程规范,即可使用Socket标准函数接口,比如read、write、close等进行数据通信。

4 系统性能优化分析

为满足视频转码设备对数据传输性能的要求,传输系统除了要满足传输速率、速率均衡的要求外,CPU资源使用率也要作为考虑的因素。在测试中当处理器系统的 CPU使用率超过50%后,传输系统的总带宽随之下降。为此,传输系统做了以下优化:(1)设置Plx_Server的CPU相关性,使进程同时关联多个 CPU;(2)线程在等待或空闲时适当挂起以释放占用的CPU资源。

5 实验结果分析

本传输系统结合视频转码设备的使用做了大量的测试,首先测试传输系统数据传输带宽,测试结果如图7所示。实验结果表明了系统传输性能稳定,传输总带宽约为1100MB /s。随着传输通道数的增加,每一对正在传输的通道将重新公平分配资源,分配到的资源将减少,使得单路传输带宽将减小,但总带宽基本保持不变。

基于PCIe总线的多路复用DMA高速传输系统的设计

另外验证传输系统消息通信机制是否会成为限制传输速率的瓶颈。测试数据如表2所示。传输系统最少每秒可发送/接收一共1776个消息,完成一次传输(每次 DMA传输可发送4MB大小数据)一共需要发送/接收5个消息,则经换算传输系统消息通信带宽为1776/5x4=2220MB/s,远远超过了传输系统数据传输总带宽,不会成为限制传输速率的瓶颈。

基于PCIe总线的多路复用DMA高速传输系统的设计

在处理器型号为Intel Core i5系列,双核4线程的主机上运行传输系统进程时,进程对主机CPU使用率低于20%,这使得主机在使用从机(视频转码设备)时还有足够的余力处理其它任务。

6 结语

本文基于PEx8619的PCIe接口芯片完成了跨PCIe NT桥的传输系统的设计,实现了双处理器间的多通道数据传输功能。经试验测试,传输系统总带宽达到1100MB/s,实时性好,性能优越且可移植性强,在需要高速传输系统的领域如视频实时转码等有很好的应用前景。

提醒:《基于PCIe总线的多路复用DMA高速传输系统的设计》最后刷新时间 2024-03-14 01:05:21,本站为公益型个人网站,仅供个人学习和记录信息,不进行任何商业性质的盈利。如果内容、图片资源失效或内容涉及侵权,请反馈至,我们会及时处理。本站只保证内容的可读性,无法保证真实性,《基于PCIe总线的多路复用DMA高速传输系统的设计》该内容的真实性请自行鉴别。