CN114168255A - 容器云平台中异构指令集容器的运行方法和装置 - Google Patents
容器云平台中异构指令集容器的运行方法和装置 Download PDFInfo
- Publication number
- CN114168255A CN114168255A CN202010949478.4A CN202010949478A CN114168255A CN 114168255 A CN114168255 A CN 114168255A CN 202010949478 A CN202010949478 A CN 202010949478A CN 114168255 A CN114168255 A CN 114168255A
- Authority
- CN
- China
- Prior art keywords
- container
- module
- instruction set
- virtual machine
- kernel
- 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/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/45504—Abstract machines for programme code execution, e.g. Java virtual machine [JVM], interpreters, emulators
- G06F9/45516—Runtime code conversion or optimisation
-
- 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/4557—Distribution of virtual machine instances; Migration and load balancing
-
- 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
-
- 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/45591—Monitoring or debugging support
-
- 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
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Stored Programmes (AREA)
Abstract
本发明提供一种容器云平台中异构指令集容器的运行方法和装置,所述方法包括:基于来自用户终端的工作负载部署信息和集群负载状态选择用于部署工作负载的节点;基于选择的节点的芯片类型和工作负载所使用的容器镜像的名称/或地址从镜像仓库获取容器镜像,在不存在申威或龙芯指令集版本的情况下,在选择的节点上启动经裁剪的QEMU,构建基于x86‑64指令集的虚拟机;在构建的虚拟机中加载编译的封装有容器运行时的虚拟机内核;在内核初始化后加载容器运行时,并运行用户指定的容器镜像启动异构指令集容器内的一个或多个应用。本发明的方法能够使得镜像社区中海量的容器资源能够在申威和龙芯等CPU中高效运行,让国产平台能够充分使用现有的海量开源容器资源。
Description
技术领域
本发明涉及云计算技术领域,尤其涉及一种异构指令集容器的运行方法和装置,尤其涉及一种用于申威、龙芯平台的异构指令集容器的运行方法和装置。
背景技术
容器技术是近几年云行业发展中不可缺少的一环,将容器技术服务用在云计算平台上便产生容器云平台技术。容器技术的核心,就是在操作系统中将计算、存储、网络等可利用资源进行分组划分,让应用可以在各个资源组中独立的运行。这种工作方式,可以在一定程度上隔离不同应用的资源占用,也能在操作系统底层复用基础功能组件。但是这种方式存在一个先天性技术限制,即应用经过编译(从源代码生成可执行程序的过程)之后,该应用只能运行在编译器所指定的指令集架构上。指令集,是指一个计算芯片所使用的基础指令集合。在云计算领域,泛指云上节点(物理机)中CPU的指令集。目前最为通用的指令集为Intel/AMD主推的x86、x86-64指令集;IBM主推的Power(PPC64)指令集;ARM公司主推的aarch(arm)、aarch64(arm64)指令集。目前中国自主研发的CPU芯片,指令集略有不同,例如申威芯片使用自主研发的SW64指令集;龙芯芯片使用基于MIPS64指令集改进而来的扩展指令集。对于申威和龙芯这类使用非主流指令集(异构指令集)的CPU,很多大型应用需要在代码上作出复杂的修改才能做到与编译器所指定的指令集架构完全适配。所以目前在基于申威、龙芯CPU的平台上能够运行的应用和容器还非常有限。
在启动容器内的一个或多个应用之前,会将应用和其所使用的运行时环境打包后形成文件压缩包(也称之为容器镜像)。容器镜像是区分指令集架构的,例如全球最大的容器镜像社区dockerhub.com,全球开发者在该社区提供的容器镜像,仅仅局限在诸如x86、x86-64、aarch、aarch64、PPC64这几类主流指令集中。因此对于申威和龙芯芯片而言,目前容器镜像社区中海量的容器资源,可直接使用的非常稀少。因此社区中的大量应用都需要针对相应的容器平台重新进行适配工作和镜像打包。为了实现海量的开源容器镜像资源能够在申威、龙芯这种采用非主流指令集的CPU上运行,现有技术中已经为申威/龙芯平台运行异构容器运提供了技术基础,通过使用软件虚拟化技术,将诸如x86-64指令转译成申威、龙芯CPU所能够正确执行的指令。
图1所示为利用软件虚拟化技术的传统申威/龙芯平台异构容器的运行架构的示意图。如图1所示,该运行架构对应的运行方案中,在采用申威/龙芯CPU的物理机上利用QEMU来启动x86-64指令集的虚拟机,然后在虚拟机中安装同指令集(x86-64指令集)的操作系统;并在操作系统上部署容器环境,最终使得dockerhub.com社区中海量的x86-64指令集容器镜像在虚拟机中运行。当操作系统提供基础的资源组件后,便可以利用容器技术启动容器内的一个或多个应用。然而,对于图1所示的架构,其应用的运行性能比较差,并且虚拟机中运行的完整的操作系统,在虚拟机外部对这些容器进行管理需要会导致容器管理过程愈加复杂,最终导致该方法运行效率低,容器管理过程繁琐,且资源消耗严重。
如何使得镜像社区中海量的容器资源在原本不支持的申威和龙芯CPU中高效运行,是一个亟待解决的问题。
发明内容
鉴于此,本发明实施例提供了一种异构指令集容器的运行方法和装置,以消除或改善现有技术中存在的一个或多个缺陷。
本发明的技术方案如下:
一种容器云平台中异构指令集容器的运行方法,该方法包括如下步骤:
基于来自用户终端的工作负载部署信息和集群负载状态选择用于部署工作负载的节点,所述工作负载部署信息包括:工作负载所使用的容器镜像的名称/或地址;
基于选择的节点的芯片类型和工作负载所使用的容器镜像的名称/或地址从镜像仓库获取容器镜像,在镜像仓库中不存在适用预定异构指令集的镜像版本的情况下,在选择的节点上启动经裁剪的QEMU,构建基于预定标准指令集的虚拟机,其中,所述经裁剪的QEMU保留了指令翻译机制相关模块和基础核心硬件资源模拟机制相关模块,而被裁剪掉了除所保留的指令翻译机制相关模块和基础核心硬件资源模拟机制相关模块之外的部分或全部模块;
在构建的虚拟机中加载经编译的封装有容器运行时的虚拟机内核,所述虚拟机内核包括:基本硬件资源管理程序、权限管理组件、进程管理组件、基础通信组件和容器运行时相关模块组件;
在内核初始化后加载容器运行时,并运行用户指定的容器镜像启动异构指令集容器内的一个或多个应用。
可选地,在选择用于部署工作负载的节点之前,所述方法还包括:利用所述容器云平台的源码编译QEMU,并对QEMU的功能模块进行裁剪。
可选地,所述工作负载部署信息包括工作负载的名称、工作负载所使用的容器镜像的名称和/或地址以及工作负载所要纳入的命名空间;所述预定标准指令集为x86-64指令集;所述异构指令集为与所述x86-64指令集异构的申威或龙芯芯片所采用的指令集。
可选地,在加载虚拟机内核之前,所述方法还包括以下步骤:在虚拟机内核被编译之前,对内核配置文件进行修改;添加容器运行时相关模块;以及在虚拟机内核中封装容器运行时模块。
可选地,所述在虚拟机内核中封装容器运行时模块的步骤包括:将容器运行时套件封装进内核的第一进程中;所述在内核初始化后加载容器运行时的步骤包括:在内核初始化后,运行所述第一进程加载容器进行时;所述方法还包括:将用户指定的容器镜像传送至虚拟机并运行容器镜像内的应用程序。
可选地,所述在选择的节点上启动经裁剪的QEMU之前,所述方法还包括:基于所选择的节点的CPU类型和工作负载部署信息中的镜像从镜像仓库获取相应节点上运行的容器镜像版本;在确定容器镜像版本存在预定的异构指令集版本的情况下,将获取的容器镜像推送至所述选择的节点。
可选地,所述运行时相关模块组件包括:9P文件系统模块、网络块存储设备模块、公平组调度模块、远程直接数据存取(RDMA)控制器的cgroup调度模块、PCI设备的高级配置与电源接口模块、紧凑型PCI总线模块、ipset框架模块、虚拟网络模块、虚拟网卡模块、基于网络流量分类的cgroup调度模块、网络分层服务调度模块、为ipset模块提供元素增加、删除功能的模块、网络过滤器(netfilter)追踪模块、PCI设备的通用主机控制器以及事实组策略调度器。
可选地,所述经裁剪的QEMU被裁剪掉的模块包括以下模块中的部分或全部模块:avx2模块、bluez模块、brlapi模块、bzip2模块、cocoa模块、curses模块、dmg模块、gtk模块、libiscsi模块、libusb模块、linux-aio模块、qom-cast-debug模块、sdl模块、seccomp模块、smartcard模块、spice模块、tpm模块、usb-redir模块、vnc模块、vnc-jpeg模块、vnc-png模块、vnc-sasl模块、vte模块、whpx模块、xen模块和xen-pci-passthrough模块。
本发明的另一方面,还提供一种容器云平台中异构指令集容器的运行装置,该装置包括处理器和存储器,所述存储器中存储有计算机指令,所述处理器用于执行所述存储器中存储的计算机指令,当所述计算机指令被处理器执行时该装置实现如前所述方法的步骤。
本发明的另一方面,还提供一种计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现如前所述方法的步骤。
本发明的容器云平台中异构指令集容器的运行方法和装置,使得镜像社区中海量的容器资源能够在申威和龙芯CPU中高效运行,且大大降低了资源消耗,能够有效缓解容器镜像资源稀缺的短板。
本发明的附加优点、目的,以及特征将在下面的描述中将部分地加以阐述,且将对于本领域普通技术人员在研究下文后部分地变得明显,或者可以根据本发明的实践而获知。本发明的目的和其它优点可以通过在书面说明及其权利要求书以及附图中具体指出的结构实现到并获得。
本领域技术人员将会理解的是,能够用本发明实现的目的和优点不限于以上具体所述,并且根据以下详细说明将更清楚地理解本发明能够实现的上述和其他目的。
附图说明
此处所说明的附图用来提供对本发明的进一步理解,构成本申请的一部分,并不构成对本发明的限定。
图1为传统申威/龙芯平台异构容器的运行方法示意图。
图2为图1所示的运行方法对应的异构容器运行架构示意图。
图3为本发明一实施例中申威/龙芯平台异构容器的运行方法示意图。
图4为本发明一实施例中申威/龙芯平台异构容器的运行架构示意图。
图5为本发明一实施例的容器云平台中异构指令集容器的运行方法流程示意图。
图6为本发明另一实施例中异构指令集容器的运行方法流程示意图。
具体实施方式
为使本发明的目的、技术方案和优点更加清楚明白,下面结合实施方式和附图,对本发明做进一步详细说明。在此,本发明的示意性实施方式及其说明用于解释本发明,但并不作为对本发明的限定。
在此,还需要说明的是,为了避免因不必要的细节而模糊了本发明,在附图中仅仅示出了与根据本发明的方案密切相关的结构和/或处理步骤,而省略了与本发明关系不大的其他细节。
应该强调,术语“包括/包含”在本文使用时指特征、要素、步骤或组件的存在,但并不排除一个或更多个其它特征、要素、步骤或组件的存在或附加。
发明人在实现本发明的过程中发现,在传统申威/龙芯平台异构容器的运行方案运行性能差且容器管理过程复杂是由于以下原因造成的:一方面,图1和图2的方案中的软件虚拟化需要在虚拟硬件中运行一个完整的操作系统,导致对物理机性能产生较大的消耗;另一方面,完整的操作系统会引入与容器运行无关的管理进程,导致计算、存储、网络资源的额外消耗。此外,由于虚拟机中安装了完整的操作系统,虚拟机的操作系统会接管所有的虚拟硬件资源,因此容器云平台需要额外对虚拟机内部的计算、存储、网络资源开销进行监控,才能实现有效的管理和调度。这些都导致现有的容器云平台中异构指令集容器的运行效率和容器管理都得不到保障。
虚拟机所采用的虚拟化技术是依赖软件来模拟硬件功能并创建虚拟计算机系统的技术。虚拟化技术可以分为软件虚拟化技术和硬件虚拟化技术。
软件虚拟化技术是通过软件编码的形式实现一个硬件的功能,其全部的计算操作都是给物理机的CPU去执行,因此执行效率相对较低。软件虚拟化技术的开源工具代表为QEMU,它通过CPU指令转译的方式让系统、应用在虚拟硬件(同构或非同构的指令集)上运行。软件虚拟化方案中,虚拟机所有的CPU指令,必须通过虚拟机管理器(VMM)下发给真实的CPU硬件,在指令传递上就产生额外的开销;另一方面,CPU的执行除了需要指令,还需要维护自身状态,所以VMM需要额外维护真实CPU的运行状态和虚拟CPU的运行状态,每次运行虚拟机中产生的指令,VMM需要同步真实CPU和虚拟CPU的运行状态,才能保障指令的正确执行。因此,VMM管理进程多,虚拟机内产生的CPU指令运行繁琐且效率低下。
硬件虚拟化技术主要是通过操作系统的底层实现和CPU硬件功能相结合,实现高性能虚拟化,其典型技术代表有KVM、XEN、Intel VT。硬件虚拟化技术将VMM对CPU的状态维护功能直接封装到CPU硬件中,让CPU可以自己存储不同的运行状态快速切换。这样虚拟机中的CPU指令不再需要通过VMM去传递,而可以直接进入真实CPU中执行,因此执行效率较高。但是,硬件虚拟化技术无法在虚拟环境中运行非同构指令集的应用。
基于硬件虚拟化技术的限制,在本发明实施例中,借助软件虚拟化技术让容器开源社区海量的X86_64容器镜像资源能够在申威、龙芯这种非主流指令集CPU上高效运行;但本发明的目的在于在使用软件虚拟化技术的同时减少虚拟机对物理机造成的额外性能开销,提高非同构指令集应用的运行效率;此外,本发明还将虚拟机内的容器运行状态和资源使用开销透传给容器云平台,使平台对虚拟机内部的容器实现直接监控和管理。
为了实现上述目的,本发明实施例对现有的基于QEMU运行异构指令集容器的方法进行了改进,而提供了一种新的容器云平台中异构指令集容器的运行方案。图3所示为本发明一实施例中申威/龙芯平台异构容器的运行方法示意图。图4为本发明一实施例中申威/龙芯平台异构容器的运行架构示意图。如图3和图4所示,在本发明的方案中,是通过对QEMU进行裁剪,利用经裁剪的QEMU来构建虚拟机。此外,在虚拟机中利用定制的内核替代现有技术中完整的操作系统,该内核中封装了容器运行时,最后在内核中加载容器运行时,运行客户指定的容器镜像,启动异构指令集容器内的一个或多个应用。本发明的方案相较于传统方法,启动速度更快、额外资源消耗更少、运行效率更高,能够有效缓解容器镜像资源稀缺的短板。
目前对基于申威、龙芯CPU的容器云平台客户而言,仅仅只有非常少量适配好的容器镜像可以使用,利用本发明提出的申威、龙芯平台上异构容器的运行方法,可以在保障基本运行性能的前提下,迅速部署海量的开源容器镜像资源。同时,在操作上,该方法能够做到对用户透明化。
如图5所示,本发明实施例的容器云平台中异构指令集容器的运行方法包括步骤S110-S150。该方法可在容器云平台上实现。
在步骤S110,基于来自用户终端的工作负载部署信息和集群负载状态选择用于部署工作负载的节点。
容器云平台的用户可以通过登陆容器云平台,进入具有部署权限的集群管理页面,通过输入服务部署请求(如点击集群管理页面上的“服务部署”按钮),进入工作负载部署页面。
用户在部署界面填写工作负载部署信息,工作负载部署信息至少可包括:a)工作负载的名称;b)工作负载所使用容器镜像的名字和/或地址;c)工作负载所要纳入的命名空间。此外,还可以包括其他更多信息。其中,容器镜像的名字或地址是用来定位容器镜像,让系统知道去哪里下载镜像文件。命名空间是容器权限管理的一种手段,处于同一命名空间的容器在数据交换、网络通信等方面会更加方便。
用户填写的工作负载部署信息在填写完毕后可传送至容器云平台,容器云平台于是根据集群负载状态来选择被用来部署工作负载的节点(物理机),然后获取节点的CPU类型。
在步骤S120,容器云平台基于选择的节点的芯片类型和工作负载所使用的容器镜像的名称/或地址从镜像仓库获取容器镜像。
镜像仓库是对不同应用程序的容器镜像进行集中管理的位置,其以网络服务的方式对容器镜像进行统一存储、管理、分发,管理的内容包括但不限于不同的应用程序,同一应用程序的不同版本(开发版本、指令集架构版本)等。
容器云平台根据节点CPU类型以及容器镜像的名字或地址,可向镜像仓库查找可以在相应节点上运行的容器镜像(包括容器镜像的版本)。容器镜像的存在形式为文件,但是其内部包含的,是应用程序的完整内容和其所需要的运行时。
在步骤S130,在容器云平台确定镜像仓库中不存在适用预定异构指令集的镜像版本的情况下,在选择的节点上启动经裁剪的QEMU,构建基于预定标准指令集的虚拟机。
在此,预定异构指令集可以是与x86-64指令集异构的申威或龙芯芯片的指令集;预定标准指令集例如可以是x86-64指令集。在容器云平台确定镜像仓库中不存在申威或龙芯的指令集的情况下,在选择的节点上启动经裁剪的软件虚拟化工具QEMU,构建基于x86-64指令集的虚拟机。
QEMU是一套完整的纯虚拟硬件平台工具,亦是一款开源的模拟器及虚拟机管理器。QEMU主要提供两种功能:1)作为用户态模拟器,利用动态代码翻译机制来执行不同于主机架构的代码;2)作为虚拟机监管器,模拟全系统,创建接近于主机性能的虚拟机。现有软件虚拟化工具QEMU功能结构比较复杂。本发明实施例中,仅需要QEMU的指令翻译机制和最基础的核心硬件资源模拟,所以本方法中为了提高其运行时的性能,除了在对QEMU进行编译时少量修改代码以适配申威、龙芯CPU之外,还进行了定制裁剪,所谓“裁剪”,是指在原有方案的基础上进行功能精简和/或个别功能优化,保留了对CPU、内存、存储以及网络的硬件模拟功能,禁用了容器云平台场景下所不需要的模拟组件和功能模块,从而提升QEMU自身的运行效率,裁剪的这些模块列表如表1所示。
表1.QEMU被裁剪掉的模块列表
表1中所列的被裁剪的模块仅为示例,基于QEMU的模块组成,还可以是更少的模块。当然也有可能是更多的模块。经裁剪的QEMU意在保留指令翻译机制相关模块和基础核心硬件资源模拟机制相关模块而裁剪掉所保留的指令翻译机制相关模块和基础核心硬件资源模拟机制相关模块之外的部分或全部模块。
本发明所采用的QEMU需要使用申威或龙芯的源码进行编译。在编译的时候,可通过修改编译命令的参数来达到对QEMU进行功能剪裁的目的,例如,可以将模块的编译命令的参数修改为“disable”来表示模块的禁用或以“enable”来表示模块的启用。
另选地,在步骤S130中,在容器镜像存在申威/龙芯指令集版本的情况下,则可将该镜像推送到被容器云平台选定的节点,容器以常规方式运行直到运行终止或者用户主动关闭、停止工作负载。
另选地,如果镜像仓库中不存在申威/龙芯指令集版本,也不存在X86_64指令集版本,则表示该容器镜像不存在,则容器云平台通过交互页面反馈用户工作负载部署失败,并重新回到工作负载部署页面。
在步骤S140,在构建的虚拟机中加载编译的封装有容器运行时的虚拟机内核。
该虚拟机内核可包括:基本硬件资源管理程序、权限管理组件、进程管理组件、基础通信组件和运行时相关模块组件。
图1所示的传统的容器运行方法是创建一个完整的虚拟机、运行完整的操作系统,再在虚拟机的操作系统中运行客户指定的容器。而本发明实施例中,为了提高申威、龙芯平台上的运行效率,不仅对QEMU进行裁剪,还在虚拟机中利用定制的内核来替代完整的操作系统。这里定制的内核,是指虚拟机中运行的内核,这里对物理机的内核并没有特殊的要求。
如图2和图4所示,虚拟机内核的组成要素并不多,宏观来讲,内核中主要包括的组件为基本硬件资源管理程序、权限管理组件、进程管理组件、基础通信组件,以及核心硬件驱动程序(例如内存/硬盘/网卡/显示/键盘鼠标等)等。因此,内核占用的磁盘空间大小往往在20MB(兆字节)左右,相比操作系统GB(千兆字节)级别的容量而言,内核仅用了操作系统1%的存储空间,缺实现了绝大部分底层功能。
在实现本发明的过程中,发明人发现,申威、龙芯芯片所使用的内核中,缺少一些容器运行时所依赖的模块组件,因此,为了实现虚拟机内核能够支撑容器运行条件,并拥有基本的动态扩容所容能力以及将虚拟机内容器状态透穿出虚拟机的能力,本发明完成了两个主要改进:1)在内核中封装容器运行时;2)补全容器运行时需要的所有内核模块组件。
容器运行时是能够基于在线获取的镜像来创建和运行容器的程序(运行环境)。在内核中封装容器运行时的操作可包括:
将容器运行时套件(如libcontainer)封装进内核的第一进程(也称1号进程,Linux系统中常用的第一进程叫systemd)中。1号进程为内核加载后启动的的第一个进程,其主要作用是对其它的进程进行管理和调度。在现有技术中,如果启动完整的操作系统,第一步也是加载内核到内存,运行1号进程,再启动操作系统的其它附加程序。因此,本发明在1号进程中嵌入容器运行时之后,1号进程便能包括完整的容器运行环境,结合其已有的进程管理功能,便可依靠1号进程运行容器镜像,启动镜像中打包好的应用程序,1号进程再对应用程序进行管理、调度。
此外,补全容器运行时需要补充的模块组件包括:9P文件系统模块、网络块存储设备模块、公平组调度模块、远程直接数据存取(RDMA)控制器的控制组群(cgroup)调度模块、PCI设备的高级配置与电源接口模块、紧凑型PCI总线模块、ipset框架模块、虚拟网络模块、虚拟网卡模块、基于网络流量分类的cgroup调度模块、网络分层服务调度模块、为ipset模块提供元素增加、删除功能的模块、网络过滤器netfilter的追踪模块、PCI设备的通用主机控制器以及事实组策略调度器等,表2示出了要补充的这些模块组件及功能说明,本发明将这些模块补充至虚拟机内核中。
表2.虚拟机内运行的内核模块补全列表
要实现上表所列的模块的补全,可在编译内核之前通过对配置文件进行修改以对模块进行补充。需要注意的是,该内核在申威、龙芯的CPU上运行,其内核源码必须使用支持申威或龙芯的版本。以下表3为配置文件示例。
表3.虚拟机内核配置文件示例
以上内核配置中,y表示编译结果嵌入内核的引导文件,m表示编译的结果作为模块文件放入内核模块的打包压缩文件。
在内核中嵌入了容器运行时组件之后,由于虚拟机内核能够提供硬件资源和容器运行时(运行环境),因此仅依靠内核就可以提供完整的容器运行环境。另一方面,通过补充进内核的网络通信模块,可将虚拟机中的容器运行状态单独从虚拟机中传递出来也能将容器云平台的指令传递进虚拟机,保证虚拟机中的容器能正确执行、管理和调度。
通过将虚拟机内部运行的操作系统替换为系统内核,可以大大减少虚拟机中环境初始化的基础时间。如果启动完整的操作系统,虚拟机状态就绪需要5分钟甚至更久。而只启动内核,一分钟以内便可以完成任务。因此,本发明通过在内核中嵌入容器运行时,已实现不依赖庞大的操作系统,便可在虚拟机中运行X86_64容器。
在步骤S150,在虚拟器内核初始化后加载容器运行时,并运行用户指定的容器镜像,从而启动异构指令集容器内的一个或多个应用。
也即,本发明通过在虚拟机内核中嵌入容器运行时,加载容器运行时之后,便可在虚拟机内核中运行用户指定的容器镜像,从而不依赖庞大的操作系统,便可在虚拟机中运行X86_64容器。具体运行X86_64容器的过程可以同现有技术,在此不再赘述。
通过本发明,能够将海量的X86_64架构容器镜像快速部署到申威、龙芯平台上,同时保障基本的运行性能。
本发明采用软件虚拟化技术,虚拟机中的内核的选择不会被CPU指令集架构所限制。通过对虚拟化工具(QEMU)、虚拟机内核等进行修改,极大降低了异构容器运行在申威、龙芯平台上的成本。同时,本发明的方法对物理机的操作系统、内核、和硬件方面可以不做改动;对于已有的容器镜像而言,也无需做任何改动。
如6所示为本发明另一实施例的容器云平台中异构指令集容器的运行方法流程示意图。如图6所示,该运行方法包括如下步骤:
步骤S61,容器云平台的用户登陆容器云平台。
步骤S62,容器云平台的用户进入具有部署权限的集群管理页面,点击“服务部署”按钮,进入工作负载部署页面。
步骤S63,容器云平台的用户填写工作间负载部署信息并上传至容器云平台,该信息至少包括必填项,如:a)工作负载的名称;b)工作负载所使用容器镜像的名字和/或地址;c)工作负载所要纳入的命名空间。
步骤S64,容器云平台接收用户填写的工作间负载部署信息开始部署工作负载,根据集群负载状态来选择被用来部署工作负载的节点,然后获取节点的CPU类型(如申威或龙芯类型),并进一步根据节点的CPU类型以及容器镜像的名字或地址,从镜像仓库查找可以在相应节点上运行的容器镜像。
步骤S65,容器云平台基于查找结果确认容器镜像的名称或地址是否正确,如果不正确,则执行步骤S72,提示用户镜像不存在,并进一步执行步骤S73,返回“服务部署”页面。如果容器镜像的名称或地址正确,则执行步骤S66。
步骤S66,容器云平台确认镜像仓库中的容器镜像是否存在用于申威或龙芯的版本,如果是,则执行步骤S67和S71,下载容器镜像并正常运行,将该镜像推送到被容器云平台选定的节点,容器以常规方式运行直到运行终止或者用户主动关闭、停止工作负载。如果确认容器镜像不存在用于申威或龙芯的版本,但是存在X86_64指令集版本的镜像,则执行步骤S68,并进一步执行前述图5描述的方法,即:
在步骤S68,下载X86_64指令集版本的镜像;
步骤S69,启动X86_64指令集的虚拟机。更具体地,包括:1)在选定的节点上启动QEMU,构建基于X86_64指令集的虚拟机;2)在虚拟机中加载已经打包好容器运行时的X86_64内核;3)内核初始化后,运行1号进程(如systemd或者init),启动虚拟机,加载容器运行时。
步骤S70,容器云平台运行X86_64指令集版本的镜像,例如将用户指定的容器镜像利用9P文件系统传送进虚拟机并运行容器镜像内的应用乘务或服务程序,直至运行终止或者用户主动关闭、停止工作负载(步骤S71)。
该流程对容器云平台的客户而言,客户直接参与的操作仅仅只有工作服务部署以及填写相关信息而已,容器云平台执行的方法对用户不会对用户有任何感知,因此对用户而言,本发明的方法是对用户是透明的。
此外,本发明的方法在使用软件虚拟化技术的同时通过裁剪QEMU能减少虚拟机管理器管理的复杂度,减少虚拟机对物理机造成的额外性能开销,提高非同构指令集应用的运行效率。本发明的方案相较于传统方法,启动速度更快、额外资源消耗更少、运行效率更高,能够有效缓解容器镜像资源稀缺的短板。
如上是针对申威或龙芯芯片的异构指令集为例进行描述的,但本发明并不限于此,还可以适用于基于其他类型芯片的异构指令集的容器运行。
与上述方法相应地,本发明还提供了一种容器云平台中异构指令集容器的运行装置,该装置包括处理器和存储器,存储器中存储有计算机指令,处理器用于执行存储器中存储的计算机指令,当计算机指令被处理器执行时该装置实现如前所述方法的步骤。该装置例如可以是容器云平台。
本发明还涉及存储介质,其上可以存储有计算机程序代码,当程序代码被执行时可以实现本发明的方法的各种实施例,该存储介质可以是有形存储介质,诸如光盘、随机存储器(RAM)、内存、只读存储器(ROM)、电可编程ROM、电可擦除可编程ROM、寄存器、硬盘、可移动磁盘、CD-ROM或技术领域内所公知的任意其它形式的有形存储介质。
需要明确的是,本发明并不局限于上文所描述并在图中示出的特定配置和处理。为了简明起见,这里省略了对已知方法的详细描述。在上述实施例中,描述和示出了若干具体的步骤作为示例。但是,本发明的方法过程并不限于所描述和示出的具体步骤,本领域的技术人员可以在领会本发明的精神后,作出各种改变、修改和添加,或者改变步骤之间的顺序。
本领域普通技术人员应该可以明白,结合本文中所公开的实施方式描述的各示例性的组成部分、系统和方法,能够以硬件、软件或者二者的结合来实现。具体究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本发明的范围。当以硬件方式实现时,其可以例如是电子电路、专用集成电路(ASIC)、适当的固件、插件、功能卡等等。当以软件方式实现时,本发明的元素是被用于执行所需任务的程序或者代码段。程序或者代码段可以存储在机器可读介质中,或者通过载波中携带的数据信号在传输介质或者通信链路上传送。“机器可读介质”可以包括能够存储或传输信息的任何介质。机器可读介质的例子包括电子电路、半导体存储器设备、ROM、闪存、可擦除ROM(EROM)、软盘、CD-ROM、光盘、硬盘、光纤介质、射频(RF)链路,等等。代码段可以经由诸如因特网、内联网等的计算机网络被下载。
本发明中,针对一个实施方式描述和/或例示的特征,可以在一个或更多个其它实施方式中以相同方式或以类似方式使用,和/或与其他实施方式的特征相结合或代替其他实施方式的特征。
以上所述仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明实施例可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
Claims (10)
1.一种容器云平台中异构指令集容器的运行方法,其特征在于,该方法包括以下步骤:
基于来自用户终端的工作负载部署信息和集群负载状态选择用于部署工作负载的节点,所述工作负载部署信息包括:工作负载所使用的容器镜像的名称/或地址;
基于选择的节点的芯片类型和工作负载所使用的容器镜像的名称/或地址从镜像仓库获取容器镜像,在镜像仓库中不存在适用预定异构指令集的镜像版本的情况下,在选择的节点上启动经裁剪的QEMU,构建基于预定标准指令集的虚拟机,其中,所述经裁剪的QEMU被裁剪掉了除指令翻译机制相关模块和基础核心硬件资源模拟机制相关模块之外的部分或全部模块;
在构建的虚拟机中加载经编译的封装有容器运行时的虚拟机内核,所述虚拟机内核包括:基本硬件资源管理程序、权限管理组件、进程管理组件、基础通信组件和容器运行时相关模块组件;
在内核初始化后加载容器运行时,并运行用户指定的容器镜像,启动该异构指令集容器内的一个或多个应用。
2.根据权利要求1所述的方法,其特征在于,在选择用于部署工作负载的节点之前,所述方法还包括:
利用所述容器云平台的源码编译QEMU,并对QEMU的功能模块进行裁剪。
3.根据权利要求1所述的方法,其特征在于,
所述工作负载部署信息还包括工作负载的名称以及工作负载所要纳入的命名空间;
所述预定标准指令集为x86-64指令集;
所述预定异构指令集为与x86-64指令集异构的申威或龙芯芯片的指令集。
4.根据权利要求1所述的方法,其特征在于,在加载虚拟机内核之前,所述方法还包括以下步骤:
在虚拟机内核被编译之前,对内核配置文件进行修改;
添加容器运行时相关模块;
在虚拟机内核中封装容器运行时模块。
5.根据权利要求4所述的方法,其特征在于,
所述在虚拟机内核中封装容器运行时模块的步骤包括:将容器运行时套件封装进内核的第一进程中;
所述在内核初始化后加载容器运行时的步骤包括:在内核初始化后,运行所述第一进程加载容器进行时;
所述方法还包括:将用户指定的容器镜像传送至虚拟机并运行容器镜像内的应用程序。
6.根据权利要求1所述的方法,其特征在于,所述在选择的节点上启动经裁剪的QEMU之前,所述方法还包括:
基于所选择的节点的CPU类型和工作负载部署信息中的镜像从镜像仓库获取相应节点上运行的容器镜像版本;
在确定镜像仓库中的容器镜像版本存在预定的异构指令集版本的情况下,下载容器镜像并将获取的容器镜像推送至所选择的节点。
7.根据权利要求6所述的方法,其特征在于,所述运行时相关模块组件包括:9P文件系统模块、网络块存储设备模块、公平组调度模块、远程直接数据存取RDMA控制器的控制组群cgroup调度模块、PCI设备的高级配置与电源接口模块、紧凑型PCI总线模块、ipset框架模块、虚拟网络模块、虚拟网卡模块、基于网络流量分类的cgroup调度模块、网络分层服务调度模块、为ipset模块提供元素增加、删除功能的模块、网络过滤器追踪模块、PCI设备的通用主机控制器以及事实组策略调度器。
8.根据权利要求1所述的方法,其特征在于,所述经裁剪的QEMU被裁剪掉的模块包括以下模块中的部分或全部模块:avx2模块、bluez模块、brlapi模块、bzip2模块、cocoa模块、curses模块、dmg模块、gtk模块、libiscsi模块、libusb模块、linux-aio模块、qom-cast-debug模块、sdl模块、seccomp模块、smartcard模块、spice模块、tpm模块、usb-redir模块、vnc模块、vnc-jpeg模块、vnc-png模块、vnc-sasl模块、vte模块、whpx模块、xen模块和xen-pci-passthrough模块。
9.一种容器云平台中异构指令集容器的运行装置,所述装置包括处理器和存储器,其特征在于,所述存储器中存储有计算机指令,所述处理器用于执行所述存储器中存储的计算机指令,当所述计算机指令被处理器执行时该装置实现如权利要求1-8中任意一项所述方法的步骤。
10.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,该程序被处理器执行时实现如权利要求1至8中任意一项所述方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010949478.4A CN114168255A (zh) | 2020-09-10 | 2020-09-10 | 容器云平台中异构指令集容器的运行方法和装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010949478.4A CN114168255A (zh) | 2020-09-10 | 2020-09-10 | 容器云平台中异构指令集容器的运行方法和装置 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN114168255A true CN114168255A (zh) | 2022-03-11 |
Family
ID=80475737
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010949478.4A Pending CN114168255A (zh) | 2020-09-10 | 2020-09-10 | 容器云平台中异构指令集容器的运行方法和装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN114168255A (zh) |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114721719A (zh) * | 2022-04-20 | 2022-07-08 | 上海道客网络科技有限公司 | 一种在集群中容器化部署异构应用的方法和系统 |
CN115756514A (zh) * | 2022-11-14 | 2023-03-07 | 中国电子科技集团公司第十五研究所 | 一种软件自动化编译方法及系统 |
CN116302366A (zh) * | 2023-05-26 | 2023-06-23 | 阿里巴巴(中国)有限公司 | 面向终端开发的xr应用开发系统与方法、设备及介质 |
CN116795453A (zh) * | 2023-08-28 | 2023-09-22 | 成都中科合迅科技有限公司 | 应用程序的多cpu架构调用控制方法和系统 |
-
2020
- 2020-09-10 CN CN202010949478.4A patent/CN114168255A/zh active Pending
Cited By (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114721719A (zh) * | 2022-04-20 | 2022-07-08 | 上海道客网络科技有限公司 | 一种在集群中容器化部署异构应用的方法和系统 |
CN115756514A (zh) * | 2022-11-14 | 2023-03-07 | 中国电子科技集团公司第十五研究所 | 一种软件自动化编译方法及系统 |
CN116302366A (zh) * | 2023-05-26 | 2023-06-23 | 阿里巴巴(中国)有限公司 | 面向终端开发的xr应用开发系统与方法、设备及介质 |
CN116302366B (zh) * | 2023-05-26 | 2023-10-20 | 阿里巴巴(中国)有限公司 | 面向终端开发的xr应用开发系统与方法、设备及介质 |
CN116795453A (zh) * | 2023-08-28 | 2023-09-22 | 成都中科合迅科技有限公司 | 应用程序的多cpu架构调用控制方法和系统 |
CN116795453B (zh) * | 2023-08-28 | 2023-11-03 | 成都中科合迅科技有限公司 | 应用程序的多cpu架构调用控制方法和系统 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
EP3518098B1 (en) | Cross platform content management and distribution system | |
CN114168255A (zh) | 容器云平台中异构指令集容器的运行方法和装置 | |
Chen et al. | Enabling FPGAs in the cloud | |
CN106469083B (zh) | 容器镜像安全检查方法及其装置 | |
CN110413288B (zh) | 应用部署方法、装置、服务器及存储介质 | |
CN110719206B (zh) | 天基fpga虚拟化计算服务系统、方法和可读存储介质 | |
US11385883B2 (en) | Methods and systems that carry out live migration of multi-node applications | |
US20100205604A1 (en) | Systems and methods for efficiently running multiple instances of multiple applications | |
US10212045B2 (en) | Method and system for testing and analyzing management servers | |
CN114721719B (zh) | 一种在集群中容器化部署异构应用的方法和系统 | |
CN113296926B (zh) | 一种资源分配方法、计算设备及存储介质 | |
JP6859463B2 (ja) | 仮想マシンを起動させるための方法、装置、デバイス及び媒体 | |
CN117573338A (zh) | 一种资源分配方法、装置及电子设备 | |
CN114816665B (zh) | 混合编排系统及超融合架构下虚拟机容器资源混合编排方法 | |
CN114253655A (zh) | 基于mips64指令集的安全容器隔离方法和装置 | |
CN115016862A (zh) | 基于Kubernetes集群的软件启动方法、装置、服务器及存储介质 | |
CN116401003A (zh) | 基于桌面操作系统的安卓应用运行方法、系统及存储介质 | |
CN116308990A (zh) | 支持OpenGL的GPU的仿真与集成方法及系统 | |
CN114860203A (zh) | 项目创建方法、装置、服务器及存储介质 | |
CN109271179B (zh) | 虚拟机应用程序管理方法、装置、设备及可读存储介质 | |
CN107220101B (zh) | 一种容器创建方法和装置 | |
CN116578413B (zh) | 一种基于云+端架构的信号级仿真模型云化方法 | |
CN117075925B (zh) | libvirt管控面卸载方法、装置、设备及介质 | |
CN112948062B (zh) | 设备文件的透传方法、设备及计算机存储介质 | |
CN117056029B (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 |