当前位置: 首页 > 专利查询>苹果公司专利>正文

动态编程语言的基于跟踪器的运行时优化制造技术

技术编号:10488952 阅读:85 留言:0更新日期:2014-10-03 17:17
本发明专利技术描述了一种方法和装置,所述方法和装置随机地且不频繁地针对在源代码的编译代码的运行时期间创建的值的起源和目标生成跟踪器数据。可更新跟踪器图以记录在所述运行时期间所述值的起源和目标。可优化所述编译代码以根据所述跟踪器图减少所述值的起源和目标之间的处理资源。可针对所述源代码的至少一部分来执行所述优化编译代码。

【技术实现步骤摘要】
【国外来华专利技术】动态编程语言的基于跟踪器的运行时优化相关专利申请的交叉引用本申请与由Filip Pizlo等人于2012年2月3日提交的名称为“RUNHMECOMPILATION FOR DYNAMIC PROGRAMMING LANGUAGES”的美国临时专利申请号 61/594,983、由Filip Pizlo等人于2012年2月 15 日提交的名称为“RUNTIME COMPILATION FOR DYNAMICPROGRAMMING LANGUAGES”的美国临时专利申请号61/599,309相关并要求其权益,这两个专利据此全文以引用方式并入本文。
本专利技术整体涉及运行时编译。更具体地,本专利技术涉及基于动态语言的源代码的运行时编译。
技术介绍
不含任何种类的类型注释的动态语言越来越普遍。例如,JavaScript已经成为万维网的通用语言,而Ruby、Python、Perl和PHP已经成为服务器端基础架构的标准语言。然而,当可能未提供优化编译策略以编译代码时,基于动态语言的代码的运行时可能需要显著开销。 例如,JavaScript不允许程序指定变量的类型。因此,在运行时期间,变量可被动态转换为不同执行路径中的独立类型。此类转换可能在计算上开销大,使整体性能受到重大影响。另外,动态创建的数据类型可能需要索引数据结构例如字典间大量的查找或搜索操作,以将类型分配到数据或访问特定类型数据的属性。 此外,需要现代JavaScript引擎来非常快速地执行非可信代码,并且由于这个原因,通过诸如即时(JIT)编译的机制使用运行时代码生成,攻击者可利用这一点绕过操作系统/硬件保护。现有保护技术,例如常量盲化,可用于阻止此类攻击。然而,这些技术可在存储器使用和处理器执行时间两方面引发目标代码的性能成本,无论所执行的目标代码是否具有风险。 因此,传统的动态运行时编译方法往往是昂贵、低效和未优化的。
技术实现思路
可随机地且不频繁地分配跟踪器数据(例如,堆分配单元或跟踪弹(tracerbullet))以分析从起源代码位置和目标代码位置流出的值以便优化编译代码。跟踪器数据可包括或装箱某个值以及该值在源代码或程序中的相应起源(或来源)。值的起源可指示值在源代码中的生成位置。在一个实施例中,可在运行时期间将值存储在存储器中时创建跟踪器数据。来源可以是标识用于存储该值的代码位置(例如行号)的指针宽度字。可将特定的类型或标签与跟踪器数据相关联以迫使使用(或访问、引用)跟踪器数据的代码执行或操作采用慢速路径,因为可能无法在源代码中对跟踪器数据进行现有类型检查。所述慢速路径可记录跟踪器数据中的值的起源(或源)代码位置和正在使用跟踪器数据的接收(或目标)代码位置之间的链接。该链接可分配有权重以指示值传递(或跟踪)通过链接的次数。 在一个实施例中,可基于运行时期间在值的起源代码位置和目标代码位置之间记录的链接来生成概率数据流程图。可对图形的每个边加权以对应于占用边的值流的相对概率。值如何流过程序以及使用那些值的不同操作执行频率有多高可从概率数据流程图识另IJ。因此,概率数据流程图可提供执行程序的运行时概率视图以揭示运行时编译的优化机 A O 在一个实施例中,可根据概率数据流程图来执行运行时编译器上的优化操作。例如,如果流过整数路径的值更可能用于浮点运算,则整数路径可被转化为浮点路径。同样,如果以浮点格式存储的整数极有可能(例如基于概率数据流程图)在以后用于整数运算,则可将其转换为整数格式。作为另外一种选择,如果整数堆存储(例如,整数格式的值)具有流入浮点加载中的高概率,则可优化编译器而替代地以浮点数据的形式堆存储,但要进行另外的类型检查操作以确保可靠性。 在一个实施例中,可使用相对于数据结构集合描述了键的属性的元数据,对使用键索引数据结构(例如字典、哈希表、关联数组等)集合中的键的操作进行优化。元数据可对应于动态更新的高速缓存以指示不变量,该不变量对于处于数据结构集合的当前状态的键而言为真。可避免用于在键的数据结构集合上进行搜索的昂贵计算。例如,如果已知键始终(或从不)引用某些特定的值,或者由于这些值具有在处于当前状态的系统的全局范围内的任何数据结构集合中的某些元属性,则可能根本无需在数据结构(或字典)集合上进行昂贵的查找操作。 在另一个实施例中,运行时编译器可以发射实现快速路径(例如,无负载和分支结构)的编译代码,以基于对与通过源代码识别的键相关联的元数据的假设来执行源代码的指令。编译代码可包括保护符,例如条件检查代码,以基于与键相关联的元数据进入慢速路径并防止进入快速路径。在运行时执行编译代码期间,可保持包括对象的运行时状态,所述对象具有通过键而散列的属性。可动态更新键的元数据以反映运行时状态的变化(例如,在对象中)。可执行保护符以执行廉价的检查操作(例如,引用键的元数据而不在运行时状态下的对象上执行昂贵的查找),从而更新已发射编译代码以在运行时期间需要时包括慢速路径。 在另一个实施例中,可使用类型信息(或其他属性信息)修改(或破坏)存储器中类型化数据的指针值,以在通过修改的指针值对类型化数据执行存储器访问操作时,利用基于硬件的安全检查机制针对类型化数据自动检查类型信息。从而,当执行使用已修改指针的软件代码(其经受安全检查但不执行例如软件代码中的比较和分支指令)时,硬件内置逻辑可用于广义类的编程语言安全检查。 在一个实施例中,动态编程语言中类型的对象的指针的一部分(例如,64位系统中的高16位)可配置(或设置)有用于对类型进行标识的类型标识符。当通过被怀疑为该类型但并非已知为该类型的指针对所述对象执行访问时,可使用类型标识符(例如,通过XOR算术运算)来更新指针以执行访问。如果对象确实是由类型标识符所标识的类型,则访问可能成功,否则将导致硬件陷阱自动激活陷阱处理程序。 在另一个实施例中,运行时编译(例如JIT编译)可基于启发式规则生成非确定性和不可预测的代码以防止非可信代码攻击,例如JIT SPRAY攻击,而不需要所有已生成代码的确定性行为减少操作。启发式规则可包括对例如所引发代码保护的成本(例如,运行时开销)、所需代码保护的量和/或其他适用因素及其关系的估算。 在一个实施例中,当执行源代码的运行时编译时,动态收集或累计数字(或测量值)以估算源代码状态的可信度。所述数字可基于对来自源代码的已发射代码的量(例如,已生成的字节数)以及对已发射代码的不可信控制量的跟踪。例如,所述数字可确定(不可预测地)是否盲化(或重整、随机化)编译代码的源代码的常量,以抵御嵌入常量中的潜在非可信可执行代码。 通过附图以及通过以下具体描述,本专利技术的其他特征将显而易见。 【附图说明】 本专利技术以举例的方式进行说明,而不仅限于各个附图的图形,在附图中类似的附图标号表示类似的元件,并且其中: 图1为网络图,其示出了从网络化设备检索的源代码的示例性运行时编译; 图2为框图,其示出了动态编程语言运行时编译的系统的一个实施例; 图3为流程图,其示出了采用跟踪器数据(或跟踪弹)的优化运行时编译过程的一个实施例; 图4为流程图,其示出了在运行时期间随机跟踪跟踪器图中的值以优化编译的过程的一个实施例; 图5为本文档来自技高网
...

