- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
基于PCIExpress2.0高速网卡中DMA设计
基于PCIExpress2.0高速网卡中DMA设计
摘要:PCffi总线已经成为高带宽网卡与计算机通信的主流总线。而DMA控制器是实现PCIE总线高带宽应用的关键因素。本文详细阐述了基于PCIE接口的网卡中DMA引擎的接收和发送数据过程,介绍了描述符机制。本文提出了基于PCIE接口的网卡DMA的设计方案,并详细说明了其中的实现难点和各子模块的功能。本文还提出了影响DMA性能的主要因素和改进方向。
关键词:网卡;DMA机制;PCIExpress
中图分类号:TP334.7文献标识码:ADOI:10.3969/j.issn.1003-6970.2017.08.041
本文著录格式:郑凯.基于PCI+ExpressZO的高速网卡中DMA的设计[J].软件,2017,38(8):204-209
引言
高性能高可靠性的网络接口卡是大型数据中心服务器直连高速网络的关键部件。PCI Express2.0提供的最高单位通道速率已可达5.0Gb/s。使用该总线的网卡能适应更高速度、更高带宽网络的需要。高速网卡通过直接内存访问机制(即DMA机制)来进行主机和网络直接的数据交互。在DMA机制中,数据传输无需CPU的介入,大大降低主机的工作负担。在主流的以PCIE为总线接口的网卡中,如何利用DMA机制来充分利用PC正总线的高带宽特性,实现网卡和主机间的高速数据传输是目前的一个研究热点。
DMA控制器是随着DMA机制在网卡中的应用而出现的,DMA控制器的主要功能是通过硬件数据通路完成主机和网卡之间的数据交互。设计一个高效合理的DMA控制器首先需要理解DMA机制下的工作原理和传输数据的关键机制。并且需要了解软件驱动程序和硬件网卡高效传输数据的交互过程。能否实现软硬件协同高效工作,也是DMA设计好坏的一个指标。为了更好的应用PCIE总线的特性,要充分了解PCIE总线协议和数据传输的形式。本文正是由以上思路来展开对论文的阐述。
1DMA的关键机制和工作流程在网卡采用的DMA方式下,网卡在发送和读写前必须知道其读写的内存地址,DMA控制器中接收和发送描述符的设计便是为DMA提供读写主存的地址和其他控制信息。
1.1 接收和发送描述符队列
DMA控制器包含了两个描述符队列即接收和发送描述符队列。描述符队列的设计正是为了提高系统的性能和总线带宽利用率。在主机的主存中也存在着同样的两个队列的映射。
1.2 接收和发送描述符队列
DMA控制器包含了两个描述符队列即接收和发送描述符队列。描述符队列的设计正是为了提高系统的性能和总线带宽利用率。在主机的主存中也存在着同样的两个队列的映射。
如图1为主存中发送描述符队列示意图,队列中每个描述符中的地址信息被配置为一个待发送数据缓存的基地址。其中Base为这个描述符队列存放在主存中的基地址,Size为队列长度,Head指针指向此队列中配好的第一个可用描述符,Tail指针指向此队列中CPU配好的最后一个可用描述符。
发送描述符的组成结构如图2所示。其中,Datalength域为待发送数据的长度,由CRJ来配置;RdAddr域为主存中待发送数据缓存的基地址。Own位由CPU置为0,表明为此描述可被DMA控制器使用;被硬件置为1,表明此描述符已经被DMA控制器用掉,需要被CPU重新配置。
1.3 高速网卡中DMA数据发送流程
(1)CPU在主存中创建了一个发送描述符队列,并且把该队列在主存中的起始位置,队列长度和头尾指针(初值都为0)写到网卡中的相关寄存器中去。
(2)CPU被协议栈请求发包,它把包存放在一个缓存区或多个缓存区中。
(3)CPU初始化描述符队列中的描述符,将其指向待发送的数据缓存区。
(4)主机准备好了可用的描述符,并及时更新网卡中的队列尾指针寄存器。
(5)网卡中的DMA通过查看头尾指针寄存器的值,知道主存中有可用描述符,进而通过PCIE接口发起一次为获取描述符的存储器读请求。
(6)描述符以PCffi读完成报文的形式被网卡接收并且存放到网卡中的专门位置。
(7)DMA读出描述符中存放的读主存地址和长度等信息,通过PCIE总线发起一次为获取主存中待发送数据的存储器读请求。如果读取长度大于PCIE总线的最大读请求长度,还会分割为几次读请求发出。
(8)主存中的数据包被以PCIE完成报文的形式传送到网卡中。
(9)当整个数据包存放到本地网卡后,DMA会通过PCIE总线向主存发起一次存储器写请求,来回写主存中被网卡刚用过的描述符。
(10)DMA会发起一次中断,通知主机驱动,数据包已经被读到网卡中,驱动可以释放刚才的数据缓存。
1.3 高速网卡中DMA数据接收流程
原创力文档


文档评论(0)