掌桥专利:专业的专利平台
掌桥专利
首页

一种基于PCIe的数据传输方法、装置和系统

文献发布时间:2024-04-18 20:00:50


一种基于PCIe的数据传输方法、装置和系统

技术领域

本发明涉及计算机通信技术领域,尤其涉及一种基于PCIe的数据传输方法、装置和系统。

背景技术

随着金融证券、数据中心、5G行业等行业对网络的延时要求的不断提高,传统网卡已经不能够满足业务处理的要求,所以需要对网络延时有特殊优化的网卡来加速行业业务的处理。

DMA(直接内存访问)技术允许外部设备直接访问计算机的内存,而无需通过中央处理单元(CPU)的干预,能够提高数据传输的效率,降低延迟,减轻CPU的负担,使其能够执行其他任务,提高计算机系统的整体效率。

传统的DMA中,Host根据数据传输需求产生描述符信息并通知到设备,设备从Host内存指定位置抓取描述符信息,DMA控制器根据描述符信息提供的目的地址、源地址以及长度等信息在Host内存与设备间搬运数据。

相较于传统的DMA,低延时DMA主要通过两个方向来降低数据传输过程中的延时:一种是简化或者优化DMA传输流程中的步骤,像Host直接把描述符通过PIO放到设备中指定位置;另一种是降低数据在内存中的拷贝次数来实现,比如零拷贝技术。其中,C2H方向的DMA需要Host去预填充描述符,并告知设备数据如何组织并发送到Host端的内存中指定位置。加上多个端口通道接收的网络包都需要通过这种方式来把网络数据包放到对应内存的位置,无疑使得数据包延时相对较大,还容易产生较大的抖动。在业务量比较多时,会因为无法及时对网络包进行处理从而导致丢包的现象。

发明内容

鉴于此,本发明实施例提供了一种基于PCIe的数据传输方法、装置和系统,以消除或改善现有技术中存在的一个或更多个缺陷。

本发明的一个方面提供了一种基于PCIe的数据传输方法,所述方法用于在设备端执行,所述设备端的多个端口由主机端的驱动器识别并配置使能,每个端口分别匹配所述主机端预申请的一个数据缓冲区,该方法包括以下步骤:

将每个端口待发送的数据包按照预设规则分段得到数据小包,调用描述符生成器根据所述数据小包生成描述符;

调用所述描述符仲裁器轮询每个端口对应的通道以检测和获取所述描述符,将检测到的所述描述符传至DMA控制器;

调用所述DMA控制器向数据抓取器和数据发送器发送控制信息,指令所述数据抓取器从对应的通道读取所述数据小包,并将转发至所述数据发送器;

调用所述数据发送器将所述数据小包发送到所述主机端,并存储至与该数据小包对应端口匹配的所述数据缓冲区,以供所述驱动器对所述数据缓冲区中所述数据小包进行逐个读取并聚合。

在本发明的一些实施例中,还包括:

所述数据发送器向所述DMA控制器发送反馈信息,并将所述反馈信息传至所述描述符仲裁器;

所述描述符仲裁器收到所述反馈信息,继续轮询各通道以获取下一个所述描述符。

在本发明的一些实施例中,所述数据小包包括数据字段和标签字段;所述数据字段包括有效数据信息;所述标签字段包括数据包ID、时间戳、有效数据的长度、包统计和硬件状态信息。

在本发明的一些实施例中,调用所述数据发送器将所述数据小包发送到所述主机端,并存储至与该数据小包对应端口匹配的所述数据缓冲区,以供所述驱动器对所述数据缓冲区中所述数据小包进行逐个读取并聚合,还包括:

所述数据发送器向所述主机端发送中断信息,所述驱动器根据所述中断信息对所述数据缓冲区中所述数据小包进行逐个读取并聚合。

在本发明的一些实施例中,所述主机端采用默认中断或中断聚合的方式触发中断。

在本发明的一些实施例中,调用所述数据发送器将所述数据小包发送到所述主机端,并存储至与该数据小包对应端口匹配的所述数据缓冲区,以供所述驱动器对所述数据缓冲区中所述数据小包进行逐个读取并聚合,还包括:

