一种半虚拟化网卡内核加速模块升级方法和装置与流程

文档序号:12469583阅读:225来源:国知局
一种半虚拟化网卡内核加速模块升级方法和装置与流程

本申请涉及计算机领域,尤其涉及一种半虚拟化网卡内核加速模块升级方法和装置。



背景技术:

半虚拟化网卡内核加速模块(vhost-net)是基于内核的虚拟机(KVM,Kernel-based Virtual Machine)的重要组件,vhost-net模块可以提升KVM虚拟机网络约30%的性能。

现有技术中,对于vhost-net模块升级时,需要将虚拟机关机,移除原vhost-net模块后,插入新的vhost-net模块,再重新启动虚拟机。这种vhost-net模块的升级方式必须暂时关闭虚拟机,关闭期间会造成服务中断,对于服务提供商和客户都会带来不良影响。



技术实现要素:

本申请的一个目的是提供一种半虚拟化网卡内核加速模块升级方法和装置。

根据本申请的一个方面,提供了一种半虚拟化网卡内核加速模块升级方法,包括:

将第一半虚拟化网卡内核加速模块的网络流量切换至用户态进行传输;

移除第一半虚拟化网卡内核加速模块;

插入第二半虚拟化网卡内核加速模块;

将用户态进行传输的网络流量切换至第二半虚拟化网卡内核加速模块进行传输。

根据本申请的另一个方面,提供了一种半虚拟化网卡内核加速模块升级装置,包括:

第一模块,用于将第一半虚拟化网卡内核加速模块的网络流量切换至 用户态进行传输;

第二模块,用于移除第一半虚拟化网卡内核加速模块;

第三模块,用于插入第二半虚拟化网卡内核加速模块;

第四模块,用于将用户态进行传输的网络流量切换至第二半虚拟化网卡内核加速模块进行传输。

与现有技术相比,本申请在对半虚拟化网卡内核加速模块进行升级时,首先将网络流量由内核态切换至用户态进行传输,然后将升级后的半虚拟化网卡内核加速模块插入系统,再将原先由用户态转发的网络流量切换回内核态由新的半虚拟化网卡内核加速模块进行转发,不需要中断服务,网络流量在内核态和用户态之间的切换不会造成虚拟机网络流量的波动,实现半虚拟化网卡内核加速模块的升级对于用户而言是无法感知的,不会影响用户体验。

附图说明

通过阅读参照以下附图所作的对非限制性实施例所作的详细描述,本申请的其它特征、目的和优点将会变得更明显:

图1示出根据本申请一个方面的半虚拟化网卡内核加速模块升级装置的结构示意图;

图2示出根据本申请又一个方面的半虚拟化网卡内核加速模块升级装置的结构示意图;

图3示出根据本申请一个方面的半虚拟化网卡内核加速模块升级方法的流程示意图;

图4示出根据本申请又一个方面的半虚拟化网卡内核加速模块升级方法的流程示意图。

附图中相同或相似的附图标记代表相同或相似的部件。

具体实施方式

下面结合附图对本申请作进一步详细描述。

图1示出根据本申请一个方面的半虚拟化网卡内核加速模块升级装置 的结构示意图。如图1所示,该半虚拟化网卡内核加速模块升级装置1包括:第一模块11、第二模块12、第三模块13和第四模块14。

其中,第一模块11,用于将第一半虚拟化网卡内核加速模块的网络流量切换至用户态进行传输;第二模块12,用于移除第一半虚拟化网卡内核加速模块;第三模块13,用于插入第二半虚拟化网卡内核加速模块;第四模块14,用于将用户态进行传输的网络流量切换至第二半虚拟化网卡内核加速模块进行传输。

在此,半虚拟化网卡内核加速模块可以采用KVM虚拟化的vhost-net模块,vhost-net模块用于机器虚拟器(QEMU)半虚拟化网卡(virtio-net)加速。第一半虚拟化网卡内核加速模块是指升级前的vhost-net模块,第二半虚拟化网卡内核加速模块是指升级后新的vhost-net模块。第一模块11将旧的vhost-net模块的网络流量切换至用户态进行传输。在用户态下,虚拟机在发送或接收数据包时,首先陷入内核态,然后再返回到用户态的QEMU(机器虚拟器)进程进行处理,最后通过虚拟以太网网络设备(TAP设备)经由网桥、物理网卡进行网络数据包的发送或接收。在将旧的vhost-net模块的网络流量切换至用户态进行转发后,第二模块12可以移除旧的vhost-net模块,而网络服务不被中断。此后第三模块13插入新的vhost-net模块。第四模块14将用户态进行转发的网络流量切换至内核态由升级后新的vhost-net模块进行传输。内核态下,虚拟机陷入内核态后,不需要再返回到用户态,而由新的vhost-net模块的内核线程进行处理,通过虚拟以太网网络设备(TAP设备)经由网桥、物理网卡进行数据包的发送或接收。通过用户态和内核态的互相切换,从而实现了在移除旧的vhost-net模块并插入新的升级后的vhost-net模块时,不会中断网络服务。

