CN108183871B - 一种虚拟交换机、虚拟交换机启动方法,电子设备 - Google Patents
一种虚拟交换机、虚拟交换机启动方法,电子设备 Download PDFInfo
- Publication number
- CN108183871B CN108183871B CN201711182105.3A CN201711182105A CN108183871B CN 108183871 B CN108183871 B CN 108183871B CN 201711182105 A CN201711182105 A CN 201711182105A CN 108183871 B CN108183871 B CN 108183871B
- Authority
- CN
- China
- Prior art keywords
- finger daemon
- virtual switch
- shared drive
- daemon module
- shared
- 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.)
- Active
Links
Classifications
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L49/00—Packet switching elements
- H04L49/70—Virtual switches
-
- 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/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/45575—Starting, stopping, suspending or resuming virtual machine instances
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本申请提供了一种虚拟交换机,属于计算机技术领域,解决现有技术中虚拟交换机重新启动过程中启动速度慢的问题。本申请实施例公开的虚拟交换机,通过将ovs‑vswitchd进程拆分为主守护进程和副守护进程,并由主守护进程负责管理虚拟交换机在虚拟机启动后的静态资源,副守护进程负责数据处理,通过主守护进程申请和初始化共享内存,供所述副守护进程和所述主守护进程共享数据,使得在虚拟交换机仅需要热重启时,不再需要申请内存空间,有效缩短了虚拟交换机热重启的时间,提高了虚拟交换机的启动效率。
Description
技术领域
本申请涉及计算机技术领域,特别是涉及一种虚拟交换机、虚拟交换机启动方法,电子设备。
背景技术
数据平面开发套件(DPDK,Data Plane Development Kit)是由6WIND,Intel等多家公司开发,主要基于Linux系统运行,用于快速数据包处理的函数库与驱动集合,可以极大提高数据处理性能和吞吐量,提高数据平面应用程序的工作效率,广泛应用于虚拟交换机(OVS,Open vSwitch)的加速解决方案。DPDK的主要功能是为物理机上的虚拟机提供二层网络接入,类似运行在宿主机上的虚拟交换机。基于DPDK的OVS通过结合了DPDK和vhost-user技术的优势,vhost-user是一个支持用户态vhost-backend程序的工作模式,实现了从虚拟机到宿主机上数据的零拷贝,极大的提高了OVS的性能。但是,基于DPDK的OVS系统在升级过程中,ovs-vswitchd进程重启需要2-3分钟,在这期间,宿主机上所有虚拟机网络不可达,与外网网络连接断开,严重降低了虚拟机的工作性能。
可见,现有技术中的基于DPDK的虚拟交换机至少存在重启速度慢,以及由于网络不可用导致的工作效率低下的缺陷。
发明内容
本申请提供一种虚拟交换机,解决现有技术中的虚拟交换机重新启动过程中存在的上述至少一个问题。
为了解决上述问题,第一方面,本申请公开了一种虚拟交换机,包括:
主守护进程,至少用于管理虚拟交换机在虚拟机启动后的静态资源;
副守护进程,至少用于虚拟机之间,和/或,虚拟机和宿主机之间的数据传输和数据处理;
共享内存,由所述主守护进程申请和初始化,所述副守护进程通过所述共享内存获取共享数据;
所述副守护进程根据所述主守护进程发送的消息获取所述共享内存中的共享数据。
第二方面,本申请公开了一种虚拟交换机启动方法,应用于本申请实施例中所述的虚拟交换机,所述方法包括:
根据虚拟交换机的热重启指令,控制所述虚拟交换机的副守护进程基于共享内存中的共享数据重新启动;
控制所述副守护进程通过所述主守护进程获取所述共享内存中的共享数据;其中,所述共享内存由所述主守护进程申请和初始化。
第三方面,本申请实施例提供了一种电子设备,包括存储器,还包括本申请实施例所述的虚拟交换机。
第四方面,本申请实施例提供了一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现本申请实施例所述的虚拟交换机启动方法的步骤。
本申请实施例公开的虚拟交换机,通过将ovs-vswitchd进程拆分为主守护进程和副守护进程,并由主守护进程负责管理虚拟交换机在虚拟机启动后的静态资源,副守护进程负责数据传输和数据处理,通过主守护进程申请和初始化共享内存,供所述副守护进程和所述主守护进程共享数据,使得在虚拟交换机仅需要热重启时,不再需要申请内存空间,解决现有技术中的虚拟交换机重新启动过程中启动速度慢的问题。通过所述副守护进程和所述主守护进程共享上述共享内存,并由主守护进程负责创建和删除共享内存,有效缩短了虚拟交换机热重启的时间,提高了虚拟交换机的启动效率。
附图说明
为了更清楚地说明本申请实施例的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1是本申请实施例一的虚拟交换机的结构示意图之一;
图2是本申请实施例一的虚拟交换机的结构示意图之二;
图3是本申请实施例二的虚拟交换机启动方法流程图;
图4是本申请实施例三的虚拟交换机启动方法一具体流程图。
具体实施方式
下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
实施例一
本申请公开的一种虚拟交换机,如图1所示,所述虚拟交换机10,包括:主守护进程100,至少用于管理虚拟交换机在虚拟机启动后的静态资源;副守护进程110,至少用于虚拟机20之间,和/或,虚拟机20和宿主机30之间的数据传输和数据处理;共享内存120,由所述主守护进程100申请和初始化,所述副守护进程110通过所述共享内存120获取共享数据;所述副守护进程110根据所述主守护进程100发送的消息获取所述共享内存120中的共享数据。
虚拟机运行在宿主机上,现有技术中,虚拟机通常包括两部分:虚拟交换软件和数据缓存区。Open vSwitch,简称OVS是一个虚拟交换软件,主要用于机器的虚拟化环境,通常称为:虚拟交换机。OVS支持Xen/XenServer,KVM,and VirtualBox多种虚拟化技术。在某一台机器的虚拟化的环境中,虚拟交换机(vSwitch)主要有两个作用:传递虚拟机之间的流量、实现虚拟机和外界网络的通信。数据缓存区则是宿主机上一块物理内存,用于在虚拟机运行时使用。
Open vSwitch由很多程序模块组成,其中包括:ovs-vswitchd:守护程序,实现交换功能,实现基于流的交换flow-based switching。Ovs-vswitchd进程运行在宿主机上,负责虚拟机与外网的流量转发,以及同一台宿主机上虚拟机之间的流量转发。同时,Ovs-vswitchd进程也负责维护OVS的流表,控制数据包的转发规则。现有技术中,在基于DPDK的OVS架构中,当虚拟机遇到故障或升级后需要重启时,ovs-vswitchd进程的工作流程如下:首先,初始化DPDK的资源,如大页内存重新初始化等;然后,重新加载重启之前保存的流表信息;之后,重新初始化宿主机的物理端口,以及绑定重新协商;最后,通过vhost-user技术建立vhost后端和虚拟机重新连接协商。其中,初始化DPDK的资源需要花费很长时间,严重降低了虚拟机启动效率。
本申请具体实施时,将ovs-vswitchd进程拆分成两个进程,主守护进程100(即Master进程)和副守护进程110(即slave进程),Master进程负责不需要升级的功能,升级中不需要重启,slave进程负责需要升级的功能,升级中只重启slave进程。具体实施时,主守护进程100,至少用于管理虚拟交换机在虚拟机启动后的静态资源,如:虚拟机的物理端口使用情况、地址、网络状态信息等。主守护进程100还用于管理虚拟机和虚拟交换机之间共享的数据缓存区。副守护进程110,至少用于虚拟机之间,和/或,虚拟机和宿主机之间的数据处理,因为这部分工能通常是需要升级的功能。
具体实施时,还需要设置共享内存120。所述主守护进程100在首次启动后,申请和初始化共享内存120,用于存储与所述副守护共享的数据,例如,流表信息、宿主机物理端口和绑定端口的地址、工作状态等。所述共享内存120为数据平面开发套件(DPDK,Data PlaneDevelopment Kit)申请的大页(hugepage)内存,例如10G的物理内存。
当虚拟交换机升级或者遇到故障需要热重启时,所述主守护进程100(即master进程)可以保持运行状态,而仅重新启动所述副守护进程110(即slave进程)。Slave进程启动时的工作流程如下:首先,Slave进程通过共享内存120,获取master进程维护的共享DPDK资源;然后,Slave进程重新加载之前保存在共享内存120中的流表信息;之后,Slave进程通过共享内存120,获取master进程维护的宿主机物理端口、以及绑定端口状态;最后,Slave进程通过控制命令,从master进程获取所有的vhost-net-dev结构体,重新将与虚拟机通信的共享ring映射到自己进程中,使得slave可以实现与虚拟机的数据转发,避免vhost后端与虚拟机重新连接协商。
通过将现有技术中的虚拟交换机中的守护进程拆分为主守护进程和副守护进程,主守护进程负责不需要升级的功能,升级或故障时中不需要重启,副守护进程负责需要升级的功能,升级中只重启副守护进程,并通过建立共享内存来实现虚拟交换机工作过程中需要的数据的共享,保证了虚拟交换机的稳定工作,同时有效缩短了虚拟交换机的启动时间,提高了虚拟交换机的启动效率。
所述静态资源包括:共享内存120的结构表。所述副守护进程110根据所述主守护进程100发送的消息获取所述共享内存120的结构表,并通过根据所述结构表120映射得到的逻辑内存地址获取所述共享内存120中的共享数据。具体实施时,所述主守护进程100发送初始化共享内存表的消息至副守护进程110,副守护进程110到所述共享内存120中读取结构表,并根据所述结构表更新自身访问所述共享内存120的逻辑内存地址,进一步的,通过更新后的逻辑内存地址获取所述共享内存120中的共享数据。
优选的,所述副守护进程还用于:在申请到所述共享内存的节点时,在内存节点索引信息中增加所述副守护进程使用的节点信息;以及,在虚拟交换机重启时,根据所述内存节点索引信息中的所述副守护进程使用的节点信息回收所述副守护进程使用的节点;其中,所述内存节点索引信息用于记录所述共享内存的节点使用情况,存储在系统物理大页内存的指定区域。
现有技术中,在基于DPDK的虚拟交换机中大片内存都是申请的大页(hugepage)内存,虚拟交换机每次启动时,向系统申请10G的大页内存,但大页内存申请和初始化,比较耗时。本申请具体实施时,在虚拟交换机首次冷启动时,由主守护进程100申请和初始化大页内存作为共享内存120后,后续副守护进程110热启动时就不需要再重新申请和初始化虚拟交换机运行需要的大片内存。主守护进程100和副守护进程110共享使用大页heap结构存储,即共享内存120时,分配和回收都是加锁的,即副守护进程110使用的内存,主守护进程100无法对其进行回收。因此,副守护进程110在heap上分配的私有hugepage内存,退出时,不会得到回收。现有技术中单进程模式下,进程退出或重启时,通常通过重新清空初始化Heap的方式进行内存回收,因此heap不会有未回收内存。本申请针对主守护进程100和副守护进程110共享使用大页heap结构存储的情况,采用以下方案进行内存管理。
DPDK大页内存是一个伙伴系统来管理的,heap结构维护了未分配的内存节点,heap的节点索引信息存储在物理大页指定的一块区域内,通常分配内存是从heap上的空闲节点列表(free_list)中找到合适的内存节点。本申请具体实施时,在节点索引信息中增加一段副守护进程使用节点(used_list)信息,用于存储副守护进程110已经申请的内存节点。副守护进程110每次分配内存节点,都会将该节点标识(如节点索引或节点指针)加入到used_list中。具体实施时,User_list可以采用链表结构,链表数据存储在共享内存120中,链表的每个结点存储副守护进程110已经使用的内存的物理地址。当副守护进程110退出重启时,副守护进程110从主守护进程100获取共享内存120的地址,并在共享内存120的指定地址,获取到used_list数据,然后逐一释放user_list上记录的被副守护进程110使用的内存节点,并将释放的内存节点加入到原节点索引信息的free_list中。
通过在共享内存区保存副守护进程使用的内存节点地址,并在副守护进程重新启动时,由副守护进程根据在共享内存区保存副守护进程使用的内存节点地址,逐一释放被其使用的内存节点,可以有效解决多进程共同使用DPDK大页内存时,内存管理问题,有效提高内存使用效率。
优选的,在另一实施例中,所述主守护进程还用于创建和删除宿主机物理端口及端口绑定,并将所述物理端口及端口绑定信息存储在所述共享内存中;所述副守护进程还用于通过绑定的所述端口进行数据传输,以及,更新绑定端口的链路状态。
宿主机和外网通过绑定(Bond)接口通信。在云环境中,通过将两个网卡端口做绑定(bonding),避免链路故障,提高可用性。基于DPDK的虚拟交换机中,物理端口(port)对DPDK的端口进行绑定时,使用DPDK提供的bondlib。本申请具体实施时,为了支持平滑升级,改进了bond lib,使绑定端口支持两进程模式。具体实施时,将Bonding功能拆分,主守护进程100,负责创建和删除端口绑定,将Bonding相关的内存区分配在共享大页heap上,即共享内存120,主守护进程100进程和副守护进程110能共享使用。因为Bond Mode 4模式下,虚拟交换机可以通过LACP与上联其他虚拟交换机进行端口(port)交互,动态确定链路状态是否正常,即会定期在虚拟交换机之间进行LACP协议包交换,因此,副守护进程110负责收发LACP的协议包,同时操作变更Mode4的状态机。
所述副守护进程110还用于:在所述虚拟交换机重启时,从所述共享内存中获取所述物理端口及端口绑定信息。具体实施时,状态机的数据存储在共享内存120中。当副守护进程110升级退出时,Bonding的状态都保存在共享内存区,升级后,通过与主守护进程100的消息交换,副守护进程110可以重新获得状态机以及Bonding相关数据,可以避免bond的重新初始化,减小了业务恢复时间。
在本申请的另一优选实施例中,所述主守护进程还用于创建和删除半虚拟化网络设备,以及控制半虚拟化网络设备与虚拟机之间的通信连接;所述副守护进程还用于通过所述通信连接进行数据传输;所述主守护进程和所述副守护进程通过所述共享内存共享所述半虚拟化网络设备的相关数据。
虚拟机通过半虚拟化驱动(virtio)实现客户机访问宿主机的物理设备,可以有效提高客户机IO效率。虚拟机通过virtio驱动与虚拟交换机进行数据转发,virtio驱动分为前端驱动和后端驱动:前端驱动是在虚拟机中;后端驱动在宿主机上的虚拟交换机中,后端驱动工作在用户态(vhost-user)模式。现有技术中,在虚拟交换机的守护进程(即ovs-vswitchd进程)退出时,vhost-user后端退出,虚拟机与vhost-user的控制通信断开,进而引起虚拟机中的网卡断开,网络不可用。针对虚拟机与虚拟交换机间网络断开情况,本申请将vhost-user后端改进为支持两进程模式。
具体实施时,首先,从大页内存(huge heap),即共享内存120内为半虚拟化网络设备的数据结构virtio_net分配存储空间,使得主守护进程100和副守护进程110可以共享使用该数据结构。具体实施时,由主守护进程100负责创建和删除半虚拟化网络设备,以及控制半虚拟化网络设备与虚拟机之间的通信连接。即,由主守护进程100负责申请数据结构virtio_net的内存空间和初始化。主守护进程100创建半虚拟化网络设备之后,通过virtio_net_list维护已经创建的半虚拟化网络设备,包括:半虚拟化网络设备标识、设备类型、virtio_net的物理地址等信息。当副守护进程110升级重启后,只需要查找存储在共享内存120内的virtio_net_list对应的内存区域,就可以获取到已经创建的半虚拟化网络设备信息,并通过所述通信连接进行数据传输,不需要重新创建半虚拟化网络设备,可以进一步提高虚拟交换机的重启效率。
所述主守护进程还用于控制用户态半虚拟化网络设备后端与虚拟机的消息控制消息;所述副守护进程根据所述主守护进程发送的消息生成自身访问宿主机上的数据缓存区的逻辑内存地址,以及通信连接句柄。其中,所述数据缓存区可以包括在所述共享内存120中,也可以为另外一块内存。
具体实施时,需要构造消息通信机制,让副守护进程110能通过主守护进程100的消息,获取到已经创建的半虚拟化网络设备信息,如virtio_net的物理地址。
具体实施时,如图2所示,在主守护进程100中添加VhostAgent线程101,用于处理vhost-user后端与虚拟机的消息控制消息。VhostAgent负责前后端的控制消息通信,维持与Vhost前端的连接不中断。例如:当副守护进程110收到ovs-ovctl命令,需要添加一个vhost-user port时,副守护进程110通过控制消息告诉主守护进程100,生成一个virtio_net类型的设备。VhostAgent线程负责创建这个设备,以及创建一个tcp socket,并且不断reconnect。此时,如果虚拟机已经启动,qemu进程中的前端驱动,会生成一个对应的tcpsocket,当前后端驱动连接成功后,qemu会将虚拟机的一些信息发送给Vhost后端驱动,比如内存ring的地址,kickfd等。然后,通过消息通信机制实现主守护进程100和副守护进程110之间的信息同步。具体实施时,通过linux的sendmsg进行进程间的信息转化同步,以同步socket fd信息。
虚拟机和虚拟交换机之间通过共享数据缓存区进行数据转发,即Virtio前后端驱动通过共享大页内存进行数据转发。具体实施时,首先,需要将物理大页内存地址映射为各进程的逻辑内存地址。例如,通过调用系统函数mmap将物理大页内存地址,即所述共享内存120的地址,映射成副守护进程110的逻辑内存地址。当虚拟机启动后,主守护进程100的VhostAgent线程会收到虚拟机发送的初始化共享内存表SET_MEM_TABLE消息,这时,虚拟机和vhost-user后端共享物理内存,即共享内存会被映射成主守护进程100的逻辑内存地址。具体实施时,当主守护进程100收到SET_MEM_TABLE消息后,主守护进程100通过消息通信机制,将SET_MEM_TABLE消息同步到副守护进程110,副守护进程110收到SET_MEM_TABLE消息后重新通过mmap同步自身访问共享内存的逻辑内存地址。
另外,还有一些文件句柄fd,需要从主守护进程100同步到副守护进程110,如:副守护进程110的vhost-user后端在与虚拟机前端进行数据转发时,对每个共享内存,有一个socket fd(映射文件描述符),当有数据发送时,需要异步地通知到虚拟机端。再比如,副守护进程110同步逻辑内存地址时mmap函数中的大页内存文件句柄。本申请实施例中通过调用系统的sendmsg方法,发送SCM_RIGHT类型的控制消息,以实现信息同步。
主守护进程和副守护进程的分工协作,共同维护虚拟交换机的正常运行。具体实施时,所述主守护进程可以仅用于控制用户态半虚拟化网络设备后端与虚拟机的消息控制消息,或者,仅用于创建和删除宿主机物理端口及端口绑定,并将所述物理端口及端口绑定信息存储在所述共享内存中,原ovs-vswitchd中的其他操作由副守护进程执行,同样可以提高虚拟交换机的启动效率,本实施例中公开的具体操作仅是一个最佳实施例。
本申请实施例公开的虚拟交换机,通过将ovs-vswitchd进程拆分为主守护进程和副守护进程,并由主守护进程负责管理虚拟交换机在虚拟机启动后的静态资源,副守护进程负责数据传输和数据处理,通过主守护进程申请和初始化共享内存,供所述副守护进程和所述主守护进程共享数据,使得在虚拟交换机仅需要热重启时,不再需要申请内存空间,解决现有技术中的虚拟交换机重新启动过程中启动速度慢的问题。通过所述副守护进程和所述主守护进程共享上述共享内存,并由主守护进程负责创建和删除共享内存,有效缩短了虚拟交换机热重启的时间,提高了虚拟交换机的启动效率。
进一步的,通过由主守护线程负责进行创建和删除宿主机物理端口及端口绑定,并将所述物理端口及端口绑定信息存储在所述共享内存中,使得所述虚拟机在热启动时,副守护进程直接通过共享内存获取绑定的所述端口的信息,可以快速进行数据传输,解决了虚拟交换机启动过程中网络端口不可达的问题,同时缩短了虚拟交换机的启动时间,进一步提升了虚拟机的启动效率。
进一步的,由于通过vhost-user技术建立vhost后端和虚拟机重新连接协商都需要花费很长时间,本申请通过由所述主守护进程创建和删除半虚拟化网络设备,以及控制半虚拟化网络设备与虚拟机之间的通信连接,使得在虚拟交换机热重启过程中,所述副守护进程通过所述共享内存直接获取所述半虚拟化网络设备的相关数据,并启动数据传输,解决了虚拟交换机启动过程中网络端口不可达的问题,同时缩短了虚拟交换机的启动时间,进一步提升了虚拟机的启动效率。
实施例二
本申请公开的一种虚拟交换机启动方法,应用于如实施例一所述的虚拟交换机,如图3所示,该方法包括:步骤300和步骤310。
步骤300,根据虚拟交换机的热重启指令,控制所述虚拟交换机的副守护进程基于共享内存中的共享数据重新启动。
其中,所述共享内存由所述主守护进程申请和初始化。本实施例所述的虚拟交换机的启动方法适用于实施例一所述的虚拟交换机,即将基于DPDK的虚拟交换机中的ovs-vswitchd进程拆分为主守护进程和副守护进程,并由主守护进程负责管理虚拟交换机在虚拟机启动后的静态资源,副守护进程负责数据传输和数据处理的虚拟交换机。
以虚拟交换机在升级过程中的重启流程为例,当虚拟交换机升级完成之后,虚拟交换机会收到虚拟机发送的热重启指令,此时,虚拟交换机控制副守护进程基于共享内存中共享数据重新启动。
具体实施时,根据主守护进程和副守护进程的分工不同,控制副守护进程基于共享内存中共享数据重新启动时,具体启动操作也不同。
例如,当主守护进程负责管理虚拟交换机在虚拟机启动后的静态资源包括:DPDK资源、数据缓存区的结构表时,共享内存中会存储DPDK资源,所述副守护进程通过读取共享内存中会存储DPDK资源获取进行数据传输需要的信息,如:宿主机物理端口、端口绑定信息等,以便恢复数据传输。
步骤310,控制所述副守护进程通过所述主守护进程获取所述共享内存中的共享数据。
所述副守护进程根据所述主守护进程发送的消息获取所述共享内存的结构表,并通过根据所述结构表映射得到的逻辑内存地址获取所述共享内存中的共享数据。具体实施时,所述副守护进程通过消息通信机制从所述主守护进程获取共享内存的结构表。虚拟机在发送热重启虚拟交换机的指令之后,会向主守护进程发送SET_MEM_TABLE消息,以同步数据缓存区的逻辑内存地址。当主守护进程收到SET_MEM_TABLE消息后,主守护进程通过消息通信机制,将SET_MEM_TABLE消息同步到副守护进程,副守护进程110收到SET_MEM_TABLE消息后重新通过mmap同步自身的逻辑内存地址。
所述共享内存用于存储虚拟机之间,和/或,虚拟机和宿主机之间传输的数据。
之后,副守护进程可以通过自身的逻辑内存地址访问共享内存,以进行虚拟机和虚拟交换机之间的数据转发和处理。
本申请实施例公开的虚拟交换机启动方法,通过将ovs-vswitchd进程拆分为主守护进程和副守护进程,并由主守护进程负责管理虚拟交换机在虚拟机启动后的静态资源,副守护进程负责数据传输和数据处理,在虚拟交换机热重启时,仅需要控制所述虚拟交换机的副守护进程基于共享内存中的共享数据重新启动,然后,控制所述副守护进程通过消息通信机制从所述虚拟交换机的主守护进程获取共享内存的结构表,并根据所述结构表确定访问所述共享内存的逻辑地址,就可以完成虚拟交换机的启动过程,不再需要申请内存空间,解决现有技术中的虚拟交换机重新启动过程中启动速度慢的问题。通过所述副守护进程和所述主守护进程共享上述共享内存,并由主守护进程负责创建和删除共享内存,有效缩短了虚拟交换机热重启的时间,提高了虚拟交换机的启动效率。
实施例三
本申请公开的一种虚拟交换机启动方法,应用于如实施例一所述的虚拟交换机,如图4所示,该方法包括:步骤400和步骤430。
步骤400,主守护进程创建共享内存。
主守护进程从大页内存中申请一块内存区域,用于虚拟交换机在运行过程中使用,供主守护进程和副守护进程存储共享数据。
步骤410,将虚拟交换机运行过程中的共享数据存储至所述共享内存。
具体实施时,主守护进程和副守护进程在虚拟交换机运行过程中,不断将需要共享的数据保存至共享内存。
例如,主守护进行将DPDK资源信息,如宿主机物理端口、端口绑定信息、半虚拟化网络设备信息等存储至共享内存。副守护进程将流表数据、半虚拟化网络设备的链路层状态机等存储至共享内存。
步骤420,根据虚拟交换机的热重启指令,控制所述虚拟交换机的副守护进程基于共享内存中的共享数据重新启动。
本实施例中,假设主守护进程用于共享资源的管理、生成,宿主机物理端口的创建、删除,以及端口绑定,以及用于半虚拟化网络设备的创建、删除,以及维护虚拟交换机和客户机之间的控制消息通信;副守护进程用于通过绑定的物理端口和半虚拟化网络设备进行网络数据包的收发,以及ovs-vswitchd进程的其它功能。控制所述虚拟交换机的副守护进程基于共享内存中的共享数据重新启动,主要包括以下几个方面的操作。
首先,所述控制所述虚拟交换机的副守护进程基于共享内存中的共享数据重新启动,包括:控制所述副守护进程根据所述内存节点索引信息中的所述副守护进程使用的节点信息,回收所述副守护进程使用的节点;其中,所述内存节点索引信息用于记录所述共享内存的节点使用情况。
由于主守护进程和副守护进程共享使用大页heap结构存储,即共享内存时,分配和回收都是加锁的,即副守护进程使用的内存,主守护进程无法对其进行回收。因此,副守护进程在heap上分配的私有hugepage内存,退出时,不会得到回收。本申请具体实施时,在虚拟交换机热重启时,首先由副守护进行对自身使用的内存进行回收。具体实施时,共享内存中存储有副守护进程使用的内存节点信息,所述副守护进程可以通过访问共享内存获取自身使用的内存节点,并释放,然后,将释放的内存节点加入内存节点索引信息中。
其次,所述控制所述虚拟交换机的副守护进程基于共享内存中的共享数据重新启动,还包括:控制所述副守护进程获取所述共享内存中存储的宿主机物理端口信息、端口绑定信息,以及,绑定端口的链路状态;其中,所述宿主机物理端口信息、端口绑定信息由所述主守护进程在所述副守护进程重新启动前预先创建;所述绑定端口的链路状态由所述副守护进程在重新启动前设置。
当主守护进程被设置为创建和删除宿主机物理端口及端口绑定,并将所述物理端口及端口绑定信息存储在所述共享内存中时,主守护进程将创建的宿主机物理端口及端口绑定信息,存储在共享大页heap上,即共享内存。所述副守护进程在负责收发LACP的协议包的同时操作变更绑定端口的链路状态。在所述虚拟交换机重启时,副守护进程从所述共享内存中获取所述物理端口及端口绑定信息以及Bonding相关数据,可以避免bond的重新初始化,减小了业务恢复时间。
最后,所述控制所述虚拟交换机的副守护进程基于共享内存中的共享数据重新启动,还包括:控制所述副守护进程通过所述共享内存获取所述半虚拟化网络设备的相关数据,其中,所述半虚拟化网络设备的相关数据为接收到所述虚拟交换机的热重启指令之前,由所述主守护进程预先存储的。
当所述主守护进程被设置为用于创建和删除半虚拟化网络设备,以及控制半虚拟化网络设备与虚拟机之间的通信连接时,主守护进程首先从大页内存(huge heap),即共享内存内为半虚拟化网络设备的数据结构virtio_net分配存储空间,使得主守护进程和副守护进程可以共享使用该数据结构。主守护进程创建半虚拟化网络设备之后,通过virtio_net_list维护已经创建的半虚拟化网络设备,包括:半虚拟化网络设备标识、设备类型、virtio_net的物理地址等信息。当副守护进程升级重启后,只需要查找存储在共享内存内的virtio_net_list对应的内存区域,就可以获取到已经创建的半虚拟化网络设备信息,并通过所述通信连接进行数据传输,不需要重新创建半虚拟化网络设备,可以进一步提高虚拟交换机的重启效率。
具体实施时,主守护进程和副守护进程的分工不同,虚拟交换机热重启时,控制所述虚拟交换机的副守护进程基于共享内存中的共享数据重新启动所执行的具体操作会有不同,本实施例中公开的具体操作仅是一个最佳实施例。
步骤430,控制所述副守护进程通过所述主守护进程获取所述共享内存中的共享数据。
控制所述副守护进程通过消息通信机制从所述虚拟交换机的主守护进程获取共享内存的结构表,并根据所述结构表确定访问所述共享内存的逻辑内存地址的具体实施方式参见实施例一和实施例二,此处不再赘述。
之后,副守护进程可以通过自身的逻辑内存地址访问共享内存,以进行虚拟机和虚拟交换机之间的数据转发和处理。
本申请实施例公开的虚拟交换机启动方法,通过将ovs-vswitchd进程拆分为主守护进程和副守护进程,并由主守护进程负责管理虚拟交换机在虚拟机启动后的静态资源,副守护进程负责数据传输和数据处理,在虚拟交换机热重启时,仅需要控制所述虚拟交换机的副守护进程基于共享内存中的共享数据重新启动,然后,控制所述副守护进程通过消息通信机制从所述虚拟交换机的主守护进程获取共享内存的结构表,并根据所述结构表确定访问所述共享内存的逻辑地址,就可以完成虚拟交换机的启动过程,不再需要申请内存空间、不需要再初始化宿主机的物理端口和协商端口绑定、不需要初始化半虚拟化网络设备,解决现有技术中的虚拟交换机重新启动过程中启动速度慢的问题,有效提高了虚拟交换机的启动效率。
相应的,本申请还公开了一种电子设备,包括存储器,所述电子设备还包括实施例一所述的虚拟交换机。所述电子设备可以为PC机、工作站、平板电脑等。
本申请还公开了一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现如本申请实施例二所述的虚拟交换机启动方法的步骤。
本说明书中的各个实施例均采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似的部分互相参见即可。对于装置实施例而言,由于其与方法实施例基本相似,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
以上对本申请提供的一种虚拟交换机,虚拟交换机启动方法进行了详细介绍,本文中应用了具体个例对本申请的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本申请的方法及其核心思想;同时,对于本领域的一般技术人员,依据本申请的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本申请的限制。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到各实施方式可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件实现。基于这样的理解,上述技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在计算机可读存储介质中,如ROM/RAM、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行各个实施例或者实施例的某些部分所述的方法。
Claims (13)
1.一种虚拟交换机,其特征在于,包括:
主守护进程模块,至少用于管理虚拟交换机在虚拟机启动后的静态资源;
副守护进程模块,至少用于虚拟机之间,和/或,虚拟机和宿主机之间的数据处理;
共享内存,由所述主守护进程模块申请和初始化,所述副守护进程模块通过所述共享内存获取共享数据;
所述副守护进程模块根据所述主守护进程模块发送的消息获取所述共享内存中的共享数据;
所述副守护进程模块还用于:在申请到所述共享内存的节点时,在内存节点索引信息中增加所述副守护进程模块使用的节点信息;以及,在虚拟交换机重启时,根据所述内存节点索引信息中的所述副守护进程模块使用的节点信息回收所述副守护进程模块使用的节点;
其中,所述内存节点索引信息用于记录所述共享内存的节点使用情况。
2.根据权利要求1所述的虚拟交换机,其特征在于,所述副守护进程模块根据所述主守护进程模块发送的消息获取所述共享内存的结构表,并通过根据所述结构表映射得到的逻辑内存地址获取所述共享内存中的共享数据。
3.根据权利要求1所述的虚拟交换机,其特征在于,
所述主守护进程模块还用于创建和删除宿主机物理端口及端口绑定,并将所述物理端口及端口绑定信息存储在所述共享内存中;
所述副守护进程模块还用于通过绑定的所述端口进行数据传输,以及,更新绑定端口的链路状态。
4.根据权利要求3所述的虚拟交换机,其特征在于,
所述副守护进程模块还用于:在所述虚拟交换机重启时,从所述共享内存中获取所述物理端口及端口绑定信息。
5.根据权利要求1至4任一项所述的虚拟交换机,其特征在于,
所述主守护进程模块还用于创建和删除半虚拟化网络设备,以及控制半虚拟化网络设备与虚拟机之间的通信连接;
所述副守护进程模块还用于通过所述通信连接进行数据传输;
所述主守护进程模块和所述副守护进程模块通过所述共享内存共享所述半虚拟化网络设备的相关数据。
6.根据权利要求5所述的虚拟交换机,其特征在于,
所述主守护进程模块还用于控制用户态半虚拟化网络设备后端与虚拟机的消息控制消息;
所述副守护进程模块根据所述主守护进程模块发送的消息生成自身访问宿主机上的数据缓存区的逻辑内存地址,以及通信连接句柄。
7.一种虚拟交换机启动方法,应用于权利要求1至6任一项所述的虚拟交换机,其特征在于,包括:
根据虚拟交换机的热重启指令,控制所述虚拟交换机的副守护进程模块基于共享内存中的共享数据重新启动;
控制所述副守护进程模块通过所述主守护进程模块获取所述共享内存中的共享数据;
其中,所述共享内存由所述主守护进程模块申请和初始化。
8.根据权利要求7所述的方法,其特征在于,所述副守护进程模块根据所述主守护进程模块发送的消息获取所述共享内存的结构表,并通过根据所述结构表映射得到的逻辑内存地址获取所述共享内存中的共享数据。
9.根据权利要求7所述的方法,其特征在于,所述控制所述虚拟交换机的副守护进程模块基于共享内存中共享数据重新启动的步骤,包括:
控制所述副守护进程模块根据所述内存节点索引信息中的所述副守护进程模块使用的节点信息,回收所述副守护进程模块使用的节点;
其中,所述内存节点索引信息用于记录所述共享内存的节点使用情况。
10.根据权利要求9所述的方法,其特征在于,所述控制所述虚拟交换机的副守护进程模块基于共享内存中共享数据重新启动的步骤,还包括:
控制所述副守护进程模块获取所述共享内存中存储的宿主机物理端口信息、端口绑定信息,以及,绑定端口的链路状态;
其中,所述宿主机物理端口信息、端口绑定信息由所述主守护进程模块在所述副守护进程模块重新启动前预先创建;所述绑定端口的链路状态由所述副守护进程模块在重新启动前设置。
11.根据权利要求7至10任一项所述的方法,其特征在于,所述控制所述虚拟交换机的副守护进程模块基于共享内存中共享数据重新启动的步骤,还包括:
控制所述副守护进程模块通过所述共享内存获取半虚拟化网络设备的相关数据,其中,所述半虚拟化网络设备的相关数据为接收到所述虚拟交换机的热重启指令之前,由所述主守护进程模块预先存储的。
12.一种电子设备,包括存储器,其特征在于,还包括权利要求1至6任意一项所述的虚拟交换机。
13.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,该程序被处理器执行时实现权利要求7至11任意一项所述的虚拟交换机启动方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201711182105.3A CN108183871B (zh) | 2017-11-23 | 2017-11-23 | 一种虚拟交换机、虚拟交换机启动方法,电子设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201711182105.3A CN108183871B (zh) | 2017-11-23 | 2017-11-23 | 一种虚拟交换机、虚拟交换机启动方法,电子设备 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN108183871A CN108183871A (zh) | 2018-06-19 |
CN108183871B true CN108183871B (zh) | 2019-03-12 |
Family
ID=62545187
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201711182105.3A Active CN108183871B (zh) | 2017-11-23 | 2017-11-23 | 一种虚拟交换机、虚拟交换机启动方法,电子设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN108183871B (zh) |
Families Citing this family (15)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110071880B (zh) * | 2018-01-24 | 2021-06-18 | 北京金山云网络技术有限公司 | 报文转发方法、转发装置、服务器及存储介质 |
CN109150589A (zh) * | 2018-07-25 | 2019-01-04 | 赛尔网络有限公司 | 基于Open Stack虚拟网络阻塞异常的处理方法及系统 |
CN109412888B (zh) * | 2018-10-09 | 2021-02-02 | 迈普通信技术股份有限公司 | 虚拟交换机监控方法及装置 |
CN109901909B (zh) * | 2019-01-04 | 2020-12-29 | 中国科学院计算技术研究所 | 用于虚拟化系统的方法及虚拟化系统 |
CN109976877B (zh) * | 2019-03-22 | 2021-05-04 | 优刻得科技股份有限公司 | 利用virtio驱动实现请求的方法、装置和存储介质 |
CN112527403B (zh) | 2019-09-19 | 2022-07-05 | 荣耀终端有限公司 | 一种应用启动方法及电子设备 |
CN111343019B (zh) * | 2020-02-24 | 2023-05-16 | 深圳市信锐网科技术有限公司 | 一种重连方法、装置和存储介质 |
CN111385296B (zh) * | 2020-03-04 | 2022-06-21 | 深信服科技股份有限公司 | 一种业务进程重启方法、装置、存储介质以及系统 |
CN111930467B (zh) * | 2020-07-02 | 2024-03-26 | 联想(北京)有限公司 | 虚拟机启动方法、装置、设备及计算机可读存储介质 |
CN112015559A (zh) * | 2020-09-03 | 2020-12-01 | 深圳虹川科技有限公司 | 基于http协议的异步实时数据更新系统及方法 |
CN113114641B (zh) * | 2021-03-30 | 2022-10-14 | 烽火通信科技股份有限公司 | 一种单cpu实现协议nsr的方法及系统 |
CN113630265B (zh) * | 2021-06-30 | 2023-04-07 | 济南浪潮数据技术有限公司 | 一种基于智能网卡的虚拟网络冗余备份方法及装置 |
CN113703672B (zh) * | 2021-07-30 | 2023-07-14 | 郑州云海信息技术有限公司 | 一种超融合系统及其io请求下发方法、物理服务器 |
CN113505011B (zh) * | 2021-09-08 | 2021-12-07 | 北京鲸鲮信息系统技术有限公司 | 权限同步方法、装置、电子设备与存储介质 |
CN117640747B (zh) * | 2023-12-12 | 2024-07-09 | 北京志凌海纳科技股份有限公司 | 一种基于代理服务的vhost-user重连方法和系统 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103034591A (zh) * | 2012-11-21 | 2013-04-10 | 北京航空航天大学 | 虚拟机内存共享方法及装置 |
CN106250126A (zh) * | 2016-07-26 | 2016-12-21 | 武汉深之度科技有限公司 | 一种Linux系统下的XFS实现系统及方法 |
CN106371911A (zh) * | 2016-09-06 | 2017-02-01 | 北京海誉动想科技股份有限公司 | 守护进程重启被守护进程的方法 |
Family Cites Families (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101727331B (zh) * | 2008-10-24 | 2013-03-20 | 国际商业机器公司 | 升级活动虚拟机的客户操作系统的方法和设备 |
CN103581008B (zh) * | 2012-08-07 | 2017-04-12 | 杭州华三通信技术有限公司 | 路由器及其软件升级方法 |
CN103885811B (zh) * | 2012-12-21 | 2017-05-31 | 中国电信股份有限公司 | 虚拟机系统全系统在线迁移的方法、系统与装置 |
CN104780071B (zh) * | 2015-04-21 | 2018-12-25 | 新华三技术有限公司 | 虚拟交换机的升级方法及装置 |
-
2017
- 2017-11-23 CN CN201711182105.3A patent/CN108183871B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103034591A (zh) * | 2012-11-21 | 2013-04-10 | 北京航空航天大学 | 虚拟机内存共享方法及装置 |
CN106250126A (zh) * | 2016-07-26 | 2016-12-21 | 武汉深之度科技有限公司 | 一种Linux系统下的XFS实现系统及方法 |
CN106371911A (zh) * | 2016-09-06 | 2017-02-01 | 北京海誉动想科技股份有限公司 | 守护进程重启被守护进程的方法 |
Also Published As
Publication number | Publication date |
---|---|
CN108183871A (zh) | 2018-06-19 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN108183871B (zh) | 一种虚拟交换机、虚拟交换机启动方法,电子设备 | |
US11068355B2 (en) | Systems and methods for maintaining virtual component checkpoints on an offload device | |
CN101765225B (zh) | 一种虚拟化的集群管理方法和集群节点 | |
KR101242908B1 (ko) | 가상화된 컴퓨터 시스템들에 대한 분배된 가상 스위치 | |
US7581229B2 (en) | Systems and methods for supporting device access from multiple operating systems | |
CN102073462B (zh) | 虚拟存储迁移方法、系统和虚拟机监控器 | |
EP2831732B1 (en) | System and method for supporting live migration of virtual machines in an infiniband network | |
US9063793B2 (en) | Virtual server and virtual machine management method for supporting zero client by providing host interfaces from classified resource pools through emulation or direct connection modes | |
US20240054006A1 (en) | Virtualization processing system, method and apparatus, and device | |
US20130254368A1 (en) | System and method for supporting live migration of virtual machines in an infiniband network | |
JP2010033404A (ja) | 仮想計算機システムおよび仮想計算機システムの制御方法 | |
CN102446119B (zh) | 基于Passthrough I/O的虚拟机动态迁移方法 | |
CN106528327A (zh) | 一种数据处理方法以及备份服务器 | |
CN105245523A (zh) | 应用于桌面虚拟化场景的存储服务平台及其实现方法 | |
CN102833310A (zh) | 一种基于虚拟化技术的工作流引擎集群系统 | |
CN104536842A (zh) | 基于kvm虚拟化的虚拟机容错方法 | |
CN105468429A (zh) | 一种高效虚拟化集群管理方法和集群节点 | |
Kooburat et al. | The Best of Both Worlds with {On-Demand} Virtualization | |
CN114691286A (zh) | 服务器系统、虚拟机创建方法及装置 | |
CN109857464A (zh) | 用于平台部署与操作移动操作系统的系统及其方法 | |
CN116257276B (zh) | 支持虚拟化硬件加速的虚拟宿主机用户后端升级方法 | |
CN107704618B (zh) | 一种基于aufs文件系统的热迁徙方法和系统 | |
CN115913953A (zh) | 一种云资源加速方法、装置及其介质 | |
CN113660123B (zh) | 虚拟交换机升级方法、装置、电子设备以及存储介质 | |
CN108021408B (zh) | 升级方法及装置 |
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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant | ||
TR01 | Transfer of patent right |
Effective date of registration: 20200628 Address after: 100102 3 / F / 01, 2-4 / F, building 6, yard 6, Wangjing East Road, Chaoyang District, Beijing Patentee after: Beijing three cloud computing Co.,Ltd. Address before: 100083 Beijing Haidian District North Fourth Ring Road West, No. 9 2106-030 Patentee before: BEIJING SANKUAI ONLINE TECHNOLOGY Co.,Ltd. |
|
TR01 | Transfer of patent right |