所述驱动器轮询所述数据缓冲区以获取所述数据小包,并对所述数据缓冲区中所述数据小包进行逐个读取并聚合。

在本发明的一些实施例中,调用所述数据发送器将所述数据小包发送到所述主机端,并存储至与该数据小包对应端口匹配的所述数据缓冲区,以供所述驱动器对所述数据缓冲区中所述数据小包进行逐个读取并聚合,还包括:

所述数据发送器将所述数据小包按预设顺序放置到所述数据缓冲区中的连续基本单元中;

所述驱动器对所述数据缓冲区中所述数据小包进行处理时,按顺序将其逐个取出并进行偏移处理。

本发明的另一方面提供了一种基于PCIe的数据传输装置,该装置包括:多个端口、描述符生成器、描述符仲裁器、DMA控制器、数据抓取器和数据发送器;

所述描述符生成器用于根据数据小包生成描述符;

所述描述符仲裁器用于每个端口对应的通道以检测和获取所述描述符,将检测到的所述描述符传至DMA控制器;

所述DMA控制器用于向所述数据抓取器和所述数据发送器发送控制信息,指令所述数据抓取器从对应的通道读取所述数据小包,并将转发至所述数据发送器;

所述数据抓取器用于根据所述控制信息从对应通道读取所述数据小包,并将所述数据小包传至所述数据发送器;

所述数据发送器用于将所述数据小包发送到主机端,并存储至与该数据小包对应端口匹配的数据缓冲区,以供驱动器对所述数据缓冲区中所述数据小包进行逐个读取并聚合。

本发明的另一方面提供了一种基于PCIe的数据传输系统,包括处理器和存储器,所述存储器中存储有计算机指令,所述处理器用于执行所述存储器中存储的计算机指令,当所述计算机指令被处理器执行时该系统实现如上述任一项方法的步骤。

本发明的另一方面提供了一种计算机可读存储介质,其上存储有计算机程序,其特征在于,该程序被处理器执行时实现如上述任一项方法的步骤。

本发明的有益效果至少包括:

本发明提供一种基于PCIe的数据传输方法、装置和系统,该方法在设备端执行,设备端的多个端口由主机端的驱动器进行识别以匹配对应的数据缓冲区,在设备端将数据包分段为数据小包,调用描述符生成器根据数据小包生成描述符,调用描述符仲裁轮询每个端口对应的通道以检测描述符,并将描述符传递至DMA控制器生成控制信息发送至数据抓取器和数据发送器,数据抓取器从对应通道读取数据小包,并将其传递至数据发送器,数据发送器将数据小包发送至主机端的数据缓冲区以供驱动器对数据进行处理。本发明的方法不需要主机端生成描述符,减少了主机端在DMA流程中的操作步骤,简化传输流程,降低了DMA的时延,提高了系统的整体效率。结合数据小包和描述符的公平轮询机制,避免了大包数据或高优先级通道数据对PCIe的独占。将整个数据包分段为数据小包的操作,使得整个数据包在设备端被接收完成前就能够以数据小包为单元传输,可以实现了流水式传输,避免了数据积压,从而降低了PCIe总线以及整个处理器系统在某一时间点的负载压力,提高了PCIe总线的利用率。

本发明的附加优点、目的,以及特征将在下面的描述中将部分地加以阐述,且将对于本领域普通技术人员在研究下文后部分地变得明显,或者可以根据本发明的实践而获知。本发明的目的和其它优点可以通过在说明书以及附图中具体指出的结构实现到并获得。

本领域技术人员将会理解的是,能够用本发明实现的目的和优点不限于以上具体所述,并且根据以下详细说明将更清楚地理解本发明能够实现的上述和其他目的。

附图说明

此处所说明的附图用来提供对本发明的进一步理解,构成本申请的一部分,并不构成对本发明的限定。在附图中:

图1为本发明一实施例所述于基于PCIe的数据传输方法的流程图。

图2为本发明另一实施例所述基于PCIe的数据传输系统的结构示意图。

图3为本发明另一实施例所述基于PCIe的数据传输方法的初始化配置流程图。

