CN114371920A - 一种基于图形处理器加速优化的网络功能虚拟化系统 - Google Patents
一种基于图形处理器加速优化的网络功能虚拟化系统 Download PDFInfo
- Publication number
- CN114371920A CN114371920A CN202111664018.8A CN202111664018A CN114371920A CN 114371920 A CN114371920 A CN 114371920A CN 202111664018 A CN202111664018 A CN 202111664018A CN 114371920 A CN114371920 A CN 114371920A
- Authority
- CN
- China
- Prior art keywords
- gpu
- network function
- data packet
- service chain
- module
- 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
Images
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/48—Program initiating; Program switching, e.g. by interrupt
- G06F9/4806—Task transfer initiation or dispatching
- G06F9/4843—Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
- G06F9/4881—Scheduling strategies for dispatcher, e.g. round robin, multi-level priority queues
-
- 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/44—Arrangements for executing specific programs
- G06F9/455—Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
- G06F9/45533—Hypervisors; Virtual machine monitors
- G06F9/45558—Hypervisor-specific management and integration aspects
-
- 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/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5005—Allocation of resources, e.g. of the central processing unit [CPU] to service a request
- G06F9/5027—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals
-
- 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
-
- 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/546—Message passing systems or structures, e.g. queues
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T1/00—General purpose image data processing
- G06T1/20—Processor architectures; Processor configuration, e.g. pipelining
-
- 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/44—Arrangements for executing specific programs
- G06F9/455—Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
- G06F9/45533—Hypervisors; Virtual machine monitors
- G06F9/45558—Hypervisor-specific management and integration aspects
- G06F2009/45583—Memory management, e.g. access or allocation
-
- 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/44—Arrangements for executing specific programs
- G06F9/455—Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
- G06F9/45533—Hypervisors; Virtual machine monitors
- G06F9/45558—Hypervisor-specific management and integration aspects
- G06F2009/45595—Network integration; Enabling network access in virtual machine instances
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2209/00—Indexing scheme relating to G06F9/00
- G06F2209/54—Indexing scheme relating to G06F9/54
- G06F2209/548—Queue
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- Data Exchanges In Wide-Area Networks (AREA)
Abstract
本发明涉及一种基于图形处理器加速优化的网络功能虚拟化系统,该系统包括:GPU共享缓冲区:开辟于GPU显存中;网络功能服务链:多个虚拟网络功能模块组成所述的网络功能服务链,各个虚拟网络功能模块的运行方式采用如下三种方式中的一种:方式一、使用CPU运行,方式二、使用GPU运行,方式三、使用GPU并配合GPU共享缓冲区运行;该系统设计多流水的GPU调度模式;当网络功能服务链为异构网络功能服务链时,所述的异构网络功能服务链运行时基于异构服务链同步机制进行数据包同步。与现有技术相比,本发明减少了各VNF间内存拷贝的数据量,最大程度利用硬件资源,实现异构VNF之间的数据同步。
Description
技术领域
本发明涉及网络功能虚拟化技术领域,尤其是涉及一种基于图形处理器加速优化的网络功能虚拟化系统。
背景技术
网络功能虚拟化(Network Function Virtualization,NFV)技术能够将原本只能在特定硬件上运作的网络功能在通用平台上进行虚拟化,使得软件定义的网络功能可以代替传统的硬件网络功能,从而使得网络功能的实现、部署、管理更加便利。在NFV系统中,通过自定义的多种虚拟化网络功能(VNF)组成一条服务链,从而提供定制化的网络服务。服务链上每一个VNF的输入是其上一个VNF的输出,一条服务链在逻辑上可以被视为一条单向链表。随着网络带宽的提升,提高NFV系统的性能表现在提供高质量的网络服务中十分重要。
图形处理器(GPU)往往含有大量计算核心,非常适合用来作为并行计算加速器,比如对于在网络服务中经常采用的计算密集型加密算法,对其采用GPU进行加速能够很大程度上提升性能。因此将GPU引入网络功能虚拟化系统,用其优化服务链上的每个VNF,可以提高整个系统的性能表现。与传统CPU实现的NFV系统相比,GPU实现的NFV系统在提升性能的同时,也面临了诸多挑战。
NFV系统中每个VNF如何调用GPU直接影响了系统最终的性能表现。以往基于GPU的NFV系统中,服务链上每个VNF独立地使用GPU,每个数据包在被不同的VNF进行处理时会被重复地通过PCI-E传输给GPU显存,PCI-E的传输开销是巨大的,反复的PCI-E数据传输会分摊通过GPU加速带来的性能提升,甚至使得最终的性能表现差于基于CPU的NFV系统。因此在使用GPU加速NFV系统时,需要避免反复的PCI-E数据传输。同时,在传统NFV系统的服务链上,数据包需要在各VNF之间完整拷贝,存在大量的内存拷贝开销,也会对系统整体性能造成影响,这部分内存拷贝开销可以通过零拷贝手段进行优化。
在NFV系统中,每个VNF需要拷贝到GPU中的数据和其执行算法都不尽相同,为每个VNF都提供一套独立的实现,系统会过于庞大,难以维护。传统的NFV系统,每个VNF作为单独进程运行,在VNF利用了GPU后,处于不同GPU上下文的VNF,在不使用特定跨GPU程序进程间通讯的方法下,是无法访问到其他VNF中GPU数据的,因此需要提供一套机制能够使得不同VNF处于同一个GPU上下文,并能够以一致的方法来访问GPU操作。
VNF往往采用多线程运行模式,传统同步多线程模式下,VNF需要等待一批数据包完成GPU操作后,再针对下一批数据包进行处理,且该模式下无法交替运行CPU和GPU,运行GPU操作时,CPU只能阻塞等待,硬件资源利用率低,会严重影响系统的整体性能。因此需要一套高效的VNF多线程运行机制,最大程度利用硬件资源。
针对一些IO密集型的VNF,比如路由器,使用CPU进行计算会比使用GPU效率更高,因此每个VNF需要能够按照计算密集或者IO密集的特点,选择合适的设备运行。当服务链上出现了异构情况时,一部分VNF运行在CPU上,于主机内存中修改数据包,而另一部分VNF运行在GPU上,于GPU显存中修改数据包,由此可能会出现数据不一致的问题。如果直接粗暴地将整个数据包在VNF之间进行同步虽然能够解决该问题,但是受限于PCI-E传输,会影响系统的整体性能,因此需要一套异构VNF服务链数据同步机制。
发明内容
本发明的目的就是为了克服上述现有技术存在的缺陷而提供一种基于图形处理器加速优化的异构网络功能虚拟化系统。
本发明的目的可以通过以下技术方案来实现:
一种基于图形处理器加速优化的网络功能虚拟化系统,该系统包括:
GPU共享缓冲区:开辟于GPU显存中;
网络功能服务链:多个虚拟网络功能模块组成所述的网络功能服务链,各个虚拟网络功能模块的运行方式采用如下三种方式中的一种:方式一、使用CPU运行,方式二、使用GPU运行,方式三、使用GPU并配合GPU共享缓冲区运行;
该系统设计多流水的GPU调度模式;
当网络功能服务链中至少包括2种不同运行方式的虚拟网络功能模块时,所述的网络功能服务链称作异构网络功能服务链,所述的异构网络功能服务链运行时基于异构服务链同步机制进行数据包同步。
优选地,所述的系统采用多进程多线程混合编程模型,每个虚拟网络功能模块和网络功能虚拟化系统本身作为单独进程,两者之间通过无锁队列和共享内存交互,每个虚拟网络功能模块采用多线程编程模式。
优选地,每个虚拟网络功能模块包括两类线程:
CPU阶段处理线程:负责包括数据包的接收、转发、预处理以及后处理工作;
GPU阶段处理线程:负责包括向GPU调用执行进程发送具体的GPU操作请求。
优选地,所述的CPU阶段处理线程和GPU阶段处理线程采用三缓冲区交替处理的方式,所述的三缓冲区包括CPU阶段处理线程执行处理的预处理缓冲区和后处理缓冲区,以及GPU阶段处理线程执行处理的GPU处理缓冲区。
优选地,所述的异构服务链同步机制具体为:
设置独立于网络功能虚拟化系统的运行计划生成器,所述的运行计划生成器基于网络功能服务链的配置确定每个虚拟网络功能模块的运行方式以及具体的运行方案,所述的运行方案包括读写数据域,同步数据域,GPU共享缓冲区使用标志,虚拟网络功能算法输入输出方式,虚拟网络功能模块基于各自的运行方案得到满足当前运行方案的GPU核函数,当异构网络功能服务链中的虚拟网络功能模块依次运行时,通过执行GPU核函数进行GPU共享缓冲区和CPU内存中的数据包的同步。
优选地,该系统的运行方法为:
数据包收发模块接收外部设备的数据包,GPU拷贝线程模块将数据包拷贝至GPU共享缓冲区和CPU内存;
各个虚拟网络功能模块基于确定的运行方式以及具体的运行方案运行,在运行过程中,基于异构服务链同步机制进行数据包同步,直至最后一个虚拟网络功能模块完成运行;
将处理后的数据包通过数据包收发模块发送出去。
优选地,当网络功能服务链中的虚拟网络功能模块均工作于方式三时,具体运行方法为:
数据包收发模块接收外部设备的数据包,GPU拷贝线程模块将数据包拷贝至GPU共享缓冲区并确定数据包指针
GPU拷贝线程模块将数据包指针信息发送至网络功能服务链上的首个虚拟网络功能模块;
虚拟网络功能模块将数据包指针信息和GPU调用请求发送给GPU调度器执行GPU操作,网络功能服务链上的虚拟网络功能模块依次进行数据包处理并传递数据包指针信息;
网络功能服务链的GPU调用请求完成后,GPU拷贝线程模块将GPU共享缓冲区处理后的数据包拷贝至数据包收发模块并发送出去。
优选地,GPU拷贝线程模块每次接收固定个数的数据包作为批,在数据包拷贝到GPU共享缓冲区前,会根据当前批数据包的平均大小,将一组批构成块,以块为单位将数据包拷贝进GPU共享缓冲区中,同时记录下每个数据包在GPU共享缓冲区中的数据包指针信息。
优选地,每个虚拟网络功能模块以一个批的大小作为处理数据的最小单位。
优选地,当数据包经过网络功能服务链处理后,数据包转发模块接收到最后一个虚拟网络功能模块传递的数据包批的指针信息后,等待该数据包批所属块的所有批都被接收到后,再通过GPU拷贝线程模块将数据包块一起从GPU共享缓冲区中拷贝至拟网络功能模块。
与现有技术相比,本发明具有如下优点:
本发明通过为多个虚拟网络功能模块(VNF)提供GPU共享内存缓冲区的方法来解决多个VNF单独占用GPU时造成的重复PCI-E数据拷贝,减少了各VNF间内存拷贝的数据量,并保证了数据包顺序性不被破坏,同时提出了多流水线的GPU调度模式,让多个虚拟网络功能模块(VNF)共享一个GPU上下文,通过多流水线调度使用GPU,让GPU和CPU可以重叠运行,最大程度利用硬件资源,在此基础上,针对异构网络功能服务链,提出了异构服务链同步机制,在每个虚拟网络功能模块(VNF)能够以最优方式运行的同时,以最小的代价,实现异构虚拟网络功能模块(VNF)之间的数据同步。
附图说明
图1为本发明实施例中系统的整体架构图
图2是本发明实施例中GPU共享缓冲区架构图;
图3是本发明实施例中多流水线GPU调度示意图。
具体实施方式
下面结合附图和具体实施例对本发明进行详细说明。注意,以下的实施方式的说明只是实质上的例示,本发明并不意在对其适用物或其用途进行限定,且本发明并不限定于以下的实施方式。
实施例
如图1所示,本实施例提供一种基于图形处理器加速优化的网络功能虚拟化系统,该系统包括:
GPU共享缓冲区:开辟于GPU显存中;
网络功能服务链:多个虚拟网络功能模块组成网络功能服务链,各个虚拟网络功能模块的运行方式采用如下三种方式中的一种:方式一、使用CPU运行,方式二、使用GPU运行,方式三、使用GPU并配合GPU共享缓冲区运行;
该系统设计多流水的GPU调度模式;
当网络功能服务链中至少包括2种不同运行方式的虚拟网络功能模块时,网络功能服务链称作异构网络功能服务链,异构网络功能服务链运行时基于异构服务链同步机制进行数据包同步。
本发明系统通过为个多虚拟网络功能模块(VNF)提供GPU共享内存缓冲区的方法来解决多个VNF单独占用GPU时造成的重复PCI-E数据拷贝,减少了各VNF间内存拷贝的数据量,并保证了数据包顺序性不被破坏。同时,该系统采用了了多流水线的GPU调度模式,让多个VNF共享一个GPU上下文,通过多流水线调度使用GPU,让GPU和CPU可以重叠运行,最大程度利用硬件资源。针对异构服务链,提出了异构VNF服务链同步机制,在每个VNF能够以最优方式运行的同时,以最小的代价,实现异构VNF之间的数据同步。
其中,多流水线的GPU调度模式,通过多进程与多线程结合的编程模型,配合三缓冲区流水线,能够让VNF高效地利用GPU计算的同时让处理器(CPU)能够并行处理读写(IO)以及其他任务,避免同步执行的延迟开销。
具体地:
系统采用多进程多线程混合编程模型,每个虚拟网络功能模块和网络功能虚拟化系统本身作为单独进程,两者之间通过无锁队列和共享内存交互,每个虚拟网络功能模块采用多线程编程模式。每个虚拟网络功能模块包括两类线程:CPU阶段处理线程:负责包括数据包的接收、转发、预处理以及后处理工作;GPU阶段处理线程:负责包括向GPU调用执行进程发送具体的GPU操作请求。CPU阶段处理线程和GPU阶段处理线程采用三缓冲区交替处理的方式,三缓冲区包括CPU阶段处理线程执行处理的预处理缓冲区和后处理缓冲区,以及GPU阶段处理线程执行处理的GPU处理缓冲区。
异构VNF服务链同步机制,在不同设备运行VNF的情况下,通过由深度搜索多叉树实现的运行计划生成器(Running Plan Generator)和由动态预编译命令实现的动态内核(Dynamic Kernel)来解决服务链上由于异构VNF带来的数据不一致问题并减少VNF之间同步数据带来的拷贝开销。
具体地,设置独立于网络功能虚拟化系统的运行计划生成器,运行计划生成器基于网络功能服务链的配置确定每个虚拟网络功能模块的运行方式以及具体的运行方案,运行方案包括读写数据域,同步数据域,GPU共享缓冲区使用标志,虚拟网络功能算法输入输出方式,虚拟网络功能模块基于各自的运行方案得到满足当前运行方案的GPU核函数,当异构网络功能服务链中的虚拟网络功能模块依次运行时,通过执行GPU核函数进行GPU共享缓冲区和CPU内存中的数据包的同步。
以下对该系统的运行方法进行具体说明:
该系统整体运行过程为:
数据包收发模块接收外部设备的数据包,GPU拷贝线程模块将数据包拷贝至GPU共享缓冲区和CPU内存;
各个虚拟网络功能模块基于确定的运行方式以及具体的运行方案运行,在运行过程中,基于异构服务链同步机制进行数据包同步,直至最后一个虚拟网络功能模块完成运行;
将处理后的数据包通过数据包收发模块发送出去。
在一个优选的实施方式,当网络功能服务链中的虚拟网络功能模块均工作于方式三时,具体运行方法为:
数据包收发模块接收外部设备的数据包,GPU拷贝线程模块将数据包拷贝至GPU共享缓冲区并确定数据包指针
GPU拷贝线程模块将数据包指针信息发送至网络功能服务链上的首个虚拟网络功能模块;
虚拟网络功能模块将数据包指针信息和GPU调用请求发送给GPU调度器执行GPU操作,网络功能服务链上的虚拟网络功能模块依次进行数据包处理并传递数据包指针信息;
网络功能服务链的GPU调用请求完成后,GPU拷贝线程模块将GPU共享缓冲区处理后的数据包拷贝至数据包收发模块并发送出去。
GPU拷贝线程模块每次接收固定个数的数据包作为批,在数据包拷贝到GPU共享缓冲区前,会根据当前批数据包的平均大小,将一组批构成块,以块为单位将数据包拷贝进GPU共享缓冲区中,同时记录下每个数据包在GPU共享缓冲区中的数据包指针信息。
每个虚拟网络功能模块以一个批的大小作为处理数据的最小单位。
当数据包经过网络功能服务链处理后,数据包转发模块接收到最后一个虚拟网络功能模块传递的数据包批的指针信息后,等待该数据包批所属块的所有批都被接收到后,再通过GPU拷贝线程模块将数据包块一起从GPU共享缓冲区中拷贝至拟网络功能模块。
以下,对本系统的具体设计实例进行说明:
本实施例中,通过实现的GPU RX(GPU数据接收模块)来负责将数据包按照一定的规则拷贝到GPU显存中。GPU RX模块通过8个线程接收由网卡收发数据模块传递过来的数据包描述符,每个线程一次接受128个描述符。在本实施例中,将GPU RX一次接收的数据包个数128定义为单位批(Unit),作为系统收发数据、GPU拷贝数据、VNF处理数据包的最小单位。GPU RX接收到一个单位批的数据,通过对其中每个数据包描述符进行解析操作,将数据包中VNF需要的数据域,包括源IP地址、目的IP地址、源端口、目的端口以及数据包负载等取出后缓存在缓冲区中。
GPU RX初始化时,默认一次将一个单位批的数据包拷贝至GPU,在接收到单位批进行解析的同时,计算该单位批数据包的平均大小,根据该值来决定一次拷贝到GPU中的单位批个数,在本实施例中将一次拷贝进GPU中的单位批称之为块(Block),经过一次GPU拷贝后,从默认值开始,块中的单位批重新计数。在本实施例中单位批平均数据包大小S和块中的单位批个数N呈以下关系:N=2048/S。
为了确保后续从GPU拷贝回来的数据包与拷贝进GPU时的顺序是一致的,在解析单位批时,会记录下单位批首数据包在GPU显存中对应的位置、其大小、其在块中的序号等元数据,用于系统最后阶段的处理。
根据GPU RX运行线程数量,将GPU共享缓冲区均分成等量个子区域,并记录下每个子区域的起始GPU地址位置。根据每个线程中处理数据包的大小,记录下每个数据包在对应线程GPU子区域中数据包大小偏移量的GPU地址位置,并将其保存在数据包描述符中作为该数据包在GPU中的地址位置。
将每个处理完毕后的数据包描述符标志设为NF_ACTION_TONF,表示该数据包在后续过程中需要被处理。当块中的单位批个数达到指定值后,GPU RX将缓冲区中数据拷贝到对应GPU内存中的子区域,并更新当前线程子区域的GPU指针位置。每个线程的GPU子区域均为环形缓冲区。等待GPU RX拷贝完毕后,将数据包的描述符通过2个环形队列传递给VNF,交由后续服务链处理。在本实施例中,GPU RX会根据VNF开始使用GPU共享缓冲区的标志插入到服务链中,因此GPU RX可能会从服务链中间的某个位置开始工作。
VNF接受到数据包描述符后,预处理数据,并通过NF Request Ring向GPU调用执行进程发出GPU执行请求,等待NF Response Ring的响应到达后,对数据进行后处理,再将数据包描述符传递给下一个VNF。
当服务链上所有的VNF均处理完数据后,将数据包描述符传递给GPU TX模块,在本实施例中,该模块分为了两类线程:TX CPU线程和TX GPU线程。TX CPU线程运行在8路线程上,接收来自服务链的数据,每次接收一个单位批的数据包描述符并进行缓存。如果对每次接收到的单位批进行GPU拷贝,那么PCI-E传输的频率会过高,影响系统的整体性能,因此在本实施例中,通过一次PCI-E传输一个块中多个单位批的数据,从而提高PCI-E利用率。当TXCPU线程接收到一个单位批后,会向TX GPU线程发送GPU拷贝请求,其中包含了该单位批的元数据,TX GPU线程将该单位批标记为COMPLETED,并检查该单位批所属块下的其他单位批是否都已经被标记为COMPLETED,通过检查则将该块拷贝到主机内存,通过偏移量记录下每个单位批对应数据在主机内存上的位置,并向对应TX CPU发出响应。由于一个块下的所有数据在GPU内存中是连续的,因此可以确保拷贝会CPU内存的所有数据也是连续的。TX CPU线程接收到响应后,对拷贝回来的单位批进行后处理与转发操作。在本实施例中,如果遇到需要丢弃数据的情况,那么会在数据包描述符中指定丢弃标志位,在通过网卡转发前,选择是否丢弃,而不是在服务链当中进行丢弃,通过这种方式能确保服务链上处理的数据在GPU内存中是连续的。
如附图2所示,服务链上所有VNF共享一块GPU共享缓冲区。GPU内存使用时是必须是2^n字节对齐的,因此在分配GPU内存时,使其满足16字节对齐。每个VNF在预处理阶段将每个数据包在GPU RX中保存在描述符中的GPU内存地址gpointer取出,并将其拷贝到GPU内存中。在GPU上执行Kernel函数时,通过gpointer来获得GPU共享缓冲区中保存的每个数据包。
如附图1所示,GPU调用执行进程作为VNF与GPU之间的中间层。其不断轮询一个全局的VNF请求队列,获得每个VNF执行GPU的请求,根据请求的种类执行对应的操作。在本实施例中,GPU执行代理器的主要执行请求分别为:
1.REQ_HOST_MALLOC,申请HOST上锁页内存空间
2.REQ_GPU_MALLOC,申请GPU上内存空间
3.REQ_GPU_MEMCPY_HTOD_ASYNC,异步将数据从主机拷贝到GPU
4.REQ_GPU_MEMCPY_DTOH_ASYNC,异步将数据从GPU拷贝回主机
5.REQ_GPU_LAUNCH_STREAM_ASYNC,异步调用GPU上的Kernel函数
除了上述请求之外,还有一些用于VNF通知和同步的请求。所有的VNF都经由GPU调用执行进程处在同一个CUDA上下文中。每个NF需要通过NF Request Ring向GPU调用执行进程发送GPU执行请求。每个NF包含一个NF Response Ring,用来获取GPU执行响应。GPU调用执行进程中每一步具体的GPU执行都是用CUDA Driver API来实现,每个执行完毕后,会通过CUDA stream回调函数去记录下当前执行中所花费的时间。
在VNF执行流水线中,每个VNF的运行步骤被抽象为了预处理,HtoD拷贝,Kernel函数调用,DtoH拷贝,后处理。其中预处理阶段负责解析出每个数据包对应在GPU位置的指针gpointer,后处理阶段负责对数据包后续处理的标志信息进行更新。HtoD拷贝主要是将数据包描述符中的GPU指针gpointer拷贝给GPU,DtoH拷贝主要是将数据包描述符的标志信息比如丢弃标志拷贝回来。上述VNF执行的5个过程被抽象成了5个接口:nf_preprocess、nf_htod_memcpy、nf_launch_kernel、nf_dtoh_memcpy、nf_postprcoess。这5个接口由用户自己根据每个VNF的特点自行实现。每个接口会通过NF Request Ring向GPU调用执行进程发送执行请求并执行。每个VNF在GPU上进行运算的算法需要用户编写在一个.cu文件中,通过nvcc编译成.ptx后通过cuModuleLoad的方式加载到系统中,再经由nf_launch_kernel调用后交给GPU调用执行进程处理。
如附图3所示,每个VNF都运行在了2类线程上,其中1类线程处理VNF的预处理阶段和后处理阶段,运行在CPU上,称之为CPU阶段执行线程;另1类线程处理HtoD拷贝,Kernel调用,DtoH拷贝,运行在GPU上,称之为GPU阶段执行线程。这2类线程构成一个VNF的处理流水线,其具体的执行线程数,用户可根据需要自行设置。本实施例中每条流水线通过2个线程来执行。
每个VNF的1个处理流水线中包含3个缓冲区,根据每个缓冲区的状态标志state来判断目前的执行阶段,完成当前执行阶段后更新state进入下一个阶段处理。3个缓冲区可以同时覆盖流水线执行的预处理阶段、GPU处理、后处理阶段,从而提高硬件利用率。
针对异构服务链的情况下,通过VNF运行方案生成器和动态内核函数来解决CPU-GPU之间的数据同步问题。在本实施例中,系统读入事先定义的NFVs.json文件,该文件中给出了服务链中VNF的个数,每个VNF读写数据域的标志,运行设备标志。开发者可以通过该文件去定义VNF使用CPU运行或者GPU运行。
在本实施例中,所有的VNF一共有三种运行方式:使用CPU运行;使用GPU运行;使用GPU并且配合GPU共享缓冲区运行。之所以要对GPU设备再划分,是因为有些VNF比如路由器,仅使用GPU所需要拷贝的数据比使用了GPU共享缓冲区更少。在运行方案生成器中通过VNF读入数据的方式、写回数据的方式以及使用GPU共享缓冲区的标志来囊括上述三种运行方式,VNF读入数据一共有两种标识:NEEDED和GPOINTER,分别表示运行时直接使用所需要的数据域和运行时使用GPU指针。VNF写回数据也有两种标识:NEEDED和NONE,分别表示写回所需要的数据域和不写回数据。通过上述定义排列组合后易知,每个VNF有四种读写运行方式,而其中读入数据为NEEDED,写回数据为NONE的方式是错误的,因为读入数据为NEEDED的情况下,不使用GPU共享缓冲区,此时需要将数据经过CPU或者GPU处理后,再拷贝写回到主机内存中,因此每个VNF会有三种运行方式:
1.读入数据为NEEDED写回数据为NEEDED
2.读入数据为GPOINTER写回数据为NEEDED
3.读入数据为GPOINTER写回数据为NONE
对于一个给定的服务链,根据上述三种运行方式,生成一颗三叉树。在本实施例中,这里的Cost是指1514字节数据包下,不同数据域拷贝所耗费的延迟。通过对上述生成的三叉树进行剪枝,可以得到服务链上每个VNF是否使用GPU共享缓冲区以及最小开销的同步数据域标志,从而能够确定其最优的运行方式。具体系统的剪枝主要通过对树进行深度搜索遍历,将从根节点开始到叶子节点上Cost最小的路径搜索出来,作为最优的运行方案,输出成一个新的json文件。
在本实施例中,动态内核是指根据上述生成的json文件,使得每个VNF的预处理,后处理以及GPU运行核函数能够按照特定模式运行。具体来说,运行方案生成器中的配套脚本读入该json文件后,生成一个特定的头文件,其中定义了一系列define信息,表示了每个VNF的执行方式,通过对每个VNF再编译的方式使其能够按照json文件中规定的模式运行。
上述实施方式仅为例举,不表示对本发明范围的限定。这些实施方式还能以其它各种方式来实施,且能在不脱离本发明技术思想的范围内作各种省略、置换、变更。
Claims (10)
1.一种基于图形处理器加速优化的网络功能虚拟化系统,其特征在于,该系统包括:
GPU共享缓冲区:开辟于GPU显存中;
网络功能服务链:多个虚拟网络功能模块组成所述的网络功能服务链,各个虚拟网络功能模块的运行方式采用如下三种方式中的一种:方式一、使用CPU运行,方式二、使用GPU运行,方式三、使用GPU并配合GPU共享缓冲区运行;
该系统设计多流水的GPU调度模式;
当网络功能服务链中至少包括2种不同运行方式的虚拟网络功能模块时,所述的网络功能服务链称作异构网络功能服务链,所述的异构网络功能服务链运行时基于异构服务链同步机制进行数据包同步。
2.根据权利要求1所述的一种基于图形处理器加速优化的网络功能虚拟化系统,其特征在于,所述的系统采用多进程多线程混合编程模型,每个虚拟网络功能模块和网络功能虚拟化系统本身作为单独进程,两者之间通过无锁队列和共享内存交互,每个虚拟网络功能模块采用多线程编程模式。
3.根据权利要求2所述的一种基于图形处理器加速优化的网络功能虚拟化系统,其特征在于,每个虚拟网络功能模块包括两类线程:
CPU阶段处理线程:负责包括数据包的接收、转发、预处理以及后处理工作;
GPU阶段处理线程:负责包括向GPU调用执行进程发送具体的GPU操作请求。
4.根据权利要求3所述的一种基于图形处理器加速优化的网络功能虚拟化系统,其特征在于,所述的CPU阶段处理线程和GPU阶段处理线程采用三缓冲区交替处理的方式,所述的三缓冲区包括CPU阶段处理线程执行处理的预处理缓冲区和后处理缓冲区,以及GPU阶段处理线程执行处理的GPU处理缓冲区。
5.根据权利要求1所述的一种基于图形处理器加速优化的网络功能虚拟化系统,其特征在于,所述的异构服务链同步机制具体为:
设置独立于网络功能虚拟化系统的运行计划生成器,所述的运行计划生成器基于网络功能服务链的配置确定每个虚拟网络功能模块的运行方式以及具体的运行方案,所述的运行方案包括读写数据域,同步数据域,GPU共享缓冲区使用标志,虚拟网络功能算法输入输出方式,虚拟网络功能模块基于各自的运行方案得到满足当前运行方案的GPU核函数,当异构网络功能服务链中的虚拟网络功能模块依次运行时,通过执行GPU核函数进行GPU共享缓冲区和CPU内存中的数据包的同步。
6.根据权利要求5所述的一种基于图形处理器加速优化的网络功能虚拟化系统,其特征在于,该系统的运行方法为:
数据包收发模块接收外部设备的数据包,GPU拷贝线程模块将数据包拷贝至GPU共享缓冲区和CPU内存;
各个虚拟网络功能模块基于确定的运行方式以及具体的运行方案运行,在运行过程中,基于异构服务链同步机制进行数据包同步,直至最后一个虚拟网络功能模块完成运行;
将处理后的数据包通过数据包收发模块发送出去。
7.根据权利要求1所述的一种基于图形处理器加速优化的网络功能虚拟化系统,其特征在于,当网络功能服务链中的虚拟网络功能模块均工作于方式三时,具体运行方法为:
数据包收发模块接收外部设备的数据包,GPU拷贝线程模块将数据包拷贝至GPU共享缓冲区并确定数据包指针
GPU拷贝线程模块将数据包指针信息发送至网络功能服务链上的首个虚拟网络功能模块;
虚拟网络功能模块将数据包指针信息和GPU调用请求发送给GPU调度器执行GPU操作,网络功能服务链上的虚拟网络功能模块依次进行数据包处理并传递数据包指针信息;
网络功能服务链的GPU调用请求完成后,GPU拷贝线程模块将GPU共享缓冲区处理后的数据包拷贝至数据包收发模块并发送出去。
8.根据权利要求7所述的一种基于图形处理器加速优化的网络功能虚拟化系统,其特征在于,GPU拷贝线程模块每次接收固定个数的数据包作为批,在数据包拷贝到GPU共享缓冲区前,会根据当前批数据包的平均大小,将一组批构成块,以块为单位将数据包拷贝进GPU共享缓冲区中,同时记录下每个数据包在GPU共享缓冲区中的数据包指针信息。
9.根据权利要求8所述的一种基于图形处理器加速优化的网络功能虚拟化系统,其特征在于,每个虚拟网络功能模块以一个批的大小作为处理数据的最小单位。
10.根据权利要求7所述的一种基于图形处理器加速优化的网络功能虚拟化系统,其特征在于,当数据包经过网络功能服务链处理后,数据包转发模块接收到最后一个虚拟网络功能模块传递的数据包批的指针信息后,等待该数据包批所属块的所有批都被接收到后,再通过GPU拷贝线程模块将数据包块一起从GPU共享缓冲区中拷贝至拟网络功能模块。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111664018.8A CN114371920A (zh) | 2021-12-31 | 2021-12-31 | 一种基于图形处理器加速优化的网络功能虚拟化系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111664018.8A CN114371920A (zh) | 2021-12-31 | 2021-12-31 | 一种基于图形处理器加速优化的网络功能虚拟化系统 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN114371920A true CN114371920A (zh) | 2022-04-19 |
Family
ID=81142063
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202111664018.8A Pending CN114371920A (zh) | 2021-12-31 | 2021-12-31 | 一种基于图形处理器加速优化的网络功能虚拟化系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN114371920A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117215802A (zh) * | 2023-11-07 | 2023-12-12 | 四川并济科技有限公司 | 一种针对虚拟化网络功能的gpu管理及调用方法 |
-
2021
- 2021-12-31 CN CN202111664018.8A patent/CN114371920A/zh active Pending
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117215802A (zh) * | 2023-11-07 | 2023-12-12 | 四川并济科技有限公司 | 一种针对虚拟化网络功能的gpu管理及调用方法 |
CN117215802B (zh) * | 2023-11-07 | 2024-02-09 | 四川并济科技有限公司 | 一种针对虚拟化网络功能的gpu管理及调用方法 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11010681B2 (en) | Distributed computing system, and data transmission method and apparatus in distributed computing system | |
US8752064B2 (en) | Optimizing communication of system call requests | |
US10026145B2 (en) | Resource sharing on shader processor of GPU | |
KR101961396B1 (ko) | 이종 처리 디바이스의 동적 작업 분할 | |
WO2021088419A1 (zh) | 一种多业务请求进程调用fpga设备的方法及相关装置 | |
US10402223B1 (en) | Scheduling hardware resources for offloading functions in a heterogeneous computing system | |
US9842083B2 (en) | Using completion queues for RDMA event detection | |
US20110296431A1 (en) | Method and apparatus for efficient helper thread state initialization using inter-thread register copy | |
CN103221936A (zh) | 一种用于处理集群的共享功能存储器电路 | |
US11281967B1 (en) | Event-based device performance monitoring | |
Potluri et al. | Extending openSHMEM for GPU computing | |
US10146575B2 (en) | Heterogeneous enqueuing and dequeuing mechanism for task scheduling | |
US20210042155A1 (en) | Task scheduling method and device, and computer storage medium | |
JP2015504226A (ja) | マルチスレッドコンピューティング | |
Robson et al. | Runtime coordinated heterogeneous tasks in Charm++ | |
US9830157B2 (en) | System and method for selectively delaying execution of an operation based on a search for uncompleted predicate operations in processor-associated queues | |
US8959319B2 (en) | Executing first instructions for smaller set of SIMD threads diverging upon conditional branch instruction | |
CN110245024B (zh) | 静态存储块的动态分配系统及其方法 | |
US11467946B1 (en) | Breakpoints in neural network accelerator | |
US20120194526A1 (en) | Task Scheduling | |
CN114371920A (zh) | 一种基于图形处理器加速优化的网络功能虚拟化系统 | |
KR20140004654A (ko) | 처리 디바이스의 동기 동작을 위한 방법 및 시스템 | |
US10198784B2 (en) | Capturing commands in a multi-engine graphics processing unit | |
US11366690B2 (en) | Scheduling commands in a virtual computing environment | |
US9170820B2 (en) | Syscall mechanism for processor to processor calls |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination |