一种网络包处理的方法、装置和系统
技术领域
本发明涉及计算机领域,尤其涉及一种网络包处理的方法、装置和系统。
背景技术
随着网络服务和应用的多样化,网络包处理的方法也呈现多样化。传统的利用CPU(Central Processing Unit,中央处理器)处理网络包的方法已经不能满足网络传输速度的需求。
与此同时,GPU(Graphics Processing Unit,图形处理器)正在以超过摩尔定律的速度高速发展,浮点运算能力远远超过CPU,同时GPU访问显存的带宽也超过CPU访问内存的带宽,不仅在速度方面大大提高,且具有流处理、高密度并行运算、可编程流水线等特性,软件层面上利用GPU进行通用计算的平台也日益成熟,尤其是提出面向异构系统并行编程的开放式统一标准OpenCL(Open Computing Language,开放运算语言),大大简化了编程难度和开发工作量。
正是由于GPU具有高效的并行性和灵活的可编程性,基于GPU的网络包处理的方法成为人们研究的热点。现有技术中存在一种基于CPU+GPU异构系统来处理网络包的方案,具体如下:
网络包由多个网络协议任务构成,当内核中有需要GPU处理的任务,创建GPU任务请求放入CPU内存的请求队列中,接着CPU的用户态程序读取所述请求队列中的GPU任务请求,然后调度GPU线程将所述GPU任务请求所请求的任务从内存拷贝到显存报文缓存区,在所述GPU完成相应的任务后,将执行结果从GPU的显存拷贝到CPU内存的响应队列中,通知内核继续处理。
该方案虽然可以加速内核中的网络协议任务,如路由查找、SSL(Secure Sockets Layer,安全套接层)、IPSec(Internet ProtocolSecurity,网络协议安全性)、DPI(Deep Packet Inspection,深度包检测)、加密文件系统、重复数据块查找等任务,但是整个过程系统的响应时间较长,导致网络包处理的效率较低,并且整个过程消耗资源较多。
发明内容
本发明的实施例提供一种网络包处理的方法、装置和系统,能够减少系统的响应时间,节省系统资源,提高网络包处理的效率。为达到上述目的,本发明的实施例采用如下技术方案:
第一方面,提供一种网络包处理的方法,所述方法包括:
接收网络包,并将其缓存在内存缓冲区的第一地址中;
根据所述内存缓冲区的第一地址和预存储的内存缓冲区的地址与图形处理器GPU的显存中的物理地址的地址映射关系,确定所述网络包在所述GPU的显存中的物理地址;
控制直接内存访问DMA控制器,将所述网络包写入所述确定的所述网络包在所述GPU的显存中的物理地址中;
发送第一指示消息,以使通信对端根据所述第一指示消息处理所述网络包,其中,所述第一指示消息携带所述确定的所述网络包在所述GPU的显存中的物理地址。
第二方面,提供一种网络包处理的方法,所述方法包括:
接收第一指示消息,其中,所述第一指示消息携带网络包在图形处理器GPU的显存中的物理地址;
根据所述第一指示消息,从所述GPU的显存中读取所述网络包的包头信息;
根据所述网络包的包头信息,确定当前要对所述网络包执行的任务;
判断所述任务是否为所述GPU所支持的任务;
若所述任务是所述GPU所支持的任务,控制所述GPU执行所述任务;
若所述任务不是所述GPU所支持的任务,执行所述任务。
在第一种可能的实现方式中,根据第二方面,所述判断所述任务是否为所述GPU所支持的任务,具体包括:
确定所述任务是否为读取完整网络包做计算的任务;
若所述任务是读取完整网络包做计算的任务,确定所述任务是所述GPU所支持的任务;
若所述任务不是读取完整网络包做计算的任务,确定所述任务不是所述GPU所支持的任务。
在第二种可能的实现方式中,根据第二方面或第一种可能的实现方式,若所述任务是所述GPU所支持的任务,控制所述GPU执行所述任务具体包括:
将所述任务放入所述任务对应的任务队列;
若所述任务队列满足第一条件,发送第二指示消息给所述GPU,所述第二指示消息指示所述GPU并发执行所述任务队列中的任务,其中,所述第二指示消息携带所述任务队列中的任务在所述GPU的显存中的物理地址,以使得所述GPU根据所述任务队列中的任务在所述GPU的显存中的物理地址,执行所述任务队列中的任务;
获取所述GPU执行所述任务队列中的任务后的执行结果和所述执行结果在所述GPU的显存中的物理地址。
在第三种可能的实现方式中,根据第二种可能的实现方式,所述第一条件具体为所述任务队列满;
或
所述第一条件具体为所述任务队列的定时器超时。
第三方面,提供一种网络包处理的装置,所述装置包括接收单元、存储单元、确定单元、控制单元、发送单元;
所述接收单元,用于接收网络包;
所述存储单元,用于将所述网络包缓存在内存缓冲区的第一地址中;
所述确定单元,用于根据所述内存缓冲区的第一地址和预存储的内存缓冲区的地址与图形处理器GPU的显存中的物理地址的地址映射关系,确定所述网络包在所述GPU的显存中的物理地址;
所述控制单元,用于控制直接内存访问DMA控制器,将所述网络包写入所述确定的所述网络包在所述GPU的显存中的物理地址中;
所述发送单元,用于发送第一指示消息,以使得通信对端根据所述第一指示消息处理所述网络包,其中,所述第一指示消息携带所述确定的所述网络包在所述GPU的显存中的物理地址。
第四方面,提供一种网络包处理的装置,所述装置包括接收单元、读取单元、确定单元、判断单元、控制单元、执行单元;
所述接收单元,用于接收第一指示消息,其中,所述第一指示消息携带网络包在图形处理器GPU的显存中的物理地址;
所述读取单元,用于根据所述第一指示消息,从所述GPU的显存中读取所述网络包的包头信息;
所述确定单元,用于根据所述网络包的包头信息,确定当前要对所述网络包执行的任务;
所述判断单元,用于判断所述任务是否为所述GPU所支持的任务;
所述控制单元,用于若所述任务是所述GPU所支持的任务,控制所述GPU执行所述任务;
所述执行单元,用于若所述任务不是所述GPU所支持的任务,执行所述任务。
在第一种可能的实现方式中,根据第四方面,所述判断单元判断所述任务是否为所述GPU所支持的任务,具体包括:
确定所述任务是否为需要读取完整网络包做计算的任务;
若所述任务是读取完整网络包做计算的任务,确定所述任务是所述GPU所支持的任务;
若所述任务不是读取完整网络包做计算的任务,确定所述任务不是所述GPU所支持的任务。
在第二种可能的实现方式中,根据第四方面或第一种可能的实现方式,若所述任务是所述GPU所支持的任务,所述控制单元控制所述GPU执行所述任务具体包括:
将所述任务放入所述任务对应的任务队列;
若所述任务队列满足第一条件,发送第二指示消息给所述GPU,所述第二指示消息指示所述GPU并发执行所述任务队列中的任务,其中,所述第二指示消息携带所述任务队列中的任务在所述GPU的显存中的物理地址,以使得所述GPU根据所述任务队列中的任务在所述GPU的显存中的物理地址,执行所述任务队列中的任务;
获取所述GPU执行所述任务队列中的任务后的执行结果和所述执行结果在所述GPU的显存中的物理地址。
在第三种可能的实现方式中,根据第二种可能的实现方式,所述第一条件具体为所述任务队列满;
或
所述第一条件具体为所述任务队列的定时器超时。
第五方面,提供了一种网络包处理的系统,所述系统包括网卡、中央处理器CPU、显卡、内存、直接内存访问DMA控制器、芯片组、PCIe总线,其中,所述显卡包括图像处理器GPU和显存,所述网卡和所述显卡连接到同一个PCIe总线,通过芯片组和CPU通信,包括:
网卡接收网络包,并将其缓存在内存缓冲区的第一地址中;网卡根据所述内存缓冲区的第一地址和预存储的内存缓冲区的地址与图形处理器GPU的显存中的物理地址的地址映射关系,确定所述网络包在所述GPU的显存中的物理地址;网卡控制直接内存访问DMA控制器,将所述网络包写入所述确定的所述网络包在所述GPU的显存中的物理地址中;网卡发送第一指示消息给中央处理器CPU,以使所述CPU根据所述第一指示消息处理所述网络包,其中,所述第一指示消息携带所述确定的所述网络包在所述GPU的显存中的物理地址;CPU接收所述网卡发送的所述第一指示消息;CPU根据所述第一指示消息,从所述GPU的显存中读取所述网络包的包头信息;CPU根据所述网络包的包头信息,确定当前要对所述网络包执行的任务;CPU判断所述任务是否为所述GPU所支持的任务;若所述任务是所述GPU所支持的任务,CPU控制所述GPU执行所述任务;若所述任务不是所述GPU所支持的任务,CPU执行所述任务
本发明实施例基于上述方案,利用统一虚拟地址空间UVA技术和图形处理器GPU直连技术实现网卡和GPU的显存的直通,可以将网络包从网卡直接写入GPU的显存,减少了GPU处理网络协议任务时数据的拷贝次数,节省了系统资源,提高了网络包处理的效率,同时避免了将网络包写入内存时通过系统的桥接芯片组所带来的系统延时,在一定程度上降低了网卡的丢包率。
附图说明
图1为本发明实施例提供的一种数据包处理的方法;
图2为本发明实施例提供的另一种数据包处理的方法;
图3为本发明实施例提供的一种网络包处理的系统;
图4为本发明实施例提供的又一种网络包处理的方法;
图5为本发明实施例提供的又一种网络包处理的方法;
图6为本发明实施例提供的一种CPU的模块框架图;
图7为本发明实施例提供的一种网络包处理的装置;
图8为本发明实施例提供的另一种网络包处理的装置。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
实施例一、
本发明实施例提供一种网络包处理的方法,具体如图1所示,所述方法包括:
101、接收网络包,并将其缓存在内存缓冲区的第一地址中。
需要说明的是,所述第一地址中的“第一”不具有任何特殊的含义,仅说明是内存缓冲区中的一个具体的地址。
102、根据所述内存缓冲区的第一地址和预存储的内存缓冲区的地址与图形处理器GPU的显存中的物理地址的地址映射关系,确定所述网络包在所述GPU的显存中的物理地址。
具体的,本发明实施例基于统一虚拟地址空间UVA(Unifiedvirtual addressing,统一虚拟地址空间)技术,将内存资源和显卡上的显存资源当做一块统一的存储器池,存储器地址统一编码,操作系统可像访问内存般对显存读写。所以所述网络包处理的装置中存储了内存缓冲区的地址与图形处理器GPU的显存中的物理地址的地址映射关系,在接收到网络包后,可以根据缓存所述网络数据包的第一地址,通过查找预存储的内存缓冲区的地址与图形处理器GPU的显存中的物理地址的地址映射关系,确定所述网络包在所述GPU的显存中的物理地址。
需要说明的是,所述网络包处理的装置具体可以是网卡,本发明实施例对此不作具体限定。
需要说明的是,所述GPU的显存实质上是指显卡上与GPU相连接的显存,而并非GPU内部包含的显存。因为每个GPU都有与其连接的显存,所以可以称与GPU相连接的显存为“GPU的显存”。
103、控制直接内存访问DMA(Direct Memory Access,直接内存访问)控制器,将所述网络包写入所述确定的所述网络包在所述GPU的显存中的物理地址中。
具体的,本发明还利用GPU直连技术,允许其他PCIe(PeripheralComponent Interconnect Express,高速外设元件互联方式,一种最新的总线和接口标准)设备,如网络适配器、固态硬盘等通过DMA直接读写显存,就像以前通过DMA直接读写内存一样。所以,所述网络包处理的装置可以控制直接内存访问DMA控制器,将所述网络包写入所述确定的所述网络包在所述GPU的显存中的物理地址中。
正是基于所述UVA技术和所述GPU直连技术,所述网络包处理的装置在接收到网络包后,才最终将所述网络包写入所述确定的所述网络包在所述GPU的显存中的物理地址中,实现所述网络包处理的装置和GPU的显存的直通。
104、发送第一指示消息,以使通信对端根据所述第一指示消息处理所述网络包,其中,所述第一指示消息携带所述确定的所述网络包在所述GPU的显存中的物理地址。
具体的,在所述控制所述DMA将所述网络包写入所述确定的所述网络包在所述GPU的显存中的物理地址中后,可能会产生硬中断通知通信对端处理所述数据包,即发送第一指示消息给所述通信对端,所述第一指示消息指示所述CPU处理所述数据包。
具体的,所述第一指示消息携带所述确定的所述网络包在所述GPU的显存中的物理地址。
本发明实施例还提供一种网络包处理的方法,具体如图2所示,所述方法包括:
201、接收第一指示消息,其中,所述第一指示消息携带网络包在图形处理器GPU的显存中的物理地址。
202、根据所述第一指示消息,从所述GPU的显存中读取所述网络包的包头信息。
具体的,所述第一指示消息可能由通信对端的硬中断产生,所述网络包处理的装置在接收到所述第一指示消息后,可能会产生软中断启动对网络包的处理,然后从所述GPU的显存中读取所述网络包的包头信息,也可能是直接根据所述第一指示消息携带的所述物理地址,从所述GPU的显存中读取所述网络包的包头信息,本发明实施例对此不作具体限定,仅说明在接收第一指示消息后,还从所述GPU的显存中读取所述网络包的包头信息。
具体的,因为存在如图1所示的实施例,在接收到网络包后,将所述网络包写入所述GPU的显存中的物理地址中,故本发明实施例中,在所述数据包处理的装置接收到第一指示消息后,可以直接从所述GPU的显存中读取所述网络包的包头信息。
具体的,本发明实施例中,所述网络包处理的装置具体可以为中央处理器CPU,本发明实施例对此不作具体限定。
203、根据所述网络包的包头信息,确定当前要对所述网络包执行的任务。
具体的,所述网络包的包头信息指示了当前要对所述网络包执行的任务,因此可以根据所述网络包的包头信息,确定当前要对网络包执行的任务。
204、判断所述任务是否为所述GPU所支持的任务。
具体的,因为所述GPU的浮点运算能力远远超过CPU,同时GPU访问显存的带宽也超过CPU访问内存的带宽,不仅在速度方面大大提高,且具有流处理、高密度并行运算、可编程流水线等特性,所以对于计算量大的网络协议任务,可以确定是所述GPU所支持的任务,由GPU处理;而对于计算量小的网络协议任务,可以确定不是所述GPU所支持的任务,可由所述网络包处理的装置处理。
具体的,一般将需要读取完整网络包做计算的任务视为计算量大的网络协议任务,比如网络层的IPSec加/解密任务、传输层的SSL加/解密任务、应用层的DPI深度包检测任务;而对于仅需读取包头数据的轻量级协议的任务,可视为计算量小的网络协议任务。
本发明实施例对如何判断所述任务是否为所述GPU所支持的任务不作具体限定,仅说明因为所述任务可以通过所述网络包处理的装置处理,也可以通过GPU处理,故此时首先判断所述任务是否为所述GPU所支持的任务。
若所述任务是所述GPU所支持的任务,执行步骤205;
若所述任务不是所述GPU所支持的任务,执行步骤206。
205、若所述任务是所述GPU所支持的任务,控制所述GPU执行所述任务。
具体的,若所述任务是所述GPU所支持的任务,控制所述GPU执行所述任务可以包括:
将所述任务放入所述任务对应的任务队列;
若所述任务队列满足第一条件,发送第二指示消息给所述GPU,所述第二指示消息指示所述GPU并发执行所述任务队列中的任务,其中,所述第二指示消息携带所述任务队列中的任务在所述GPU的显存中的物理地址,以使得所述GPU根据所述任务队列中的任务在所述GPU的显存中的物理地址,执行所述任务队列中的任务。
获取所述GPU执行所述任务队列中的任务后的执行结果和所述执行结果在所述GPU的显存中的物理地址。
具体的,所述第一条件可以为任务队列满或所述任务队列的定时器超时。
当然,控制所述GPU执行所述任务的方法还可以有其它,本发明实施例对此不作具体限定。
206、若所述任务不是所述GPU所支持的任务,执行所述任务。
具体的,若所述任务不是所述GPU所支持的任务,则所述网络包处理的装置可以直接读显存执行所述任务。
本发明实施例基于上述方案,利用统一虚拟地址空间UVA技术和图形处理器GPU直连技术,实现网卡和GPU的显存的直通,可以将网络包从网卡直接写入GPU的显存,减少了GPU处理网络协议任务时数据的拷贝次数,节省了系统资源,提高了网络包处理的效率,同时避免了将网络包写入内存时通过系统的桥接芯片组所带来的系统延时,在一定程度上降低了网卡的丢包率。
实施例二、
本发明实施例提供一种网络包处理的方法,具体在如图3所示的网络包处理的系统300下进行说明,所述网络包处理的系统具体可以包括网卡301、显卡302、CPU303、内存304、芯片组305、PCIe总线306、DMA控制器307,其中,所述显卡302包括GPU3021和显存3022。网卡301和显卡302连接到同一个PCIe总线306,通过芯片组305和CPU303通信。所述方法如图4所示,包括:
401、网卡接收网络包,并将其缓存在内存缓冲区的第一地址中。
402、网卡根据所述内存缓冲区的第一地址和预存储的内存缓冲区的地址与图形处理器GPU的显存中的物理地址的地址映射关系,确定所述网络包在所述GPU的显存中的物理地址。
具体的,本发明实施例基于统一虚拟地址空间UVA(Unifiedvirtual addressing,统一虚拟地址空间)技术,将内存资源和显卡上的显存资源当做一块统一的存储器池,存储器地址统一编码,操作系统可像访问内存般对显存读写。所以,所述网卡中存储了内存缓冲区的地址与图形处理器GPU的显存中的物理地址的地址映射关系,在接收到网络包后,可以根据所述网络包携带的所述第一地址,通过查找地址映射关系,确定所述网络包在所述GPU的显存中的物理地址。
需要说明的是,所述GPU的显存实质上是指显卡上与GPU相连接的显存,而并非GPU内部包含的显存。因为每个GPU都有与其连接的显存,所以可以称与GPU相连接的显存为“GPU的显存”。
403、网卡控制直接内存访问DMA控制器,将所述网络包写入所述确定的所述网络包在所述GPU的显存中的物理地址中。
具体的,本发明还利用所述GPU直连技术,允许其他PCIe设备,如网络适配器、固态硬盘等通过DMA直接读写显存,就像以前通过DMA直接读写内存一样。所以,所述网卡可以控制直接内存访问DMA控制器,将所述网络包写入所述确定的所述网络包在所述GPU的显存中的物理地址中。
正是基于所述UVA技术和所述GPU直连技术,所述网卡在接收到网络包后,才最终将所述网络包写入所述确定的所述网络包在所述GPU的显存中的物理地址中,实现所述网卡和GPU的显存的直通。
404、网卡发送第一指示消息给中央处理器CPU,以使通信对端根据所述第一指示消息处理所述网络包,其中,所述第一指示消息携带所述确定的所述网络包在所述GPU的显存中的物理地址。
具体的,在所述网卡控制所述DMA将所述网络包写入所述确定的所述网络包在所述GPU的显存中的物理地址中后,可能会产生硬中断通知通信对端处理所述数据包,即发送第一指示消息给所述CPU,所述第一指示消息指示所述CPU处理所述数据包。
具体的,所述第一指示消息携带所述确定的所述网络包在所述GPU的显存中的物理地址。
405、CPU接收所述网卡发送的第一指示消息。
406、CPU根据所述第一指示消息,从所述GPU的显存中读取所述网络包的包头信息。
具体的,所述第一指示消息可能由网卡的硬中断产生,所述CPU在接收到所述第一指示消息后,可能会产生软中断启动对网络包的处理进程,然后从所述GPU的显存中读取所述网络包的包头信息,也可能是直接根据所述第一指示消息携带的所述物理地址,从所述GPU的显存中读取所述网络包的包头信息,本发明实施例对此不作具体限定,仅说明在接收第一指示消息后,还从所述GPU的显存中读取所述网络包的包头信息。
具体的,因为网卡在接收到网络包后,将所述网络包写入所述GPU的显存中的物理地址中,故在所述CPU接收第一指示消息后,可以直接从所述GPU的显存中读取所述网络包的包头信息。
407、CPU根据所述网络包的包头信息,确定当前要对所述网络包执行的任务。
具体的,所述网络包的包头信息指示了当前要对所述网络包执行的任务,因此可以根据所述网络包的包头信息,确定当前要对网络包执行的任务。
408、CPU判断所述任务是否为所述GPU所支持的任务。
具体的,因为所述GPU的浮点运算能力远远超过CPU,同时GPU访问显存的带宽也超过CPU访问内存的带宽,不仅在速度方面大大提高,且具有流处理、高密度并行运算、可编程流水线等特性,所以对于计算量大的网络协议任务可以确定是所述GPU所支持的任务,由GPU处理;而对于计算量小的网络协议任务,可以确定不是所述GPU所支持的任务,可由所述CPU处理。
具体的,一般将需要读取完整网络包做计算的任务视为计算量大的网络协议任务,比如网络层的IPSec加/解密任务、传输层的SSL加/解密任务、应用层的DPI深度包检测任务。而对于仅需读取包头数据的轻量级协议的任务,可视为计算量小的网络协议任务。
本发明实施例对如何判断所述任务是否为所述GPU所支持的任务不作具体限定,仅说明因为所述任务可以通过所述CPU处理,也可以通过GPU处理,故此时首先判断所述任务是否为所述GPU所支持的任务。
若所述任务是所述GPU所支持的任务,执行步骤409;
若所述任务不是所述GPU所支持的任务,执行步骤410。
409、若所述任务是所述GPU所支持的任务,CPU控制所述GPU执行所述任务。
具体的,若所述任务是所述GPU所支持的任务,控制所述GPU执行所述任务可以包括:
将所述任务放入所述任务对应的任务队列;
若所述任务队列满足第一条件,发送第二指示消息给所述GPU,所述第二指示消息指示所述GPU并发执行所述任务队列中的任务,其中,所述第二指示消息携带所述任务队列中的任务在所述GPU的显存中的物理地址,以使得所述GPU根据所述任务队列中的任务在所述GPU的显存中的物理地址,执行所述任务队列中的任务。
获取所述GPU执行所述任务队列中的任务后的执行结果和所述执行结果在所述GPU的显存中的物理地址。
具体的,所述第一条件可以为任务队列满或所述任务队列的定时器超时。
410、若所述任务不是所述GPU所支持的任务,CPU执行所述任务。
需要说明的是,网络包由多个网络协议任务构成,上述步骤406-410是网络包处理过程中,一个网络协议任务的处理方法,下面以所述GPU所支持的任务仅为网络协议栈的网络层的IPSec加/解密、传输层的SSL加/解密、应用层的DPI深度包检测这几个典型协议任务为例,描述CPU接收网卡发送的第一指示消息后,对网络包进行处理的过程,具体如图5所示,包括:
501、CPU接收所述网卡发送的第一指示消息,其中,所述第一指示消息携带网络包在GPU的显存中的物理地址。
502、CPU根据所述第一指示消息,从所述GPU的显存中读取所述网络包的网络层的包头信息。
具体的,因为网卡在接收到网络包后,将所述网络包写入所述GPU的显存中的物理地址中,故在所述CPU接收第一指示消息后,可以直接从所述GPU的显存中读取所述网络包的包头信息。
503、CPU根据所述网络层的包头信息,确定当前要对所述网络包执行的网络层任务。
若所述网络层任务是IPSec加/解密,执行步骤504;
若所述网络层任务不是IPSec加/解密,执行步骤508。
504、若所述网络层任务是IPSec加/解密,确定所述任务为所述GPU所支持的任务。
需要说明的是,本发明实施例仅以所述GPU所支持的任务为网络层的IPSec加/解密、传输层的SSL加/解密、应用层的DPI深度包检测这几个典型协议任务为例做示例性说明,所以若所述网络层是IPSec加密,确定所述IPSec任务为所述GPU所支持的任务,即由所述GPU处理该任务。
当然,所述GPU所支持的任务包括但不限于上述列举的网络协议任务,本发明实施例仅是示例性的说明,对所述GPU支持的网络协议任务不作具体限定。
505、将所述任务放入所述任务对应的任务队列。
具体的,如图6所示,所述CPU包括网络协议栈和GPU调度模块。
若所述CPU判断当前要对网络包执行的任务不是所述GPU所支持的任务,直接通过网络协议栈对所述任务进行处理;
若所述CPU判断当前要对网络包执行的任务是所述GPU所支持的任务,则通过GPU调用模块对所述任务进行处理。
其中,所述GPU调用模块由3个子模块组成,分别是队列管理、GPU线程调度和协议代理。
CPU为每个网络协议任务创建了相应的任务队列,队列管理模块负责管理这些任务队列,其中,在确定当前要对网络包执行的任务为所述GPU所支持的任务后,,将所述任务放入对应的任务队列。
若是网络层的IPSec任务,则放入CPU的IPSec任务队列;
若是传输层的SSL任务,则放入CPU的SSL任务队列;
若是应用层的DPI任务,则放入CPU的DPI任务队列。
506、若所述任务队列满足第一条件,发送第二指示消息给所述GPU,所述第二指示消息指示所述GPU并发执行所述任务队列中的任务,其中,所述第二指示消息携带所述任务队列中的任务在所述GPU的显存中的物理地址,以使得所述GPU根据所述任务队列中的任务在所述GPU的显存中的物理,执行所述任务队列中的任务。
具体的,所述第一条件可以为任务队列满,或任务队列的定时器超时,也可以是任务队列中的任务达到预设的某个数值,本发明实施例对所述第一条件不作具体限定,仅说明在所述任务队列满足第一条件后,发送第二指示消息给GPU,所述第二指示消息指示所述GPU并发执行所述任务队列中的任务。
其中,步骤506由图6所示的GPU线程调度模块执行。
507、获取所述GPU执行所述任务队列中的任务后的执行结果和所述执行结果在所述GPU的显存中的物理地址。
具体的,在所述GPU执行完成任务队列中的任务后,还需要返回CPU的网络协议栈继续处理网络协议任务,图6所示的协议代理持有每个CPU任务队列执行完成后下一步协议处理的接口函数地址,它负责获取所述GPU执行所述任务队列中的任务后的执行结果和所述执行结果在显存中的存储地址后,交给协议栈继续处理。
若获取的是IPSec任务队列的执行结果,此时根据下一步协议处理的接口函数地址,转去执行步骤510;
若获取的是SSL任务队列的执行结果,此时根据下一步协议处理的接口函数地址,转去执行步骤515;
若获取的是DPI任务队列的执行结果,此时根据下一步协议处理的接口函数地址,转去执行步骤520。
508、若所述网络层任务不是IPSec加/解密,确定所述任务不是所述GPU所支持的任务。
509、CPU执行所述网络层的所述任务。
需要说明的是,网络层任务可能包含多个,在将对所述网络包要执行的网络层任务全部执行完毕后,才会继续处理上层传输层的任务,本发明实施例中步骤503-509仅是示例性的说明CPU确定当前对网络包执行的网络层任务后所执行的动作,并不对CPU对所述网络包的网络层的所有任务的处理过程一一描述。
510、CPU从GPU的显存中读取所述网络包的传输层的包头信息。
511、CPU根据所述传输层的包头信息,确定当前要对所述网络包执行的传输层任务。
若所述传输层任务是SSL加/解密,执行步骤512;
若所述传输层任务不是SSL加/解密,执行步骤513。
512、若所述任务是SSL加/解密,确定所述SSL任务为所述GPU所支持的任务。
具体的,此时转去执行步骤505-507。
513、若所述传输层任务不是SSL加/解密,确定所述任务为不是所述GPU所支持的任务。
514、CPU执行所述传输层的所述任务。
需要说明的是,传输层任务可能包含多个,在将对所述网络包要执行的传输层任务全部执行完毕后,才会继续处理上层应用层的任务,本发明实施例中步骤511-514仅是示例性的说明CPU确定当前对网络包执行的传输层任务后所执行的动作,并不对CPU对所述网络包的传输层所有任务的处理过程一一描述。
515、CPU从GPU的显存中读取所述网络包的应用层的包头信息。
516、CPU根据所述应用层的包头信息,确定当前对所述网络包执行的应用层任务。
具体的,若所述应用层任务是DPI深度包检测,执行步骤517;
若所述应用层不是DPI深度包检测,执行步骤518。
517、若所述应用层任务是DPI深度包检测,确定所述任务是所述GPU所支持的任务。
具体的,此时转去执行步骤505-507。
518、若所述应用层任务不是DPI深度包检测,确定所述DPI任务不是所述GPU所支持的任务。
519、CPU执行所述应用层的所述任务。
需要说明的是,应用层任务可能包含多个,在将对所述网络包执行的应用层任务全部执行完毕后,才会继续执行网络包的用户处理,本发明实施例中步骤516-519仅是示例性的说明CPU确定当前对网络包执行的应用层任务后所执行的动作,并不对CPU对所述网络包的应用层所有任务的处理过程一一描述。
520、CPU执行网络包的用户数据处理。
具体的,在完成上述的网络协议任务处理后,CPU按照应用业务逻辑对所述网络包的用户数据进行处理,比如报文统计,包转发等。如果是包转发业务,所述CPU传递所述网络包在显存中的存储地址给网卡,由网卡控制所述DMA直接从显存读取网络包,进而转发出去。
需要说明的是,若所述GPU所支持的任务为网络协议栈的网络层的IPSec加/解密、传输层的SSL加/解密、应用层的DPI深度包检测之外的其它任务时,可以依据上述实施例的思想处理网络数据包,本发明实施例对此不作具体限定。
本发明实施例提供一种网络包处理的方法,所述方法包括:网卡接收网络包,并将其缓存在内存缓冲区的第一地址中;网卡根据所述内存缓冲区的第一地址和预存储的内存缓冲区的地址与图形处理器GPU的显存中的物理地址的地址映射关系,确定所述网络包在所述GPU的显存中的物理地址;网卡控制直接内存访问DMA控制器,将所述网络包写入所述确定的所述网络包在所述GPU的显存中的物理地址中;网卡发送第一指示消息给中央处理器CPU,以使所述CPU根据所述第一指示消息处理所述网络包,其中,所述第一指示消息携带所述确定的所述网络包在所述GPU的显存中的物理地址;CPU接收所述网卡发送的所述第一指示消息;CPU根据所述第一指示消息,从所述GPU的显存中读取所述网络包的包头信息;CPU根据所述网络包的包头信息,确定当前要对所述网络包执行的任务;CPU判断所述任务是否为所述GPU所支持的任务;若所述任务是所述GPU所支持的任务,CPU控制所述GPU执行所述任务;若所述任务不是所述GPU所支持的任务,CPU执行所述任务。
基于本发明实施例提供的网络包处理的方法,利用统一虚拟地址空间UVA技术和图形处理器GPU直连技术,实现网卡和GPU的显存的直通,可以将网络包从网卡直接写入GPU的显存,减少了GPU处理网络协议任务时数据的拷贝次数,节省了系统资源,提高了网络包处理的效率,同时避免了将网络包写入内存时通过系统的桥接芯片组所带来的系统延时,在一定程度上降低了网卡的丢包率。
实施例三、
本发明实施例提供一种网络包处理的装置700,具体如图7所示,包括接收单元701、存储单元702、确定单元703、控制单元704、发送单元705。
所述接收单元701,用于接收网络包。
所述存储单元702,用于将所述网络包缓存在内存缓冲区的第一地址中。
所述确定单元703,用于根据所述内存缓冲区的第一地址和预存储的内存缓冲区的地址与图形处理器GPU的显存中的物理地址的地址映射关系,确定所述网络包在所述GPU的显存中的物理地址。
所述控制单元704,用于控制直接内存访问DMA控制器,将所述网络包写入所述确定的所述网络包在所述GPU的显存中的物理地址中。
所述发送单元705,用于发送第一指示消息,以使得通信对端根据所述第一指示消息处理所述网络包,其中,所述第一指示消息携带所述确定的所述网络包在所述GPU的显存中的物理地址。
具体的,所述网络包处理的装置700可以为网卡,本发明实施例对此不作具体限定。
具体的,通过所述网络包处理的装置700进行网络包处理的方法可参考实施例一和实施例二的描述,本发明实施例对此不再赘述。
基于本发明实施例提供的网络包处理的装置,利用统一虚拟地址空间UVA技术和图形处理器GPU直连技术,可以实现网卡和GPU的显存的直通,可以将网络包从网卡直接写入GPU的显存,减少了GPU处理网络协议任务时数据的拷贝次数,节省了系统资源,提高了网络包处理的效率,同时避免了将网络包写入内存时通过系统的桥接芯片组所带来的系统延时,在一定程度上降低了网卡的丢包率。
实施例四、
本发明实施例提供一种网络包处理的装置800,具体如图8所示,所述装置800包括接收单元801、读取单元802、确定单元803、判断单元804、控制单元805、执行单元806。
所述接收单元801,用于接收第一指示消息,其中,所述第一指示消息携带网络包在图形处理器GPU的显存中的物理地址。
所述读取单元802,用于根据所述第一指示消息,从所述GPU的显存中读取所述网络包的包头信息。
所述确定单元803,用于根据所述网络包的包头信息,确定当前要对所述网络包执行的任务。
所述判断单元804,用于判断所述任务是否为所述GPU所支持的任务。
所述控制单元805,用于若所述任务是所述GPU所支持的任务,控制所述GPU执行所述任务。
所述执行单元806,用于若所述任务不是所述GPU所支持的任务,执行所述任务。
进一步的,所述判断单元804判断所述任务是否为所述GPU所支持的任务,具体包括:
确定所述任务是否为需要读取完整网络包做计算的任务。
若所述任务是读取完整网络包做计算的任务,确定所述任务是所述GPU所支持的任务;
若所述任务不是读取完整网络包做计算的任务,确定所述任务不是所述GPU所支持的任务。
进一步的,若所述任务是所述GPU所支持的任务,所述控制单元805控制所述GPU执行所述任务具体包括:
将所述任务放入所述任务对应的任务队列;
若所述任务队列满足第一条件,发送第二指示消息给所述GPU,所述第二指示消息指示所述GPU并发执行所述任务队列中的任务,其中,所述第二指示消息携带所述任务队列中的任务在所述GPU的显存中的物理地址,以使得所述GPU根据所述任务队列中的任务在所述GPU的显存中的物理地址,执行所述任务队列中的任务;
获取所述GPU执行所述任务队列中的任务后的执行结果和所述执行结果在所述GPU的显存中的物理地址。
进一步的,所述第一条件具体为所述任务队列满;
或
所述第一条件具体为所述任务队列的定时器超时。
具体的,所述网络包处理的装置800具体可以为中央处理器CPU,本发明实施例对此不作具体限定。
具体的,通过所述网络包处理的装置800进行网络包处理的方法可参考实施例一和实施例二的描述,本发明实施例对此不再赘述。
基于本发明实施例提供的所述网络包处理的装置,由于对网络包进行处理时,均可以直接访问所述GPU的显存处理所述网络包,减少了GPU处理网络协议任务时数据的拷贝次数,节省了系统资源,提高了网络包处理的效率,同时避免了将网络包写入内存时通过系统的桥接芯片组所带来的系统延时,在一定程度上降低了网卡的丢包率。
实施例五、
本发明实施例提供一种网络包处理的系统300,具体如图3所示,所述系统300包括网卡301、中央处理器CPU303、显卡302、内存304、芯片组305、PCIe总线306、DMA控制器307,其中所述显卡302包括图形处理器GPU3021和显存3022,所述网卡301和所述显卡302连接到同一个PCIe总线306,通过芯片组305和CPU303通信,包括:
网卡301接收网络包,并将其缓存在内存缓冲区的第一地址中。
网卡301根据所述内存缓冲区的第一地址和预存储的内存304缓冲区的地址与图形处理器GPU3021的显存中的物理地址的地址映射关系,确定所述网络包在所述GPU3021的显存中的物理地址。
网卡301控制直接内存访问DMA控制器307,将所述网络包写入所述确定的所述网络包在所述GPU3021的显存中的物理地址中。
网卡301发送第一指示消息给中央处理器CPU303,以使所述CPU303根据所述第一指示消息处理所述网络包,其中,所述第一指示消息携带所述确定的所述网络包在所述GPU3021的显存中的物理地址。
CPU303接收所述网卡301发送的所述第一指示消息。
CPU303根据所述第一指示消息,从所述GPU3021的显存中读取所述网络包的包头信息。
CPU303根据所述网络包的包头信息,确定当前要对所述网络包执行的任务。
CPU303判断所述任务是否为所述GPU3021所支持的任务。
若所述任务是所述GPU3021所支持的任务,CPU303控制所述GPU3021执行所述任务。
若所述任务不是所述GPU3021所支持的任务,CPU303执行所述任务。
具体的,通过所述网卡301和所述CPU303进行网络包处理的方法可参考实施例一和实施例二的描述,本发明实施例对此不再赘述。
基于本发明实施例提供的网络包处理的系统,利用统一虚拟地址空间UVA技术和图形处理器GPU直连技术可以实现网卡和GPU的显存的直通,可以将网络包从网卡直接写入GPU的显存,减少了GPU处理网络协议任务时数据的拷贝次数,节省了系统资源,提高了网络包处理的效率,同时避免了将网络包写入内存时通过系统的桥接芯片组所带来的系统延时,在一定程度上降低了网卡的丢包率。
以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应所述以权利要求的保护范围为准。