CN115840591A - 一种基于即时编译器的非对界访存动态处理方法、装置及存储介质 - Google Patents
一种基于即时编译器的非对界访存动态处理方法、装置及存储介质 Download PDFInfo
- Publication number
- CN115840591A CN115840591A CN202211529657.8A CN202211529657A CN115840591A CN 115840591 A CN115840591 A CN 115840591A CN 202211529657 A CN202211529657 A CN 202211529657A CN 115840591 A CN115840591 A CN 115840591A
- Authority
- CN
- China
- Prior art keywords
- instruction
- signals
- boundary
- time compiler
- corresponding byte
- 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
-
- 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
- Devices For Executing Special Programs (AREA)
Abstract
本发明公开了一种基于即时编译器的非对界访存动态处理方法、装置及存储介质,包括:通过在所述即时编译器内注册非对界信号标志,对所采集到的异常信号中的非对界信号进行标志;信号处理函数通过识别所述标志对非对界信号进行抓取;根据所抓取到的非对界信号的访存粒度,在相应字节对界的指令地址处生成相应字节数所需的加载指令序列;根据生成的加载指令序列完成所述非对界信号的拼接处理后,放入目的寄存器。本发明能够在保证程序多线程执行状态正确性的同时,有效提高了即时编译器的运行效率。
Description
技术领域
本发明涉及即使编译优化技术领域,特别涉及一种基于即时编译器的非对界访存动态处理方法、装置及存储介质。
背景技术
计算机系统通常对基本数据类型的合法地址做出了限制,要求存放类型数据的地址必须是按照该数据类型长度对界的值;一般来说,对于各种不同的访存类型,其访存粒度通常包括2字节、4字节、8字节等字节数。当一个处理器总是从内存中取long类型数据,那么地址必须为8字节的倍数(如果是二进制表示的地址,那么要求地址的低3位为0),这就是对界访存;反之,如果这个数据不在8字节对界的内存地址上,它可能会被分放在两个8字节内存块中;当不支持非对界访存的硬件平台上对该数据进行访存时,就会引发硬件非对界信号异常,发生系统调用,内核抓取到该异常信号之后,执行线程从用户态切换到内核态,通过内核处理非对界访存,处理结束再返回用户态继续执行;而每一次对非对界地址进行访存,都会使用该方式通过内核进行处理,如此反复陷入内核造成巨大的性能开销,从而导致即时编译器运行时的性能降低。
发明内容
本发明的目的在于克服现有技术中的不足,提供一种基于即时编译器的非对界访存动态处理方法,通过在即时编译器设置信号处理函数抓取非对界信号,使用不会引发非对界异常的访存指令进行拼接实现,从而避免了现有技术中由用户态切换到内核态进行处理而带来的性能损耗问题。
为达到上述目的,本发明是采用下述技术方案实现的:
第一方面,本发明提供一种基于即时编译器的非对界访存动态处理方法,所述方法包括:
通过在所述即时编译器内注册非对界信号标志,对所采集到的异常信号中的非对界信号进行标志;
信号处理函数通过识别所述标志对非对界信号进行抓取;
根据所抓取到的非对界信号的访存粒度,在相应字节对界的指令地址处生成相应字节数所需的加载指令序列;
根据生成的加载指令序列完成所述非对界信号的拼接处理后,放入目的寄存器。
结合第一方面,优选地,所述加载指令序列包括功能指令、跳转指令、占位指令和加载移位指令。
结合第一方面,优选地,所述非对界信号的访存粒度包括2字节、4字节、和8字节。
结合第一方面,优选地,所述根据所抓取到的非对界信号的访存粒度,在相应字节对界的指令地址处生成相应字节数所需的加载指令序列包括以下6条指令:
指令1为访存指令,用于将内存地址addr放入tmp0寄存器;
指令2为跳转指令,用于将内存地址addr前一个相应字节对界地址处tmp的相应字节数据存入val1寄存器;
指令3为占位指令,用于将内存地址addr后一个相应字节对界地址处的相应字节数据存入val2寄存器;
指令4为占位指令,用于通过加载移位指令从所述val1寄存器中取出待拼接的相应字节的高段high;
指令5为占位指令,用于通过加载移位指令从所述val2寄存器中取出待拼接的相应字节的低段low;
指令6为占位指令,用于对所取出的相应字节的高段high和低段low进行拼接,得到拼接好的相应字节的数据后,放入目的寄存器dst_reg中。
结合第一方面,优选地,所述即时编译器为Java虚拟机。
第二方面,本发明提供一种基于即时编译器的非对界访存动态处理装置,所述装置包括:
注册标志模块,用于通过在所述即时编译器内注册非对界信号标志,对所采集到的异常信号中的非对界信号进行标志;
识别抓取模块,用于信号处理函数通过识别所述标志对非对界信号进行抓取;
生成加载指令序列模块,用于根据所抓取到的非对界信号的访存粒度,在相应字节对界的指令地址处生成相应字节数所需的加载指令序列;
拼接处理模块,用于根据生成的加载指令序列完成所述非对界信号的拼接处理后,放入目的寄存器。
第三方面,本发明提供一种基于即时编译器的非对界访存动态处理装置,包括处理器及存储介质;
所述存储介质用于存储指令;
所述处理器用于根据所述指令进行操作以执行第一方面任一项所述的基于即时编译器的非对界访存动态处理方法的步骤。
第四方面,本发明提供一种计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时,实现如第一方面任一项所述的基于即时编译器的非对界访存动态处理方法的步骤。
与现有技术相比,本发明所达到的有益效果:
本发明结构清晰,具体实现较为简单,适用于不支持非对界访存的处理器发生不同访存类型、访存粒度的非对界访存场景进行优化;通过在即时编译器内部注册非对界信号标志,当访存指令遇到非对界地址时,硬件抛出非对界信号异常,使得信号处理函数能够通过识别标志抓取到非对界信号,并根据非对界字节的粒度进行相应加载指令序列的修改,使用不会引发非对界异常信号的访存指令进行拼接实现,消避免了原始方式中执行访存指令时每一次遇到非对界信号都会陷入内核造成的性能开销的问题;通过设计加载指令序列,使得即时编译器在后续执行过程中直接执行优化后的指令序列,不再引发非对界异常信号,在保证程序多线程执行状态下正确性的同时显著提升了即时编译器运行时性能。
附图说明
图1是本发明实施例提供的一种基于即时编译器的非对界访存动态处理方法的流程图;
图2是本发明实施例提供的针对8字节生成的加载指令序列在小端机器上拼接非对界8字节数据的示意图;
图3本发明实施例提供的一种基于即时编译器的非对界访存动态处理装置的结构原理框图。
具体实施方式
下面通过附图以及具体实施例对本发明技术方案做详细的说明,应当理解本申请实施例以及实施例中的具体特征是对本申请技术方案的详细的说明,而不是对本申请技术方案的限定,在不冲突的情况下,本申请实施例以及实施例中的技术特征可以相互组合。
本文中术语“和/或”,仅仅是一种描述关联对象的关联关系,表示可以存在三种关系,例如,A和/或B,可以表示:单独存在A,同时存在A和B,单独存在B这三种情况。另外,本文中字符"/",一般表示前后关联对象是一种“或”的关系。
实施例一:
如图1所示,本实施例介绍一种基于即时编译器的非对界访存动态处理方法,适用于不支持非对界访存的处理器发生不同访存类型、访存粒度的非对界访存场景进行优化,包括实现指令序列的优化以及保证多线程条件下的一致性;所述方法具体包括如下步骤:
步骤S1:通过在所述即时编译器内注册非对界信号标志,对所采集到的异常信号中的非对界信号进行标志;
步骤S2:号处理函数通过识别所述标志对非对界信号进行抓取;
步骤S3:据所抓取到的非对界信号的访存粒度,在相应字节对界的指令地址处生成相应字节数所需的加载指令序列;
步骤S4:据生成的加载指令序列完成所述非对界信号的拼接处理后,放入目的寄存器。
作为本发明的一种实施例,步骤S3中生成相应字节数所需的加载指令序列包括以下6条指令:
指令1为访存指令,用于将内存地址addr放入tmp0寄存器;
指令2为跳转指令,用于将内存地址addr前一个相应字节对界地址处tmp的相应字节数据存入val1寄存器;
指令3为占位指令,用于将内存地址addr后一个相应字节对界地址处的相应字节数据存入val2寄存器;
指令4为占位指令,用于通过加载移位指令从所述val1寄存器中取出待拼接的相应字节的高段high;
指令5为占位指令,用于通过加载移位指令从所述val2寄存器中取出待拼接的相应字节的低段low;
指令6为占位指令,用于对所取出的相应字节的高段high和低段low进行拼接,得到拼接好的相应字节的数据后,放入目的寄存器dst_reg中。
本实施例以Java虚拟机对访问粒度为8字节的非对界访存为例进行详细说明,具体涉及以下内容。
需要说明的是,Java虚拟机在编译生成8字节的加载指令时,须在8字节对界的指令地址处预生成如下8字节加载指令序列:
指令①: load(dst_reg, src) 即访存指令,从内存地址src处取8个字节数据放入dst_reg寄存器;
指令②: b(pc+5) 即跳转指令,跳转的位置是(当前pc+5)的地址,即指令⑥后一条指令;
指令③:nop();
指令④:nop();
指令⑤:nop();
指令⑥:nop();
其中,指令③~⑥均为占位指令。
通过在Java虚拟机内部注册非对界信号标志,这样,在硬件抛出非对界异常信号后,内核不做处理,直接将非对界信号返回给Java虚拟机;当Java虚拟机捕捉到异常信号时,信号处理函数通过标志先判断其是否为非对界信号,如果是非对界异常信号,则触发Java虚拟机进行非对界指令序列的修改,将上述指令①~⑥进行动态修改,设置新的优化加载指令序列load为:
指令1’:lea tmp0, addr,即将内存地址addr放入tmp0寄存器;
指令2’:load val1, (tmp0-tmp0%8),即将内存地址add前一个8字节对界地址处(tmp)的8字节数据存入val1寄存器;
指令3’:load val2, (tmp0-tmp0%8)+8,即将内存地址addr后一个8字节对界地址处(tmp+8)的8字节数据存入val2寄存器;
指令4’:extll low, tmp0, val2,即通过加载移位指令从val1寄存器里取出待拼接8字节的高段high;
指令5’:exthl high, tmp0, val1,即通过加载移位指令从val2寄存器里取出待拼接8字节的低段low
指令6’:or dst_reg,low, high,即拼接高段high和低段low得到8字节数据,放入目的寄存器dst_reg。
其中,对于小端模式机器而言,低内存地址存数据高段,高内存地址存数据低段。具体的拼接过程参见图2所示。
作为本发明的一种实施例,Java虚拟机对访问粒度为2字节和4字节的非对界访存的加载序列指令load修改优化方法与上文提到的8字节的修改优化方法类似;其中,对于2字节的非对界访存的加载序列指令load修改优化为:
指令1’:ldi tmp0, addr
指令2’:load val1, (tmp0-tmp0%8)
指令3’:load val2, (tmp0-tmp0%8)+2
指令4’:ext2l low, tmp0, val1
指令5’:ext6l high, tmp0, val2
指令6’:or dst_reg,low, high
对于4字节的非对界访存的加载序列指令load修改优化为:
指令1’:ldi tmp0, addr
指令2’:load val1, (tmp0-tmp0%8)
指令3’:load val2, (tmp0-tmp0%8)+4
指令4’:ext1l low, tmp0, val1
指令5’:ext5l high, tmp0, val2
指令6’:or dst_reg,low, high
需要进一步说明的是,由于Java虚拟机在执行过程中存在多线程,假设executor1(执行线程1)在执行加载序列指令load时发生了非对界异常,触发patcher线程(修改线程)修改加载序列指令load,当patcher线程仅完成了指令①到指令④的修改时,恰巧executor2线程(执行线程2)执行到此,executor2线程在patcher线程未完成全部修改前执行了一组中间状态的指令序列,即修改后的指令1’~ 4’和修改前的指令⑤~⑥,则最后executor2线程中目的寄存器dst_reg的值极有可能出错;为了防止这种错误发生,本发明实施例提供的方法实现patcher线程的修改顺序为先修改指令③~⑥,然后再同时修改指令①和指令②,这样就可以保证多个线程状态下,任意executor线程执行的序列只可能是原始序列或者优化序列,而不会出现执行了中间状态指令序列的情况。
在后续执行过程中,Java虚拟机直接执行步骤S3生成的优化后的加载指令序列,不再触发非对界访存信号,从而实现了非对界访存异常到避免非对界访存的优化。
综上所述,本发明实施例提供的基于即时编译器的非对界访存动态处理方法,即时编译器首先根据不同访存类型和访存粒度的场景,预先生成以功能指令、跳转指令、和占位指令、加载移位指令共同组成的加载指令序列load;在面对处理非对界访存时,使用对应访存粒度的最优加载指令序列load进行替换,从而避免由用户态切换到内核态而带来的性能损耗。此外,为了保证多线程执行状态下的正确性,要求指令load必须生成在对应字节对界的地址处;并且本发明针对即时编译器多线程执行的特点,在设计功能指令后为一条跳转指令,因为在修改的过程中如果其他线程执行到此处,该线程执行路径为load->b->优化前指令序列之后的指令,这样保证修改中间状态不会被执行到,从而保证了正确性。
实施例二:
如图3所示,本发明实施例提供了一种基于即时编译器的非对界访存动态处理装置,可以用于实施实施例一所述的方法,具体包括:
注册标志模块,用于通过在所述即时编译器内注册非对界信号标志,对所采集到的异常信号中的非对界信号进行标志;
识别抓取模块,用于信号处理函数通过识别所述标志对非对界信号进行抓取;
生成加载指令序列模块,用于根据所抓取到的非对界信号的访存粒度,在相应字节对界的指令地址处生成相应字节数所需的加载指令序列;
拼接处理模块,用于根据生成的加载指令序列完成所述非对界信号的拼接处理后,放入目的寄存器。
本发明实施例提供的基于即时编译器的非对界访存动态处理装置与实施例一提供的基于即时编译器的非对界访存动态处理方法基于相同的技术构思,能够产生如实施例一所述的有益效果,在本实施例中未详尽描述的内容可以参见实施例一。
实施例三:
本发明实施例提供了一种基于即时编译器的非对界访存动态处理装置,包括处理器及存储介质;
所述存储介质用于存储指令;
处理器用于根据指令进行操作以执行根据实施例一中任一项方法的步骤。
实施例四:
本发明实施例提供了一种计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时,实现如实现实施例一中任一项方法的步骤。
本领域内的技术人员应明白,本申请的实施例可提供为方法、系统、或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本领域内的技术人员应明白,本申请的实施例可提供为方法、系统、或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本申请是参照根据本申请实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
以上所述仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明技术原理的前提下,还可以做出若干改进和变形,这些改进和变形也应视为本发明的保护范围。
Claims (8)
1.一种基于即时编译器的非对界访存动态处理方法,其特征在于,所述方法包括:
通过在所述即时编译器内注册非对界信号标志,对所采集到的异常信号中的非对界信号进行标志;
信号处理函数通过识别所述标志对非对界信号进行抓取;
根据所抓取到的非对界信号的访存粒度,在相应字节对界的指令地址处生成相应字节数所需的加载指令序列;
根据生成的加载指令序列完成所述非对界信号的拼接处理后,放入目的寄存器。
2.根据权利要求1所述的基于即时编译器的非对界访存动态处理方法,其特征在于,所述加载指令序列包括功能指令、跳转指令、占位指令和加载移位指令。
3.根据权利要求1所述的基于即时编译器的非对界访存动态处理方法,其特征在于,所述非对界信号的访存粒度包括2字节、4字节和8字节。
4.根据权利要求1至3任一所述的基于即时编译器的非对界访存动态处理方法,其特征在于,所述根据所抓取到的非对界信号的访存粒度,在相应字节对界的指令地址处生成相应字节数所需的加载指令序列包括以下6条指令:
指令1为访存指令,用于将内存地址addr放入tmp0寄存器;
指令2为跳转指令,用于将内存地址addr前一个相应字节对界地址处tmp的相应字节数据存入val1寄存器;
指令3为占位指令,用于将内存地址addr后一个相应字节对界地址处的相应字节数据存入val2寄存器;
指令4为占位指令,用于通过加载移位指令从所述val1寄存器中取出待拼接的相应字节的高段high;
指令5为占位指令,用于通过加载移位指令从所述val2寄存器中取出待拼接的相应字节的低段low;
指令6为占位指令,用于对所取出的相应字节的高段high和低段low进行拼接,得到拼接好的相应字节的数据后,放入目的寄存器dst_reg中。
5.根据权利要求1所述的基于即时编译器的非对界访存动态处理方法,其特征在于,所述即时编译器为Java虚拟机。
6.一种基于即时编译器的非对界访存动态处理装置,其特征在于,所述装置包括:
注册标志模块,用于通过在所述即时编译器内注册非对界信号标志,对所采集到的异常信号中的非对界信号进行标志;
识别抓取模块,用于信号处理函数通过识别所述标志对非对界信号进行抓取;
生成加载指令序列模块,用于根据所抓取到的非对界信号的访存粒度,在相应字节对界的指令地址处生成相应字节数所需的加载指令序列;
拼接处理模块,用于根据生成的加载指令序列完成所述非对界信号的拼接处理后,放入目的寄存器。
7.一种基于即时编译器的非对界访存动态处理装置,其特征在于,包括处理器及存储介质;
所述存储介质用于存储指令;
所述处理器用于根据所述指令进行操作以执行根据权利要求1至5任一项所述的基于即时编译器的非对界访存动态处理方法的步骤。
8.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,该计算机程序被处理器执行时,实现如权利要求1至5任一项所述的基于即时编译器的非对界访存动态处理方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211529657.8A CN115840591A (zh) | 2022-11-30 | 2022-11-30 | 一种基于即时编译器的非对界访存动态处理方法、装置及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211529657.8A CN115840591A (zh) | 2022-11-30 | 2022-11-30 | 一种基于即时编译器的非对界访存动态处理方法、装置及存储介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN115840591A true CN115840591A (zh) | 2023-03-24 |
Family
ID=85577820
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202211529657.8A Pending CN115840591A (zh) | 2022-11-30 | 2022-11-30 | 一种基于即时编译器的非对界访存动态处理方法、装置及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN115840591A (zh) |
-
2022
- 2022-11-30 CN CN202211529657.8A patent/CN115840591A/zh active Pending
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US8181170B2 (en) | Unwind information for optimized programs | |
JPH0727464B2 (ja) | 後方記号実行による分岐分析 | |
CN106547520B (zh) | 一种代码路径分析方法及装置 | |
JPH06502269A (ja) | プログラムコードの交差像参照方法 | |
US20070169051A1 (en) | Identifying Code that Wastes Time Performing Redundant Computation | |
JP2020510888A (ja) | データコンパイル方法、装置、電子端末及びコンピュータ読み取り可能な記憶媒体 | |
CN109324971B (zh) | 一种基于中间语言和污点分析的软件数据流分析方法 | |
JP2010238228A (ja) | プログラムの動的分析方法及びその装置 | |
CN109101237A (zh) | 代码的加密编译方法及装置 | |
US20160147517A1 (en) | Method and computer program product for disassembling a mixed machine code | |
US7426719B2 (en) | Method and system for rewriting unwind data in the presence of exceptions | |
US20050028148A1 (en) | Method for dynamic recompilation of a program | |
US20020170044A1 (en) | Method and system for register allocation | |
US8788766B2 (en) | Software-accessible hardware support for determining set membership | |
US6170998B1 (en) | Processor which returns from a subroutine at high speed and a program translating apparatus which generates machine programs that makes a high-speed return from a subroutine | |
US5615369A (en) | Automated detection and correction of uninitialized variables | |
EP0933706A1 (en) | Language processing system and language processing method enabling reduction of memory region and overhead in profile information collection of computer | |
EP0742517B1 (en) | A program translating apparatus and a processor which achieve high-speed execution of subroutine branch instructions | |
CN114756284A (zh) | 变长指令集系统栈回溯的实现方法及装置 | |
CN105224305B (zh) | 函数调用路径编解码方法、装置及系统 | |
JP2752094B2 (ja) | 論理型言語におけるバックトラック処理方式 | |
CN115840591A (zh) | 一种基于即时编译器的非对界访存动态处理方法、装置及存储介质 | |
CN105677297A (zh) | 套锁实现方法及装置 | |
US20060277552A1 (en) | Facilitating handling of exceptions in a program implementing a M-on-N threading model | |
US6178547B1 (en) | Method and apparatus for generating non-redundant symbolic debug information in computer programs |
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 |