CN115543547B - 一种异构虚拟化平台中虚拟机的迁移方法及系统 - Google Patents
一种异构虚拟化平台中虚拟机的迁移方法及系统 Download PDFInfo
- Publication number
- CN115543547B CN115543547B CN202211514358.7A CN202211514358A CN115543547B CN 115543547 B CN115543547 B CN 115543547B CN 202211514358 A CN202211514358 A CN 202211514358A CN 115543547 B CN115543547 B CN 115543547B
- Authority
- CN
- China
- Prior art keywords
- code
- translation
- basic block
- virtual machine
- chip
- 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
- 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/45508—Runtime interpretation or emulation, e g. emulator loops, bytecode interpretation
-
- 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
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Devices For Executing Special Programs (AREA)
Abstract
本申请提供了一种异构虚拟化平台中虚拟机的迁移方法及系统,其中,该方法包括:静态翻译器对第一芯片的二进制源代码进行翻译得到第一翻译,并对第一翻译结果进行优化后得到目标虚拟机的可执行的本地码,并将本地码存储入文件;动态翻译执行器获取源二进制源代码以及从文件中获取本地码,并在当前待执行的代码为本地码的情况下基于虚拟机执行本地码,或在当前待执行的代码为未翻译的代码的情况下,对未翻译的代码进行翻译得到第二翻译结果,并对第二翻译结果基于虚拟机进行解释执行以实现虚拟机的迁移。通过本申请,解决了相关技术中通过单一的解释执行或静态翻译或动态翻译的方式进行虚拟机的迁移的问题。
Description
技术领域
本申请涉及虚拟机迁移技术领域,尤其涉及一种异构虚拟化平台中虚拟机的迁移方法及系统。
背景技术
当前异构虚拟化平台虚拟机迁移的方式包括:解释执行、静态翻译、动态翻译。其中,1)解释执行:解释器可以准确模拟源机器上各种功能且容易开发,但运行速度严重下降。2)静态翻译:在静态环境下对源机器上的可执行代码进行离线翻译和优化,然后执行传统编译器的代码生成,生成目标虚拟机上的可执行文件,其翻译过程不占用运行时间且代码质量高,但对于程序中普遍出现的间接调用、间接转移、代码自修改等问题较难处理。3)动态翻译:将解释和动态翻译、动态优化相结合的方法。但动态时的优化要增加程序的开销,因此很多较复杂的优化手段不便于利用,使得翻译出的本地代码的质量不如静态翻译高。
针对相关技术中的上述问题,目前尚未存在有效的解决方案。
发明内容
本申请提供了一种异构虚拟化平台中虚拟机的迁移方法及系统,以至少解决相关技术中通过单一的解释执行或静态翻译或动态翻译的方式进行虚拟机的迁移的问题。
在本申请实施的第一方面,首先提供了一种异构虚拟化平台中虚拟机的迁移方法,所述异构虚拟化平台包括由第一芯片和第二芯片组成的异构芯片、静态翻译器以及动态翻译执行器,所述方法包括:所述静态翻译器对所述第一芯片的二进制源代码进行翻译得到第一翻译,并对所述第一翻译结果进行优化后得到目标虚拟机的可执行的本地码,并将所述本地码存储入文件;其中,所述目标虚拟机基于所述第二芯片执行所述本地码;所述动态翻译执行器获取所述源二进制源代码以及从所述文件中获取所述本地码,并在当前待执行的代码为所述本地码的情况下基于所述虚拟机执行所述本地码,或在当前待执行的代码为未翻译的代码的情况下,对未翻译的代码进行翻译得到第二翻译结果,并对所述第二翻译结果基于所述虚拟机进行解释执行以实现所述虚拟机的迁移。
在本申请实施的第二方面,还提供了一种异构虚拟化平台中虚拟机的迁移系统,所述异构虚拟化平台包括由第一芯片和第二芯片组成的异构芯片、静态翻译器以及动态翻译执行器;所述静态翻译器,用于对所述第一芯片的二进制源代码进行翻译得到第一翻译,并对所述第一翻译结果进行优化后得到目标虚拟机的可执行的本地码,并将所述本地码存储入文件;其中,所述目标虚拟机基于所述第二芯片执行所述本地码;所述动态翻译执行器,用于获取所述源二进制源代码以及从所述文件中获取所述本地码,并在当前待执行的代码为所述本地码的情况下基于所述虚拟机执行所述本地码,或在当前待执行的代码为未翻译的代码的情况下,对未翻译的代码进行翻译得到第二翻译结果,并对所述第二翻译结果基于所述虚拟机进行解释执行以实现所述虚拟机的迁移。
在本申请实施的第三方面,还提供了一种电子设备,包括处理器、通信接口、存储器和通信总线,其中,处理器,通信接口,存储器通过通信总线完成相互间的通信;存储器,用于存放计算机程序;处理器,用于执行存储器上所存放的程序时,实现第一方面所述的方法。
在本申请实施的第四方面,还提供了一种计算机可读存储介质,所述计算机可读存储介质中存储有指令,当其在计算机上运行时,使得计算机执行上述第一方面所述的称方法。
通过本申请,该异构虚拟化平台采用的是一个动静结合的架构,由静态翻译器和动态翻译执行器组成,其中,静态翻译器对第一芯片的源代码进行翻译、优化,产生目标虚拟机可执行代码,并以文件的形式存储,进而动态翻译执行器的作用则是利用静态翻译结果,通过翻译、本地码执行和解释执行第二芯片的进制程序。通过本申请既有静态翻译过程不占用运行时间,代码质量高的效果,又有动态翻译和动态优化的效果,从而解决了现有技术中通过单一的解释执行或静态翻译或动态翻译的方式进行虚拟机的迁移的问题。
本申请的一个或多个实施例的细节在以下附图和描述中提出,以使本申请的其他特征、目的和优点更加简明易懂。
附图说明
此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本发明的实施例,并与说明书一起用于解释本发明的原理。
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,对于本领域普通技术人员而言,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1为本申请实施例提供的异构虚拟化平台中虚拟机的迁移方法的流程图;
图2为本申请优选实施例提供的动静结合的二进制翻译系统的结构示意图;
图3为本申请实施例提供的动态翻译执行器结构示意图。
具体实施方式
为使本申请实施例的目的、技术方案和优点更加清楚,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本申请的一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动的前提下所获得的所有其他实施例,都属于本申请保护的范围。
下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行描述。
本申请实施例提供了一种异构虚拟化平台中虚拟机的迁移方法,其中,该异构虚拟化平台包括由第一芯片和第二芯片组成的异构芯片、静态翻译器以及动态翻译执行器。需要说明的是,该第一芯片和第二芯片为不同类型的芯片,在具体示例中该第一芯片可以是ARM芯片,第二芯片可以是申威芯片(SW64),当然其他类型的芯片也是在本申请的保护范围之内的,只要是两种不同类型可组成异构芯片的芯片均是在本申请的保护范围之内的。
此外,在本申请实施例中第一芯片和第二芯片中所涉及到的代码为二进制的代码。
如图1所示,本申请实施例的异构虚拟化平台中虚拟机的迁移方法的步骤包括:
步骤102,静态翻译器对第一芯片的二进制源代码进行翻译得到第一翻译,并对第一翻译结果进行优化后得到目标虚拟机的可执行的本地码,并将本地码存储入文件;其中,目标虚拟机基于第二芯片执行本地码;
在具体示例中,以第一芯片为ARM芯片为例,则静态翻译器可借助profiling信息对ARM源二进制代码进行翻译、优化,产生目标虚拟机可执行的代码并以文件的形式存储。
步骤104,动态翻译执行器获取源二进制源代码以及从文件中获取本地码,并在当前待执行的代码为本地码的情况下基于虚拟机执行本地码,或在当前待执行的代码为未翻译的代码的情况下,对未翻译的代码进行翻译得到第二翻译结果,并对第二翻译结果基于虚拟机进行解释执行以实现虚拟机的迁移。
在具体示例中,以第二芯片为申威芯片为例,动态翻译执行器则是利用静态翻译结果,通过翻译、本地码执行和解释等手段执行申威芯片的进制程序。
通过上述步骤102和步骤104可知,该异构虚拟化平台采用的是一个动静结合的架构,由静态翻译器和动态翻译执行器组成,其中,静态翻译器对第一芯片的源代码进行翻译、优化,产生目标虚拟机可执行代码,并以文件的形式存储,进而动态翻译执行器的作用则是利用静态翻译结果,通过翻译、本地码执行和解释执行第二芯片的进制程序。通过本申请既有静态翻译过程不占用运行时间,代码质量高的效果,又有动态翻译和动态优化的效果,从而解决了现有技术中通过单一的解释执行或静态翻译或动态翻译的方式进行虚拟机的迁移的问题。
在本申请实施例的可选实施方式中,对于上述步骤102中涉及到的静态翻译器对第一芯片的二进制源代码进行翻译,并对翻译结果进行优化后得到目标虚拟机的可执行的本地码的方式,进一步可以包括:
步骤11,静态翻译器基于入口地址对将二进制源代码进行反汇编,得到待翻译或待解释执行的基本块;
其中,该步骤11进一步可以包括:
步骤21,静态翻译器将入口地址赋值给第一芯片的程序计数器;
步骤22,静态翻译器对程序计数器所对应的本地码进行反汇编,并将反汇编结果记录在中间表示IR1中直到识别出基本块的控制转移指令,以得到待翻译或待解释执行的基本块。
通过上述步骤21和步骤22可知,在本申请实施例中,将入口地址对应的程序计数器(PC)作为参数进行反汇编,并将反汇编结果存入IR1中以记录基本块的信息。
步骤12,静态翻译器对基本块进行翻译,得到第一翻译结果;
步骤13,静态翻译器基于在基本块内的寄存器分配算法或跨越基本块的寄存器分配算法对第一翻译结果进行处理,并对处理结果进行跨越基本块的编译常规优化得到目标虚拟机的可执行的本地码。
需要说明的是,可以基于局部寄存器分配(LRA)实现在基本块内的寄存器分配算法,以及基于全局寄存器分配(GRA)实现跨越基本块的寄存器分配算法,以及基于扩展基本块优化(EBO)实现跨越基本块的许多编译优化,如常量传播,死代码 删除等。
在本申请实施例的可选实施方式中,对于上述步骤31中涉及到的静态翻译器对程序计数器所对应的本地码进行反汇编,并将反汇编结果记录在中间表示IR1中直到识别出基本块的控制转移指令,以得到待翻译或待解释执行的基本块的方式,进一步可以包括:
步骤41,在程序计数器为零且基本块的IR1数量在预设范围内的情况下,静态翻译器对本地码进行反汇编得到第一芯片指令;
步骤42,静态翻译器将第一芯片指令记录到IR1中,并判断第一芯片指令是否为控制转移指令;
步骤43,在判断为是的情况下,静态翻译器确定反汇编结束得到待翻译或待解释执行的基本块。
通过上述步骤41至步骤43可知,需要逐条反汇编基本块内每一条指令,将反汇编的结果记录在中间表示中,直到识别出基本块的最后一条控制转移指令,反汇编的一次执行过程结束,从而得到了动态翻译或解释的基本单元。
在本申请实施例的可选实施方式中,对于上述步骤104中涉及到的动态翻译执行器当前待执行的代码为未翻译的代码的情况下,对未翻译的代码进行翻译得到第二翻译结果的方式,进一步可以包括:
步骤51,动态翻译执行器进行基本块的翻译初始化,并判断初始化后的基本块是否需要包装库函数;
步骤52,在判断结果为是的情况下,动态翻译执行器将待翻译的基本块翻译为IR2以调用包装库函数;
步骤53,在判断结果为否的情况下,动态翻译执行器对待翻译的基本块进行标志位分析,并将IR1翻译为IR2以调用包装库函数;
步骤54,动态翻译执行器基于包装库函数进行寄存器分配和标签处理,得到第二翻译结果。
可见,在本申请实施例中,动态翻译执行器对反汇编模块生成的第一芯片(如ARM)源程序进行翻译,生成具同样语义的IR2指令序列。同时,组织动态寄存器分配、标志位计算等与翻译密切相关的模块同时工作。另外,动态翻译执行器的基本单位是一系列指令翻译函数,每个翻译函数对应一个操作语义相同的第一芯片(如ARM)指令。模块从总入口函数Translate()开始,经过条件判断翻译标记、根据编译选项选择加载相关功能等步骤,最后间接的调用这一系列的ARM指令翻译函数来实现源程序的语义。在动态翻译过程中,flagpattern、标志位计算、寄存器动态分配等重要的相关模块同时工作,其中flag pattern模块和标志位计算模块可以有效的提高翻译出的IR2指令的效率。
在本申请实施例中,对于上述步骤104中涉及到的动态翻译执行器对第二翻译结果基于虚拟机进行解释执行的方式,进一步可以包括:
步骤61,动态翻译执行器解释执行基本块中的每一条指令;
步骤62,在基本块的最后一条指令解释完成后,动态翻译执行器基于最后一条指令的操作码调用对应的函数解释最后一条指令,并对下一个基本块进行解释执行。
可见,在本申请实施例中,动态翻译执行器在将将第一芯片的二进制代码表示成IR1中间表示形式之后逐条的模拟解释第一芯片指令的执行。
在本申请实施例的可选实施方式中,对于上述步骤104中涉及到的动态翻译执行器在当前待执行的代码为本地码的情况下基于虚拟机执行本地码的方式,进一步可以包括:
步骤71,动态翻译执行器将当前上下文切换至本地码上下文,并基于本地码上下文执行本地码。
步骤72,在本地码执行完成后,动态翻译执行器将本地码上下文切换至当前上下文。
可见,在基本块已经被翻译过可以对该基本块启动执行,在具体应用场景中可以是从BT控制器转入本地码执行和从本地码执行转入控制器,即都需要进行上下文的切换。
下面以第一芯片为ARM芯片,第二芯片为申威芯片对本申请实施例中的异构虚拟化平台中虚拟机的迁移方法及其二进制翻译系统,以具体实例进行解释说明。该具体实例提供了一种从ARM到SW64(申威芯片)指令集的静态及动态翻译器相结合的虚拟机迁移方法。
其中,该具体实例从ARM到SW64异构虚拟化平台采用动静结合的结构,即由静态翻译器和动态翻译执行器组成,该静态翻译器可能借助profiling信息对ARM源二进制代码进行翻译、优化,产生目标机器上本地的可执行代码,并以文件的形式存储。动态翻译执行器的作用则是利用静态翻译结果,通过翻译、本地码执行和解释等手段执行ARM进制程序。程序的执行单元为一个Block块,即一组线形的ARM指令代码,直到遇到跳转指令结束。在执行过程中进行profiling,记录profiling结果供静态翻译器使用,如图2所示。
ARM到SW64异构虚拟化平台虚拟机迁移系统的动态部分的输入是静态部分生成的文件和ARM的二进制源码。本部分以源码的Block为单位,解释或翻译、执行生成的本地码。
动态翻译执行又分为基本块划分、解释、翻译和本地码执行四个部分。其中,基本块划分是根据基本块入口地址,划分基本块,提取源代码信息。解释是指模拟ARM运行环境,解释执行ARM指令。翻译是指把一个ARM的Block翻译为类ALPHA汇编结构中间表示,并且形成ALPHA本地二进制码,链接并放入内存,该模块还包括一些优化的工作,如标志位定值引用分析,模式分析等;本地码执行用于负责本地码与本系统的上下文切换和本地码执行。
其中,动态翻译部分主要分为分析命令行参数、静态本地码以及ARM文件装载和动态翻译执行三个部分,具体执行流程包括:
步骤201,获取入口地址;
步骤202,调用initialize函数,对各个部分进行初始化;
步骤203,分析命令执行参数;
步骤204,调用装入函数loder(),装入解释器静态本地码以及ARM源二进制文件;
步骤205,调用入口获取函数,获取程序入口;
步骤206,调用Exec_Program(entry)函数,以entry为入口执行被执行程序;
步骤207,导出profile信息;
步骤208,释放所申请的资源,并退出。
此外,该具体实例中的静态翻译器的作用是在程序未执行之前,将ARM源代码进行翻译,生成静态翻译结果。 该结果包括翻译后的目标机器(sw64)代码以及一些辅助信息。静态翻译是离线翻译,其翻译时间不占运行时开销,翻译出的结果可以供动态翻译执行器多次使用,因此静态翻译器可以实现一些力度更大的优化,生成更加高效的目标码。
静态翻译器所实现的主要优化有:
局部寄存器分配(LRA):在基本块内的寄存器分配算法;
全局寄存器分配(GRA):跨越基本块的寄存器分配算法;
扩展基本块优化(EBO):跨越基本块的许多编译常规优化,如常量传播,死代码 删除等。
标志位模式匹配:ARM中的标志位寄存器(EFLAGS)是ARM系统结构区别于sw64结构的主要部件之一,在sw64上模拟标志位的计算和引用需要大量的本地码才能实现。 通过识别ARM程序中标志位计算和标志位使用的指令组合(模式),使用精简的sw64指令便可实现相同的功能,从而避免了大量的模拟标志位的开销,能够大大提高二进制翻译系统的性能。此外,静态翻译有不能处理间接跳转目标的局限性,在本申请中通过语义提升,对一类间接跳转的目标成功实现了识别,在很大程度上克服了静态翻译的这种局限,也提高系统迁移的性能。
在静态翻译器中,文件装入翻译单元将ARM源二进制代码和profiling的结果装入内存,然后由翻译单元对ARM代码进行翻译,翻译出的中间结果交由优化单元进行优化(翻译单元也会在翻译过程中进行一定的优化),最后将翻译和优化的结果按照一定的格式输出,传递给动态翻译执行器使用。
由此可见,在本申请该具体实例中,提供了一个动静结合的二进制翻译系统,该二进制翻译系统包含一个静态翻译器和动态翻译执行器,工作时首先由静态翻译器对ARM可执行文件进行离线翻译和深度优化,然后将翻译出的结果交给动态翻译执行器。动态翻译执行器将ARM的源文件和静态翻译的结果一并装入,如果在执行过程中发现仍有未被翻译过ARM代码,则调用动态翻译器进行在线的翻译和优化,将结果合并入静态翻译的结果一并利用。
如图3所示,在本申请具体实例中的翻译执行器中,文件装载模块负责将ARM源二进制代码和静态翻译的结果装入内存,控制器是动态翻译执行器的总控模块,负责调度其它各模块协调工作。如果当前要执行的ARM代码已经被翻译,则调用本地码执行模块执行已经翻译出的本地码,否则会调用解释器或翻译器对ARM代码进行翻译或解释执行。如果profiling标志为true(真),则要在解释或翻译的过程中调用profile信息收集单元进行信息收集,并保存profile信息结果。
下面进一步结合上述静态翻译器和动态翻译执行器所执行的流程,对该具体实例的具体流程进行解释说明。
本系统的输入是那些在ARM机器Linux操作系统下的单线程应用级可执行文件(以下称作被处理文件),这些文件应遵循国际组织TIS制定的ELF文件格式,并且满足如下要求:被处理文件应是由所书写的源程序经编译器编译生成的可执行代码。允许程序中出现遵循ABI(Application Binary Interface,应用程序二进制接口)嵌入式的嵌入式汇编。为了使被翻译程序能够操作系统资源和访问硬件,允许被翻译程序调用标准的系统函数。允许被翻译程序中包含对应用级异常的处理程序,这些异常在应用级程序中的表现形式有两种:通过Linux系统中Signal函数调用进行响应的异常处理。
此外,该二进制翻译系统对输入信息进行翻译,使得源机器上的可执行代码能够在目标机器上执行,完成它在源机器上同样的功能。该系统只是支持ARM代码在目标机器上执行,不产生任何直接输出。被翻译程序在本系统上执行,所产生的界面和输出则被视作该系统的间接输出。该系统内部生成的数据是动态二进制翻译器在运行时,边执行边生成本地代码,这些本地代码由代码缓冲管理器统一管理和调度,对用户来讲这些本地码是透明的。
该具体实施例中的主要过程为动态翻译执行器所执行,动态翻译执行器的功能是对ARM源二进制文件,充分利用静态翻译器的翻译结果,并辅助解释和动态翻译的方法,实现ARM可执行文件在目标机上正确执行的效果。
动态翻译执行器的功能是对ARM源二进制文件,充分利用静态翻译器的翻译结果,并辅助解释和动态翻译的方法,实现ARM可执行文件在目标机上正确执行的效果。
动态翻译执行器由以下几个模块构成:动态总控模块,用于协调各模块的工作;文件装载模块,用于装载ARM可执行文件以及静态翻译器的翻译结果;命令行参数分析模块,用于分析程序启动时的命令行参数,获取被翻译程序信息;反汇编模块,用于对ARM可执行代码进行反汇编,并形成动态翻译或解释的基本单元;本地码执行环境模块,用于构造本地码运行的上下文环境,包括寄存器映射,本地码装载执行,上下文切换,内存管理等;解释模块,用于对反汇编后的ARM可执行代码的解释执行;翻译模块,用于对反汇编后的ARM可执行代码的翻译;优化模块,用于提高二进制翻译系统的性能采取的优化措施。
其中,总控模块是动态执行的总控模块,它控制对ARM Block的解释、翻译以及本地码的执行。 该模块从ARM入口地址开始,模拟ARM程序执行语义,对于存在本地码的基本块,直接执行本地码,对于不存在本地码的基本块,先翻译后执行。直到模拟的ARM程序结束,本模块结束。该模块所依托的函数是:void Exec_Program(ADDR pc_entry)。其中,二进制翻译系统中动态翻译部分中动态执行总控模块的执行步骤包括:
步骤301,把入口地址赋值给PC,并根据PC内容构建information。
其中,PC是ARM代码的程序计数器,也就是ARM代码的虚地址,本模块将要翻译执行的ARM地址,information中的内容将在翻译或者解释的时候用到。
步骤302,判断PC对应的ARM地址是否已经有本地码存在。如果存在本地码,转步骤307本地码执行。
步骤303,构建ARM Block(基本块),即Block划分;
步骤404,判断以PC为入口的Block是需要解释执行还是翻译执行。如果解释模拟该Block, 到405,否则转406本地码翻译子模块。
步骤405,解释器模拟ARM指令,更新PC,转步骤408。
步骤406,翻译PC入口的Block,并且建立和已有本地码的链接。
步骤407,本地码执行,执行完毕后返回一些构建information的信息,包括更新PC。
步骤408,判断是否ARM程序结束,如果结束,本模块结束,否则记录间接目标地址。转步骤402。
反汇编模块用于划分Block并对Block进行反汇编,记录信息到IR1中。block结束的指令 有:branch、jmp^间接跳转、间接调用、ret和halt。具体过程包括:
步骤501,将 block->entry_vaddr 赋给 PC。
步骤502,对PC所指的指令进行反汇编。
步骤503,取下一条指令。
步骤504,判断该指令的类型是否是Block结束指令,否则转步骤502。
步骤505,将对该block反汇编出的IR1存入该block的IRl缓存中。
步骤506,设置该block的IRl num为IR1数目,IRl addr为IRl缓存地址,标记该block的flag 为已被反汇编。
反汇编模块用于反汇编一个给定的动态的翻译单元。它以该翻译单元的入口pc作为参数,对该翻译单元进行反汇编,反汇编结果存入IR1中,并记录block信息。在本申请中将动态部分执行的ARM文件的指令划分成基本块的形式。反汇编模块需要逐条反汇编基本块内每一条指令,将反汇编的结果记录在ARM指令的中间表示中,直到识别出基本块最后一条控制转移指令,动态反汇编的一次执行过程结束。
解释模块由两部分组成,一部分是在反汇编模块完成操作,将ARM的二进制代码表示成 IR1中间表示形式之后所执行的模块,此模块是逐条的模拟解释ARM指令的执行;另一部分是在执行对指令的解释之前对虚拟执行环境的初始化。具体流程包括:
步骤601,解释器初始化;
步骤602,是否已解释完该block的最后一条指令,如果是,则退出,如果否则执行步骤603;
步骤603,依据该指令的操作码调用相应的函数解释该指令;
步骤604,取该指令的下一条指令。
可见,解释模块由一个总控函数和一系列指令解释函数组成,总控函数是个总调度器,循环的解释每一条指令,具体的指令的解释调用每一个具体的指令解释函数(几乎所有的ARM 指令都对应着一个指令解释函数)。对于每一条指令的解释通常是预先分析指令的含义,然后用同等语义的指令去解释并且同时执行,其中,初始化只是完成对虚拟运行环境的初始化。
此外,翻译模块由两个子模块组成,分别是标志位分析模块和指令翻译模块。标志位分析模块工作在指令翻译之前,可以很好的提高翻译出来的IR2指令序列的效率。翻译模块是对反汇编模块生成的ARM源程序进行翻译,生成具同样语义的IR2指令序列。同时,组织动态寄存器分配、标志位计算等与翻译密切相关的模块同时工作。
翻译模块的基本单位是一系列指令翻译函数,每个翻译函数对应一个操作语义相同的ARM指令。模块从总入口函数Translate()开始,经过条件判断翻译标记、根据编译选项选择加载相关功能等步骤,最后间接的调用这一系列的ARM指令翻译函数来实现源程序的语义。在动态翻译过程中,flag pattern、标志位计算、寄存器动态分配等重要的相关模块同时工作,其中flag pattern模块和标志位计算模块可以有效的提高翻译出的IR2指令的效率。翻译模块的总体工作流程步骤:
步骤701,确定当前基本块是否被翻译,如果是结束,如果不是执行步骤702;
步骤702,翻译初始化;
步骤703,判断基本块是否需要包装库函数;如果需要执行步骤704,如果不需要执行步骤705;
步骤704,翻译成IR2调用包装库函数;
步骤705,标志位分析,IR1翻译到IR2,block优化;
步骤706,申请本地码空间;
步骤707,寄存器分配;
步骤708,标签处理;
步骤709,生成本地码。
可见,与翻译相关的部分,如标志位计算、动态寄存器分配、label处理,和翻译模块共同完成翻译指令的工作。通过识别ARM程序中标志位计算和标志位使用的指令组合,使用精简的sw64指令便可实现相同的功能,从而避免了大量的模拟标志位的开销,能够大大提高二进制翻译系统的性能。
本地码执行模块,通过BT控制器发现某个Block已经被翻译过,调用本模块实现对该Block启动执行,从BT控制器转入本地码执行和从本地码执行转入控制器,都需要进行上下文的切换。由于翻译中采用本地码链接技术,本地码一次执行可能有多个Block被执行。具体执行流程包括:
步骤801,获取入口地址;
步骤802,通过block_node_addr得到block信息表中的一个block_node;
步骤803,从block_node中得到要执行的本地代码地址;
步骤804,BT上下文切换成本地码上下文;
步骤805,记录后续处理部分的地址到一个变量(或寄存器)中,将控制权交“相应的本地码”,本地码执行结束后,将控制返回到变量所记录的地址,此处通过一条IMP指令实现;
步骤806,将最后一条指令类型和待翻译block的指令地址分别记入last_instr_type和targer_instr_pc。
步骤807,本地码上下文切换BT上下文;
步骤808,利用last_instr_type和targer_instr_pc填写information。
通过本申请该具体实施例中的动静结合的二进制翻译系统,首先由静态翻译器对ARM可执行文件进行离线翻译和深度优化,然后将翻译出的结果交给动态翻译执行器。动态翻译执行器将ARM的源文件和静态翻译的结果一并装入,如果在执行过程中发现仍有未被翻译过ARM代码,则调用动态翻译器进行在线的翻译和优化,将结果合并入静态翻译的结果一并利用。
对应于上述图1,本申请实施例还提供了一种异构虚拟化平台中虚拟机的迁移系统,其特征在于,异构虚拟化平台包括由第一芯片和第二芯片组成的异构芯片、静态翻译器以及动态翻译执行器;
静态翻译器,用于对第一芯片的二进制源代码进行翻译得到第一翻译,并对第一翻译结果进行优化后得到目标虚拟机的可执行的本地码,并将本地码存储入文件;其中,目标虚拟机基于第二芯片执行本地码;
动态翻译执行器,用于获取源二进制源代码以及从文件中获取本地码,并在当前待执行的代码为本地码的情况下基于虚拟机执行本地码,或在当前待执行的代码为未翻译的代码的情况下,对未翻译的代码进行翻译得到第二翻译结果,并对第二翻译结果基于虚拟机进行解释执行以实现虚拟机的迁移。
在该系统中,该异构虚拟化平台采用的是一个动静结合的架构,由静态翻译器和动态翻译执行器组成,其中,静态翻译器对第一芯片的源代码进行翻译、优化,产生目标虚拟机可执行代码,并以文件的形式存储,进而动态翻译执行器的作用则是利用静态翻译结果,通过翻译、本地码执行和解释执行第二芯片的进制程序。通过本申请既有静态翻译过程不占用运行时间,代码质量高的效果,又有动态翻译和动态优化的效果,从而解决了现有技术中通过单一的解释执行或静态翻译或动态翻译的方式进行虚拟机的迁移的问题。
在本申请实施例的可选实施方式中,该静态翻译器,用于基于入口地址对将二进制源代码进行反汇编,得到待翻译或待解释执行的基本块;静态翻译器,用于对基本块进行翻译,得到第一翻译结果;静态翻译器,用于基于在基本块内的寄存器分配算法或跨越基本块的寄存器分配算法对第一翻译结果进行处理,并对处理结果进行跨越基本块的编译常规优化得到目标虚拟机的可执行的本地码。
在本申请实施例的可选实施方式中,该静态翻译器,用于将入口地址赋值给第一芯片的程序计数器;静态翻译器,用于对程序计数器所对应的本地码进行反汇编,并将反汇编结果记录在中间表示IR1中直到识别出基本块的控制转移指令,以得到待翻译或待解释执行的基本块。
在本申请实施例的可选实施方式中,该在程序计数器为零且基本块的IR1数量在预设范围内的情况下,静态翻译器,用于对本地码进行反汇编得到第一芯片指令;静态翻译器,用于将第一芯片指令记录到IR1中,并判断第一芯片指令是否为控制转移指令;静态翻译器,用于在判断为是的情况下确定反汇编结束得到待翻译或待解释执行的基本块。
在本申请实施例的可选实施方式中,该动态翻译执行器,用于进行基本块的翻译初始化,并判断初始化后的基本块是否需要包装库函数;在判断结果为是的情况下,动态翻译执行器将待翻译的基本块翻译为IR2以调用包装库函数;在判断结果为否的情况下,动态翻译执行器对待翻译的基本块进行标志位分析,并将IR1翻译为IR2以调用包装库函数;动态翻译执行器,用于基于包装库函数进行寄存器分配和标签处理,得到第二翻译结果。
在本申请实施例的可选实施方式中,该动态翻译执行器,用于解释执行基本块中的每一条指令;动态翻译执行器,用于在基本块的最后一条指令解释完成后,基于最后一条指令的操作码调用对应的函数解释最后一条指令,并对下一个基本块进行解释执行。
在本申请实施例的可选实施方式中,该动态翻译执行器,用于将当前上下文切换至本地码上下文,并基于本地码上下文执行本地码;动态翻译执行器,用于在本地码执行完成后将本地码上下文切换至当前上下文。
需要说明的是,在本文中,诸如“第一”和“第二”等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
以上所述仅是本发明的具体实施方式,使本领域技术人员能够理解或实现本发明。对这些实施例的多种修改对本领域的技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本发明的精神或范围的情况下,在其它实施例中实现。因此,本发明将不会被限制于本文所示的这些实施例,而是要符合与本文所申请的原理和新颖特点相一致的最宽的范围。
Claims (7)
1.一种异构虚拟化平台中虚拟机的迁移方法,其特征在于,所述异构虚拟化平台包括由第一芯片和第二芯片组成的异构芯片、静态翻译器以及动态翻译执行器,所述方法包括:
所述静态翻译器对所述第一芯片的二进制源代码进行翻译得到第一翻译,并对所述第一翻译结果进行优化后得到目标虚拟机的可执行的本地码,并将所述本地码存储入文件;其中,所述目标虚拟机基于所述第二芯片执行所述本地码;
所述动态翻译执行器获取源二进制源代码以及从所述文件中获取所述本地码,并在当前待执行的代码为所述本地码的情况下基于所述虚拟机执行所述本地码,或在当前待执行的代码为未翻译的代码的情况下,对未翻译的代码进行翻译得到第二翻译结果,并对所述第二翻译结果基于所述虚拟机进行解释执行以实现所述虚拟机的迁移;
其中,所述静态翻译器对所述第一芯片的二进制源代码进行翻译,并对翻译结果进行优化后得到目标虚拟机的可执行的本地码,包括:所述静态翻译器基于入口地址对将所述二进制源代码进行反汇编,得到待翻译或待解释执行的基本块;所述静态翻译器对所述基本块进行翻译,得到所述第一翻译结果;所述静态翻译器基于在基本块内的寄存器分配算法或跨越基本块的寄存器分配算法对所述第一翻译结果进行处理,并对处理结果进行跨越基本块的编译常规优化得到所述目标虚拟机的可执行的本地码;
其中,所述静态翻译器基于入口地址对将所述二进制源代码进行反汇编,得到待翻译或待解释执行的基本块,包括:所述静态翻译器将所述入口地址赋值给所述第一芯片的程序计数器;所述静态翻译器对所述程序计数器所对应的所述本地码进行反汇编,并将反汇编结果记录在中间表示IR1中直到识别出所述基本块的控制转移指令,以得到待翻译或待解释执行的基本块;
其中,所述静态翻译器对所述程序计数器所对应的所述本地码进行反汇编,并将反汇编结果记录在中间表示IR1中直到识别出所述基本块的控制转移指令,以得到待翻译或待解释执行的基本块包括:在所述程序计数器为零且基本块的IR1数量在预设范围内的情况下,所述静态翻译器对所述本地码进行反汇编得到所述第一芯片指令;所述静态翻译器将所述第一芯片指令记录到所述IR1中,并判断所述第一芯片指令是否为控制转移指令;在判断为是的情况下,所述静态翻译器确定反汇编结束得到待翻译或待解释执行的基本块。
2.根据权利要求1所述的方法,其特征在于,所述动态翻译执行器当前待执行的代码为未翻译的代码的情况下,对未翻译的代码进行翻译得到第二翻译结果,包括:
所述动态翻译执行器进行所述基本块的翻译初始化,并判断初始化后的基本块是否需要包装库函数;
在判断结果为是的情况下,所述动态翻译执行器将待翻译的基本块翻译为IR2以调用包装库函数;
在判断结果为否的情况下,所述动态翻译执行器对待翻译的基本块进行标志位分析,并将所述IR1翻译为IR2以调用包装库函数;
所述动态翻译执行器基于所述包装库函数进行寄存器分配和标签处理,得到所述第二翻译结果。
3.根据权利要求1所述的方法,其特征在于,所述动态翻译执行器对所述第二翻译结果基于所述虚拟机进行解释执行,包括:
所述动态翻译执行器解释执行所述基本块中的每一条指令;
在所述基本块的最后一条指令解释完成后,所述动态翻译执行器基于所述最后一条指令的操作码调用对应的函数解释所述最后一条指令,并对下一个基本块进行解释执行。
4.根据权利要求1所述的方法,其特征在于,所述动态翻译执行器在当前待执行的代码为所述本地码的情况下基于所述虚拟机执行所述本地码,包括:
所述动态翻译执行器将当前上下文切换至本地码上下文,并基于所述本地码上下文执行所述本地码;
在所述本地码执行完成后,所述动态翻译执行器将所述本地码上下文切换至所述当前上下文。
5.一种异构虚拟化平台中虚拟机的迁移系统,其特征在于,所述异构虚拟化平台包括由第一芯片和第二芯片组成的异构芯片、静态翻译器以及动态翻译执行器;
所述静态翻译器,用于对所述第一芯片的二进制源代码进行翻译得到第一翻译,并对所述第一翻译结果进行优化后得到目标虚拟机的可执行的本地码,并将所述本地码存储入文件;其中,所述目标虚拟机基于所述第二芯片执行所述本地码;
所述动态翻译执行器,用于获取源二进制源代码以及从所述文件中获取所述本地码,并在当前待执行的代码为所述本地码的情况下基于所述虚拟机执行所述本地码,或在当前待执行的代码为未翻译的代码的情况下,对未翻译的代码进行翻译得到第二翻译结果,并对所述第二翻译结果基于所述虚拟机进行解释执行以实现所述虚拟机的迁移;
所述静态翻译器,还用于基于入口地址对将二进制源代码进行反汇编,得到待翻译或待解释执行的基本块;静态翻译器,用于对基本块进行翻译,得到第一翻译结果;静态翻译器,用于基于在基本块内的寄存器分配算法或跨越基本块的寄存器分配算法对第一翻译结果进行处理,并对处理结果进行跨越基本块的编译常规优化得到目标虚拟机的可执行的本地码;
所述静态翻译器,还用于将入口地址赋值给第一芯片的程序计数器;静态翻译器,用于对程序计数器所对应的本地码进行反汇编,并将反汇编结果记录在中间表示IR1中直到识别出基本块的控制转移指令,以得到待翻译或待解释执行的基本块。
所述静态翻译器,还用于在程序计数器为零且基本块的IR1数量在预设范围内的情况下,对本地码进行反汇编得到第一芯片指令,以及将第一芯片指令记录到IR1中,并判断第一芯片指令是否为控制转移指令,且在判断为是的情况下确定反汇编结束得到待翻译或待解释执行的基本块。
6.一种电子设备,其特征在于,包括处理器、通信接口、存储器和通信总线,其中,处理器,通信接口,存储器通过通信总线完成相互间的通信;
存储器,用于存放计算机程序;
处理器,用于执行存储器上所存放的程序时,实现权利要求1-4中任一所述的方法步骤。
7.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,该程序被处理器执行时实现如权利要求1-4中任一所述的方法步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211514358.7A CN115543547B (zh) | 2022-11-30 | 2022-11-30 | 一种异构虚拟化平台中虚拟机的迁移方法及系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211514358.7A CN115543547B (zh) | 2022-11-30 | 2022-11-30 | 一种异构虚拟化平台中虚拟机的迁移方法及系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN115543547A CN115543547A (zh) | 2022-12-30 |
CN115543547B true CN115543547B (zh) | 2023-04-18 |
Family
ID=84721758
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202211514358.7A Active CN115543547B (zh) | 2022-11-30 | 2022-11-30 | 一种异构虚拟化平台中虚拟机的迁移方法及系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN115543547B (zh) |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116170518B (zh) * | 2023-04-26 | 2023-07-18 | 北京太极信息系统技术有限公司 | 一种国产芯片容器云跨架构管理的方法及设备 |
CN116820568B (zh) * | 2023-06-09 | 2024-01-05 | 北京市合芯数字科技有限公司 | 指令翻译方法及装置、存储介质和终端 |
Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108345773A (zh) * | 2017-07-27 | 2018-07-31 | 江苏通付盾信息安全技术有限公司 | 基于虚拟机的代码保护方法及装置、电子设备、存储介质 |
Family Cites Families (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20030088860A1 (en) * | 2001-11-02 | 2003-05-08 | Fu-Hwa Wang | Compiler annotation for binary translation tools |
CN100359470C (zh) * | 2004-06-30 | 2008-01-02 | 中国科学院计算技术研究所 | 动静结合二进制翻译中静态信息不完备的处理方法及装置 |
CN101452396B (zh) * | 2008-12-25 | 2012-04-25 | 上海交通大学 | 结合静态优化的动态二进制翻译方法 |
GB2508433A (en) * | 2012-12-03 | 2014-06-04 | Ibm | Migration of processes in heterogeneous computing environments using emulating and compiling source code on target system |
-
2022
- 2022-11-30 CN CN202211514358.7A patent/CN115543547B/zh active Active
Patent Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108345773A (zh) * | 2017-07-27 | 2018-07-31 | 江苏通付盾信息安全技术有限公司 | 基于虚拟机的代码保护方法及装置、电子设备、存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN115543547A (zh) | 2022-12-30 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN115543547B (zh) | 一种异构虚拟化平台中虚拟机的迁移方法及系统 | |
CA2002204C (en) | Translation technique | |
CA2002201C (en) | Translation technique | |
US20160041816A1 (en) | Systems and methods for mobile applications | |
US9495720B2 (en) | Method and apparatus for compiling and executing an application using virtualization in a heterogeneous system | |
US9213563B2 (en) | Implementing a jump instruction in a dynamic translator that uses instruction code translation and just-in-time compilation | |
JPH11338738A (ja) | ソフトウェアのエミュレ―ションおよび変換方法 | |
US9524178B2 (en) | Defining an instruction path to be compiled by a just-in-time (JIT) compiler | |
US9529610B2 (en) | Updating compiled native instruction paths | |
WO2022237098A1 (zh) | 一种异构程序执行方法、装置、计算设备及可读存储介质 | |
US20060101437A1 (en) | Data processing device and method | |
CN112667361A (zh) | 基于系统虚拟机的管理方法、装置、电子设备及存储介质 | |
Spink et al. | Hardware-accelerated cross-architecture full-system virtualization | |
WO2022237590A1 (zh) | 智能合约升级方法及区块链系统 | |
Nurul-Hoque et al. | Nomad: Cross-platform computational offloading and migration in femtoclouds using webassembly | |
US20240134666A1 (en) | Hybrid just in time load module compiler with performance optimizations | |
US11029929B2 (en) | Using emulation to improve startup time for just-in-time compilation | |
CN111880863A (zh) | 应用程序的运行方法、装置、电子设备及存储介质 | |
KR101083271B1 (ko) | 액티브엑스 컨트롤 변환 시스템 및 방법 | |
CN113220327B (zh) | 智能合约升级方法及区块链系统 | |
CN112905474B (zh) | 一种基于硬件的高级程序动态控制流追踪方法和装置 | |
Azimzadeh et al. | Performance analysis of Android underlying virtual machine in mobile phones | |
CN113220300A (zh) | 一种应用于Android系统x86架构上的ARM指令集转换方法 | |
CN102446113B (zh) | 底层消息接口模拟方法及模拟装置 | |
CN117112029B (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 |