图2示出根据本申请又一个方面的半虚拟化网卡内核加速模块升级装置的结构示意图。如图2所示,该半虚拟化网卡内核加速模块升级装置1包括:第一模块11、第二模块12、第三模块13和第四模块14。

其中,第一模块11,用于将第一半虚拟化网卡内核加速模块的网络流量切换至用户态进行传输;第二模块12,用于移除第一半虚拟化网卡内核加速模块;第三模块13,用于插入第二半虚拟化网卡内核加速模块;第四 模块14,用于将用户态进行传输的网络流量切换至第二半虚拟化网卡内核加速模块进行传输。

在此,半虚拟化网卡内核加速模块可以采用KVM虚拟化的vhost-net模块,vhost-net模块用于机器虚拟器(QEMU)半虚拟化网卡(virtio-net)加速。第一半虚拟化网卡内核加速模块是指升级前旧的vhost-net模块,第二半虚拟化网卡内核加速模块是指升级后新的vhost-net模块。第一模块11将旧的vhost-net模块的网络流量切换至用户态进行传输。在用户态下,虚拟机在发送或接收数据包时,首先陷入内核态,然后再返回到用户态的QEMU进程进行处理,最后通过虚拟以太网网络设备(TAP设备)经由网桥、物理网卡进行数据包的发送或接收。在将旧的vhost-net模块的网络流量切换至用户态进行转发后,第二模块12可以移除旧的vhost-net模块,而网络服务不被中断。此后第三模块13插入新的vhost-net模块。第四模块14将用户态进行转发的网络流量切换至内核态由升级后新的vhost-net模块进行传输。内核态下,虚拟机陷入内核态后,不需要再返回到用户态,而由新的vhost-net模块的内核线程进行处理,通过TAP设备(虚拟以太网网络设备)经由网桥、物理网卡进行数据包的发送或接收。通过用户态和内核态的互相切换,从而实现了在移除旧的vhost-net模块并插入新的升级后的vhost-net模块时,不会中断网络服务。

具体地,第一模块11包括:第一一子模块111、第一二子模块112和第一三子模块113。

其中,第一一子模块111,用于机器虚拟器进程获取共享内存的使用状态。第一二子模块112,用于所述机器虚拟器进程控制对共享内存中网络数据包的发送和/或接收。第一三子模块113,用于停止所述第一半虚拟化网卡内核加速模块内核线程的轮询。

在此,第一一子模块111使QEMU进程获取共享内存(vring)的使用状态,第一二子模块112使QEMU进程控制对共享内存中网络数据包的发送和/或接收。第一三子模块113停止旧的vhost-net模块内核线程在TAP设备上的收/发网络数据包的轮询(poll),将旧的vhost-net模块的网络流量切换至用户态进行处理,为移除旧的vhost-net模块做好准备。其中, 共享内存用于缓存收/发网络数据包,每个半虚拟化网卡对应一个vhost-net模块内核线程。

可选地,第二模块12还用于:清理第一半虚拟化网卡内核加速模块的资源。

在此,第二模块12释放机器虚拟器中用于描述旧的vhost-net模块的数据结构内存,这些数据结构及其他代码用于将vhost-net模块以设备的形式呈现给机器虚拟机使用。此后,第二模块12关闭旧的vhost-net模块的用户态接口导出设备的句柄(/dev/vhost-net),以彻底移除旧的vhost-net模块。

可选地,第三模块13还用于:初始化第二半虚拟化网卡内核加速模块的资源。

在此,在插入新的vhost-net模块后,第三模块13打开新的vhost-net模块的用户态接口导出设备的句柄,并调用用户态下QEMU接口,在内存中初始化描述新的vhost-net模块的数据结构。

具体地,第四模块14包括:第四一子模块141、第四二子模块142、第四三子模块143和第四四子模块144。

其中,第四一子模块141,用于第二半虚拟化网卡内核加速模块创建内核线程;第四二子模块142,用于第二半虚拟化网卡内核加速模块内核线程获取共享内存的使用状态;第四三子模块143,用于第二半虚拟化网卡内核加速模块内核线程控制对共享内存中网络数据包的发送和/或接收;第四四子模块144,用于开启所述第二半虚拟化网卡内核加速模块内核线程的轮询。

