在非易失性存储器中缓存代码的方法、系统和设备的制造方法

文档序号:8344597阅读:490来源:国知局
在非易失性存储器中缓存代码的方法、系统和设备的制造方法
【技术领域】
[0001]本公开一般涉及编译器,并且更具体地说,涉及在非易失性存储器中缓存代码的方法、系统和设备。
【背景技术】
[0002]动态编译器尝试在一个或更多个平台程序执行时的运行时间期间优化代码。编译器尝试优化代码以改进处理器性能。然而,编译器代码优化任务也消耗处理器资源,如果此类优化工作消耗的处理器资源量比优化的代码本身能够节省的处理器资源量更大,则这可使得产生的优化代码的一个或更多个益处无效。
【附图说明】
[0003]图1是与在非易失性存储器中缓存代码的本公开内容的教导一致的处理器平台的示例部分的示意图。
[0004]图2是在图1的平台中由高速缓存管理器生成的示例代码条件评分图表。
[0005]图3是在图1的平台中由高速缓存管理器生成的示例代码性能图表。
[0006]图4是图1的不例尚速缓存管理器的不意图。
[0007]图5A、5B和6是表示可执行以在非易失性存储器中缓存代码的示例机器可读指令的流程图。
[0008]图7是可执行图5A、5B和6的指令以实现图1_4的示例系统和设备的示例处理器平台的示意图。
【具体实施方式】
[0009]代码优化技术可在运行时间采用动态编译器以优化和/或以其它方式改进程序的执行性能。例如,解释代码可在执行期间经及时(JIT)编译器编译成机器代码并且被缓存,使得因为从高速缓冲存储器访问编译代码,处理器对一个或更多个功能(例如,过程,子例程等)的后续请求相对更快地进行。在其它示例中,动态二进制转换器以允许目标机器(例如,处理器)执行指令的方式将源指令转换成目标指令。处理器第一次请求代码(例如,函数调用)时,消耗额外的时间(例如,处理器时钟周期)以将源代码转换成处理器能够处理的格式。然而,转换的代码可存储在高速缓冲存储器中以允许处理器在后续的时间检索目标代码,其中对高速缓冲存储器的访问可比重新编译源代码更快。
[0010]在一些系统中,在启动时编译和缓存代码。然而,在启动时的此类编译消耗大量的处理器开销以生成编译代码以供以后使用。开销有时称为“预热时间”或“滞后时间”。此类工作牺牲了在程序执行中早期的处理器性能,以试图在程序在相对长的时间期内操作和/或相对频繁地反复调用相同函数的情况下长期产生更佳结果。优化的编译代码可存储在硬盘(例如,磁性硬驱动器、固态磁盘等)上以避免对重新编译原始代码的将来需要。然而,硬盘访问时间可比动态编译器重新编译原始代码所要求的时间量更慢,由此导致在启动程序时(例如,在使平台上电后)最初慢的启动时间(即,相对高的滞后时间)。换而言之,在处理器请求代码时,从存储装置检索优化的编译代码的时间量可占用比重新编译和/或重新优化原始代码更多的时间量。
[0011]虽然与硬盘访问时延相比,启用处理器高速缓存和/或访问DRAM降低了检索以前优化的编译代码的时间量,但处理器高速缓存是在电源切断时(如在平台关闭的实例期间)失去其存储器内容的易失性存储器。处理器高速缓存可包括任何数量的高速缓存层,如第I级(LI)、第2级(L2)(例如,多级高速缓存)。多级高速缓存通过允许处理器在尝试从硬盘存储装置进行相对更加耗时的代码获取前检查高速缓存中的所需代码,降低了处理器获取时延。高速缓存一般以具有低时延、高成本、更小的存储的分层方式在第I级(例如,LI)构建,并且在每个后续的级别(例如,L2、L3等)实现更慢、更大和更不昂贵的存储。
[0012]LI和L2高速缓存和/或任何其它高速缓存级别一般情况下小于与处理器和/或处理器平台相关联的随机存取存储器(RAM),但一般情况下更快并且在物理上更靠近处理器以降低获取时延。高速缓存相对也比RAM更小,这是因为在某种程度上,它可消耗一部分的处理器占用空间(例如,管芯上高速缓存)。另外,一般情况下第一级高速缓存(LI)用超出后续层高速缓存级和/或RAM的速度性能特性来制造,由此要求相对更高的价格点。后续高速缓存层一般情况下包括相对更大量的存储容量,但在物理上进一步远离和/或包括比第一层高速缓存更低的性能特性。如果处理器未在高速缓存的第一层(例如,LI高速缓存)中定位所需代码(例如,一个或更多个指令、优化的代码等),则在对外部存储装置(例如,硬盘、闪存存储器、固态磁盘等)的处理器获取前可检查高速缓存的第二或后续层(例如,L2高速缓存、DRAM)。因此,大多数高速缓存被构建成冗余存储在高速缓存的第一层(例如,LI)中、在高速缓存的所有更低级别(例如,L2、L3等)写入的数据以减少对主存储器的访问。
[0013]虽然在高速缓存中存储编译代码通过降低对重新优化、重新编译和/或主存储器访问尝试的需要而便于时延降低,但高速缓存是易失性的。当平台关闭和/或以别的方式断电时,高速缓存的所有内容丢失。在一些示例中,高速缓冲存储器(例如,LI高速缓存、L2高速缓存等)包括动态RAM (DRAM),DRAM允许在电源切断时也失去其数据的字节级可访问性。字节级可访问性允许处理器和/或二进制转换器在相对小量的信息上而不是大的存储器块上快速操作。在一些示例中,处理器只需要在代码的字节级部分而不是更大的代码块上操作。如果获取大的代码块,则浪费了额外的获取(传输)时间来检索处理器不需要的代码的部分。虽然在电源切断后闪存存储器保持存储内容,但它不能便于字节级读和/或写操作,并且替代地以块访问存储器。相应地,闪存存储器由于在块级别而不是在字节级别的相对高时延访问时间,可不用作最适合的高速缓冲存储器类型。
[0014]另一方面,非易失性(NV) RAM可展示与L1、L2高速缓存和/或动态RAM (DRAM)可比的数据传输时延特性。此外,在平台失去电源(例如,在关闭、重新启动、睡眠模式等期间)时,NV RAM保持其存储器内容以便在平台电源恢复后使用。还有,NV RAM便于字节级可访问性。然而,与传统LI高速缓冲存储器、L2高速缓冲存储器和/或DRAM相比,NV RAM具有相对短的寿命周期。与NV RAM相关联的存储器单元的寿命周期指单元在停止工作前能够执行的存储器写操作的数量。本文中公开的示例方法、设备、系统和/或制品采用基于非易失性RAM的持久代码高速缓存,该高速缓存在电源丢失期间保持存储器内容,展示类似于传统L1/L2高速缓存的时延特性,并且鉴于与NV RAM高速缓存相关联的寿命周期约束,以延长存储器寿命的方式管理写操作。
[0015]图1示出包括处理器102、RAM 104、存储装置106 (例如,硬盘)、高速缓存管理器108及高速缓冲存储器系统110的示例处理器平台100的部分。虽然示例高速缓冲存储器系统110在图1的所示示例中示为以通信方式经总线122连接到示例处理器102,但示例高速缓冲存储器系统110可以是处理器102的一部分,如与处理器管芯集成。示例高速缓冲存储器系统110可包括任何数量的高速缓存装置,如第一级高速缓存112 (例如,LI高速缓存)和第二级高速缓存114 (例如,L2高速缓存)。在所示示列中,包括了 LI和L2高速缓存,并且L2高速缓存是NV RAM高速缓存。图1的示列平台100还包括编译器116,编译器116可从存储装置106获得原始代码部分118以生成优化的编译代码120。图1的示例编译器116可以是动态编译器(例如,及时(JIT)编译器)或二进制转换器。
[0016]在操作中,示例处理器102通过先访问高速缓冲存储器系统110以试图降低时延来请求代码的一个或更多个部分。如果在第一级高速缓存112中发现请求的代码,则由处理器102从第一级高速缓存112中检索代码以进一步处理。如果在示例第一级高速缓存112中未发现请求的代码,则处理器102搜索分层高速缓存的一个或更多个另外级(如果有),如示例第二级高速缓存114。如果在示例第二级高速缓存114内找到,则处理器从第二级高速缓存检索代码以进一步处理。如果在示例高速缓冲存储器系统110的高速缓存的任何级(例如,高速缓存级112、114)中未找到请求的代码(例如,发生“高速缓存丢失”),则处理器发起到示例存储装置106的获取操作。到存储装置(例如,主存储器)116的获取操作与时延时间相关联,所述时延时间比与示例高速缓冲存储器系统110的级别相关联的时延时间相对更长。除非代码已经存储在DRAM或高速缓冲存储器中,否则,由于编译、优化和/或以其它方式经示例编译器116转换从存储装置106检索的代码,可发生另外的时延。
[0017]响应于高速缓存丢失,示例高速缓存管理器108分析处理器分析代码请求以确定请求的代码在已由示例编译器116编译、优化和/或以其它方式转换后是否应放置在示例第二级尚速缓存114中。在一些不例中,可通过不例第一级尚速缓
当前第1页1 2 3 4 5 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1