图4为本发明另一实施例所述基于PCIe的数据传输方法的默认执行流程图。

图5为本发明另一实施例所述基于PCIe的数据传输方法在实际场景下执行流程图。

图6(a)(b)为本发明另一实施例所述数据包格式示意图。

图7为本发明另一实施例所述数据大包与数据小包关系示例图。

图8为本发明另一实施例所述描述符示例图。

具体实施方式

为使本发明的目的、技术方案和优点更加清楚明白,下面结合实施方式和附图,对本发明做进一步详细说明。在此,本发明的示意性实施方式及其说明用于解释本发明,但并不作为对本发明的限定。

在此,还需要说明的是,为了避免因不必要的细节而模糊了本发明,在附图中仅仅示出了与根据本发明的方案密切相关的结构和/或处理步骤,而省略了与本发明关系不大的其他细节。

应该强调,术语“包括/包含”在本文使用时指特征、要素、步骤或组件的存在,但并不排除一个或更多个其它特征、要素、步骤或组件的存在或附加。

在此,还需要说明的是,如果没有特殊说明,术语“连接”在本文不仅可以指直接连接,也可以表示存在中间物的间接连接。

在下文中,将参考附图描述本发明的实施例。在附图中,相同的附图标记代表相同或类似的部件,或者相同或类似的步骤。

PCIe(Peripheral Component Interconnect Express)是一种计算机总线标准,用于连接各种硬件设备,例如显卡、网络适配器、存储设备等到计算机主板上。PCIe提供了比传统PCI(Peripheral Component Interconnect)总线更高的数据传输速率。PCIe是一种点对点连接的体系结构,每个设备直接与主板上的PCIe插槽相连,而不是共享总线,有助于提高数据传输效率。

DMA(Direct Memory Access,直接内存访问)是一种计算机系统中的数据传输技术,允许外部设备直接访问系统内存,而无需通过中央处理单元的直接干预。DMA的主要目的是提高数据传输速率,减轻CPU的负担,使其能够执行其他任务。在实际应用中,DMA通常由专用硬件控制器来管理。

本发明的一个实施例的一个方面提供了一种基于PCIe的数据传输方法,该方法用于在设备端执行,设备端的多个端口由主机端的驱动器识别并配置使能,每个端口分别匹配主机端预申请的一个数据缓冲区,该方法包括以下步骤S101~S104:

步骤S101:将每个端口待发送的数据包按照预设规则分段得到数据小包,调用描述符生成器根据数据小包生成描述符。

其中,数据包分段为数据小包,能够防止数据大包在数据传输时长时间独占PCIe总线,以实现高效传输的目的。

其中,描述符是一种抽象的数据结构,用于描述数据的属性、位置、等信息。数据包是所传输的数据的逻辑单位,描述符是对这些数据的一种管理和控制手段。描述符可以包含指向数据包的指针或者包含有关数据包的元信息。本实施例的描述符用于指定数据包的位置、大小和其他相关信息。

步骤S102:调用描述符仲裁器轮询每个端口对应的通道以检测和获取描述符,将检测到的描述符传至DMA控制器。

其中,轮询是一种用于获取或检查信息的技术,在本实施例中描述符作为请求通过各自的描述符通道来到描述符仲裁器,描述符仲裁器轮询每个通道,如果轮询的当前通道有描述符,取出描述符执行传输操作。此时其它通道可能存在有效的描述符,但是只能等待描述符仲裁器轮询到该通道才可以执行对应传输操作。

步骤S103:调用DMA控制器向数据抓取器和数据发送器发送控制信息,指令数据抓取器从对应的通道读取数据小包,并将转发至数据发送器。

步骤S104:调用数据发送器将数据小包发送到主机端,并存储至与该数据小包对应端口匹配的数据缓冲区,以供驱动器对数据缓冲区中数据小包进行逐个读取并聚合。

其中,主机的驱动器指的是计算机系统中的设备驱动程序,负责与外部设备进行通信和协调,将操作系统的请求翻译成硬件能够理解的指令,以及将外部设备的响应翻译成操作系统能够处理的数据。驱动程序为操作系统提供外部设备的接口,使得应用程序可以通过标准的系统调用或API(应用程序接口)来访问设备功能。