在此,第四一子模块141使初始化后的新的vhost-net模块创建内核线程;第四二子模块142使新的vhost-net模块创建的内核线程获取共享内存(vring)的使用状态;第四四子模块144开启新的vhost-net模块内核线程在TAP设备上的收/发网络数据包的轮询(poll)。第四三子模块143使新的vhost-net模块内核线程控制对共享内存中网络数据包的发送和/或接收。此后,获取共享内存使用状态的内核线程依照共享内存、TAP设备、网桥及物理网卡的顺序对网络数据包进行接收和发送。

图3示出根据本申请一个方面的半虚拟化网卡内核加速模块升级方法的流程示意图。如图3所示,该半虚拟化网卡内核加速模块升级方法包括:

步骤S301,将第一半虚拟化网卡内核加速模块的网络流量切换至用户态进行传输;

步骤S302,移除第一半虚拟化网卡内核加速模块;

步骤S303,插入第二半虚拟化网卡内核加速模块;

步骤S304,将用户态进行传输的网络流量切换至第二半虚拟化网卡内核加速模块进行传输。

在此,半虚拟化网卡内核加速模块可以采用KVM虚拟化的vhost-net模块,vhost-net模块用于机器虚拟器(QEMU)半虚拟化网卡(virtio-net)加速。第一半虚拟化网卡内核加速模块是指升级前旧的vhost-net模块,第二半虚拟化网卡内核加速模块是指升级后新的vhost-net模块。步骤S301将旧的vhost-net模块的网络流量切换至用户态进行传输。在用户态下,虚拟机在发送或接收数据包时,首先陷入内核态,然后再返回到用户态的QEMU进程进行处理,最后通过TAP设备经由网桥、物理网卡进行数据包的发送或接收。在将旧的vhost-net模块的网络流量切换至用户态进行转发后,可以移除旧的vhost-net模块而网络服务不被中断。此后插入新的vhost-net模块。将用户态进行转发的网络流量切换至内核态由升级后新的vhost-net模块进行传输。内核态下,虚拟机陷入内核态后,不需要再返回到用户态,而由新的vhost-net模块内核线程进行处理,通过TAP设备经由网桥、物理网卡进行数据包的发送或接收。通过用户态和内核态的互相切换,从而实现了在移除旧的vhost-net模块并插入新的升级后的vhost-net模块时,不会中断网络服务。

具体地,步骤S301将第一半虚拟化网卡内核加速模块的网络流量切换至用户态进行传输包括:

步骤S3011,机器虚拟器进程获取共享内存的使用状态;

步骤S3012,所述机器虚拟器进程控制对共享内存中网络数据包的发送和/或接收。

具体地,步骤S301将第一半虚拟化网卡内核加速模块的网络流量切 换至用户态进行传输还包括:

步骤S3013,停止所述第一半虚拟化网卡内核加速模块内核线程的轮询。

在此,停止旧的vhost-net模块内核线程在TAP设备上的收/发网络数据包的轮询(poll),开启QEMU进程对TAP设备上的可收/发网络数据包的轮询,并且控制QEMU进程获取共享内存(vring)的使用状态,由QEMU进程处理切换后的网络流量的收/发网络数据包,将旧的vhost-net模块的网络流量切换至用户态进行处理,为移除旧的vhost-net模块做好准备。其中,共享内存用于缓存网络数据包。

具体地,步骤S302,移除第一半虚拟化网卡内核加速模块还包括:

清理第一半虚拟化网卡内核加速模块的资源。

在此,释放机器虚拟器中用于描述旧的vhost-net模块的数据结构内存,这些数据结构及其他代码用于将vhost-net模块以设备的形式呈现给机器虚拟机使用。此后,关闭旧的vhost-net模块的用户态接口导出设备的句柄(/dev/vhost-net),以彻底移除旧的vhost-net模块。

具体地,步骤S303,插入第二半虚拟化网卡内核加速模块还包括:

初始化第二半虚拟化网卡内核加速模块的资源。

在此,在插入新的vhost-net模块后,打开新的vhost-net模块的用户态接口导出设备的句柄,并调用用户态下QEMU接口,在内存中初始化描述新的vhost-net模块的数据结构。

具体地,步骤S304,将用户态进行传输的网络流量切换至第二半虚拟化网卡内核加速模块进行传输包括:

步骤S3041,所述第二半虚拟化网卡内核加速模块创建内核线程;

步骤S3042,所述第二半虚拟化网卡内核加速模块内核线程获取共享内存的使用状态;

步骤S3043,所述第二半虚拟化网卡内核加速模块内核线程控制对共享内存中网络数据包的发送和/或接收。

具体地,步骤S304将用户态进行传输的网络流量切换至第二半虚拟化网卡内核加速模块进行传输还包括:

步骤S3044,开启所述第二半虚拟化网卡内核加速模块内核线程的轮询。

