CN104102542A - 一种网络数据包处理方法和装置 - Google Patents
一种网络数据包处理方法和装置 Download PDFInfo
- Publication number
- CN104102542A CN104102542A CN201310123531.5A CN201310123531A CN104102542A CN 104102542 A CN104102542 A CN 104102542A CN 201310123531 A CN201310123531 A CN 201310123531A CN 104102542 A CN104102542 A CN 104102542A
- Authority
- CN
- China
- Prior art keywords
- data
- gpu
- input block
- output buffer
- memory
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/54—Interprogram communication
- G06F9/544—Buffers; Shared memory; Pipes
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L49/00—Packet switching elements
- H04L49/90—Buffering arrangements
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Image Input (AREA)
- Memory System Of A Hierarchy Structure (AREA)
Abstract
本发明实施例提供本发明实施例提供一种网络数据包处理方法和装置,以实现对网络数据包的加速处理。其中,网络数据包处理方法包括:中央处理单元CPU将读取到的数据写入内存中的输入缓冲区;图形处理单元GPU通过轮询方式从输入缓冲区中读取数据,并对读取到的数据进行处理,将处理后得到的数据存入内存中的输出缓冲区;CPU通过轮询方式从输出缓冲区中读取GPU处理后得到的数据。本发明实施例提供的网络数据包处理方法和装置减小了系统调用的开销,提高了GPU读取待处理数据的速率,可以加速网络数据包业务的处理速度。
Description
技术领域
本发明涉及计算机网络领域,尤其一种网络数据包处理方法和装置。
背景技术
与中央处理单元(Central Processing Unit,CPU)、网络处理器或专用集成芯片相比,图形处理单元(Graph Processing Unit,GPU)具有强大的并行计算能力,因而比较适用于各类高性能通用计算。GPU计算的加速原理在于通过大量GPU线程的并发执行来抵消数据拷贝的开销和单一计算单元的慢速,从而获得从整体的性能提升。例如,在NVIDIA GTX580显卡中,有512个流处理器(Stream Processor,SP),虽然每个SP的频率都低于普通CPU核心的频率,然而,由于512个任务可以在这些SP上并发计算完成,即便加上数据在内存与显存之间的来回拷贝,所花费时间也远小于512个任务在CPU上逐一计算所需时间。在GPU和CPU并存的计算机系统中,GPU并不执行逻辑复杂的单线程计算,一般将任务划分为串行部分和并行部分,由CPU执行串行部分,GPU执行并行部分。使用GPU计算的步骤包括:将待计算数据从CPU主存拷贝到位于GPU设备之中显存;启动GPU核函数,开始并行计算;将计算结果从显存拷贝到内存。
目前,运用GPU加速效果较好的领域基本是计算密集型的,即核函数运行时间多于数据拷贝时间,因此业界大量研究专注于如何提高算法的并行计算速度。然而,在网络应用中,要处理的数据量较大,拷贝耗时较多,相比之下计算本身不再是性能瓶颈。如何提高数据拷贝速率是GPU计算加速面临的一个主要问题。而AMD的Llano、Intel的Ivy-bridge等融合架构处理器的推出,打破了通信、数据拷贝开销的束缚,使得其更适合于网络处理场景的加速。
现有技术提出的一种在网络应用中使用GPU处理网络数据包的方法包括:预处理线程组中的预处理线程不间断地对接收的网络数据包进行预处理,形成计算任务送入缓冲区;计算线程组中的计算线程不间断地从缓冲区中取出一个计算任务给CPU进行计算,或者取出多个计算任务给GPU进行计算,并将计算结果发送给后续线程组;后续处理线程组中的后续处理线程不间断地对计算线程组中的计算线程完成计算任务后传来的计算结果进行后续处理。上述现有技术主要是通过基于缓冲区的方式,对网络数据包进行批量拷贝和流水化调度。其中,流水化调度是指在一次GPU计算过程中,数据从CPU主存拷贝至GPU显存、启动执行GPU核函数和计算结果从GPU显存拷贝至CPU主存三个步骤必须顺序执行,但多个线程可以同时开始多个GPU计算,使这些步骤形成流水线,例如,第一个线程的GPU核函数执行时,第二个线程的数据从CPU主存拷贝到GPU显存,这两个步骤所使用的系统部件不同,因此可以同时进行。由于一次数据拷贝涉及总线申请、总线分配、数据传输和总线释放等工作,而将多次拷贝集中到一次完成,可以减少总线申请、分配释放的次数,同时数据在总线上传输数由慢变快的过程,拷贝少量数据往往不能取得较高的总线利用率,将多份数据合并拷贝,速率会比多次拷贝有较大提升。由于GPU计算时间与数据拷贝时间产生一定的重叠,从而减少了整体的时间开销,提高了处理速度。
上述现有技术提供的GPU处理网络数据包方法中,GPU线程是通过DMA的方式将待计算数据从CPU主存拷贝到GPU显存。由于CPU和GPU之间带宽的限制,导致数据拷贝带来了比较明显的传输延时,同时限制了GPU处理能力的发挥。另外,由于批量缓存网络包需要等待,在数据缓存区较大时,增加了缓存时延。
发明内容
本发明实施例基于GPU+GPU融合架构,提供一种网络数据包处理方法和装置,以实现对网络数据包的加速处理。
第一方面,本发明实施例提供一种网络数据包处理方法,所述方法包括:中央处理单元CPU将读取到的数据写入内存中的输入缓冲区;图形处理单元GPU通过轮询方式从所述输入缓冲区中读取数据,并对读取到的数据进行处理,将处理后得到的数据存入所述内存中的输出缓冲区;所述CPU通过轮询方式从所述输出缓冲区中读取所述GPU处理后得到的数据。
第一方面的第一种可能实现方式中,所述输入缓冲区和所述输出缓冲区分配在所述CPU的主存中,所述内存包括所述主存。
结合第一方面的第一种可能实现方式,第一方面的第二种可能实现方式中,所述方法还包括:通过对所述输入缓冲区和所述输出缓冲区进行的内存映射,将所述输入缓冲区和所述输出缓冲区在所述CPU的主存的地址分别映射成在GPU任务的对应地址信息;
所述图形处理单元GPU通过轮询方式从所述输入缓冲区中读取数据并对读取到的数据进行处理,将处理后得到的数据存入所述输出缓冲区包括:
所述图形处理单元GPU根据所述输入缓冲区在所述GPU任务的对应地址信息,通过轮询方式读取所述输入缓冲区的数据后进行处理;
所述图形处理单元GPU根据所述输出缓冲区在所述GPU任务的对应地址信息,将所述处理所得的处理结果存入所述输出缓冲区。
第一方面的第三种可能实现形式中,所述输入缓冲区分配在所述GPU的显存,所述输出缓冲区分配在所述CPU的主存,所述内存包括所述主存和所述显存。
结合第一方面的第三种可能实现形式,第一方面的第四种可能实现形式中,所述方法还包括:通过对所述输入缓冲区和所述输出缓冲区进行的内存映射,将所述输入缓冲区在所述GPU的显存的地址映射成在CPU任务的地址信息,将所述输出缓冲区在所述CPU的主存的地址映射成在GPU任务的地址信息;
所述中央处理单元CPU将读取到的数据写入内存中的输入缓冲区包括:根据所述输入缓冲区映射所得在所述CPU任务的地址信息,通过轮询方式将读取到的数据写入所述显存中的输入缓冲区;
所述图形处理单元GPU通过轮询方式从所述输入缓冲区中读取数据并对读取到的数据进行处理,将处理后得到的数据存入输出缓冲区包括:所述图形处理单元GPU通过轮询方式读取所述输入缓冲区的数据后进行处理;根据所述输出缓冲区映射所得在所述GPU任务的地址信息,将所述处理所得的处理结果存入所述输出缓冲区。
第一方面的第五种可能实现形式中,所述CPU与所述内存之间还包括CPU和GPU的共享缓存,所述中央处理单元CPU将读取到的数据写入内存中的输入缓冲区之前,还包括:所述CPU将所述读取到的数据写入CPU和GPU的共享缓存;
所述图形处理单元GPU通过轮询方式从所述输入缓冲区中读取数据之前,还包括:所述图形处理单元GPU访问所述共享缓存,若所述共享缓存中具有需要读取的数据,则从所述共享缓存中读取,若没有,则通过轮询方式从所述输入缓冲区中读取数据。
结合第一方面或者第一方面第一种至第五种任意一种实现形式,第一方面的第六种可能实现形式中,所述方法还包括:
所述CPU结合所述输出缓冲区单位时间输出的数据量,预测所述GPU对所述输入缓冲区的数据进行处理的处理速率;
根据所述预测的处理速率,调整数据写入所述输入缓冲区的速率。
结合第一方面或者第一方面第一种至第五种任意一种实现形式,,第一方面的第七种可能实现形式中,所述输入缓冲区和输出缓冲区分别为输入数据缓冲队列和输出数据缓冲队列。
结合第一方面的第七种实现形式,第一方面的第八种可能实现形式中,所述输入数据缓冲队列和输出数据缓冲队列分别为环形输入数据缓冲队列和环形输出数据缓冲队列。
第二方面,本发明实施例提供一种网络数据包处理装置,所述装置包括中央处理单元CPU、图形处理单元GPU和内存;所述中央处理单元,用于将读取到的数据写入所述内存中的输入缓冲区;所述图形处理单元,用于通过轮询方式从所述输入缓冲区中读取数据,并对读取到的数据进行处理,将处理后得到的数据存入所述内存中的输出缓冲区;所述中央处理单元还用于通过轮询方式从所述输出缓冲区中读取所述GPU处理后得到的数据。
第二方面的第一种可能实现形式中,所述输入缓冲区和输出缓冲区分配在所述CPU的主存中,所述内存包括所述主存。
结合第二方面的第一种可能实现形式,第二方面的第二种可能实现形式中,所述装置还包括:
第一内存管理模块,用于通过对所述输入缓冲区和所述输出缓冲区进行的内存映射,将所述输入缓冲区和所述输出缓冲区在所述CPU的主存的地址分别映射成在GPU任务的对应地址信息;
所述图形处理单元GPU具体用于根据所述输入缓冲区在所述GPU任务的对应地址信息,通过轮询方式读取所述输入缓冲区的数据后进行处理,根据所述输出缓冲区在所述GPU任务的对应地址信息,将所述处理所得的处理结果存入所述输出缓冲区。
第二方面的第三种可能实现形式中,所述输入缓冲区分配在所述GPU的显存,所述输出缓冲区分配在所述CPU的主存,所述内存包括所述主存和所述显存。
结合第二方面的第三种可能实现形式,第二方面的第四种可能实现形式中,所述装置还包括:
第二内存管理模块,用于通过对所述输入缓冲区和所述输出缓冲区进行的内存映射,将所述输入缓冲区在所述GPU的显存的地址映射成在CPU任务的地址信息,将所述输出缓冲区在所述CPU的主存的地址映射成在GPU任务的地址信息;
所述中央处理单元CPU具体用于根据所述输入缓冲区映射所得在所述CPU任务的地址信息,通过轮询方式将读取到的数据写入所述显存中的输入缓冲区;
所述图形处理单元GPU具体用于通过轮询方式读取所述输入缓冲区的数据后进行处理,根据所述输出缓冲区映射所得在所述GPU任务的地址信息,将所述处理所得的处理结果存入所述输出缓冲区。
第二方面的第五种可能实现形式中,述装置还包括CPU和GPU的共享缓存,所述中央处理单元CPU将读取到的数据写入内存中的输入缓冲区之前,所述CPU还用于将所述读取到的数据写入所述共享缓存;
所述图形处理单元GPU通过轮询方式从所述输入缓冲区中读取数据之前,所述图形处理单元GPU还用于访问所述共享缓存,若所述共享缓存中具有需要读取的数据,则从所述共享缓存中读取,若没有,则通过轮询方式从所述输入缓冲区中读取数据。
结合第二方面或者第二方面第一到第五种任意一种实现形式,第二方面第六种实现形式中,所述CPU还用于结合所述输出缓冲区单位时间输出的数据量,预测所述GPU对所述输入缓冲区的数据进行处理的处理速率,根据所述预测的处理速率,调整数据写入所述输入缓冲区的速率。
结合第二方面或者第二方面第一到第五种任意一种实现形式,第二方面第七种实现形式中,所述输入缓冲区和输出缓冲区分别为输入数据缓冲队列和输出数据缓冲队列。
结合第二方面第七种实现形式,第二方面第八种实现形式中,所述输入数据缓冲队列和输出数据缓冲队列分别为环形输入数据缓冲队列和环形输出数据缓冲队列。
从上述本发明实施例可知,图形处理单元GPU需要处理的数据被CPU写入内存中的输入缓冲区,图形处理单元GPU从输入缓冲区中读取数据和CPU从输出缓冲区中读取GPU处理后得到的数据均是通过轮询方式读取来实现,无需CPU通过调用系统函数通知GPU去读取,因此减小了系统调用的开销,提高了GPU读取待处理数据的速率,可以加速网络数据包业务的处理速度。
附图说明
为了更清楚地说明本发明实施例的技术方案,下面将对现有技术或实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域技术人员来讲,还可以如这些附图获得其他的附图。
图1是本发明实施例提供的网络数据包处理方法流程示意图;
图2是本发明实施例提供的网络数据包处理装置结构示意图;
图3是本发明另一实施例提供的网络数据包处理装置结构示意图;
图4是本发明另一实施例提供的网络数据包处理装置结构示意图;
图5是本发明另一实施例提供的网络数据包处理装置结构示意图;
图6是本发明另一实施例提供的网络数据包处理装置结构示意图;
图7-a是本发明另一实施例提供的网络数据包处理装置结构示意图;
图7-b是本发明另一实施例提供的网络数据包处理装置结构示意图;
图7-c是本发明另一实施例提供的网络数据包处理装置结构示意图;
图7-d是本发明另一实施例提供的网络数据包处理装置结构示意图;
图7-e是本发明另一实施例提供的网络数据包处理装置结构示意图;
图8是本发明另一实施例提供的网络数据包处理装置结构示意图;
图9是本发明另一实施例提供的网络数据包处理装置结构示意图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域技术人员所获得的所有其他实施例,都属于本发明保护的范围。
请参阅附图1,是本发明实施例提供的网络数据包处理方法流程示意图,主要包括步骤S101、步骤S102和步骤S103,详细说明如下:
S101,中央处理单元CPU将读取到的数据写入内存中的输入缓冲区。
S102,图形处理单元GPU通过轮询方式从所述输入缓冲区中读取数据,并对读取到的数据进行处理,将处理后得到的数据存入内存中的输出缓冲区。
在本发明实施例中,内存是可以直接与中央处理单元CPU交互的物理存储部件,从中可以划分出部分容量作为中央处理单元CPU的主存,并可以从中划分出部分容量作为图形处理单元GPU的显存;中央处理单元CPU读取到的数据可以是来自例如网络接口控制器(Network Interface Controller,NIC)的网络数据。既可以在CPU的主存分配输入缓冲区和输出缓冲区,也可以在不同的内存中分配输入缓冲区和输出缓冲区,例如,在GPU的显存分配输入缓冲区,在CPU的主存分配输出缓冲区。作为本发明一个实施例,输入缓冲区可以是输入数据缓冲队列,例如,环形输入数据缓冲队列,输出缓冲区可以是输出数据缓冲队列,例如,环形输出数据缓冲队列。
S103,CPU通过轮询方式从输出缓冲区中读取所述GPU处理后得到的数据。
由于输入缓冲区和输出缓冲区是在CPU的主存和/或GPU的显存中分配,其在GPU任务中的地址信息和CPU任务中的地址信息并不是直接给出,对CPU和/或GPU而言,可能无法直接对相应的输入缓冲区和输出缓冲区访问,因此,在本发明实施例中,中央处理单元CPU将读取到的数据写入内存中的输入缓冲区、图形处理单元GPU通过轮询方式从输入缓冲区中读取数据,将处理后得到的数据存入输出缓冲区以及中央处理单元CPU通过轮询方式从输出缓冲区中读取图形处理单元GPU处理后得到的数据之前,还包括一个内存映射(MemoryMap)过程。具体地,对于在CPU的主存分配输入缓冲区和输出缓冲区的实施例,由于输入缓冲区和输出缓冲区均在CPU的主存一侧,因此,需要通过对输入缓冲区和输出缓冲区进行内存映射,将输入缓冲区和输出缓冲区在中央处理单元CPU的主存的地址分别映射成在GPU任务的对应地址信息,然后,图形处理单元GPU根据所述输入缓冲区在所述GPU任务的对应地址信息,通过轮询方式读取所述输入缓冲区的数据后进行处理,根据所述输出缓冲区在所述GPU任务的对应地址信息,将处理所得的处理结果存入所述输出缓冲区。对于在图形处理单元GPU的显存分配输入缓冲区,在中央处理单元CPU的主存分配输出缓冲区的实施例,由于输入缓冲区是在图形处理单元GPU的显存一侧,图形处理单元GPU通过轮询方式从输入缓冲区中读取数据前不需要进行地址映射,而输出数据缓冲队列是在中央处理单元CPU的主存一侧,因此,图形处理单元GPU将处理后得到的数据存入输出缓冲区前,需要通过对输出缓冲区进行内存映射,将所述输出缓冲区在所述CPU的主存的地址映射成在GPU任务的地址信息,然后,图形处理单元GPU通过轮询方式读取所述输入缓冲区的数据后进行处理,根据所述输出缓冲区映射所得在所述GPU任务的地址信息,将所述处理所得的处理结果存入所述输出缓冲区。由于输入缓冲区和输出缓冲区在GPU任务的地址信息已通过映射获得,在输入缓冲区和输出缓冲区不在GPU显存一侧时,数据的读取和存入不是在CPU主存和GPU显存中通过来回拷贝实现,而是根据内存映射获得的地址信息直接从输入缓冲区读取和向输出缓冲区中存入来实现。因此,本发明实施例提供的方法免去了CPU主存和GPU显存之间数据的拷贝,提高了GPU读取待处理数据的速率,可以加速网络数据包业务的处理速度。
输出缓冲区中的数据处理结果可以做进一步的应用,例如,通过网络输入输出模块的发送队列,将处理后的数据发送到网络。需要说明的是,由于输入缓冲区是在GPU的显存一侧,因此,CPU在访问输入缓冲区时也需要一个内存映射的过程,即通过对所述输入缓冲区进行的内存映射,将所述输入缓冲区在所述GPU的显存的地址映射成在CPU任务的地址信息,然后,中央处理单元CPU将读取到的数据写入内存中的输入缓冲区时,根据所述输入缓冲区映射所得在所述CPU任务的地址信息,通过轮询方式将读取到的数据写入所述显存中的输入缓冲区。
在上述实施例中,若中央处理单元CPU和图形处理单元GPU存在共享缓存,即CPU和GPU都可以直接访问的高速存储部件,则中央处理单元CPU将读取到的数据写入内存中的输入缓冲区之前还可以将所述读取到的数据,例如图形处理单元GPU需要加速进行处理的数据,写入CPU和GPU的共享缓存。图形处理单元GPU通过轮询方式从所述输入缓冲区中读取数据之前,可以访问所述共享缓存,若所述共享缓存中具有需要读取的数据,则从所述共享缓存中读取,若其中没有需要读取的数据,则通过轮询方式从所述输入缓冲区中读取数据。因此,若图形处理单元GPU所需要加速处理的数据在共享缓存中命中,则图形处理单元GPU访问速度和数据处理速度会大大加快。
由于中央处理单元CPU写入输入缓冲区数据的速率与图形处理单元GPU从输出缓冲区读取数据的速率不匹配时,可能导致无法从输入缓冲区读取需要的数据。因此,在本发明实施例中,还可以动态调整数据存入所述输入缓冲区的速率,即中央处理单元CPU结合所述输出缓冲区单位时间输出的数据量,预测图形处理单元GPU对所述输入缓冲区的数据进行处理的处理速率,再根据所述预测的处理速率,调整数据写入输入缓冲区的速率。
从上述本发明实施例提供的网络数据包处理方法可知,图形处理单元GPU需要处理的数据被CPU写入内存中的输入缓冲区,图形处理单元GPU从输入缓冲区中读取数据和CPU从输出缓冲区中读取GPU处理后得到的数据均是通过轮询方式实现,无需CPU通过调用系统函数通知GPU去读取,因此减小了系统调用的开销,提高了GPU读取待处理数据的速率,可以加速网络数据包业务的处理速度。
以下分别结合在CPU的主存分配输入缓冲区和输出缓冲区以及在GPU的显存分配输入缓冲区,在CPU的主存分配输出缓冲区的实施例,进一步说明附图1示例提供的网络数据包处理方法。需要说明的是,附图1示例的网络数据包处理方法可以应用于CPU+GPU异构通用硬件平台,或者,可以通过CPU+GPU异构通用硬件平台实现附图1示例的网络数据包处理方法,CPU+GPU异构通用硬件平台中,CPU和GPU均可以访问全局内存。
首先以输入缓冲区和输出缓冲区分配在CPU的主存中为例。在本实施例中,涉及的软件或硬件处理模块包括初始化模块、网络IO模块、内存管理模块、预处理模块、网络包处理模块和GPU网络包加速模块,其中,初始化模块、网络IO模块、内存管理模块、预处理模块和网络包处理模块可以是CPU的功能模块或者通过CPU实现,GPU网络包加速模块可以是GPU的功能模块或者通过GPU实现,CPU和GPU存储这些功能模块的指令,并通过运行这些指令使得这些功能模块实现各自的功能。在本实施例中,CPU和GPU不仅仅能够访问所有的内存空间,而且CPU和GPU可以访问其共享缓存,例如L3缓存(L3Cache)。CPU在向其主存的输入缓冲区写入数据时,可以将这些数据或者其中的部分(例如,GPU需要加速处理的数据)存入CPU和GPU共享的L3缓存,即L3缓存中的数据可以视为是输入缓冲区中数据或部分数据的副本,GPU在访问输入缓冲区前,可以访问L3缓存。因此,这使得GPU所需要读取的数据如果在L3缓存命中,则GPU访问速度会大大加快。在本发明实施例中,输入缓冲区中的数据是经过预处理模块预处理后的网络数据包。
在本实施例中,初始化模块根据配置信息,初始化网络IO模块、内存管理模块、预处理模块、网络包处理模块以及GPU网络包加速模块。初始化模块还通过调用内存管理模块,根据配置信息在CPU主存中分配一个或者多个数据输入缓冲区和输出缓冲区。GPU网络包加速模块被初始化后,初始化模块将分配后的输入缓冲区和输出缓冲区的地址信息传递给GPU网络包加速模块。GPU网络包加速模块结合系统提供的内存映射(Memory Map)功能,获得输入缓冲区和输出缓冲区在GPU任务中所对应的地址信息,使其具备对输入缓冲区和输出缓冲区的读、写权限。
预处理模块从网络IO模块接收网络数据包,对数据包进行预处理。其中,预处理是网络应用所需的预处理,通常包括对网络数据包进行协议识别、协议解析、分片重组和流还原等工作。预处理模块根据配置信息和预处理后的结果,将预处理后的网络数据包发送给位于主机侧的网络包处理模块,或者将预处理后的网络数据包发送给GPU网络包加速模块进行进一步的处理。
若预处理模块需要将预处理后的网络数据包发送给GPU网络包加速模块,则预处理模块将预处理后的网络数据包存入输入缓冲区,并更新相应的输入缓冲区的头指针。若GPU网络包加速模块对应的GPU网络加速线程还没有启动,则通过系统调用,启动相应的GPU加速线程,使其能够不间断地从输入缓冲区读取待处理的网络包数据。GPU加速线程从输入缓冲区读取输入数据进行计算,在计算任务完成后,移除输入缓冲区中的对应数据,更新输入缓冲区的头指针,将计算后的数据写入对应的输出缓冲区并更新对应的输出缓冲区的尾指针。
由于输入缓冲区和输出缓冲区均在CPU的主存一侧分配,因此,GPU网络包加速模块根据内存映射,得到的输入缓冲区和输出缓冲区在GPU线程的地址信息,通过轮询方式读取输入缓冲区的数据后进行处理。具体地,GPU加速线程可以从输入缓冲区的头指针和尾指针是否重合来判断是否有有效的数据输入,如果没有有效数据,则可以不定期地去查询输入缓冲区的尾指针状态,直至有新的数据输入,再进行下一步的处理。预处理模块从输出缓冲区将GPU网络包加速模块计算后的数据取出,更新输出缓冲区的头指针,并发送给网络包处理模块进行下一步的处理。
由于GPU计算所需的数据通常由CPU产生,如果能够适当调整CPU写入数据的速率,使得大部分数据还停留在L3缓存中没有被置换出去的话,这样能大大加快GPU读入数据的速率,缩短整体的计算时间。因此,在本实施例中,预处理模块可以结合输出缓冲区单位时间输出的数据量,判断GPU处理数据的实时速率。预处理模块可以根据GPU处理数据的速率,调整数据存入输入缓冲区的速率。例如,若GPU处理数据的速率较快,则可以提高数据存入输入缓冲区的速率,反之,可以减小数据存入输入缓冲区的速率。这种方式使得GPU需要读取的大部分数据能够在L3缓存命中,减少GPU读取数据的时延,最大限度地提高GPU读取数据的L3缓存命中率。
在预处理模块需要将预处理后的网络数据包发送给网络包处理模块时,若预处理模块与网络包处理模块属于同一线程,则直接调用相应的网络包处理模块进行处理。若预处理模块与网络包处理模块不属于同一线程,则将网络数据包放入预处理模块与网络包处理模块的缓冲区后通知网络包处理线程/进程进行处理。网络包处理模块收到预处理模块发送过来的网络数据包后,进行进一步的处理。具体地,如果处理完成后需要将网络数据包发送到网络,则网络包处理模块将处理完成的网络数据包发送给预处理模块,最后通过网络IO模块发送处理。如果需要GPU进行进一步的加速处理,则网络包处理模块将需要加速的数据通过预处理模块发送给GPU网络包加速模块做进一步的计算处理。预处理模块收到网络包处理模块处理完成的网络数据包后,通过网络IO模块的发送队列,将网络包处理模块发送到网络上。
再以输入缓冲区分配在GPU的显存中,输出缓冲区分配在CPU的主存中为例。在本实施例中,涉及的软件或硬件处理模块包括初始化模块、网络IO模块、内存管理模块、预处理模块、网络包处理模块和GPU网络包加速模块,其中,初始化模块、网络IO模块、内存管理模块、预处理模块和网络包处理模块可以是CPU的功能模块或者通过CPU实现,GPU网络包加速模块可以是GPU的功能模块或者通过GPU实现,CPU和GPU存储这些功能模块的指令,并通过运行这些指令使得这些功能模块实现各自的功能。在本实施例中,CPU和GPU通过南北桥访问系统内存,CPU和GPU之间并不共享L3缓存(L3Cache),并且CPU和GPU读、写主存和显存的速率各不相同。
在本实施例中,初始化模块根据配置信息,初始化网络IO模块、内存管理模块、预处理模块、网络包处理模块以及GPU网络包加速模块。初始化模块还通过调用内存管理模块,根据配置信息在CPU主存中为CPU和GPU之间的数据交互分配一个或者多个数据输入缓冲区和输出缓冲区。GPU网络包加速模块被初始化后,初始化模块将分配后的输入缓冲区和输出缓冲区的地址信息传递给GPU网络包加速模块。GPU网络包加速模块结合系统提供的内存映射(MemoryMap)功能,获得输入缓冲区和输出缓冲区在GPU线程中所对应的地址信息,使其具备对输入缓冲区和输出缓冲区的读、写权限。
预处理模块从网络IO模块接收网络数据包,对数据包进行预处理。其中,预处理是网络应用所需的预处理,通常包括对网络数据包进行协议识别、协议解析、分片重组和流还原等工作。预处理模块根据配置信息和预处理后的结果,将预处理后的网络数据包发送给位于主机侧的网络包处理模块,或者将预处理后的网络数据包发送给GPU网络包加速模块进行进一步的处理。
若预处理模块需要将预处理后的网络数据包发送给GPU网络包加速模块,则预处理模块将预处理后的网络数据包存入输入缓冲区,并更新相应的输入缓冲区的头指针。若GPU网络包加速模块对应的GPU网络加速线程还没有启动,则通过系统调用,启动相应的GPU加速线程,使其能够不间断地从输入缓冲区读取待处理的网络包数据。GPU加速线程从输入缓冲区读取输入数据进行计算,在计算任务完成后,移除输入缓冲区中的对应数据,更新输入缓冲区的头指针,将计算后的数据写入对应的输出缓冲区并更新对应的输出缓冲区的尾指针。
由于输入缓冲区在GPU的显存,输出缓冲区在CPU的主存一侧分配,因此,输入缓冲区的地址对GPU网络包加速模块而言是显见的,GPU网络包加速模块只需要根据内存映射得到输出缓冲区在GPU线程的地址信息,通过轮询读取输入缓冲区的数据后进行处理。具体地,GPU加速线程可以从输入缓冲区的头指针和尾指针是否重合来判断是否有有效的数据输入,如果没有有效数据,则可以不定期地去查询输入缓冲区的尾指针状态,直至有新的数据输入,再进行下一步的处理。预处理模块从输出缓冲区将GPU网络包加速模块计算后的数据取出,更新输出缓冲区的头指针,并发送给网络包处理模块进行下一步的处理。
因此,在本实施例中,预处理模块可以结合输出缓冲区单位时间输出的数据量,判断GPU处理数据的实时速率。预处理模块可以根据GPU处理数据的速率,调整数据存入输入缓冲区的速率。例如,若GPU处理数据的速率较快,则可以提高数据存入输入缓冲区的速率,反之,可以减小数据存入输入缓冲区的速率。
在预处理模块需要将预处理后的网络数据包发送给网络包处理模块时,若预处理模块与网络包处理模块属于同一线程,则直接调用相应的网络包处理模块进行处理。若预处理模块与网络包处理模块不属于同一线程,则将网络数据包放入预处理模块与网络包处理模块的缓冲区后通知网络包处理线程/进程进行处理。网络包处理模块收到预处理模块发送过来的网络数据包后,进行进一步的处理。具体地,如果处理完成后需要将网络数据包发送到网络,则网络包处理模块将处理完成的网络数据包发送给预处理模块,最后通过网络IO模块发送处理。如果需要GPU进行进一步的加速处理,则网络包处理模块将需要加速的数据通过预处理模块发送给GPU网络包加速模块做进一步的计算处理。预处理模块收到网络包处理模块处理完成的网络数据包后,通过网络IO模块的发送队列,将网络包处理模块发送到网络上。
请参阅附图2,是本发明实施例提供的网络数据包处理装置结构示意图。为了便于说明,仅仅示出了与本发明实施例相关的部分。附图2示例的网络数据包处理装置用于GPU+GPU的架构,其包括中央处理单元201、图形处理单元202和内存203,其中:
内存203是可以直接与中央处理单元201交互的物理存储部件,从中可以划分出部分容量作为中央处理单元201的主存,并可以从中划分出部分容量作为图形处理单元202的显存;中央处理单元201读取到的数据可以是来自例如网络接口控制器(Network Interface Controller,NIC)的网络数据。既可以在中央处理单元201的主存分配输入缓冲区和输出缓冲区,如附图3所示本发明另一实施例提供的网络数据包处理装置,也可以在不同的内存中分配输入缓冲区和输出缓冲区,例如,在图形处理单元202的显存分配输入缓冲区,在中央处理单元201的主存分配输出缓冲区,如附图4所示本发明另一实施例提供的网络数据包处理装置。
由于输入缓冲区和输出缓冲区是在中央处理单元201的主存和/或图形处理单元202的显存中分配,其在GPU任务中的地址信息和CPU任务中的地址信息并不是直接给出,对中央处理单元201和/或图形处理单元202而言,可能无法直接对相应的输入缓冲区和输出缓冲区访问,因此,在附图2示例的网络数据包处理装置中,中央处理单元201将读取到的数据写入内存203中的输入缓冲区、图形处理单元202通过轮询方式从输入缓冲区中读取数据,将处理后得到的数据存入输出缓冲区以及中央处理单元201通过轮询方式从输出缓冲区中读取图形处理单元202处理后得到的数据之前,还包括一个内存映射(MemoryMap)过程。具体地,对于在中央处理单元201的主存分配输入缓冲区和输出缓冲区的实施例,输入缓冲区和输出缓冲区均在中央处理单元201的主存一侧,附图3示例的网络数据包处理装置还包括第一内存管理模块501,如附图5所示本发明另一实施例提供的网络数据包处理装置。第一内存管理模块501通过对输入缓冲区和输出缓冲区进行内存映射,将输入缓冲区和输出缓冲区在中央处理单元201的主存的地址分别映射成在GPU任务的对应地址信息,然后,图形处理单元202根据输入缓冲区在所述GPU任务的对应地址信息,通过轮询方式读取所述输入缓冲区的数据后进行处理,根据所述输出缓冲区在所述GPU任务的对应地址信息,将处理所得的处理结果存入所述输出缓冲区。对于在图形处理单元202的显存分配输入缓冲区,在中央处理单元201的主存分配输出缓冲区的实施例,附图4示例的网络数据包处理装置还包括第二内存管理模块601,如附图6所示本发明另一实施例提供的网络数据包处理装置。由于输入缓冲区是在图形处理单元202的显存一侧,附图4示例的网络数据包处理装置中,图形处理单元202通过轮询方式从输入缓冲区中读取数据前不需要进行地址映射,而输出缓冲区是在中央处理单元201的主存一侧,因此,图形处理单元202将处理后得到的数据存入输出缓冲区前,需要第二内存管理模块601通过对输出缓冲区进行内存映射,将所述输出缓冲区在中央处理单元201的主存的地址映射成在GPU任务的地址信息,然后,图形处理单元202通过轮询方式读取所述输入缓冲区的数据后进行处理,根据所述输出缓冲区映射所得在所述GPU任务的地址信息,将所述处理所得的处理结果存入所述输出缓冲区。由于输入缓冲区和输出缓冲区在GPU任务的地址信息已通过映射获得,在输入缓冲区和输出缓冲区不在图形处理单元202的显存一侧时,数据的读取和存入不是在中央处理单元201的主存和图形处理单元202的显存中通过来回拷贝实现,而是根据内存映射获得的地址信息直接从输入缓冲区读取和向输出缓冲区中存入来实现。因此,附图5或附图6示例的网络数据包处理装置免去了中央处理单元201的主存和图形处理单元202的显存之间数据的拷贝,提高了图形处理单元202读取待处理数据的速率,可以加速网络数据包业务的处理速度。
输出缓冲区中的数据处理结果可以做进一步的应用,例如,通过网络输入输出模块的发送队列,将处理后的数据发送到网络。需要说明的是,由于输入缓冲区是在图形处理单元202的显存一侧,因此,中央处理单元201在访问输入缓冲区时也需要一个内存映射的过程,即通过第二内存管理模块601对所述输入缓冲区进行的内存映射,将所述输入缓冲区在图形处理单元202的显存的地址映射成在CPU任务的地址信息,然后,中央处理单元201将读取到的数据写入内存203中的输入缓冲区时,根据所述输入缓冲区映射所得在所述CPU任务的地址信息,通过轮询方式将读取到的数据写入所述显存中的输入缓冲区。
对于上述附图2至附图6任一示例的网络数据包处理装置,还可以包括共享缓存701,共享缓存701位于中央处理单元201和内存203之间,如附图7-a至附图7-e任一示例的网络数据包处理装置。若中央处理单元201和图形处理单元202存在共享缓存701,即中央处理单元201和图形处理单元202都可以直接访问的高速存储部件,则中央处理单元201将读取到的数据写入内存203中的输入缓冲区之前还可以将所述读取到的数据,例如,图形处理单元202需要加速进行处理的数据写入中央处理单元201和图形处理单元202的共享缓存。图形处理单元202通过轮询方式从输入缓冲区中读取数据之前,可以访问共享缓存701,若没有命中需要的数据,则通过轮询方式从输入缓冲区中读取数据。因此,图形处理单元202所需要加速处理的数据在共享缓存中命中,则图形处理单元202访问速度和数据处理速度会大大加快。
由于中央处理单元201写入输入缓冲区数据的速率与图形处理单元202从输出缓冲区读取数据的速率不匹配时,可能导致图形处理单元202无法从输入缓冲区读取需要的数据。因此,在上述附图2至附图6任一示例的网络数据包处理装置中,还可以动态调整数据存入所述输入缓冲区的速率,即中央处理单元201结合输出缓冲区单位时间输出的数据量,预测图形处理单元202对所述输入缓冲区的数据进行处理的处理速率,再根据预测的处理速率,调整数据写入输入缓冲区的速率。
作为本发明一个实施例,在附图2至附图7-e任一示例的网络数据包处理装置中,输入缓冲区可以是输入数据缓冲队列,例如,环形输入数据缓冲队列,输出缓冲区可以是输出数据缓冲队列,例如,环形输出数据缓冲队列。
从上述本发明实施例提供的网络数据包处理装置可知,图形处理单元202需要处理的数据被中央处理单元201写入内存203中的输入缓冲区,图形处理单元202从输入缓冲区中读取数据和中央处理单元201从输出缓冲区中读取图形处理单元202处理后得到的数据均是通过轮询方式实现,无需中央处理单元201通过调用系统函数通知图形处理单元202去读取,因此减小了系统调用的开销,提高了图形处理单元202读取待处理数据的速率,可以加速网络数据包业务的处理速度。
附图8是本发明另一实施例提供的网络数据包处理装置08结构示意图,包括初始化模块801、网络IO模块802、内存管理模块803、预处理模块804、网络包处理模块805和GPU网络包加速模块806,其中,初始化模块801、网络IO模块802、内存管理模块803、预处理模块804和网络包处理模块805可以是附图2至附图7-e任一示例的网络数据包处理装置中的中央处理单元201的功能模块或者通过中央处理单元201实现,GPU网络包加速模块806可以是附图2至附图7-e任一示例的网络数据包处理装置中的图形处理单元202的功能模块或者通过图形处理单元202实现,中央处理单元201和图形处理单元202存储这些功能模块的指令,并通过运行这些指令使得这些功能模块实现各自的功能。以下详细说明各个功能模块的交互:
在附图8示例的网络数据包处理装置08中,CPU和GPU不仅仅能够访问所有的内存空间,而且CPU和GPU之间可以访问其共享缓存810,例如L3缓存(L3Cache)。CPU在向其主存的输入缓冲区写入数据时,可以将这些数据或者其中的部分(例如,GPU需要加速处理的数据)存入CPU和GPU共享的L3缓存,即L3缓存中的数据可以视为是输入缓冲区中数据或部分数据的副本,GPU在访问输入缓冲区前,可以访问共享缓存810,则GPU访问速度会大大加快。在本实施例中,输入缓冲区808中的数据是经过预处理模块804预处理后的网络数据包。
在附图8示例的网络数据包处理装置08中,输入缓冲区分配和输出缓冲区均分配在中央处理单元的主存,初始化模块801根据配置信息,初始化网络IO模块802、内存管理模块803、预处理模块804、网络包处理模块805以及GPU网络包加速模块806。初始化模块801还通过调用内存管理模块803,根据配置信息在CPU主存中为CPU和GPU之间的数据交互分配一个或者多个数据输入缓冲区808和输出缓冲区809。GPU网络包加速模块806被初始化后,初始化模块801将分配后的输入缓冲区808和输出缓冲区809的地址信息传递给GPU网络包加速模块806。GPU网络包加速模块806结合系统提供的内存映射(MemoryMap)功能,获得输入缓冲区808和输出缓冲区809在GPU任务中所对应的地址信息,使其具备对输入缓冲区808和输出缓冲区809的读、写权限。
预处理模块804从网络IO模块802接收网络数据包,对数据包进行预处理。其中,预处理是网络应用所需的预处理,通常包括对网络数据包进行协议识别、协议解析、分片重组和流还原等工作。预处理模块804根据配置信息和预处理后的结果,将预处理后的网络数据包发送给位于主机侧的网络包处理模块805,或者将预处理后的网络数据包发送给GPU网络包加速模块806进行进一步的处理。
若预处理模块804需要将预处理后的网络数据包发送给GPU网络包加速模块806,则预处理模块804将预处理后的网络数据包存入输入缓冲区808,并更新相应的输入缓冲区808的头指针。若GPU网络包加速模块806对应的GPU网络加速线程还没有启动,则通过系统调用,启动相应的GPU加速线程,使其能够不间断地从输入缓冲区808读取待处理的网络包数据。GPU加速线程从输入缓冲区808读取输入数据进行计算,在计算任务完成后,移除输入缓冲区808中的对应数据,更新输入缓冲区808的头指针,将计算后的数据写入对应的输出缓冲区809并更新对应的输出缓冲区809的尾指针。
GPU网络包加速模块806根据对输入缓冲区和输出缓冲区进行内存映射得到的输入缓冲区808和输出缓冲区809在GPU线程的地址信息,通过轮询读取输入缓冲区808的数据后进行处理。具体地,GPU加速线程可以从输入缓冲区808的头指针和尾指针是否重合来判断是否有有效的数据输入,如果没有有效数据,则可以不定期地去查询输入缓冲区808的尾指针状态,直至有新的数据输入,再进行下一步的处理。预处理模块804从输出缓冲区809将GPU网络包加速模块806计算后的数据取出,更新输出缓冲区809的头指针,并发送给网络包处理模块805进行下一步的处理。
由于GPU计算所需的数据通常由CPU产生,如果能够适当调整CPU写入数据的速率,使得大部分数据还停留在共享缓存810中没有被置换出去的话,这样能大大加快GPU读入数据的速率,缩短整体的计算时间。因此,在附图8示例的网络数据包处理装置08中,预处理模块804可以结合输出缓冲区809单位时间输出的数据量,判断GPU处理数据的实时速率。预处理模块804可以根据GPU处理数据的速率,调整数据存入输入缓冲区808的速率。例如,若GPU处理数据的速率较快,则可以提高数据存入输入缓冲区808的速率,反之,可以减小数据存入输入缓冲区808的速率。这种方式使得GPU需要读取的大部分数据能够在共享缓存810命中,减少GPU读取数据的时延,最大限度地提高GPU读取数据的共享缓存810命中率。
在预处理模块804需要将预处理后的网络数据包发送给网络包处理模块805时,若预处理模块804与网络包处理模块805属于同一线程,则直接调用相应的网络包处理模块805进行处理。若预处理模块804与网络包处理模块805不属于同一线程,则将网络数据包放入预处理模块804与网络包处理模块805的缓冲区后通知网络包处理线程/进程进行处理。网络包处理模块805收到预处理模块804发送过来的网络数据包后,进行进一步的处理。具体地,如果处理完成后需要将网络数据包发送到网络,则网络包处理模块805将处理完成的网络数据包发送给预处理模块804,最后通过网络IO模块802发送处理。如果需要GPU进行进一步的加速处理,则网络包处理模块805将需要加速的数据通过预处理模块804发送给GPU网络包加速模块806做进一步的计算处理。预处理模块804收到网络包处理模块805处理完成的网络数据包后,通过网络IO模块802的发送队列,将网络包处理模块805发送到网络上。
附图9是本发明另一实施例提供的网络数据包处理装置09结构示意图,包括初始化模块901、网络IO模块902、内存管理模块903、预处理模块904、网络包处理模块905和GPU网络包加速模块906,CPU和GPU存储这些功能模块的指令,并通过运行这些指令使得这些功能模块实现各自的功能。以下详细说明各个功能模块的交互:
在附图9示例的网络数据包处理装置09中,CPU和GPU通过南北桥访问系统内存,CPU和GPU之间并不存在共享缓存(例如,L3Cache),并且CPU和GPU读、写主存和显存的速率各不相同。
在附图9示例的网络数据包处理装置09中,输入缓冲区分配和输出缓冲区均分配在中央处理单元的主存,初始化模块901根据配置信息,初始化网络IO模块902、内存管理模块903、预处理模块904、网络包处理模块905以及GPU网络包加速模块906。初始化模块901还通过调用内存管理模块903,根据配置信息在CPU主存中为CPU和GPU之间的数据交互分配一个或者多个数据输入缓冲区907和输出缓冲区908。GPU网络包加速模块906被初始化后,初始化模块901将分配后的输入缓冲区907和输出缓冲区908的地址信息传递给GPU网络包加速模块906。GPU网络包加速模块906结合系统提供的内存映射(MemoryMap)功能,获得输入缓冲区907和输出缓冲区908在GPU任务中所对应的地址信息,使其具备对输入缓冲区907和输出缓冲区908的读、写权限。
预处理模块904从网络IO模块902接收网络数据包,对数据包进行预处理。其中,预处理是网络应用所需的预处理,通常包括对网络数据包进行协议识别、协议解析、分片重组和流还原等工作。预处理模块904根据配置信息和预处理后的结果,将预处理后的网络数据包发送给位于主机侧的网络包处理模块905,或者将预处理后的网络数据包发送给GPU网络包加速模块906进行进一步的处理。
若预处理模块904需要将预处理后的网络数据包发送给GPU网络包加速模块906,则预处理模块904将预处理后的网络数据包存入输入缓冲区907,并更新相应的输入缓冲区907的头指针。若GPU网络包加速模块906对应的GPU网络加速线程还没有启动,则通过系统调用,启动相应的GPU加速线程,使其能够不间断地从输入缓冲区907读取待处理的网络包数据。GPU加速线程从输入缓冲区907读取输入数据进行计算,在计算任务完成后,移除输入缓冲区907中的对应数据,更新输入缓冲区907的头指针,将计算后的数据写入对应的输出缓冲区908并更新对应的输出缓冲区908的尾指针。
GPU网络包加速模块906根据对输出缓冲区进行内存映射得到的输出缓冲区908在GPU线程的地址信息,通过轮询读取输入缓冲区907的数据后进行处理。具体地,GPU加速线程可以从输入缓冲区907的头指针和尾指针是否重合来判断是否有有效的数据输入,如果没有有效数据,则可以不定期地去查询输入缓冲区907的尾指针状态,直至有新的数据输入,再进行下一步的处理。预处理模块904从输出缓冲区908将GPU网络包加速模块906计算后的数据取出,更新输出缓冲区908的头指针,并发送给网络包处理模块905进行下一步的处理。
因此,在附图9示例的网络数据包处理装置09中,预处理模块904可以结合输出缓冲区908单位时间输出的数据量,判断GPU处理数据的实时速率。预处理模块904可以根据GPU处理数据的速率,调整数据存入输入缓冲区907的速率。例如,若GPU处理数据的速率较快,则可以提高数据存入输入缓冲区907的速率,反之,可以减小数据存入输入缓冲区907的速率。
在预处理模块904需要将预处理后的网络数据包发送给网络包处理模块905时,若预处理模块904与网络包处理模块905属于同一线程,则直接调用相应的网络包处理模块905进行处理。若预处理模块904与网络包处理模块905不属于同一线程,则将网络数据包放入预处理模块904与网络包处理模块905的缓冲区后通知网络包处理线程/进程进行处理。网络包处理模块905收到预处理模块904发送过来的网络数据包后,进行进一步的处理。具体地,如果处理完成后需要将网络数据包发送到网络,则网络包处理模块905将处理完成的网络数据包发送给预处理模块904,最后通过网络IO模块902发送处理。如果需要GPU进行进一步的加速处理,则网络包处理模块905将需要加速的数据通过预处理模块904发送给GPU网络包加速模块906做进一步的计算处理。预处理模块904收到网络包处理模块905处理完成的网络数据包后,通过网络IO模块902的发送队列,将网络包处理模块905发送到网络上。
需要说明的是,上述装置各模块/单元之间的信息交互、执行过程等内容,由于与本发明方法实施例基于同一构思,其带来的技术效果与本发明方法实施例相同,具体内容可参见本发明方法实施例中的叙述,此处不再赘述。
本领域普通技术人员可以理解上述实施例的各种方法中的全部或部分步骤是可以通过程序来指令相关的硬件来完成,比如以下各种方法的一种或多种或全部:
中央处理单元CPU将读取到的数据写入内存中的输入缓冲区;
图形处理单元GPU通过轮询方式从所述输入缓冲区中读取数据,并对读取到的数据进行处理,将处理后的数据存入所述内存中的输出缓冲区;
所述CPU通过轮询方式从所述输出缓冲区中读取所述GPU处理后得到的数据。
本领域普通技术人员可以理解上述实施例的各种方法中的全部或部分步骤是可以通过程序来指令相关的硬件来完成,该程序可以存储于一计算机可读存储介质中,存储介质可以包括但不限于:只读存储器(ROM,Read OnlyMemory)、随机存取存储器(RAM,Random Access Memory)、磁盘或光盘等。
以上对本发明实施例提供的一种网络数据包处理方法和装置进行了详细介绍,本文中应用了具体个例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思想;同时,对于本领域的一般技术人员,依据本发明的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本发明的限制。
Claims (18)
1.一种网络数据包处理方法,其特征在于,所述方法包括:
中央处理单元CPU将读取到的数据写入内存中的输入缓冲区;
图形处理单元GPU通过轮询方式从所述输入缓冲区中读取数据,并对读取到的数据进行处理,将处理后的数据存入所述内存中的输出缓冲区;
所述CPU通过轮询方式从所述输出缓冲区中读取所述GPU处理后得到的数据。
2.如权利要求1所述的方法,其特征在于,所述输入缓冲区和所述输出缓冲区分配在所述CPU的主存中,所述内存包括所述主存。
3.如权利要求2所述的方法,其特征在于,所述方法还包括:通过对所述输入缓冲区和所述输出缓冲区进行的内存映射,将所述输入缓冲区和所述输出缓冲区在所述CPU的主存的地址分别映射成在GPU任务的对应地址信息;
所述图形处理单元GPU通过轮询方式从所述输入缓冲区中读取数据并对读取到的数据进行处理,将处理后得到的数据存入所述输出缓冲区包括:
所述图形处理单元GPU根据所述输入缓冲区在所述GPU任务的对应地址信息,通过轮询方式读取所述输入缓冲区的数据后进行处理;
所述图形处理单元GPU根据所述输出缓冲区在所述GPU任务的对应地址信息,将所述处理所得的处理结果存入所述输出缓冲区。
4.如权利要求1所述的方法,其特征在于,所述输入缓冲区分配在所述GPU的显存,所述输出缓冲区分配在所述CPU的主存,所述内存包括所述主存和所述显存。
5.如权利要求4所述的方法,其特征在于,所述方法还包括:通过对所述输入缓冲区和所述输出缓冲区进行的内存映射,将所述输入缓冲区在所述GPU的显存的地址映射成在CPU任务的地址信息,将所述输出缓冲区在所述CPU的主存的地址映射成在GPU任务的地址信息;
所述中央处理单元CPU将读取到的数据写入内存中的输入缓冲区包括:根据所述输入缓冲区映射所得在所述CPU任务的地址信息,通过轮询方式将读取到的数据写入所述显存中的输入缓冲区;
所述图形处理单元GPU通过轮询方式从所述输入缓冲区中读取数据并对读取到的数据进行处理,将处理后得到的数据存入输出缓冲区包括:所述图形处理单元GPU通过轮询方式读取所述输入缓冲区的数据后进行处理;根据所述输出缓冲区映射所得在所述GPU任务的地址信息,将所述处理所得的处理结果存入所述输出缓冲区。
6.如权利要求1所述的方法,其特征在于,所述CPU与所述内存之间还包括CPU和GPU的共享缓存,所述中央处理单元CPU将读取到的数据写入内存中的输入缓冲区之前,还包括:所述CPU将所述读取到的数据写入CPU和GPU的共享缓存;
所述图形处理单元GPU通过轮询方式从所述输入缓冲区中读取数据之前,还包括:所述图形处理单元GPU访问所述共享缓存,若所述共享缓存中具有需要读取的数据,则从所述共享缓存中读取,若没有,则通过轮询方式从所述输入缓冲区中读取数据。
7.如权利要求1至6任意一项所述的方法,其特征在于,所述方法还包括:
所述CPU结合所述输出缓冲区单位时间输出的数据量,预测所述GPU对所述输入缓冲区的数据进行处理的处理速率;
根据所述预测的处理速率,调整数据写入所述输入缓冲区的速率。
8.如权利要求1至6任意一项所述的方法,其特征在于,所述输入缓冲区和输出缓冲区分别为输入数据缓冲队列和输出数据缓冲队列。
9.如权利要求8所述的方法,其特征在于,所述输入数据缓冲队列和输出数据缓冲队列分别为环形输入数据缓冲队列和环形输出数据缓冲队列。
10.一种网络数据包处理装置,其特征在于,所述装置包括中央处理单元CPU、图形处理单元GPU和内存;
所述中央处理单元,用于将读取到的数据写入所述内存中的输入缓冲区;
所述图形处理单元,用于通过轮询方式从所述输入缓冲区中读取数据,并对读取到的数据进行处理,将处理后得到的数据存入所述内存中的输出缓冲区;
所述中央处理单元还用于通过轮询方式从所述输出缓冲区中读取所述GPU处理后得到的数据。
11.如权利要求10所述的装置,其特征在于,所述输入缓冲区和输出缓冲区分配在所述CPU的主存中,所述内存包括所述主存。
12.如权利要求11所述的装置,其特征在于,所述装置还包括:
第一内存管理模块,用于通过对所述输入缓冲区和所述输出缓冲区进行的内存映射,将所述输入缓冲区和所述输出缓冲区在所述CPU的主存的地址分别映射成在GPU任务的对应地址信息;
所述图形处理单元GPU具体用于根据所述输入缓冲区在所述GPU任务的对应地址信息,通过轮询方式读取所述输入缓冲区的数据后进行处理,根据所述输出缓冲区在所述GPU任务的对应地址信息,将所述处理所得的处理结果存入所述输出缓冲区。
13.如权利要求10所述的装置,其特征在于,所述输入缓冲区分配在所述GPU的显存,所述输出缓冲区分配在所述CPU的主存,所述内存包括所述主存和所述显存。
14.如权利要求13所述的装置,其特征在于,所述装置还包括:
第二内存管理模块,用于通过对所述输入缓冲区和所述输出缓冲区进行的内存映射,将所述输入缓冲区在所述GPU的显存的地址映射成在CPU任务的地址信息,将所述输出缓冲区在所述CPU的主存的地址映射成在GPU任务的地址信息;
所述中央处理单元CPU具体用于根据所述输入缓冲区映射所得在所述CPU任务的地址信息,通过轮询方式将读取到的数据写入所述显存中的输入缓冲区;
所述图形处理单元GPU具体用于通过轮询方式读取所述输入缓冲区的数据后进行处理,根据所述输出缓冲区映射所得在所述GPU任务的地址信息,将所述处理所得的处理结果存入所述输出缓冲区。
15.如权利要求10所述的装置,其特征在于,所述装置还包括CPU和GPU的共享缓存,所述中央处理单元CPU将读取到的数据写入内存中的输入缓冲区之前,所述CPU还用于将所述读取到的数据写入所述共享缓存;
所述图形处理单元GPU通过轮询方式从所述输入缓冲区中读取数据之前,所述图形处理单元GPU还用于访问所述共享缓存,若所述共享缓存中具有需要读取的数据,则从所述共享缓存中读取,若没有,则通过轮询方式从所述输入缓冲区中读取数据。
16.如权利要求10至15任意一项所述的装置,其特征在于,所述CPU还用于结合所述输出缓冲区单位时间输出的数据量,预测所述GPU对所述输入缓冲区的数据进行处理的处理速率,根据所述预测的处理速率,调整数据写入所述输入缓冲区的速率。
17.如权利要求10至15任意一项所述的装置,其特征在于,所述输入缓冲区和输出缓冲区分别为输入数据缓冲队列和输出数据缓冲队列。
18.如权利要求17所述的装置,其特征在于,所述输入数据缓冲队列和输出数据缓冲队列分别为环形输入数据缓冲队列和环形输出数据缓冲队列。
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201310123531.5A CN104102542A (zh) | 2013-04-10 | 2013-04-10 | 一种网络数据包处理方法和装置 |
PCT/CN2014/075061 WO2014166404A1 (zh) | 2013-04-10 | 2014-04-10 | 一种网络数据包处理方法和装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201310123531.5A CN104102542A (zh) | 2013-04-10 | 2013-04-10 | 一种网络数据包处理方法和装置 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN104102542A true CN104102542A (zh) | 2014-10-15 |
Family
ID=51670714
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201310123531.5A Pending CN104102542A (zh) | 2013-04-10 | 2013-04-10 | 一种网络数据包处理方法和装置 |
Country Status (2)
Country | Link |
---|---|
CN (1) | CN104102542A (zh) |
WO (1) | WO2014166404A1 (zh) |
Cited By (14)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105791021A (zh) * | 2016-04-12 | 2016-07-20 | 上海斐讯数据通信技术有限公司 | 一种硬件加速装置和方法 |
CN105787771A (zh) * | 2014-12-16 | 2016-07-20 | 航天信息股份有限公司 | 一种提升网络发票系统中数据交互稳定性的方法及系统 |
CN106683035A (zh) * | 2015-11-09 | 2017-05-17 | 龙芯中科技术有限公司 | Gpu加速方法和装置 |
CN106951190A (zh) * | 2017-03-21 | 2017-07-14 | 联想(北京)有限公司 | 数据存储及访问方法、节点和服务器集群 |
CN106960412A (zh) * | 2016-01-12 | 2017-07-18 | 三星电子株式会社 | 包括多个缓冲区的存储器设备和驱动存储器的方法 |
CN107102897A (zh) * | 2016-02-23 | 2017-08-29 | 深圳市知穹科技有限公司 | 一种多gpu并行处理的数据库主动防御方法 |
CN107124286A (zh) * | 2016-02-24 | 2017-09-01 | 深圳市知穹科技有限公司 | 一种海量数据高速处理、交互的系统及方法 |
CN108009008A (zh) * | 2016-10-28 | 2018-05-08 | 北京市商汤科技开发有限公司 | 数据处理方法和系统、电子设备 |
WO2019127244A1 (en) * | 2017-12-28 | 2019-07-04 | SZ DJI Technology Co., Ltd. | System and method for supporting low latency in a movable platform environment |
CN111163158A (zh) * | 2019-12-27 | 2020-05-15 | 联想(北京)有限公司 | 一种数据处理方法及电子设备 |
WO2020237460A1 (zh) * | 2019-05-27 | 2020-12-03 | 华为技术有限公司 | 一种图形处理方法和装置 |
CN112100414A (zh) * | 2020-09-11 | 2020-12-18 | 深圳力维智联技术有限公司 | 数据处理方法、装置、系统与计算机可读存储介质 |
CN112130981A (zh) * | 2020-09-28 | 2020-12-25 | 天地伟业技术有限公司 | 一种提升soc内部硬件处理单元使用效率的方法 |
CN117290098A (zh) * | 2023-09-22 | 2023-12-26 | 中国科学院自动化研究所 | 基于gpu内联直通的高速数据处理方法及装置 |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110134370B (zh) * | 2018-02-08 | 2023-09-12 | 龙芯中科技术股份有限公司 | 一种图形绘制的方法、装置、电子设备及存储介质 |
US10795840B2 (en) | 2018-11-12 | 2020-10-06 | At&T Intellectual Property I, L.P. | Persistent kernel for graphics processing unit direct memory access network packet processing |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101526934A (zh) * | 2009-04-21 | 2009-09-09 | 浪潮电子信息产业股份有限公司 | 一种gpu与cpu复合处理器的组建方法 |
CN102625934A (zh) * | 2008-11-13 | 2012-08-01 | 英特尔公司 | 共享虚拟存储器 |
CN102696023A (zh) * | 2009-09-25 | 2012-09-26 | 辉达公司 | 用于访问并行存储器空间的统一寻址和指令 |
CN102713837A (zh) * | 2009-09-23 | 2012-10-03 | 辉达公司 | 用于管理并行高速缓存层级的指令 |
Family Cites Families (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5329625A (en) * | 1992-04-15 | 1994-07-12 | International Business Machines Corp. | System to service processor interface for a tablet computer |
CN1166995C (zh) * | 2002-04-27 | 2004-09-15 | 西安交通大学 | 高速视频处理接口控制器及其处理方法 |
JP4715334B2 (ja) * | 2005-06-24 | 2011-07-06 | 日産自動車株式会社 | 車両用画像生成装置および方法 |
CN100428724C (zh) * | 2005-07-11 | 2008-10-22 | 普天信息技术研究院 | 动态时分交换装置及方法 |
-
2013
- 2013-04-10 CN CN201310123531.5A patent/CN104102542A/zh active Pending
-
2014
- 2014-04-10 WO PCT/CN2014/075061 patent/WO2014166404A1/zh active Application Filing
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102625934A (zh) * | 2008-11-13 | 2012-08-01 | 英特尔公司 | 共享虚拟存储器 |
CN101526934A (zh) * | 2009-04-21 | 2009-09-09 | 浪潮电子信息产业股份有限公司 | 一种gpu与cpu复合处理器的组建方法 |
CN102713837A (zh) * | 2009-09-23 | 2012-10-03 | 辉达公司 | 用于管理并行高速缓存层级的指令 |
CN102696023A (zh) * | 2009-09-25 | 2012-09-26 | 辉达公司 | 用于访问并行存储器空间的统一寻址和指令 |
Cited By (23)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105787771A (zh) * | 2014-12-16 | 2016-07-20 | 航天信息股份有限公司 | 一种提升网络发票系统中数据交互稳定性的方法及系统 |
CN106683035B (zh) * | 2015-11-09 | 2020-03-13 | 龙芯中科技术有限公司 | Gpu加速方法和装置 |
CN106683035A (zh) * | 2015-11-09 | 2017-05-17 | 龙芯中科技术有限公司 | Gpu加速方法和装置 |
CN106960412A (zh) * | 2016-01-12 | 2017-07-18 | 三星电子株式会社 | 包括多个缓冲区的存储器设备和驱动存储器的方法 |
CN106960412B (zh) * | 2016-01-12 | 2021-11-12 | 三星电子株式会社 | 包括多个缓冲区的存储器设备和驱动存储器的方法 |
CN107102897A (zh) * | 2016-02-23 | 2017-08-29 | 深圳市知穹科技有限公司 | 一种多gpu并行处理的数据库主动防御方法 |
CN107102897B (zh) * | 2016-02-23 | 2019-08-23 | 深圳市知穹科技有限公司 | 一种多gpu并行处理的数据库主动防御方法 |
CN107124286A (zh) * | 2016-02-24 | 2017-09-01 | 深圳市知穹科技有限公司 | 一种海量数据高速处理、交互的系统及方法 |
CN105791021A (zh) * | 2016-04-12 | 2016-07-20 | 上海斐讯数据通信技术有限公司 | 一种硬件加速装置和方法 |
CN108009008B (zh) * | 2016-10-28 | 2022-08-09 | 北京市商汤科技开发有限公司 | 数据处理方法和系统、电子设备 |
CN108009008A (zh) * | 2016-10-28 | 2018-05-08 | 北京市商汤科技开发有限公司 | 数据处理方法和系统、电子设备 |
CN106951190B (zh) * | 2017-03-21 | 2019-11-26 | 联想(北京)有限公司 | 数据存储及访问方法、节点和服务器集群 |
CN106951190A (zh) * | 2017-03-21 | 2017-07-14 | 联想(北京)有限公司 | 数据存储及访问方法、节点和服务器集群 |
CN111465919A (zh) * | 2017-12-28 | 2020-07-28 | 深圳市大疆创新科技有限公司 | 用于支持可移动平台环境中的低延迟的系统和方法 |
WO2019127244A1 (en) * | 2017-12-28 | 2019-07-04 | SZ DJI Technology Co., Ltd. | System and method for supporting low latency in a movable platform environment |
WO2020237460A1 (zh) * | 2019-05-27 | 2020-12-03 | 华为技术有限公司 | 一种图形处理方法和装置 |
CN111163158A (zh) * | 2019-12-27 | 2020-05-15 | 联想(北京)有限公司 | 一种数据处理方法及电子设备 |
CN111163158B (zh) * | 2019-12-27 | 2022-02-25 | 联想(北京)有限公司 | 一种数据处理方法及电子设备 |
CN112100414A (zh) * | 2020-09-11 | 2020-12-18 | 深圳力维智联技术有限公司 | 数据处理方法、装置、系统与计算机可读存储介质 |
CN112100414B (zh) * | 2020-09-11 | 2024-02-23 | 深圳力维智联技术有限公司 | 数据处理方法、装置、系统与计算机可读存储介质 |
CN112130981A (zh) * | 2020-09-28 | 2020-12-25 | 天地伟业技术有限公司 | 一种提升soc内部硬件处理单元使用效率的方法 |
CN117290098A (zh) * | 2023-09-22 | 2023-12-26 | 中国科学院自动化研究所 | 基于gpu内联直通的高速数据处理方法及装置 |
CN117290098B (zh) * | 2023-09-22 | 2024-08-13 | 中国科学院自动化研究所 | 基于gpu内联直通的高速数据处理方法及装置 |
Also Published As
Publication number | Publication date |
---|---|
WO2014166404A1 (zh) | 2014-10-16 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN104102542A (zh) | 一种网络数据包处理方法和装置 | |
US8316220B2 (en) | Operating processors over a network | |
US8381230B2 (en) | Message passing with queues and channels | |
US9176795B2 (en) | Graphics processing dispatch from user mode | |
KR101150928B1 (ko) | 네트워크 아키텍처 및 이를 이용한 패킷 처리 방법 | |
US9507632B2 (en) | Preemptive context switching of processes on ac accelerated processing device (APD) based on time quanta | |
US10146575B2 (en) | Heterogeneous enqueuing and dequeuing mechanism for task scheduling | |
Briat et al. | Athapascan runtime: Efficiency for irregular problems | |
US9471387B2 (en) | Scheduling in job execution | |
CN102299843A (zh) | 一种基于gpu和缓冲区的网络数据处理方法及系统 | |
US7506123B1 (en) | Method and system for performing memory copy function on a cell processor | |
CN102291298B (zh) | 一种高效的面向长消息的计算机网络通信方法 | |
US8933942B2 (en) | Partitioning resources of a processor | |
US20120194526A1 (en) | Task Scheduling | |
CN102571580A (zh) | 数据接收方法和计算机 | |
Agostini et al. | GPUDirect Async: Exploring GPU synchronous communication techniques for InfiniBand clusters | |
CN103324599A (zh) | 处理器间通信方法与系统级芯片 | |
CN117806833A (zh) | 一种数据处理系统、方法及介质 | |
US20120194525A1 (en) | Managed Task Scheduling on a Graphics Processing Device (APD) | |
JP2014503898A (ja) | 処理装置の同期動作のための方法およびシステム | |
Chu et al. | Dynamic kernel fusion for bulk non-contiguous data transfer on GPU clusters | |
Jang et al. | A low-overhead networking mechanism for virtualized high-performance computing systems | |
US20130135327A1 (en) | Saving and Restoring Non-Shader State Using a Command Processor | |
US10255104B2 (en) | System call queue between visible and invisible computing devices | |
JP2014503899A (ja) | コンピュータシステムインタラプト処理 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
RJ01 | Rejection of invention patent application after publication | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20141015 |