在本发明的一些实施例中,还包括:

数据发送器向DMA控制器发送反馈信息,并将反馈信息传至描述符仲裁器。

描述符仲裁器收到反馈信息,继续轮询各通道以获取下一个描述符。

在本发明的一些实施例中,数据小包包括数据字段和标签字段。数据字段(DATA字段)包括有效数据信息,有效数据的实际长度可能小于数据字段的长度。标签字段(TAG字段)包括数据包ID、时间戳、有效数据的长度、包统计和硬件状态信息。数据小包中的数据字段(DATA字段)用于存放实际数据内容,而标签字段(TAG字段)则包含有关数据包的元信息和其他用于实现更多功能的信息。

在本发明的一些实施例中,调用数据发送器将数据小包发送到主机端,并存储至与该数据小包对应端口匹配的数据缓冲区,以供驱动器对数据缓冲区中数据小包进行逐个读取并聚合,还包括:

数据发送器向主机端发送中断信息,驱动器根据中断信息对数据缓冲区中数据小包进行逐个读取并聚合。

其中,中断信息是一种硬件或软件生成的信号,用于打破正常的程序执行流程,引起处理器转而执行一个特定的中断服务例程。中断可以由外部设备、程序错误、或其他需要引起处理器关注的事件触发。在该实施例中,中断信息用于设备端与主机端进行通信,以提醒主机端处理设备端传送的数据包。

在本发明的一些实施例中,主机端采用默认中断或中断聚合的方式触发中断。

其中,默认中断是指主机端预设或默认的中断触发方式。

其中,中断聚合是指将多个中断事件合并或汇总成一个单一中断事件,而不是每次单独处理每个中断,系统可以将相似或相关的中断合并为一个,从而降低中断频率,减少处理开销。该方式有助于提高系统效率,特别是在面临大量中断事件时。

在本发明的一些实施例中,调用数据发送器将数据小包发送到主机端,并存储至与该数据小包对应端口匹配的数据缓冲区,以供驱动器对数据缓冲区中数据小包进行逐个读取并聚合,还包括:

驱动器轮询数据缓冲区以获取数据小包,并对数据缓冲区中数据小包进行逐个读取并聚合。

在本发明的一些实施例中,调用数据发送器将数据小包发送到主机端,并存储至与该数据小包对应端口匹配的数据缓冲区,以供驱动器对数据缓冲区中数据小包进行逐个读取并聚合,还包括:

数据发送器将数据小包按预设顺序放置到数据缓冲区中的连续基本单元中。

驱动器对数据缓冲区中数据小包进行处理时,按顺序将其逐个取出并进行偏移处理。

其中,偏移处理是指数据小包进行偏移量的调整。偏移量是指数据包中的特定部分相对于整个数据包的起始位置的偏移量。

在本发明的一些实施例中,每个数据小包对应的描述符的长度字段都是64B大小,有效数据的长度记录在标签字段(TAG字段)中,由驱动解析。描述符对应的源地址、目的地址与相临的描述符对应的源地址、目的地址的偏移,即数据小包的偏移都是64B。

本发明的实施例的另一方面提供了一种基于PCIe的数据传输装置,该装置包括:多个端口、描述符生成器、描述符仲裁器、DMA控制器、数据抓取器和数据发送器。

描述符生成器用于根据数据小包生成描述符。

描述符仲裁器用于每个端口对应的通道以检测和获取描述符,将检测到的描述符传至DMA控制器。

DMA控制器用于向数据抓取器和数据发送器发送控制信息,指令数据抓取器从对应的通道读取数据小包,并将转发至数据发送器。

数据抓取器用于根据控制信息从对应通道读取数据小包,并将数据小包传至数据发送器。

数据发送器用于将数据小包发送到主机端,并存储至与该数据小包对应端口匹配的数据缓冲区,以供驱动器对数据缓冲区中数据小包进行逐个读取并聚合。