在此,新的vhost-net模块创建内核线程并控制该内核线程获取当前共享内存(vring)的使用状态,并且新的vhost-net模块开启内核线程在TAP设备上的收/发网络数据包的轮询(poll),以将用户态转发的网络流量切换至新的vhost-net模块。此后,获取共享内存使用状态的内核线程依照共享内存、TAP设备、网桥及物理网卡的顺序对网络数据包进行接收和发送。

图4示出根据本申请又一个方面的半虚拟化网卡内核加速模块升级方法的流程示意图。如图4所示,该半虚拟化网卡内核加速模块升级方法包括:

步骤S401,停止所述第一半虚拟化网卡内核加速模块内核线程的轮询。

在此,停止旧的vhost-net模块的内核线程在TAP设备上的收/发网络数据包的poll(轮询)。

步骤S402,机器虚拟器进程获取共享内存的使用状态。

在此,开启QEMU进程对TAP设备上的可收/发网络数据包的poll(轮询),并且控制QEMU进程获取共享内存(vring)的使用状态。

步骤S403,机器虚拟器进程控制对共享内存中网络数据包的发送和/或接收。

在此,由QEMU进程处理切换后的网络流量的收/发网络数据包,将旧的vhost-net模块的网络流量切换至用户态进行处理,为移除旧的vhost-net模块做好准备。

步骤S404,移除第一半虚拟化网卡内核加速模块并清理第一半虚拟化网卡内核加速模块的资源。

在此,释放机器虚拟器中用于描述旧的vhost-net模块的数据结构内存,这些数据结构及其他代码用于将vhost-net模块以设备的形式呈现给机器虚拟机使用。此后,关闭旧的vhost-net模块的用户态接口导出设备的句柄(/dev/vhost-net),以彻底移除旧的vhost-net模块。

步骤S405,插入第二半虚拟化网卡内核加速模块并初始化第二半虚拟 化网卡内核加速模块的资源。

在此,在插入新的vhost-net模块后,打开新的vhost-net模块的用户态接口导出设备的句柄,并调用用户态下QEMU接口,在内存中初始化描述新的vhost-net模块的数据结构。

步骤S406,所述第二半虚拟化网卡内核加速模块创建内核线程。

步骤S407,所述第二半虚拟化网卡内核加速模块内核线程获取共享内存的使用状态。

在此,新的vhost-net模块创建内核线程,内核线程获取共享内存使用状态。

步骤S408,开启所述第二半虚拟化网卡内核加速模块内核线程的轮询。

在此,开启新的vhost-net模块内核线程在TAP设备上的收/发网络数据包的poll(轮询)。

步骤S409,所述第二半虚拟化网卡内核加速模块内核线程控制对共享内存中网络数据包的发送和/或接收。

在此,将用户态转发的网络流量切换至新的vhost-net模块,依照共享内存、TAP设备、网桥及物理网卡的顺序对网络数据包进行接收和发送。

需要注意的是,本申请可在软件和/或软件与硬件的组合体中被实施,例如,可采用专用集成电路(ASIC)、通用目的计算机或任何其他类似硬件设备来实现。在一个实施例中,本申请的软件程序可以通过处理器执行以实现上文所述步骤或功能。同样地,本申请的软件程序(包括相关的数据结构)可以被存储到计算机可读记录介质中,例如,RAM存储器,磁或光驱动器或软磁盘及类似设备。另外,本申请的一些步骤或功能可采用硬件来实现,例如,作为与处理器配合从而执行各个步骤或功能的电路。

另外,本申请的一部分可被应用为计算机程序产品,例如计算机程序指令,当其被计算机执行时,通过该计算机的操作,可以调用或提供根据本申请的方法和/或技术方案。而调用本申请的方法的程序指令,可能被存储在固定的或可移动的记录介质中,和/或通过广播或其他信号承载媒体中 的数据流而被传输,和/或被存储在根据所述程序指令运行的计算机设备的工作存储器中。在此,根据本申请的一个实施例包括一个装置,该装置包括用于存储计算机程序指令的存储器和用于执行程序指令的处理器,其中,当该计算机程序指令被该处理器执行时,触发该装置运行基于前述根据本申请的多个实施例的方法和/或技术方案。

对于本领域技术人员而言,显然本申请不限于上述示范性实施例的细节,而且在不背离本申请的精神或基本特征的情况下,能够以其他的具体形式实现本申请。因此,无论从哪一点来看,均应将实施例看作是示范性的,而且是非限制性的,本申请的范围由所附权利要求而不是上述说明限定,因此旨在将落在权利要求的等同要件的含义和范围内的所有变化涵括在本申请内。不应将权利要求中的任何附图标记视为限制所涉及的权利要求。此外,显然“包括”一词不排除其他单元或步骤,单数不排除复数。装置权利要求中陈述的多个单元或装置也可以由一个单元或装置通过软件或者硬件来实现。第一,第二等词语用来表示名称,而并不表示任何特定的顺序。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1