摘要:文章针对双处理器设备问的数据通信提出了基于PCIe非透明桥的高速传输系统的设计方法。该方法应用于视频转码设备,实验结果表明当转码设备作为外设与PC主机进行通信时,采用多路虚拟DMA方法的数据传输总带宽可以稳定的达到1100MB/s,为实现多路实时转码提供了前提保证。文中还重点介绍了虚拟DMA通道的实现、双系统问通信模型的设计及传输系统性能优化分析。

关键词:PCIe总线 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所示。

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

由图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所示。

在图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所示。

3.2.1 系统初始化

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

3.2.2 DMA管理模块

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

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

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

在方案一中,每个虚拟通道的线程把自己的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所示。

图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所示。

在图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。随着传输通道数的增加,每一对正在传输的通道将重新公平分配资源,分配到的资源将减少,使得单路传输带宽将减小,但总带宽基本保持不变。

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

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

6 结语

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

pcie总线连接两台电脑_基于PCIe总线的多路复用DMA高速传输系统的设计相关推荐

  1. pcie总线连接两台电脑_基于PCIE总线多主互连系统的设计与实现

    女 , 山东人 , 工程师 , 研究方向为计算机应用 : 孙大东 (1980 ) , 男 , 吉林辽源人 , 硕 士 , 高级工程师 , 研究方向为嵌入式系统网络 : 张明庆 (1980 ) , 男 ...

  2. pcie总线连接两台电脑_【PCI-E通道是个什么东西?他是干啥的?】

    前言: 经常接触台式机的同学肯定绕不开PCI-E这个名词,因为这是台式机里最重要的接口/通道之一,就算是笔记本,也有很多地方会提到,就好比你加固态硬盘的时候,查阅资料的时候你应该会发现有的M.2接口走 ...

  3. 用计算机连接路由器,用路由器怎么连接两台电脑

    很多人使用路由器都是连接一台电脑使用,但如果电脑多了,例如像是两台电脑,这个时候用路由器怎么连接两台电脑?下面是学习啦小编整理的用路由器连接两台电脑的方法,供您参考. 用路由器连接两台电脑的方法 1. ...

  4. 如何通过网线连接两台电脑快速传输数据?

    介绍 我们经常需要拷贝文件会用到类似U盘等工具,但我们有时在传输大文件时又苦于没有,那么大内存的转存工具.这时候我们就可以通过一条小小的网线连接两台电脑,形成一个小的局域网传输数据,因为是通过网线传输 ...

  5. 直接用网线连接两台电脑,实现双网卡共享上网

    原文 直接用网线连接两台电脑,实现双网卡共享上网 我有两台电脑,一台笔记本,一台台式机,都是 XP 操作系统.笔记本收到 邻居无线信号,能正常上网.想通过有线连接使台式机同样能够共享网.经过摸 索总算 ...

  6. 用网线连接两台电脑传输文件

    用网线连接两台电脑传输文件 将第一台电脑本地连接的IPV4协议设置成: IP地址: 192.168.0.2 子网掩码:255.255.255.0 默认网关: 192.168.0.1 第二台电脑本地连接 ...

  7. 【转】如何连接两台电脑同时上网

    我们要知道局域网最大的特点就是可以实现资源的最佳利用,如:共享磁盘设备.打印机等,从而可以在组建的局域网内部互相调用文件,并可在任何一台 共享打印机上进行打印:当然我们也可以借助Wingate或Syg ...

  8. 用USB连接两台电脑

    程序下载网址 http://www.sknet-web.co.jp/down/USBlin15.EXE (双机对连) http://www.sknet-web.co.jp/down/USBpro15. ...

  9. 通过网络使用其他计算机串口,串口如何连接两台电脑?两台电脑不能通过网线,仅能通过串口或者并口连接...

    串口联机线的连接方法 串口联机线主要用于直接把两台电脑的com口连接.比较早一点的AT架构的电脑的串口有为9针,和25针两种,现在的ATX架构的电脑两个串口全部是9针.于是联机线就分为3种(9针对9针 ...

最新文章

  1. .NET MVC+ EF+LINQ 多表联查VIEW显示列表
  2. mysql 忽略语法错误_MYSQL语句中易忽略的语法错误 | 学步园
  3. 薛其坤、向涛两位院士,担任这家研究院联合院长
  4. SSH配置优化和慢的解决方法
  5. 统一认证服务CAS 5安装
  6. asp.net日历控件My97DatePicker下载地址
  7. Servlet使用适配器模式进行增删改查案例(IDeptDao.java和IEmpDao.java)
  8. python获取当前文件路径
  9. Spring Boot整合thymeleaf
  10. 【JSON】FastJson 打印输格式化输出
  11. 浏览器渲染页面的过程
  12. C语言相关问题(1)
  13. struts标签logic:iterate的用法
  14. Python基础数据类型---列表、元组、字典、集合、编码进价、数据类型转换
  15. centos 开发套件_替代的Laravel套件开发工作流程
  16. 小武学fpgastep7
  17. CC2530 ADC学习
  18. CE植物大战僵尸——阳光值基址寻找
  19. android 双卡铃声,铃声多多双卡版
  20. linux系统weblogic安装及简单使用

热门文章

  1. ADC0832的使用
  2. 如何轻松实现跨境电商,华为云解决方案告诉你
  3. 精选28页完整版毕业设计PPT文件
  4. P5462_X龙珠邪教组织被我部侦破
  5. 从手机拍摄视频提取位置
  6. EagleGet - 猎鹰,视频下载的神器
  7. elasticsearch配置内存占用
  8. 中学生作文指导杂志中学生作文指导杂志社中学生作文指导编辑部2022年第18期目录
  9. IT经典网站(国内,国外)!
  10. 网络基础-交换篇-二层交换基础