本发明的的实施例的另一方面提供了一种基于PCIe的数据传输系统,包括处理器和存储器,存储器中存储有计算机指令,处理器用于执行存储器中存储的计算机指令,当计算机指令被处理器执行时该系统实现如上述任一实施例中方法的步骤。

本发明的实施例的另一方面提供了一种计算机可读存储介质,其上存储有计算机程序,其特征在于,该程序被处理器执行时实现如上述任一实施例中方法的步骤。

本发明的另一个实施例提供了一种基于PCIe的数据传输方法、装置和系统,具体实施方案如下:

该实施例的整体结构示意图如图2所示,PCIe左边的部分位于设备内,包括描述符生成器(Generator)、描述符仲裁器(Arbiter)、DMA控制器(Controller)、数据抓取器(DataFetcher)以及数据发送器(Transmitter)。描述符生成器负责根据数据大包分段而成的数据小包生成描述符,并把描述符送给描述符仲裁器。描述符仲裁器负责轮询各个通道是否有描述符,并负责把描述符转发给DMA控制器。DMA控制器负责给数据抓取器以及数据发送器发送控制信息。数据抓取器负责根据DMA控制器的控制信息去对应的通道抓取数据。数据发送器负责根据DMA控制器的控制信息把数据抓取器返回的数据小包通过PCIe发送到Host端内存的对应地址或队列位置中。

PCIe右边部分为Host端。内存中的数据缓冲区(队列或通道等)存放设备端发送来的数据包,与设备内通道的对应关系视实际情况而定,队列可能与特定用户应用程序或虚机等对象之间也可按照某种对应规则进行对应。Driver负责在初始化阶段配置设备,在实际工作阶段根据中断或轮询进一步处理缓冲区中的数据小包。

实施分为二个大的阶段:初始化配置阶段和实际执行阶段。

其中初始化配阶段的过程如图3所示,主要的行为是驱动加载并对板卡进行识别后,根据设备的端口(物理或虚拟)数量,为设备分配相应的内存资源。

对于实际执行阶段,初始化配置完成之后的默认执行流程如图4所示。Arbiter会持续轮询每个通道,如果检测到有待处理描述符则把描述符送到DMA控制器。DMA控制器根据描述符向数据抓取器和数据发送器发送控制信息。数据抓取器根据控制信息去对应通道读取数据,并把返回的数据送到数据发送器。数据发送器把数据送到内存中的对应位置,然后向Arbiter发送执行完成的反馈,并通知中断发送逻辑向Host发送中断。Arbiter收到反馈后,判定该次传输完成,检测是否有下一个待处理描述符。驱动收到中断后会去内存中对应位置取出数据并进行进一步的处理。

在实际的应用环境中,数据量的大小和发送数据包的频率是不确定的。比如,在大数据量下频繁的中断处理会大量占用CPU资源,进而影响数据传输的效率。故而在实际应用的环境中驱动可以根据实际需求,选择通过配置相关寄存器来告知硬件是否发送中断或发送中断的频率(中断聚合),也可以在Host端选择纯软件方式的中断聚合或以轮询的方式处理数据,相关的执行关系如图5所示。在图中虚线的途径可以采用默认中断方式、中断聚合、纯软件方式中断聚合等;也可采用非虚线途径所呈现的驱动自行轮询数据包;或者采用中断和轮询结合的方式。在实际应用中,可根据实际场景需求对上述方式结合使用或动态进行配置。

如图6(a)所示为每次DMA传输的数据小包的格式;。数据小包是从以太网接收的完整的网络包(数据大包)进行分段得来的,其关系如图7所示。其中每个数据小包分别有各自对应的描述符,描述符的长度字段都是64B大小,实际上的有效数据的长度记录在TAG中,由驱动解析。如图8所示,描述符对应的源地址、目的地址与相临的描述符对应的源地址、目的地址的偏移,即数据小包的偏移都是64B。分段的好处是防止大包长时间独占PCIe总线,使得其它通道可能的实时数据得到及时处理。每一桢数据小包由数据字段(DATA字段)和标签字段(TAG字段)组成,数据字段(DATA字段)和标签字段(TAG字段)的长度是固定的。其中,数据字段(DATA字段)的有效数据长度可能小于数据字段(DATA字段)的长度。标签字段(TAG字段)中包含的信息包括数据包的ID、有效数据的长度、标识是否是最后一个数据小包的标志位等,当然也可携带包括但不限于时间戳、包统计、硬件状态等信息。如图6(b)所示,每个DMAC2H逐个把数据小包按顺序以DMA的方式放到数据缓冲区的连续队列单元中,该过程把小包聚合为大包。驱动从缓冲区中把数据小包逐个取出,对其中的数据进行偏移处理后,即可作为一个数据大包发给相应的应用程序。