【技术保护点】
一种其内具有指令的机器可读非暂态存储介质,所述指令在被机器执行时使得所述机器执行一种方法,所述方法包括:在编译代码的运行时期间在遇到值时,根据跟踪器代码随机地且不频繁地生成跟踪器数据,所述编译代码编译自插入有所述跟踪器代码的源代码,所述跟踪器数据指示所述源代码中的所述值的起源;在所述运行时期间在所述源代码中的所述值的目标处加载所述值的所述跟踪器数据;以及优化所述编译代码以根据运行时信息减少所述值的所述起源和所述目标之间的处理资源,所述运行时信息包括所述值的所述起源和所述目标。

【技术特征摘要】
【国外来华专利技术】2012.02.03 US 61/594,983;2012.02.15 US 61/599,309;1.一种其内具有指令的机器可读非暂态存储介质,所述指令在被机器执行时使得所述机器执行一种方法,所述方法包括: 在编译代码的运行时期间在遇到值时,根据跟踪器代码随机地且不频繁地生成跟踪器数据,所述编译代码编译自插入有所述跟踪器代码的源代码,所述跟踪器数据指示所述源代码中的所述值的起源; 在所述运行时期间在所述源代码中的所述值的目标处加载所述值的所述跟踪器数据;以及 优化所述编译代码以根据运行时信息减少所述值的所述起源和所述目标之间的处理资源,所述运行时信息包括所述值的所述起源和所述目标。2.根据权利要求1所述的介质,其中所述跟踪器代码在所述源代码的运行时编译期间插入所述源代码中。3.根据权利要求1所述的介质,其中所述跟踪器代码包括求值器,并且其中所述生成包括: 根据所述求值器确定是否在遇到所述值时生成所述跟踪器数据,其中所述求值器配置有用于以随机且不频繁方式生成所述跟踪器数据的所述确定的概率。4.根据权利要求3所述的介质,其中所述求值器对全局计数器进行计数,其中所述求值器返回真以基于所 述全局计数器和根据所述求值器的所述配置的值的比较来生成所述跟踪器数据。5.根据权利要求1所述的介质,其中针对所述值中的一个生成所述跟踪器数据中的一个,并且其中所述一个跟踪器数据包括所述一个值和所述一个值的代码信息,所述代码信息从所述源代码的配置文件记录。6.根据权利要求5所述的介质,其中所述源的所述配置文件指定所述源代码中的所述值的起源。7.根据权利要求5所述的介质,其中所述编译代码包括到所述一个值的链接,并且其中所述跟踪数据的生成包括: 利用对所述跟踪器数据的引用来更新所述链接,所述一个值能够通过所述引用从所述跟踪器数据访问。8.根据权利要求7所述的介质,其中所述编译代码包括所述跟踪器数据的处理程序,并且其中所述引用允许调用所述处理程序以使所述一个值从所述一个跟踪器数据解包。9.根据权利要求1所述的介质,其中所述运行时信息包括数据流记录,还包括: 保持所述数据流记录,所述数据流记录指示所述运行时期间的所述值的轨迹,所述轨迹包括所述值的所述起源和所述目标,其中所述数据流记录包括所述轨迹的出现统计值。10.根据权利要求9所述的介质,其中所述轨迹的出现统计值包括所述起源已被执行的次数。11.根据权利要求9所述的介质,其中所述数据流记录包括流程图,其中所述流程图的每个节点与所述源代码的代码位置相关联,其中所述流程图的每个边从所述流程图的源节点被导向到所述流程图的目标节点,所述源节点与所述源代码的所述起源中的一个相关联,所述目标节点与所述源代码的所述目标中的一个相关联,其中所述边指示在所述运行时期间在所述一个起源处创建和在所述一个目标处引用的所述值中的至少一个。12.根据权利要求11所述的介质,其中所述边与所述统计值中的一个相关联,所述统计值指示所述至少一个值的出现次数,所述至少一个值与所述一个源位置和所述一个目标位置相关联。13.根据权利要求9所述的介质,其中所述加载包括: 用所述轨迹更新所述数据流记录,其中基于所述跟踪器数据来更新所述轨迹的所述值的起源。14.根据权利要求13所述的介质,其中所述跟踪器数据中的一个包括所述值中的一个,所述一个值在所述目标的一个中引用,所述一个跟踪器数据包括所述一个值的所述起源中的一个,所述更新包括: 确定对应于所述一个起源和所述一个目标的所述轨迹中的一个是否存在于所述数据流记录中;以及 如果所述一个轨迹尚未存在于所述数据流记录中,则用所述一个轨迹更新所述数据流记录。15.根据权利要求14所述的...

【专利技术属性】
技术研发人员:F·J·皮茨罗G·巴瑞克罗
申请(专利权)人:苹果公司
类型:发明
国别省市:美国;US

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1