CN110096333B - 一种基于非易失内存的容器性能加速方法 - Google Patents
一种基于非易失内存的容器性能加速方法 Download PDFInfo
- Publication number
- CN110096333B CN110096333B CN201910312053.XA CN201910312053A CN110096333B CN 110096333 B CN110096333 B CN 110096333B CN 201910312053 A CN201910312053 A CN 201910312053A CN 110096333 B CN110096333 B CN 110096333B
- Authority
- CN
- China
- Prior art keywords
- mirror
- mirror image
- layer
- container
- file
- 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
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
- G06F18/00—Pattern recognition
- G06F18/20—Analysing
- G06F18/24—Classification techniques
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0602—Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
- G06F3/0608—Saving storage space on storage systems
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0602—Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
- G06F3/0614—Improving the reliability of storage systems
- G06F3/0616—Improving the reliability of storage systems in relation to life time, e.g. increasing Mean Time Between Failures [MTBF]
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0628—Interfaces specially adapted for storage systems making use of a particular technique
- G06F3/0646—Horizontal data movement in storage systems, i.e. moving data in between storage devices or systems
- G06F3/0647—Migration mechanisms
- G06F3/0649—Lifecycle management
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0668—Interfaces specially adapted for storage systems adopting a particular infrastructure
- G06F3/0671—In-line storage system
- G06F3/0673—Single storage device
- G06F3/0679—Non-volatile semiconductor memory device, e.g. flash memory, one time programmable memory [OTP]
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/60—Software deployment
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
-
- 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/45579—I/O management, e.g. providing access to device drivers or storage
-
- 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
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/10—Providing a specific technical effect
- G06F2212/1041—Resource optimization
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Human Computer Interaction (AREA)
- Data Mining & Analysis (AREA)
- Life Sciences & Earth Sciences (AREA)
- Artificial Intelligence (AREA)
- Bioinformatics & Cheminformatics (AREA)
- Bioinformatics & Computational Biology (AREA)
- Computer Vision & Pattern Recognition (AREA)
- Evolutionary Biology (AREA)
- Evolutionary Computation (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明涉及一种基于非易失内存的容器性能加速方法,包括:在容器部署过程中将镜像中的各镜像层划分为界上镜像层和界下镜像层中的一个;将界上镜像层存储到非易失内存中且选择性地将各界下镜像层存储到非易失内存和硬盘中的一个;在容器启动和/或运行过程中获取容器所需的热镜像文件并将容器所需的热镜像文件存储到非易失内存中;和至少根据热镜像文件的访问次数对每个镜像进行访问热度排序以在非易失内存的存储空间不足时释放访问热度最低的镜像所占用的非易失内存。本发明通过优化容器部署的机制并结合非易失内存,大幅度加快了容器部署的速度;通过优化镜像存储机制,将热镜像文件存储到非易失内存中,大幅加快了容器启动的速度。
Description
技术领域
本发明涉及虚拟化领域,更具体地,涉及在基于非易失内存的虚拟化环境下优化Docker来加快容器的部署和启动速度,并同时减少对NVM的写磨损和使用量,尤其涉及一种基于非易失内存的容器性能加速方法。
背景技术
继虚拟化技术出现后,容器技术逐渐成为云计算领域具有深远影响的变革技术。近些年来,容器技术及相关应用得到了国内外越来越多的关注、研发和推广,发展势头迅猛,成为云计算技术的重要组成部分。容器技术是一种轻量级的虚拟化方法,提供Linux环境下的资源隔离和管理。容器与虚拟机类似,都是一个相对独立的运行环境,但是相比于虚拟机,容器拥有更高的资源使用效率。
Docker是一个开源的应用容器引擎,或者说是一个便于创建和部署的容器管理框架。让应用开发者可以打包应用以及依赖包到一个可移植的容器中,然后将该可移植的容器发布到任何机器上,即发布应用。同时,Docker还可以实现虚拟化,容器完全使用沙箱机制,相互隔离。
Docker容器是基于镜像产生,镜像是一个特殊的独立的文件***,里面包括容器运行所需的所有文件。或者说,镜像可以由多个只读的、镜像层的层文件构成统一视角,每一个镜像层都包含若干文件和元信息数据。例如,Tomcat服务器镜像包含运行服务器所需的所有代码、运行时工具、***工具和***依赖等等。
Docker是典型的CS架构,在每个宿主机上都会运行一个daemon进程,用来接收和处理来自终端的用户命令。CS架构是指Client/Server架构,即客户端/服务器架构。CS架构是大家熟知的软件***体系结构,通过将任务合理分配到Client端和Server端,降低了***的通讯开销,需要安装客户端才可进行管理操作。Daemon进程是一直运行的服务端程序,又称为守护进程。Daemon进程通常在***后台运行,没有控制终端,不与前台交互,Daemon进程一般作为***服务使用。
Docker借助Linux提供的Cgroups和Namespaces来保证资源使用限制和资源隔离。Cgroups是control groups的缩写,是Linux内核提供的一种可以限制、记录、隔离进程组所使用的物理资源的机制。namespaces即命名空间。命名空间是模块化的,并应用于可被继承的单个进程,总共有七个命名空间来限制进程的访问范围。容器具有更轻量,持续集成,版本控制,和可移植性等优点,因此Docker被业界广泛使用。
但是缓慢的磁盘I/O限制了容器部署和启动。容器拉取镜像时具有三个线程同时下载、顺序下载、顺序存储等特点。这三个特点导致镜像拉取过程中,当所有镜像下载完毕,还有很大一部分镜像等待存储到硬盘中,结果招致一个很高的时延和I/O burst。I/Oburst是指I/O突发。容器本质是享受所有资源虚拟化的进程,在实际中因为慢速的磁盘I/O限制了容器的启动速度。容器化应用程序需要完全初始化的文件***,包含应用程序二进制文件、完整的Linux发行版和所依赖的包。
NVM为加快容器部署和启动带来了新的机会。我们借助新型的NVM来提高容器的性能。NVM具有非易失性、大容量、优良的读写性能和字节寻址等优点。同时NVM也给我们带来了新的挑战,NVM是有写寿命限制并且NVM相比Disk容量相当有限,迫使我们必须合理有效地结合NVM与Docker。
目前,业界主要有两种方法来加快非本地容器部署和启动。
第一种方法是是通过精简镜像来加快非本地容器部署和启动。比如使用更小的基础镜像发行版的方法已经被Docker采用。例如,公开号为CN108446166A的中国专利文献公开了一种快速虚拟机启动方法,包括:响应于应用程序启动请求,通过自动化的构建***以创建针对该应用程序的精简化的Linux虚拟机镜像、或者通过微型操作***针对该应用程序创建一单地址空间机器镜像;所述Linux虚拟机镜像或者单地址空间机器镜像具有以下特征:只包含启动应用程序所需的功能、所占用的内存小于容器内存;所述Linux虚拟机镜像还具有以下特征:该Linux虚拟机镜像为一基于Linux的发行版和优化的Linux内核组成的虚拟机。该发明通过优化虚拟机性能,使虚拟机的启动速度比容器引擎快、内存开销比容器引擎小,从而同时实现优质容器隔离性和轻量虚拟机的目的。但是实际上,该方法是以牺牲兼容性为代价并且收益有限。
第二种方法是借助联合文件***来减少镜像大小,使不同镜像能共享基础镜像。具体来说,当我们在下载docker镜像的时候,会发现每一层都有一个id,这是层的概念,是联合文件***中的重要概念。联合文件***是一种分层、轻量级并且高性能的文件***,它支持对文件***的修改作为一次提交来一层层的叠加,同时可以将不同目录挂载到同一个虚拟文件***下。联合文件***是Docker镜像的基础。镜像可以通过分层来进行继承,基于基础镜像(没有父镜像),可以制作各种具体的应用镜像。不同Docker容器就可以共享一些基础的文件***层,同时再加上自己独有的改动层,由此以减少镜像大小。然而,在实际中不同用户使用不同基础镜像的发行版,用户最终还是需要下载完整镜像。
可见,现有的方法不像其所宣称的那么有效且有诸多限制。因此,有必要对现有技术进行改进。
发明内容
针对现有技术之不足,本发明提供了一种基于非易失内存的容器性能加速方法,本发明针对传统架构下容器部署和启动因磁盘I/O的限制而过慢的问题,根据容器部署和启动的特征以及NVM的优良特性,通过将部分镜像存储到NVM中以加快容器部署和启动,并减少对NVM的写磨损和使用量。关键的是,本发明是从存储构架上的改进来提升容器性能,对基于所有版本的镜像建立的容器的部署和启动速度均有明显提升。
根据一个优选实施方式,一种计算***,该***包括:至少一个处理器;至少一个存储器;以及至少一个指令,所述至少一个指令被存储在所述至少一个存储器上并且能由所述至少一个处理器执行以执行操作;其中,所述操作包括:在容器部署过程中将镜像中的各镜像层划分为界上镜像层和界下镜像层中的一个;将界上镜像层存储到非易失内存中且选择性地将各界下镜像层存储到非易失内存和硬盘中的一个;在容器启动和/或运行过程中获取容器所需的热镜像文件并将容器所需的热镜像文件存储到非易失内存中;和至少根据热镜像文件的访问次数对每个镜像进行访问热度排序以在非易失内存的存储空间不足时释放访问热度最低的镜像所占用的非易失内存。
根据一个优选实施方式,在容器部署过程中将镜像中的各镜像层划分为界上镜像层和界下镜像层中的一个的处理包括:在容器部署过程中根据镜像层的下载状态找到最后正在下载的镜像层;和以最后正在下载的镜像层为界将镜像划分为界上镜像层和界下镜像层;其中,最后正在下载的镜像层以及最后正在下载的镜像层之上的镜像层划分为界上镜像层,最后正在下载的镜像层之下的镜像层划分为界下镜像层。
根据一个优选实施方式,在容器部署过程中根据镜像层的下载状态找到最后正在下载的镜像层的处理包括:建立一个双向链表,双向链表的每个节点代表正在下载的镜像层;当相应的镜像层下载完毕,且双向链表的长度大于一,则删除该镜像层在链表中对应的节点;和当整个镜像拉取过程完成,双向链表中最后只剩下一个节点,其所对应的镜像层就是最后正在下载的镜像层。
根据一个优选实施方式,将界上镜像层存储到非易失内存中且选择性地将各界下镜像层存储到非易失内存和硬盘中的一个的处理包括:分析每个界下镜像层对应的DockerFile得出相应的界下镜像层所含有的特定的镜像文件的情况;当分析相应的界下镜像层对应的DockerFile得出相应的界下镜像层中不含有特定的镜像文件时将该界下镜像层选择性地存储到硬盘中;和/或当分析相应的界下镜像层对应的DockerFile得出相应的界下镜像层中含有特定的镜像文件时将该界下镜像层选择性地存储到非易失内存中。
根据一个优选实施方式,分析每个界下镜像层对应的DockerFile得出相应的界下镜像层所含有的特定的镜像文件的情况的处理包括:先分析每个界下镜像层对应的DockerFile中所包含的命令;在相应的界下镜像层对应的DockerFile中所包含的命令中包含第一类命令时将该界下镜像层作为候选的界下镜像层;在相应的界下镜像层对应的DockerFile中所包含的命令中不包含第一类命令时得出相应的界下镜像层不含有特定的镜像文件;然后分析选出的每个候选的界下镜像层对应的DockerFile中的文件类型;在候选的界下镜像层中的相应的界下镜像层对应的DockerFile中不包含执行引擎和应用文件时得出相应的界下镜像层不含有特定的镜像文件;和在候选的界下镜像层中的相应的界下镜像层对应的DockerFile中包含执行引擎和/或应用文件时得出相应的界下镜像层含有特定的镜像文件;其中,第一类命令是会修改镜像内容而生成新的镜像层的命令。
根据一个优选实施方式,先分析每个界下镜像层对应的DockerFile中所包含的命令的处理包括:通过Docker Daemon获取命令执行时的上下文,并创建一个buildFile对象;读取DockerFile;逐行解析DockerFile以根据DockerFile命令和内容来判断相应的界下镜像层中所含有的特定的镜像文件的情况。
根据一个优选实施方式,在容器启动和/或运行过程中获取容器所需的热镜像文件并将容器所需的热镜像文件存储到非易失内存中的处理包括:在容器启动和/或运行过程中通过跟踪***调用、跟踪文件变化、跟踪目录变化和跟踪进程解析出镜像启动和/或运行过程中必要的文件和文件依赖;和将解析出的镜像启动和/或运行过程中必要的文件和文件依赖作为容器所需的热镜像文件。
根据一个优选实施方式,至少根据热镜像文件的访问次数对每个镜像进行访问热度排序以在非易失内存的存储空间不足时释放访问热度最低的镜像所占用的非易失内存的处理包括:统计每个镜像在采样周期内所对应的热镜像文件的访问次数;记录每个镜像的热镜像文件的大小;计算每个镜像的热镜像文件的单位大小访问比RHS;根据单位大小访问比对每个镜像进行访问热度排序;和在非易失内存的存储空间不足时释放访问热度最低的镜像所占用的非易失内存;其中,Ti是访问相应的镜像的所有热镜像文件的总访问次数,Si是访问相应的镜像的所有热镜像文件的总大小。
根据一个优选实施方式,一种基于非易失内存的容器性能加速方法,包括:
在容器部署过程中将镜像中的各镜像层划分为界上镜像层和界下镜像层中的一个;
将界上镜像层存储到非易失内存中且选择性地将各界下镜像层存储到非易失内存和硬盘中的一个;
在容器启动和/或运行过程中获取容器所需的热镜像文件并将容器所需的热镜像文件存储到非易失内存中;和
至少根据热镜像文件的访问次数对每个镜像进行访问热度排序以在非易失内存的存储空间不足时释放访问热度最低的镜像所占用的非易失内存。
根据一个优选实施方式,在容器部署过程中将镜像中的各镜像层划分为界上镜像层和界下镜像层中的一个的处理包括:在容器部署过程中根据镜像层的下载状态找到最后正在下载的镜像层;和以最后正在下载的镜像层为界将镜像划分为界上镜像层和界下镜像层;其中,最后正在下载的镜像层以及最后正在下载的镜像层之上的镜像层划分为界上镜像层,最后正在下载的镜像层之下的镜像层划分为界下镜像层。
根据一个优选实施方式,一种计算***,该***包括:至少一个处理器;至少一个存储器;以及至少一个指令,所述至少一个指令被存储在所述至少一个存储器上并且能由所述至少一个处理器执行以执行操作;其中,所述操作包括:将界上镜像层存储到非易失内存中且选择性地将包含特定的镜像文件的界下镜像层存储到非易失内存中和将不包含特定的镜像文件的界下镜像层存储到硬盘中;和在容器启动和/或运行过程中获取容器所需的热镜像文件并将容器所需的热镜像文件存储到非易失内存中。
根据一个优选实施方式,所述操作可以包括:在相应的界下镜像层中的DockerFile中不仅包含第一类命令还包含执行引擎和应用文件中的至少一个时得出相应的界下镜像层包含特定的镜像文件。
根据一个优选实施方式,第一类命令是会修改镜像内容而生成新的镜像层的命令。
根据一个优选实施方式,最后正在下载的镜像层以及最后正在下载的镜像层之上的镜像层划分为界上镜像层,最后正在下载的镜像层之下的镜像层划分为界下镜像层。
根据一个优选实施方式,当整个镜像拉取过程完成,双向链表中最后只剩下一个节点,其所对应的镜像层就是最后正在下载的镜像层。
附图说明
图1是本发明的一个优选实施方式的模块连接示意图;
图2是本发明的一个优选实施方式的功能模块图;和
图3是本发明方法中镜像划分过程的细化流程图。
附图标记列表
100:非易失内存 200:硬盘 300:运行内存
400:镜像库 500:Docker Daemon 600:内核
700:容器 800:镜像 810:镜像层
811:热镜像文件 812:特定的镜像文件
具体实施方式
下面结合附图进行详细说明。
本发明中所使用的部分术语的解释如下:
非易失内存是指Non-volatile memory,缩写为NVM,也称非易失存储器,具有非易失、按字节存取、存储密度高、低能耗、读写性能接近DRAM,但读写速度不对称,寿命有限。
Dockerfile是一个包含用于组合镜像的命令的文本文档。Docker通过读取Dockerfile中的指令自动生成镜像。
buildFile对象是指Docker Daemon500中一个部件,根据DockerFile中的命令进行相应的build操作,生成相应的镜像层810。换言之,buildFile对象可以相当于或者比喻为一个生产镜像车间,只要有原材料输入,它就可以按照需求为用户生产Docker镜像。这里的原材料是指DockerFile。
容器部署可以是指容器从docker Hub下载镜像并存储的这个过程。
容器启动可以是指容器基于静态的镜像创建出动态的容器的这个过程。
特定的镜像文件可以是指粗粒度热镜像文件。粗粒度热镜像文件是存在冗余的,且只包含大部分热镜像文件。在相应的界下镜像层810中的DockerFile中不仅包含第一类命令还包含执行引擎和应用文件中的至少一个时可以得出相应的界下镜像层810包含特定的镜像文件。
热镜像文件是指容器启动所必需的镜像文件。应当注意的是,并不是所有的镜像中的文件都是启动所必需的。热镜像文件精确的热镜像文件,里面只包含容器启动所必需的热镜像文件。
冷镜像文件可以是指镜像中启动容器所不需要的且使用频率相对低的文件。
实施例1
本实施例公开了一种计算***,或者说一种基于异构内存的能加速容器的部署和启动的***,或者说一种基于非易失内存的容器性能加速***,或者说一种能加速容器的部署和启动速度的计算***,或者说一种基于非易失内存的能提高容器性能的计算***,该***适于执行本发明记载的各个方法步骤,以达到预期的技术效果。在不造成冲突或者矛盾的情况下,其他实施例的优选实施方式的整体和/或部分内容可以作为本实施例的补充。该***例如可以是通用计算机、服务器和服务器集群中的至少一个。计算机可以是云计算机。服务器可以是云服务器。服务器集群可以是云服务器集群。
根据一个优选实施方式,该***可以包括:至少一个处理器;至少一个存储器;和/或至少一个指令。所述至少一个指令被存储在所述至少一个存储器上并且能由所述至少一个处理器执行以执行操作。
根据一个优选实施方式,操作可以包括:在容器700部署过程中将镜像中的各镜像层810划分为界上镜像层810和界下镜像层810中的一个;将界上镜像层810存储到非易失内存100中且选择性地将各界下镜像层810存储到非易失内存100和硬盘200中的一个;在容器700启动和/或运行过程中获取容器700所需的热镜像文件811并将容器700所需的热镜像文件811存储到非易失内存100中;和/或至少根据热镜像文件811的访问次数对每个镜像进行访问热度排序以在非易失内存100的存储空间不足时释放访问热度最低的镜像所占用的非易失内存100。优选地,上述操作均可以由在***上的Docker Daemon500完成。即,本发明的优化工作均可以在Docker Daemon500中完成,保证了Docker的透明性。参见图1,运行内存300可以从镜像库400拉取镜像800。参见图2,Docker daemon500是基于内核600的Cgroups和Namespaces实现的。镜像800可以建立在内核600上。内核600可以是指kernel。镜像800可以包括若干镜像层810。容器700是基于镜像800创建的。即,容器700中的进程依赖于镜像中的文件。这里的文件包括进程运行所需要的可执行文件、依赖软件、库文件、配置文件等等。优选地,在容器700部署过程中将镜像800中的各镜像层810划分为界上镜像层810和界下镜像层810中的一个可以是通过修改Docker Daemon500的镜像下载管理模块pullRepository来实现的。优选地,在容器700启动和/或运行过程中获取容器700所需的热镜像文件811并将容器700所需的热镜像文件811存储到非易失内存100中可以是通过修改DockerDaemon500的镜像存储管理模块graph来实现的。本发明采用此方式至少能够实现以下有益技术效果:第一,本发明通过优化容器700部署的机制并结合非易失内存100,大幅度加快了容器700部署的速度;第二,本发明通过优化镜像存储机制,将热镜像文件811存储到非易失内存100中,大幅加快了容器700启动的速度;第三,本发明在容器700部署阶段存储部分镜像800到非易失内存100中,最终只存储热镜像文件811到非易失内存100中,大大减少了对非易失内存100的写磨损和非易失内存100的使用量;第四,本发明仅对Docker***架构做了修改,具有通用性和透明度,通用性是支持广泛的工作流程,透明度是支持这些工作流,而无需修改应用程序。
根据一个优选实施方式,在容器700部署过程中将镜像中的各镜像层810划分为界上镜像层810和界下镜像层810中的一个的处理可以包括:在容器700部署过程中根据镜像层810的下载状态找到最后正在下载的镜像层810;和以最后正在下载的镜像层810为界将镜像划分为界上镜像层810和界下镜像层810;其中,最后正在下载的镜像层810以及最后正在下载的镜像层810之上的镜像层810划分为界上镜像层810,最后正在下载的镜像层810之下的镜像层810划分为界下镜像层810。本发明采用此方式至少能够实现以下有益技术效果:界上镜像层810是产生时延的关键,本发明通过该方式区分界下镜像层810和界下镜像层810,并将界上镜像层810存储到非易失内存100中,提高了容器700的部署和启动速度。
根据一个优选实施方式,在容器700部署过程中根据镜像层810的下载状态找到最后正在下载的镜像层810的处理可以包括:建立一个双向链表,双向链表的每个节点代表正在下载的镜像层810;当相应的镜像层810下载完毕,且双向链表的长度大于一,则删除该镜像层810在链表中对应的节点;和当整个镜像拉取过程完成,双向链表中最后只剩下一个节点,其所对应的镜像层810就是最后正在下载的镜像层810。本发明采用此方式至少能够实现以下有益技术效果:第一,使用双向链表删除节点效率更高;第二,双向链表遍历链表更方便,可以从两个方向遍历。
根据一个优选实施方式,将界上镜像层810存储到非易失内存100中且选择性地将各界下镜像层810存储到非易失内存100和硬盘200中的一个的处理包括:分析每个界下镜像层810对应的DockerFile得出相应的界下镜像层810所含有的特定的镜像文件812的情况;当分析相应的界下镜像层810对应的DockerFile得出相应的界下镜像层810中不含有特定的镜像文件812时将该界下镜像层810选择性地存储到硬盘200中;和/或当分析相应的界下镜像层810对应的DockerFile得出相应的界下镜像层810中含有特定的镜像文件812时将该界下镜像层810选择性地存储到非易失内存100中。现有技术中,镜像的存储规则是按照层次结构顺序存储,即先存第一层,再存第二层,完全不同于本发明。本发明采用此方式至少能够实现以下有益技术效果:第一,借助非易失内存100优良的读写特性,加快了容器700部署速度;第二,借助非易失内存100优良的读写特性,加快了容器700启动速度。
根据一个优选实施方式,分析每个界下镜像层810对应的DockerFile得出相应的界下镜像层810所含有的特定的镜像文件812的情况的处理包括:先分析每个界下镜像层810对应的DockerFile中所包含的命令;在相应的界下镜像层810对应的DockerFile中所包含的命令中包含第一类命令时将该界下镜像层810作为候选的界下镜像层810;在相应的界下镜像层810对应的DockerFile中所包含的命令中不包含第一类命令时得出相应的界下镜像层810不含有特定的镜像文件812;然后分析选出的每个候选的界下镜像层810对应的DockerFile中的文件类型;在候选的界下镜像层810中的相应的界下镜像层810对应的DockerFile中不包含执行引擎或应用文件时得出相应的界下镜像层810不含有特定的镜像文件812;和在候选的界下镜像层810中的相应的界下镜像层810对应的DockerFile中包含执行引擎或应用文件时得出相应的界下镜像层810含有特定的镜像文件812。优选地,DockerFile中的命令主要分为两类。第一类命令是会修改镜像内容而生成新的镜像层810的命令。比如,第一类命令修改该上一层镜像层810的文件***类型。第一类命令中例如可以是FROM、ADD、COPY、RUN和ONBUILD中的至少一个。第二类命令是仅修改配置文件而不会生成新的镜像层810的命令。比如,第二类命令仅仅修改镜像的config信息。第二类命令中例如可以是ENV、EXPOSE、CMD、LABEL、MAINTAINER、ENTRYPOINT、VOLUM、USER、WORKDIR、ARG、STOPSIGNAL和HEALTHCHECK中的至少一个。本发明采用此方式至少能够实现以下有益技术效果:第一,本发明先对DockerFile进行一次分析得出包含第一类命令的候选的界下镜像层810,然后再对DockerFile进行二次分析从候选的界下镜像层810中排除不包含执行引擎和应用文件的界下镜像层810,得到最终的含有热镜像文件811的界下镜像层810,由此以将界下镜像层810中的可能常用的镜像层810更精准地筛选出来,保存到非易失内存100中,以提高容器700的性能,提升容器700的部署;第二,通过对DockerFIle进行第一次分析得到含有特定的镜像文件的界下镜像层810,可以加快容器700第一次启动的速度,因为非易失内存100中已经含有特定的镜像文件,特定的镜像文件是粗粒度热镜像文件,这样容器启动从硬盘200中读取的数据更少;第三,最后只存储热镜像文件811到非易失内存100,这大幅度减少了非易失内存100的使用量。
根据一个优选实施方式,先分析每个界下镜像层810对应的DockerFile中所包含的命令的处理包括:
通过Docker Daemon500获取命令执行时的上下文,并创建一个buildFile对象,buildFile对象可以是指Docker Daemon500中一个部件,根据DockerFile中的命令进行相应的build操作,生成相应的镜像层810,buildFile对象可以相当于或者比喻为一个生产镜像车间,只要有原材料输入,它就可以按照需求为用户生产Docker镜像,这里的原材料是指DockerFile;
读取DockerFile;
逐行解析DockerFile以根据DockerFile命令和内容来判断相应的界下镜像层810中所含有的特定的镜像文件812的情况。本发明采用此方式至少能够实现以下有益技术效果:第一,只分析DockerFile就能知道镜像层810的内容,这样就避免了对镜像层810内容进行扫描分析;大大提高了效率;第二,通过分析DockerFile就能知道镜像层810的内容,这样在镜像800下载开始之前就能知道镜像层810的内容,这为我们静态分析提供了必要的技术前提,从而加快了容器700的启动。
根据一个优选实施方式,在容器700启动和/或运行过程中获取容器700所需的热镜像文件811并将容器700所需的热镜像文件811存储到非易失内存100中的处理包括:
在容器700启动和/或运行过程中通过跟踪***调用、跟踪文件变化、跟踪目录变化和跟踪进程解析出镜像启动和/或运行过程中必要的文件和文件依赖;和将解析出的镜像启动和/或运行过程中必要的文件和文件依赖作为容器700所需的热镜像文件811。本发明采用此方式至少能够实现以下有益技术效果:第一,相比于静态分析获得特定的镜像文件,动态分析获得更精确的热镜像文件811;第二,上述操作都有非常成熟的解决方案,执行非常稳定高效。
根据一个优选实施方式,在容器700启动和/或运行过程中通过跟踪***调用、跟踪文件变化、跟踪目录变化和跟踪进程解析出镜像启动和/或运行过程中必要的文件和文件依赖的目的可以是解析出容器700启动和运行过程必要的文件和文件依赖。这具体是从两个方面,第一,使用inotify,inotify是用来监视文件***的机制。该机制可以用来跟踪文件和目录,当文件或目录发生变化时,内核600会将文件或目录的变化发送给inotify文件描述符,在应用层只需要调用read()就可以读取这些事件。第二,使用strace。Strace用来跟踪进程执行时的***调用和接收的信号。在Linux中进程不能直接访问硬件设备,当进程需要访问硬件设备(比如读取硬盘文件),必须由用户态模式切换至内核态模式,通过***调用访问硬件设备。Strace可以跟踪到一个进程产生的***调用,包括参数,返回值,执行消耗的时间。
根据一个优选实施方式,至少根据热镜像文件811的访问次数对每个镜像进行访问热度排序以在非易失内存100的存储空间不足时释放访问热度最低的镜像所占用的非易失内存100的处理可以包括:统计每个镜像在采样周期内所对应的热镜像文件811的访问次数;记录每个镜像的热镜像文件811的大小;计算每个镜像的热镜像文件811的单位大小访问比RHS;根据单位大小访问比对每个镜像进行访问热度排序;和/或在非易失内存100的存储空间不足时释放访问热度最低的镜像所占用的非易失内存100。Ti可以是访问相应的镜像的所有热镜像文件811的总访问次数。Si可以是访问相应的镜像的所有热镜像文件811的总大小。优选地,采样周期为0.5~5秒。尤其优选地,采样周期为1秒。本发明采用此方式至少能够实现以下有益技术效果:第一,统计访问次数非常方便,不需要复杂的操作;第二,统计访问次数是个非常常规的操作,所引入的额外开销可以忽略不计;第三,单位大小访问比是一个有效的指标用来描述访问热度;第四,根据访问热度进行排序,来管理非易失内存100的使用,使访问最频繁的镜像常驻非易失内存,可以较大限度的发挥非易失内存100的价值。
实施例2
本实施例公开了一种基于异构内存的能加速容器的部署和启动的方法,或者说一种基于非易失内存的容器性能加速方法,或者说一种能加速容器的部署和启动速度的方法,或者说一种基于非易失内存的能提高容器性能的方法,该方法可以由本发明的***和/或其他可替代的零部件实现。比如,通过使用本发明的***中的各个零部件实现本发明的方法。在不造成冲突或者矛盾的情况下,其他实施例的优选实施方式的整体和/或部分内容可以作为本实施例的补充。
根据一个优选实施方式,该方法可以包括步骤:
镜像划分及存储步骤;抓取热镜像文件811步骤;和/或合理调度步骤。
优选地,镜像划分及存储步骤可以包括:在容器700部署过程中将镜像中的各镜像层810划分为界上镜像层810和界下镜像层810中的一个。抓取热镜像文件811步骤可以包括:在容器700启动和运行过程中,获取容器700启动所必需的文件热镜像文件811,并将其存储到非易失内存100中,将非易失内存100中其他冷镜像文件写回硬盘200。合理调度步骤可以包括:当非易失内存100的可用容量不足时,置换非易失内存100中最不经常使用的镜像的热镜像文件811。本发明采用此方式至少能够实现以下有益技术效果:在非易失内存100的存储空间不足时,能够通过此方法让经常使用的镜像保存在非易失内存100中,以保证其启动和运行性能。
根据一个优选实施方式,该方法可以包括以下步骤中的至少一个:在容器700部署过程中将镜像中的各镜像层810划分为界上镜像层810和界下镜像层810中的一个;将界上镜像层810存储到非易失内存100中且选择性地将各界下镜像层810存储到非易失内存100和硬盘200中的一个;在容器700启动和/或运行过程中获取容器700所需的热镜像文件811并将容器700所需的热镜像文件811存储到非易失内存100中;和至少根据热镜像文件811的访问次数对每个镜像进行访问热度排序以在非易失内存100的存储空间不足时释放访问热度最低的镜像所占用的非易失内存100。
根据一个优选实施方式,该方法可以包括以下步骤中的至少一个:
步骤S100:在容器700部署过程中将镜像中的各镜像层810划分为界上镜像层810和界下镜像层810中的一个;
步骤S200:在容器700启动和/或运行过程中获取容器700所需的热镜像文件811并将容器700所需的热镜像文件811存储到非易失内存100中;和
步骤S300:至少根据热镜像文件811的访问次数对每个镜像进行访问热度排序以在非易失内存100的存储空间不足时释放访问热度最低的镜像所占用的非易失内存100。
根据一个优选实施方式,步骤S100可以包括以下步骤中的至少一个:
步骤S110:识别主机的非易失内存100的位置和容量;
步骤S120:在容器700部署过程中,识别最后正在下载的镜像层810;
步骤S130:分析每个镜像层810是否包含足够多的热镜像文件811;和/或
步骤S140:根据最后正在下载的镜像层810将镜像分为界上镜像层810和界下镜像层810,将界上镜像层810存储到非易失内存100中且选择性地将各界下镜像层810存储到非易失内存100和硬盘200中的一个。优选地,识别主机的非易失内存100的位置可以是为了确认存储路径。优选地,识别主机的非易失内存100的容量可以是为了便于评估非易失内存100的剩余容量是否充足。本发明采用此方式至少能够实现以下有益技术效果:第一,将界上镜像层810存储到非易失内存100中加快了容器700部署;第二,选择性地将界下镜像层810存储到非易失内存100和硬盘200中的一个节约了非易失内存100的使用量。
根据另一个可选的选实施方式,参见图3,步骤S100可以包括以下步骤中的至少一个:
步骤S1010:创建一个栈,将镜像层810按深度逆序入栈,并创建一个空链表
步骤S1020:判断栈是否为空,是则转步骤S1030,否则转步骤S1070;
步骤S1030:判断链表长度是否为1,是则转步骤S1100,否则转步骤S1040;
步骤S1040:从链表中删除下载完成的节点,然后转至步骤S1050;
步骤S1050:判断节点对应镜像的父镜像是否已存储,是则转步骤S1060,否则转步骤S1020;
步骤S1060:存储镜像层810到硬盘200,转步骤S1020;
步骤S1070:判断链表长度是否为3,是则转步骤S1020,否则转步骤S1080;
步骤S1080:出栈并加入链表尾端,转至步骤S1090;
步骤S1090:等待任意镜像层810下载完毕,转至步骤S1030;
步骤S1100:将最后在链表里的镜像层810设置为最后正在下载的镜像层810,转至步骤S1110;
步骤S1110:根据最后正在下载的镜像层810划分界上镜像层810,存储界上镜像层810到非易失内存100中;
步骤S1120:结束。优选地,因为容器700拉取镜像时具有三个线程同时下载的特点,因此,链表的长度最大为3。即将下载完时,只存在最后正在下载的镜像层810,链表长度为1,由此确认最后正在下载的镜像层810。本发明采用此方式至少能够实现以下有益技术效果:第一,使用一个长度最大为3的链表,额外引入的空间开销很小;第二,链表是经典数据结构之一,遍历链表和判断链表长度都很方便。
根据一个优选实施方式,镜像划分部署步骤的子步骤S110中,识别主机非易失内存100的位置和容量,需要重新编译内核,添加NVDIMM Support等模块。
根据一个优选实施方式,步骤S120:在容器700部署过程中,识别最后正在下载的镜像层810包括以下步骤中的至少一个:
步骤S121:建立一个双向链表,链表的每个节点代表正在下载的镜像层810
步骤S122:当镜像层810下载完毕,且链表的长度大于一,则删除在链表中删除对应的节点
步骤S123:当整个镜像拉取过程完成,链表中最后只剩下一个节点,其所对应的镜像层810就是最后正在下载的镜像层810。本发明采用此方式至少能够实现以下有益技术效果:第一,获取最后正在下载的镜像层810很方便高效;第二,使用的经典数据结构链表,这样结果的准确性是可以得到保障。
根据一个优选实施方式,镜像划分部署步骤中的子步骤S130中,分析每个镜像层810中是否有足够多的热镜像文件811,包括如下子步骤中的至少一个:
步骤S131:Docker Daemon500获取命令执行时的context,并创建一个buildFile对象;
步骤S132:读取DockerFile;
步骤S133:逐行解析DockerFile,根据DockerFile命令和内容,来判断该镜像层810是否包含足够多的热镜像文件811;
步骤S134:将包含足够多热镜像文件811的镜像层810存储到非易失内存100中。本发明采用此方式至少能够实现以下有益技术效果:第一,可以初步获得粗粒度热镜像文件,即前面提到的特定的镜像文件;第二,在镜像800下载过程中,将包含特定的镜像文件的镜像层810存储到非易失内存100中,可以加快容器700第一次启动的速度。
根据一个优选实施方式,子步骤S140将镜像分为两部分,包括如下子步骤中的至少一个:
步骤S141:以最后正在下载的镜像层810为界,按照镜像层810的深度,在最后正在下载的镜像层810之下的,我们称之为界下镜像层810,为了节省非易失内存100,界下镜像层810存储到硬盘200中;
步骤S142:以最后正在下载的镜像层810为界,在最后正在下载的镜像层810之上的镜像层810,再加上最后正在下载的镜像层810,称之为界上镜像层810,这部分是存储镜像产生时延的关键,将界上镜像层810存储到非易失内存100中。本发明采用此方式至少能够实现以下有益技术效果:第一,将界上镜像层810存储到非易失内存100中,可以加快容器700部署;第二,没有将界下镜像层810存储到非易失内存100中,这减少了对非易失内存100的使用量。
根据一个优选实施方式,步骤S200抓取热镜像文件811步骤,获取容器700启动所必须的文件热镜像文件811,包括以下子步骤中的至少一个:
步骤S210:静态分析是通过分析DockerFile来获取一些信息,命令主要分为第一类命令和第二类命令;
步骤S220:通过字符串分析出包含热镜像文件811的镜像层810,指导容器700部署过程,初步筛选出热镜像文件811存储在非易失内存100中;
步骤S230:动态分析是在容器700启动和容器700运行阶获取精准的热镜像文件811。动态分析主要通过跟踪***调用、跟踪文件和目录的变化、跟踪进程解析出镜像中必要的文件和文件依赖,这部分文件就是热镜像文件811;和
步骤S240:将非易失内存100中非热镜像文件811刷回硬盘200。优选地,第一类命令修改上一层image的文件***类型,比如FROM,ADD,COPY,RUN等。第二类命令仅仅修改镜像的config信息,比如ENV,EXPOSE,CMD等。本发明采用此方式至少能够实现以下有益技术效果:第一,将非易失内存100中非热镜像文件刷回硬盘200,这有效的节约了非易失内存100,非易失内存100中只存储热镜像文件811,;第二,只通过分析命令来判断镜像800内容,这样相比于扫描镜像层810内容,要高效便捷。
根据一个优选的实施方式,步骤S200可以包括中的至少一个:
步骤S2010:获取镜像的DockerFile文件;
步骤S2020:通过解析字符串对DockerFile命令进行分析;
步骤S2030:将FROM,ADD,COPY,RUN命令所对应的镜像层810标记为候选层;
步骤S2040:继续分析候选层中是否存在执行引擎或者应用文件,如若存在,则将该镜像层810视为粗粒度的热镜像文件811,将其存储到非易失内存100中;
步骤S2050:在容器700启动和运行阶段。在这两个阶段,Docker会将其所需要使用的应用文件调入内存。我们通过跟踪***调用、跟踪文件和目录的变化、跟踪进程解析出镜像中必要的文件和文件依赖,就可以抓取容器700所需的热镜像文件811;和
步骤S2060:将热镜像文件811存储到非易失内存100中,将非易失内存100中非热镜像文件811刷回硬盘200。本发明采用此方式至少能够实现以下有益技术效果:有效节约非易失内存100,大大减少了非易失内存100的使用量;非易失内存100中只存储热镜像文件。
根据一个优选实施方式,步骤S300合理调度步骤,包括以下子步骤中的至少一个:
步骤S310:统计在采样周期T内,每个镜像的热镜像文件811的访问次数;T为0.5~5秒;
步骤S320:根据访问次数,对每个镜像的热镜像文件811进行排序;
步骤S330:当非易失内存100不足时,释放排名最后的镜像所占有的非易失内存100;和/或
步骤S340:重复步骤S330,直到非易失内存100充足。本发明采用此方式至少能够实现以下有益技术效果:第一,为容器700使用非易失内存100提供了一种有效的管理策略;第二,根据访问次数,对每个镜像的热镜像文件811进行排序,所引入的额外开销较小;第三,根据访问次数进行排序,使访问最频繁的镜像的热镜像文件811常驻非易失内存100,更能发挥非易失内存100的使用价值。
根据一个优选实施方式,子步骤S430中,根据DockerFile命令和内容,来判断该镜像层810是否包含足够多的热镜像文件811,包括以下步骤中的至少一个:
步骤S431:根据DockerFile先确定该镜像层810是否包含热镜像文件811,如果不包含,则转至步骤S433,如果包含热镜像文件811,则转至步骤S432;
步骤S432:如果该镜像层810的热镜像文件811只包含Bin文件或***依赖,因此这两类文件占比热镜像文件811较小,则判定该镜像层810包含的热镜像文件811不够多,如果该镜像层810的热镜像文件811包含执行引擎或者应用文件,则判定该镜像层810包含足够多的热镜像文件811,然后转至步骤S433;和
步骤S433:结束。
根据一个优选实施方式,本发明的方法步骤的编号可以不作为对本发明的方法的执行顺序的限制,去除上述方法步骤的编号的方法也属于本发明记载的内容。
如本文所用的词语“模块”描述任一种硬件、软件或软硬件组合,其能够执行与“模块”相关联的功能。
需要注意的是,上述具体实施例是示例性的,本领域技术人员可以在本发明公开内容的启发下想出各种解决方案,而这些解决方案也都属于本发明的公开范围并落入本发明的保护范围之内。本领域技术人员应该明白,本发明说明书及其附图均为说明性而并非构成对权利要求的限制。本发明的保护范围由权利要求及其等同物限定。
Claims (9)
1.一种计算***,其特征在于,该***包括:
至少一个处理器;
至少一个存储器;以及
至少一个指令,所述至少一个指令被存储在所述至少一个存储器上并且能由所述至少一个处理器执行以执行操作;
其中,所述操作包括:
在容器部署过程中将镜像中的各镜像层划分为界上镜像层和界下镜像层;
将界上镜像层存储到非易失内存中且选择性地将各界下镜像层存储到非易失内存或硬盘;
在容器启动和/或运行过程中获取容器所需的热镜像文件并将容器所需的热镜像文件存储到非易失内存中;和
至少根据热镜像文件的访问次数对每个镜像进行访问热度排序以在非易失内存的存储空间不足时释放访问热度最低的镜像所占用的非易失内存;
所述在容器启动和/或运行过程中获取容器所需的热镜像文件并将容器所需的热镜像文件存储到非易失内存中的处理包括:
在容器启动和/或运行过程中通过跟踪***调用、跟踪文件变化、跟踪目录变化和跟踪进程解析出镜像启动和/或运行过程中必要的文件和文件依赖;和
将解析出的镜像启动和/或运行过程中必要的文件和文件依赖作为容器所需的热镜像文件。
2.根据权利要求1所述的计算***,其特征在于,所述在容器部署过程中将镜像中的各镜像层划分为界上镜像层和界下镜像层的处理包括:
在容器部署过程中根据镜像层的下载状态找到最后正在下载的镜像层;和
以最后正在下载的镜像层为界将镜像划分为界上镜像层和界下镜像层;
其中,最后正在下载的镜像层以及最后正在下载的镜像层之上的镜像层划分为界上镜像层,最后正在下载的镜像层之下的镜像层划分为界下镜像层。
3.根据权利要求2所述的计算***,其特征在于,所述在容器部署过程中根据镜像层的下载状态找到最后正在下载的镜像层的处理包括:
建立一个双向链表,双向链表的每个节点代表正在下载的镜像层;
当相应的镜像层下载完毕,且双向链表的长度大于一,则删除该镜像层在链表中对应的节点;和
当整个镜像拉取过程完成,双向链表中最后只剩下一个节点,其所对应的镜像层就是最后正在下载的镜像层。
4.根据权利要求3所述的计算***,其特征在于,所述将界上镜像层存储到非易失内存中且选择性地将各界下镜像层存储到非易失内存或硬盘的处理包括:
分析每个界下镜像层对应的DockerFile得出相应的界下镜像层所含有的特定的镜像文件的情况;
当分析相应的界下镜像层对应的DockerFile得出相应的界下镜像层中不含有特定的镜像文件时将该界下镜像层选择性地存储到硬盘中;和
当分析相应的界下镜像层对应的DockerFile得出相应的界下镜像层中含有特定的镜像文件时将该界下镜像层选择性地存储到非易失内存中。
5.根据权利要求4所述的计算***,其特征在于,所述分析每个界下镜像层对应的DockerFile得出相应的界下镜像层所含有的特定的镜像文件的情况的处理包括:
先分析每个界下镜像层对应的DockerFile中所包含的命令;
在相应的界下镜像层对应的DockerFile中所包含的命令中包含第一类命令时将该界下镜像层作为候选的界下镜像层;
在相应的界下镜像层对应的DockerFile中所包含的命令中不包含第一类命令时得出相应的界下镜像层不含有特定的镜像文件;
然后分析选出的每个候选的界下镜像层对应的DockerFile中的文件类型;
在候选的界下镜像层中的相应的界下镜像层对应的DockerFile中不包含执行引擎和应用文件时得出相应的界下镜像层不含有特定的镜像文件;和
在候选的界下镜像层中的相应的界下镜像层对应的DockerFile中包含执行引擎和/或应用文件时得出相应的界下镜像层含有特定的镜像文件;
其中,第一类命令是会修改镜像内容而生成新的镜像层的命令。
6.根据权利要求5所述的计算***,其特征在于,所述先分析每个界下镜像层对应的DockerFile中所包含的命令的处理包括:
通过Docker Daemon获取命令执行时的上下文,并创建一个buildFile对象;
读取DockerFile;
逐行解析DockerFile以根据DockerFile命令和内容来判断相应的界下镜像层中所含有的特定的镜像文件的情况。
8.一种基于非易失内存的容器性能加速方法,其特征在于,包括:
在容器部署过程中将镜像中的各镜像层划分为界上镜像层和界下镜像层;
将界上镜像层存储到非易失内存中且选择性地将各界下镜像层存储到非易失内存或硬盘;
在容器启动和/或运行过程中获取容器所需的热镜像文件并将容器所需的热镜像文件存储到非易失内存中;和
至少根据热镜像文件的访问次数对每个镜像进行访问热度排序以在非易失内存的存储空间不足时释放访问热度最低的镜像所占用的非易失内存;
所述在容器启动和/或运行过程中获取容器所需的热镜像文件并将容器所需的热镜像文件存储到非易失内存中的处理包括:
在容器启动和/或运行过程中通过跟踪***调用、跟踪文件变化、跟踪目录变化和跟踪进程解析出镜像启动和/或运行过程中必要的文件和文件依赖;和
将解析出的镜像启动和/或运行过程中必要的文件和文件依赖作为容器所需的热镜像文件。
9.根据权利要求8所述的方法,其特征在于,在容器部署过程中将镜像中的各镜像层划分为界上镜像层和界下镜像层的处理包括:
在容器部署过程中根据镜像层的下载状态找到最后正在下载的镜像层;和
以最后正在下载的镜像层为界将镜像划分为界上镜像层和界下镜像层;
其中,最后正在下载的镜像层以及最后正在下载的镜像层之上的镜像层划分为界上镜像层,最后正在下载的镜像层之下的镜像层划分为界下镜像层。
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910312053.XA CN110096333B (zh) | 2019-04-18 | 2019-04-18 | 一种基于非易失内存的容器性能加速方法 |
US16/773,004 US11449355B2 (en) | 2019-04-18 | 2020-01-27 | Non-volatile memory (NVM) based method for performance acceleration of containers |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910312053.XA CN110096333B (zh) | 2019-04-18 | 2019-04-18 | 一种基于非易失内存的容器性能加速方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN110096333A CN110096333A (zh) | 2019-08-06 |
CN110096333B true CN110096333B (zh) | 2021-06-29 |
Family
ID=67445127
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910312053.XA Active CN110096333B (zh) | 2019-04-18 | 2019-04-18 | 一种基于非易失内存的容器性能加速方法 |
Country Status (2)
Country | Link |
---|---|
US (1) | US11449355B2 (zh) |
CN (1) | CN110096333B (zh) |
Families Citing this family (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111432006B (zh) * | 2020-03-30 | 2023-03-31 | 中科九度(北京)空间信息技术有限责任公司 | 一种轻量级资源虚拟化与分配方法 |
WO2021232289A1 (zh) * | 2020-05-20 | 2021-11-25 | 深圳市欢太科技有限公司 | 镜像拉取方法及相关产品 |
CN112130869B (zh) * | 2020-09-11 | 2022-11-29 | 苏州浪潮智能科技有限公司 | 一种ai平台镜像处理的方法和装置 |
CN112527455A (zh) * | 2020-12-10 | 2021-03-19 | 武汉联影医疗科技有限公司 | 业务容器的部署方法、计算机设备和存储介质 |
CN112671892B (zh) * | 2020-12-22 | 2022-11-18 | 北京百度网讯科技有限公司 | 数据传输方法、装置、电子设备及介质 |
CN113805858B (zh) * | 2021-02-10 | 2024-04-05 | 京东科技控股股份有限公司 | 持续部署脚本语言开发的软件的方法和装置 |
CN113342362A (zh) * | 2021-05-31 | 2021-09-03 | 联想(北京)有限公司 | 一种容器引擎docker的信息处理方法、装置、设备和存储介质 |
CN114697313B (zh) * | 2022-03-15 | 2024-07-16 | 浪潮云信息技术股份公司 | 一种基于镜像的文件下载方法 |
CN116192870B (zh) * | 2023-04-21 | 2023-07-11 | 中国科学技术大学 | 基于镜像级元数据管理和负载感知的p2p下载镜像方法 |
CN117369947A (zh) * | 2023-10-26 | 2024-01-09 | 深圳海规网络科技有限公司 | 一种容器镜像的管理方法和管理*** |
CN117201486A (zh) * | 2023-11-07 | 2023-12-08 | 通号通信信息集团有限公司 | 一种用于云计算平台的镜像加速传输方法及介质 |
Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102999444A (zh) * | 2012-11-13 | 2013-03-27 | 华为技术有限公司 | 一种用于替换缓存模块中数据的方法及装置 |
CN103092678A (zh) * | 2013-01-22 | 2013-05-08 | 华中科技大学 | 一种多增量虚拟机内存管理***和方法 |
CN106528224A (zh) * | 2016-11-03 | 2017-03-22 | 腾讯科技(深圳)有限公司 | 一种Docker容器的内容更新方法、服务器及*** |
CN106598789A (zh) * | 2016-11-30 | 2017-04-26 | 成都华为技术有限公司 | 容器服务容灾的方法、装置、生产站点和灾备站点 |
CN107463432A (zh) * | 2017-08-17 | 2017-12-12 | 福建中金在线信息科技有限公司 | 服务器生产环境部署方法、装置、电子设备及存储介质 |
CN108121591A (zh) * | 2017-12-18 | 2018-06-05 | 浪潮软件股份有限公司 | 一种Kubernetes节点的实现方法及装置 |
CN108958927A (zh) * | 2018-05-31 | 2018-12-07 | 康键信息技术(深圳)有限公司 | 容器应用的部署方法、装置、计算机设备和存储介质 |
CN109062658A (zh) * | 2018-06-29 | 2018-12-21 | 优刻得科技股份有限公司 | 实现计算资源服务化的调度方法、装置、介质、设备及*** |
Family Cites Families (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
GB0712640D0 (en) * | 2007-06-28 | 2007-08-08 | Symbian Software Ltd | Domputing device having a merged directory hierarchy from multiple filesystems |
US9043545B2 (en) * | 2012-01-06 | 2015-05-26 | Netapp, Inc. | Distributing capacity slices across storage system nodes |
CN105511943B (zh) * | 2015-12-03 | 2019-04-12 | 华为技术有限公司 | 一种Docker容器运行方法和装置 |
US10366091B2 (en) * | 2016-08-18 | 2019-07-30 | Red Hat, Inc. | Efficient image file loading and garbage collection |
US10592528B2 (en) * | 2017-02-27 | 2020-03-17 | Sap Se | Workload capture and replay for replicated database systems |
US10402213B2 (en) * | 2017-05-26 | 2019-09-03 | Sap Se | Software appliance distribution with layer removal |
CN112491972A (zh) * | 2018-06-11 | 2021-03-12 | 华为技术有限公司 | 资源获取、分发、下载方法、装置、设备及存储介质 |
CN110413455B (zh) * | 2019-07-11 | 2023-12-12 | 北京百度网讯科技有限公司 | 容器镜像处理方法、装置、计算机设备和存储介质 |
-
2019
- 2019-04-18 CN CN201910312053.XA patent/CN110096333B/zh active Active
-
2020
- 2020-01-27 US US16/773,004 patent/US11449355B2/en active Active
Patent Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102999444A (zh) * | 2012-11-13 | 2013-03-27 | 华为技术有限公司 | 一种用于替换缓存模块中数据的方法及装置 |
CN103092678A (zh) * | 2013-01-22 | 2013-05-08 | 华中科技大学 | 一种多增量虚拟机内存管理***和方法 |
CN106528224A (zh) * | 2016-11-03 | 2017-03-22 | 腾讯科技(深圳)有限公司 | 一种Docker容器的内容更新方法、服务器及*** |
CN106598789A (zh) * | 2016-11-30 | 2017-04-26 | 成都华为技术有限公司 | 容器服务容灾的方法、装置、生产站点和灾备站点 |
CN107463432A (zh) * | 2017-08-17 | 2017-12-12 | 福建中金在线信息科技有限公司 | 服务器生产环境部署方法、装置、电子设备及存储介质 |
CN108121591A (zh) * | 2017-12-18 | 2018-06-05 | 浪潮软件股份有限公司 | 一种Kubernetes节点的实现方法及装置 |
CN108958927A (zh) * | 2018-05-31 | 2018-12-07 | 康键信息技术(深圳)有限公司 | 容器应用的部署方法、装置、计算机设备和存储介质 |
CN109062658A (zh) * | 2018-06-29 | 2018-12-21 | 优刻得科技股份有限公司 | 实现计算资源服务化的调度方法、装置、介质、设备及*** |
Non-Patent Citations (2)
Title |
---|
Container-Based Virtualization for Byte-Addressable NVM Data Storage;Ellis R. Giles.et.al;《2016 IEEE International Conference on Big Data (Big Data)》;20161231;全文 * |
操作***虚拟化的研究现状与展望;吴松等;《计算机研究与发展》;20160131;第56卷(第1期);全文 * |
Also Published As
Publication number | Publication date |
---|---|
US20200334066A1 (en) | 2020-10-22 |
CN110096333A (zh) | 2019-08-06 |
US11449355B2 (en) | 2022-09-20 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110096333B (zh) | 一种基于非易失内存的容器性能加速方法 | |
EP3991040B1 (en) | Container management system with a layout manager system | |
JP4571992B2 (ja) | プログラム・コードを論理ディスクにインストールして最適化する方法 | |
CN104603750B (zh) | 使用bpram来布局和执行软件应用 | |
CN104583948B (zh) | 使用bpram来布局和执行操作*** | |
US20110078681A1 (en) | Method and system for running virtual machine image | |
US20100205604A1 (en) | Systems and methods for efficiently running multiple instances of multiple applications | |
TWI539280B (zh) | 用於分析未經特定設計以提供記憶體分配資訊之應用程式及擷取記憶體分配資訊的方法、及其電腦系統和電腦可讀儲存媒體 | |
JPH03129443A (ja) | ファイル転送方法とその装置 | |
US5991763A (en) | Method and apparatus for embedding concatenated data files into object files during runtime in a virtual file system | |
JP2003177932A (ja) | アプリケーションを実行するためのJava(登録商標)クラスのダイナミックローディング | |
JPH11237991A (ja) | コンパイル済アクティベーションを動的に逆最適化する方法及び装置 | |
JP5248912B2 (ja) | サーバ計算機、計算機システムおよびファイル管理方法 | |
JP2000347876A (ja) | スタック・スロット割当て方法および装置 | |
Civolani et al. | FogDocker: Start container now, fetch image later | |
JP5697195B2 (ja) | アクセス予測に基づいてテーブルのミラーリングを制御する管理システム、プログラムおよび方法 | |
JP4921018B2 (ja) | 直接実行機能を提供するためのシステム、コンピュータシステム、方法およびプログラム | |
US11487731B2 (en) | Read iterator for pre-fetching nodes of a B-tree into memory | |
Gu et al. | N-docker: A NVM-HDD hybrid docker storage framework to improve docker performance | |
JP2005293585A (ja) | コンピュータアプリケーションの性能を向上させる方法および装置 | |
TWI777636B (zh) | 組成模組化韌體的方法、裝置及電腦程式產品 | |
WO2024103258A1 (zh) | 代码执行方法、装置及设备 | |
US20220222223A1 (en) | Virtual computing instance based system to support union mount on a platform | |
Lin et al. | N-Docker: A NVM-HDD Hybrid Docker Storage Framework to Improve Docker Performance | |
CN118296191A (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 |