本发明的实施例所述DMAC2H方案的实际应用,由设备内与DMAC2H逻辑相邻的描述符生成器来生成描述符,把DMA传输流程中描述符阶段延时降到了个位数纳秒级。再加上数据分段的处理方式,一定程度上简化了DMAC2H的逻辑复杂度,从而使得整个传输过程的延时得以降低。同时,以数据小包的形式按顺序逐个放到Host端缓冲区也达到了包聚合的目的。

与上述方法相应地,本发明还提供了一种系统,该系统包括计算机设备,所述计算机设备包括处理器和存储器,所述存储器中存储有计算机指令,所述处理器用于执行所述存储器中存储的计算机指令,当所述计算机指令被处理器执行时该装置/系统实现如前所述方法的步骤。

本发明实施例还提供一种计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时以实现前述边缘计算服务器部署方法的步骤。该计算机可读存储介质可以是有形存储介质,诸如随机存储器(RAM)、内存、只读存储器(ROM)、电可编程ROM、电可擦除可编程ROM、寄存器、软盘、硬盘、可移动存储盘、CD-ROM、或技术领域内所公知的任意其它形式的存储介质。

综上所述,本发明提供一种基于PCIe的数据传输方法、装置和系统,该方法在设备端执行,设备端的多个端口由主机端的驱动器进行识别以匹配对应的数据缓冲区,该方法包括:将数据包分段为数据小包,描述符生成器根据数据小包生成描述符,描述符仲裁轮询每个端口对应的通道以检测描述符,将描述符传递至DMA控制器生成控制信息发送至数据抓取器和数据发送器,数据抓取器从对应通道读取数据小包,并将其传递至数据发送器,数据发送器将数据小包发送至主机端的数据缓冲区以供驱动器对数据进行处理。本发明能够简化DMA传输流程并降低数据传输时延,将整个数据包分段为数据小包的操作可以实现流水式传输,避免数据积压,降低了PCIe总线以及整个处理器系统的负载压力,提高了PCIe总线的利用率。

本领域普通技术人员应该可以明白,结合本文中所公开的实施方式描述的各示例性的组成部分、系统和方法,能够以硬件、软件或者二者的结合来实现。具体究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本发明的范围。当以硬件方式实现时,其可以例如是电子电路、专用集成电路(ASIC)、适当的固件、插件、功能卡等等。当以软件方式实现时,本发明的元素是被用于执行所需任务的程序或者代码段。程序或者代码段可以存储在机器可读介质中,或者通过载波中携带的数据信号在传输介质或者通信链路上传送。

需要明确的是,本发明并不局限于上文所描述并在图中示出的特定配置和处理。为了简明起见,这里省略了对已知方法的详细描述。在上述实施例中,描述和示出了若干具体的步骤作为示例。但是,本发明的方法过程并不限于所描述和示出的具体步骤,本领域的技术人员可以在领会本发明的精神后,作出各种改变、修改和添加,或者改变步骤之间的顺序。

本发明中,针对一个实施方式描述和/或例示的特征,可以在一个或更多个其它实施方式中以相同方式或以类似方式使用,和/或与其他实施方式的特征相结合或代替其他实施方式的特征。

以上所述仅为本发明的优选实施例,并不用于限制本发明,对于本领域的技术人员来说,本发明实施例可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。

相关技术
  • 一种同步整流器的有源缓冲吸收电路
  • 一种应用于副边同步整流MOS管的有源吸收电路
技术分类

06120116541954