CN111241010B - 一种基于缓存划分及回滚的处理器瞬态攻击防御方法 - Google Patents
一种基于缓存划分及回滚的处理器瞬态攻击防御方法 Download PDFInfo
- Publication number
- CN111241010B CN111241010B CN202010053240.3A CN202010053240A CN111241010B CN 111241010 B CN111241010 B CN 111241010B CN 202010053240 A CN202010053240 A CN 202010053240A CN 111241010 B CN111241010 B CN 111241010B
- Authority
- CN
- China
- Prior art keywords
- cache
- group
- speculative
- temporary
- data block
- 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
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/0802—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
- G06F12/0893—Caches characterised by their organisation or structure
- G06F12/0897—Caches characterised by their organisation or structure with two or more cache hierarchy levels
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/0802—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
- G06F12/0806—Multiuser, multiprocessor or multiprocessing cache systems
- G06F12/084—Multiuser, multiprocessor or multiprocessing cache systems with a shared cache
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/0802—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
- G06F12/0877—Cache access modes
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Memory System Of A Hierarchy Structure (AREA)
Abstract
本发明公开了一种缓存管理方法和数据处理装置,所述缓存管理方法用于包含一级或者多级缓存的处理器,每级缓存包括至少一个缓存组;该方法包括:将每个缓存组的缓存空间划分为持续小组和临时小组,所述持续小组和临时小组包括一个或者多个缓存行;在缓存中持续小组的数据块被投机的访存装载指令装载进来的数据块踢出持续小组时,将被踢出的数据块装入与该持续小组位于同一缓存组的临时小组;在投机的访存装载指令投机失败时,将被该投机的访存装载指令装载进来的数据块踢出持续小组的数据块回滚到其在被踢到临时小组前位于持续小组内的原始位置。本发明可以阻止熔断(Meltdown)和幽灵(Spectre)攻击这类利用投机执行发起的攻击,提高处理器的安全性。
Description
技术领域
本发明涉及计算机技术领域,具体来说涉及改善处理器安全性的机制和技术,更具体地说,涉及一种基于缓存划分及回滚的处理器瞬态攻击防御方法。
背景技术
为了让处理器获得最佳性能,存储器的速度必须能够跟上处理器的速度。也就是说,当处理器在执行指令时,我们并不期望它因为等待指令或者操作数而暂停执行。因此,现代处理器的寄存器和主存之间引入了高速缓存(Cache)。这样,计算机的存储器被组织成层次结构。最顶层(最靠近处理器的一层)是处理器内的寄存器,接下来是一级或者多级高速缓存,当使用多级缓存时,通常第一、第二、第三级高速缓存等依次被标记为L1、L2、L3等,再往下则是主存(通常也称主存储器或者内存),它通常由动态随机存取存储器(DRAM)构成,例如,参见图1,该图示出了现代处理器的一种常见的架构。沿着存储器层次结构自上到下,存储器成本也逐层下降,容量在变大,但存取时间在变长。全都使用最快的存储器的思路固然好,但是这样的成本也是最昂贵的,难以让大众能够消费,因此,通过使用更多较慢的存储器,以便达到存取时间和成本之间的均衡。并且,在存储器中恰当的组织程序和数据,使需要存取的数据通常在较快的存储器中,以避免处理器长时间等待数据,导致计算效率不高。
除了高速缓存的设置,为了进一步提高计算效率,现代处理器还采用了投机执行(Speculative execution)。通常,一条普通的计算指令1拍结束,一条访存指令如果缓存命中(Hit),需要10到100拍;如果缓存未命中(Miss,也称缺失),到主存里取,需要上万拍甚至更多。如果上一条指令被访存卡了十万拍,后面其他的指令只能等着上一条指令执行完再执行,则会严重影响计算效率。因此,现代处理器普遍使用投机执行的设计,其是一种用于提升程序性能的有效机制。简单地说,投机执行是指根据现有信息,利用空转时间投机执行一些指令,即,提前执行一些将来可能用得上,也可能用不上的指令。如果投机成功,则可以立即提交,提高计算效率,如果投机失败,指令执行完成后发现用不上,处理器会抛弃计算结果,并回退执行期间造成的副作用。但是,回退执行期间造成的副作用仅是针对处理器内的寄存器,而已经被投机的访存加载指令加载到缓存中的数据块是不会被处理的。
2018年,熔断(Meltdown)攻击和幽灵(Spectre)攻击的披露,让投机执行实现机制中隐藏的巨大安全漏洞逐渐受到各领域开发者的广泛关注。
熔断攻击由Google Project Zero团队提出。熔断攻击利用处理器中乱序执行时访存权限检查延迟以及异常现场恢复不彻底的漏洞,绕过操作系统中各种数据隔离机制,偷取内核等敏感区域的数据。
幽灵攻击由瑞士格拉茨工业大学(Graz University of Technology)MoritzLipp等学者提出。幽灵攻击通过操控处理器分支预测器,使受攻击程序投机执行访存越界的指令,同时利用分支预测错误后现场恢复不彻底的漏洞,绕过各种边界检查机制,偷取进程空间内的各种私密数据。幽灵攻击的原理是:假设分支是用来对某个访存操作进行边界检查的,攻击者首先会控制程序进行不越界的访存,使检查在多数情况下都能通过,从而达到对分支预测器训练的目的。而后,攻击者会控制程序,进行一次越界的访存,该访存会通过投机的访存装载操作(Load操作)访问敏感数据,并以此数据的值再访问攻击者布置好的数组,从而对缓存布局造成影响,由于分支预测器已被训练,所以处理器会投机执行这个操作。当处理器最终发现此处分支预测错误时,会对分支后续指令的影响进行消除,但是这种消除只会对流水线内部的各种部件进行,缓存布局没有回滚,所以后续攻击者可通过侧信道方法测量出缓存布局情况,并推测出敏感数据的值。
熔断攻击、幽灵攻击以及类似的攻击方式,是利用处理器投机执行漏洞,并结合各种侧信道(Side Channel)探测方法发动的攻击,这类攻击方式可以称为侧信道攻击或者瞬态攻击(Transient Attack)。从以上漏洞的基本原理上看,熔断攻击和幽灵攻击都是处理器在投机执行失败时,对各种微架构(Microarchitecture)部件恢复不彻底造成的,微架构,又称为微体系结构或者微处理器体系结构,微架构是在计算机工程中,将一种给定的指令集架构(Instruction Set Architecture)在处理器中执行的方法。一种给定的指令集可以在不同的微架构中执行。计算机架构是微架构和指令集设计的结合。而导致以上安全漏洞的根源源于处理器设计者普遍认为:微架构是程序不可见的。然而随着侧信道(sidechannel)等攻击方法的流行,各种微架构信息逐渐都可被攻击者探测、逆向,所以投机失败造成的信息泄漏才被发现。
熔断攻击和幽灵攻击爆出后,处理器厂商和内核开发者都迅速发布了缓解措施,比如英特尔(Intel)发布微码补丁,直接关闭了各种投机优化策略;Linux Kernel社区在4.15版本上添加了内核页表隔离机制KPTI(Kernel PageTable Isolation)。然而,从性能和安全性的角度来说,这些补丁都远达不到开发者的实际预期。针对这一现状,学术界提出了一系列更为有效的防御机制,下面对其中两类代表性技术进行简要介绍。
第一类代表性技术是投机延迟技术,该技术最早由俄亥俄州立大学YinqianZhang团队提出。该技术通过修改处理器重排序缓冲器(Re-order Buffer,ROB)及装载存储队列(Load/Store Queue,LSQ)部件,判断投机的访存的装载指令之前是否有未解出的分支,或是其他可造成异常的指令,以决定当前是否将投机的访存的装载指令取到的结果前递给后续的指令,从而避免熔断攻击和幽灵攻击中投机执行结果对后续微架构的影响。类似的技术还有堪萨斯大学Jacob Fustos提出的幽灵守卫(SpectreGuard)。投机延迟机制对各种投机类型的侧信道攻击都有较好的防御效果。另外,相比于英特尔给出的直接关闭投机的方案,其性能损失更小。然而,由于对加载前递点的判断能力有限,要保证有效的安全,访存装载指令(Load指令)还是会受到过于保守的推迟,从而对整个程序性能造成巨大影响,所以这种方法目前还是难以被开发者接受。在此基础上,为了避免流水线长期停顿,瑞典乌普萨拉大学的Christos Sakalis等人提出了基于值预测的优化方法,该方法通过添加一个值预测器,该预测器类似于分支预测器,会根据记录的历史信息推测出应该装载出的值。但是,值预测需要在流水线内添加预测器,会增加核内面积,且开销依然较高。
第二类代表性技术是投机隔离技术,该技术由伊利诺伊大学香槟分校MengjiaYan团队提出。该技术的核心思想是在处理器核内设置一个投机缓冲区(SpeculativeBuffer),用于保存该核心执行的投机的访存的装载指令取到的缓存行(Cache Line)。投机成功就是确定某条执行过的指令以后能用上,而投机失败就是确定某条执行过的指令以后肯定用不上,所以,投机失败时需要进行寄存器状态的回滚。当投机失败时,投机缓冲区内的缓存行会随着投机的访存的装载指令一起被消除。当投机的访存装载指令提交(Retire)时,就再次从内存中加载相应的缓存行,并和投机缓冲区中的缓存行进行比较,如果相同,证明投机缓冲区中的缓存行并没有违反缓存的一致性协议,可以生效,否则消除后续所有指令。这里的提交(Retire)是指,在乱序处理器中,指令在译码后会进入重排序缓冲器,指令执行完后,不会立即结束,因为可能是投机执行的,ROB是个循环队列,当指令到达ROB头部时,就是看其是否应该提交(Retire)的时候,对于投机的访存装载指令来说,如果前面的分支投机已确认正确,且前面按照程序序(Program Order)执行的所有指令中没有任何指令发生异常,当投机的访存的装载指令到达ROB头部时,该投机的访存的装载指令就可以提交。相比于投机延迟,投机隔离对处理器的修改更少,电路更为简单,且开销更小。但是由于要保证多核缓存的一致性,投机成功时还是需要付出较大的代价用于一致性检查。所以该方法依然没有被普遍接受。另外,由于在同步多线程SMT(Simultaneous Multiple Thread)的情况下,同一核心内的线程会共享投机缓冲区,如果攻击者可以控制其中一个线程,就有可能发动并发(Concurrent)攻击,探测到投机缓冲区中的内容。所以,其安全性相比于投机延迟更差。
通过对以上漏洞进行分析,可以看出这是处理器本身存在的硬件上的漏洞,需要对处理器的缓存架构进行修改,才能更好地防御熔断攻击和幽灵攻击这类攻击。而这类攻击最主要的问题在于攻击者利用越界的投机执行造成缓存布局的改变,进而通过侧信道探测的方法获得秘密。因此,有必要对现有技术进行改进,以提升处理器的安全性。
对于关于这攻击的更多的信息以及它们是如何开发使用缓存和投机执行的现代处理器的,可以参照例如下面的技术文献,其通过引用合并于此,犹如明确地阐述:
[1]MoritzLipp,Michael Schwarz,Daniel Gruss,Thomas Prescher,WernerHaas,Anders Fogh,Jann Horn,Stefan Mangard,Paul Kocher,Daniel Genkin,YuvalYarom,and Mike Hamburg.2018.Meltdown:reading kernel memory from user space.InProceedings of the 27thUSENIX Conference on Security Symposium(SEC'18).USENIXAssociation,Berkeley,CA,USA,973-990.
[2]Kocher,Paul,Daniel Genkin,Daniel Gruss,Werner Haas,MichaelHamburg,Moritz Lipp,Stefan Mangard,Thomas Prescher,Michael Schwarz and YuvalYarom.“Spectre Attacks:ExploitingSpeculative Execution.”2019 IEEE Symposiumon Security and Privacy(SP)(2018):1-19.
[3]Intel Analysis of Speculative Execution Side Channels.
发明内容
因此,本发明的目的在于克服上述现有技术的缺陷,提供一种缓存管理方法和数据处理装置。
本发明的目的是通过以下技术方案实现的:
根据本发明的第一方面,提供一种缓存管理方法,用于包含一级或者多级缓存的处理器,每级缓存包括至少一个缓存组,所述缓存管理方法包括:将每个缓存组的缓存空间划分为持续小组和临时小组,所述持续小组和临时小组包括一个或者多个缓存行;在所述缓存中持续小组的数据块被投机的访存装载指令装载进来的数据块踢出持续小组时,将被踢出的数据块装入与该持续小组位于同一缓存组的临时小组,并在投机的访存装载指令投机失败时,将被该投机的访存装载指令装载进来的数据块踢出持续小组的数据块回滚到其在被踢到临时小组前位于持续小组内的原始位置;在所述缓存中持续小组的数据块被非投机的访存装载指令装载进来的数据块踢出持续小组时,将被踢出的数据块踢到下一级存储介质。
根据本发明的一个实施例,所述缓存管理方法还包括:在所述缓存中存储每个缓存行对应的投机状态标记,其中,投机状态标记的第一状态值指示该缓存行的数据块是由投机的访存装载指令装载进来的,投机状态标记的第二状态值指示该缓存行的数据块由非投机的访存装载指令装载进来的。优选的,所述缓存管理方法还包括:在某个投机的访存装载指令投机成功的情况下,将由该投机的访存装载指令装载进来的数据块所在的缓存行对应的投机状态标记由第一状态值修改为第二状态值。
根据本发明的一个实施例,所述缓存管理方法还包括:在所述缓存中存储临时小组内每个缓存行对应的原始位置标记,所述原始位置标记用于指示该缓存行的数据块在被踢到临时小组前位于持续小组内的原始位置;在所述缓存中存储临时小组内每个缓存行对应的重排序索引标记,所述重排序索引标记用于指示将该缓存行的数据块由持续小组踢到临时小组的投机的访存装载指令在重排序缓冲器中对应的重排序索引;
其中,在某个投机的访存装载指令投机成功时,根据该投机的访存装载指令在重排序缓冲器中对应的重排序索引,寻找重排序索引标记中记录的值等于该重排序索引的缓存行,将该缓存行对应的重排序索引标记清空,或者,
在某个投机的访存装载指令投机失败时,根据该投机的访存装载指令在重排序缓冲器中对应的重排序索引,寻找重排序索引标记中记录的值等于该重排序索引的缓存行,根据该缓存行对应的原始位置标记将该缓存行的数据块回滚到其在被踢到临时小组前位于持续小组内的原始位置。
根据本发明的一个实施例,所述缓存管理方法还包括:在临时小组内相应的缓存行对应的重排序索引标记不为空但该缓存行的数据块将要被踢出临时小组的情况下,根据该缓存行对应的原始位置标记将该缓存行的数据块回滚到其在被踢到临时小组前位于持续小组内的原始位置,让将其踢出持续小组的数据块被踢到下一级存储介质。其中,下一级存储介质是下一级缓存或者主存。
根据本发明的一个实施例,所述缓存管理方法还包括:在所述缓存中存储每个缓存行对应的线程号标记,通过线程号标记指示装载数据块到该缓存行的线程ID;在装载数据块到某一缓存行的投机的访存装载指令的投机过程还未确定而与装载数据块到该缓存行的线程ID不一致的其他线程要访问该缓存行时,延迟访问结果的传输直到该投机的访存装载指令的投机过程已经确定,其中,在确定该投机的访存装载指令投机成功时,传输的访问结果为命中,在确定该投机的访存装载指令投机失败时,传输的访问结果为未命中。
根据本发明的一个实施例,所述缓存管理方法还包括:通过计数器分别统计每个持续小组和临时小组发生缓存未命中的次数;当同一缓存组的持续小组和临时小组中任一小组发生缓存未命中次数超过预设次数阈值且两个小组发生缓存未命中的比例差超过预设比例差阈值时,动态调整该组中持续小组和临时小组所包含的缓存行的数量。
根据本发明的一个实施例,所述动态调整该组中持续小组和临时小组所包含的缓存行的数量包括:将发生缓存未命中次数较少的小组的部分缓存行调整至另一个小组,并且调整完成后将该组的持续小组和临时小组对应的计数器清零。
根据本发明的一个实施例,所述预设次数阈值的取值范围是50~10000次,所述预设比例差阈值的取值范围是20%~50%,所述将发生缓存未命中次数较少的小组的部分缓存行调整至另一个小组包括如下步骤:将两个小组中各小组发生缓存未命中的次数与两个小组所在的缓存组发生缓存未命中的总次数之比分别乘以该缓存组的缓存行数量,取整后作为各小组在本次调整后所具有的缓存行数量并据此将发生缓存未命中次数较少的小组的部分缓存行调整至另一个小组;或者将发生缓存未命中次数较少的小组的一个缓存行调整至另一个小组。
根据本发明的第二方面,提供一种数据处理装置,包括:一个或者多个处理器;以及存储器,用于存储一个或多个可执行指令,所述存储器包括一级或者多级缓存和缓存控制器;所述缓存控制器对所述一级或者多级缓存按照如第一方面所述的方法进行缓存管理。
与现有技术相比,本发明的优点在于:
本发明可以防止攻击者利用投机的访存装载指令将特定的数据块踢出某级缓存而造成其访问速度的改变,有效地防止了被瞬态攻击探测到秘密的值,而且,本发明在数据块被踢到临时小组以及从临时小组回滚到持续小组,被踢的数据块的访问速度均无变化,进一步提高了本发明的防御效果,可以防止投机操作对原有高速缓存的影响被瞬态攻击方法探测到,此外,本发明可以支持在投机的访存装载指令在投机还未确定的情况下将数据块预取到缓存,可以很好地支持现有的各种预取机制,对计算效率的影响较小。
附图说明
以下参照附图对本发明实施例作进一步说明,其中:
图1为现有的一种三级缓存的示意图;
图2为现有的处理器中投机的访存装载指令加载数据块到一个已满缓存组时该缓存组内原有数据块的流向;
图3为根据本发明实施例的一个示例性缓存组的示意图;
图4为根据本发明实施例的数据处理装置中投机的访存装载指令和非投机的访存装载指令加载数据块到一个已满缓存组时该缓存组内原有数据块的流向;
图5为根据本发明实施例的一个示例性的数据处理装置的架构及缓存组的设置示意图。
具体实施方式
为了使本发明的目的,技术方案及优点更加清楚明白,以下结合附图通过具体实施例对本发明进一步详细说明。应当理解,此处所描述的具体实施例仅用以解释本发明,并不用于限定本发明。
如在背景技术部分提到的,现代处理器本身存在硬件上的漏洞,需要对处理器的缓存架构进行修改,才能更好地防御熔断攻击和幽灵攻击这类攻击。而这类攻击最主要的问题在于攻击者利用越界的投机执行造成缓存布局的改变,进而通过侧信道探测的方法获得秘密。比如,参见图2,攻击者通过越界的投机的访存加载指令将数据块(可通过其地址反推秘密,因为其地址为秘密的值乘以攻击者已知的预设值)加载进缓存,将缓存内由攻击者预先布置好的数据块踢出该级缓存,导致了攻击者布置好的数据块的访问速度的改变,攻击者进一步通过获取其布置的缓存块的访问速度,则可以识别到其布置的数据块中,被踢出该级缓存的数据块的访问速度的改变,从而得到是哪个缓存块被踢出,以通过侧信道探测的方法获得秘密的值。而本发明通过将一个缓存组分为持续小组和临时小组,在熔断(Meltdown)和幽灵(Spectre)攻击这类利用投机执行发起侧信道攻击的攻击机制下,在某级缓存中持续小组的数据块被投机的访存装载指令装载进来的数据块踢出持续小组时,将被踢出的数据块装入与该持续小组位于同一缓存组的临时小组,而在投机失败时,被踢到临时小组的数据块还会回滚到其在被踢到临时小组前位于持续小组内的原始位置,有效防止了攻击者对缓存布局的改变,因此,本发明可以防止攻击者利用投机的访存装载指令将特定的数据块踢出某级缓存而造成其访问速度的改变,有效地防止了被侧信道攻击探测到秘密的值。而且,本发明在数据块被踢到临时小组以及从临时小组回滚到持续小组,被踢的数据块的访问速度均无变化,进一步提高了本发明的防御效果,可以防止投机操作对原有高速缓存的影响被侧信道攻击方法探测到。
根据本发明的一个实施例,提供一种缓存管理方法,用于包含一级或者多级缓存的处理器,每级缓存采用组相联映射或者全相联映射,采用组相联映射的缓存包括多个缓存组,采用全相联映射的缓存包括一个缓存组。为了便于理解,此处先对缓存的映射技术进行说明。目前,缓存的映射技术有三种,分别是直接映射、全相联映射和组相联映射。其中,直接映射是最简单的映射技术,是一种将主存中的每个数据块映射到缓存的一个特定可用的缓存行中的映射技术。对于直接映射技术,虽然某些数据块可能映射到不同的缓存行,某些数据块可能映射到同一缓存行,但每级缓存中对于主存的每个数据块,在缓存中有且仅设有一个与之对应的缓存行。全相联映射,是一种允许将主存的每个数据块装入该缓存的所有缓存行的映射技术。组相联映射,是一种允许将主存中的每个数据块映射到缓存的特定的多个但非所有缓存行的映射技术。换言之,如果缓存中只有一个缓存行可以放置某个数据块,则其为直接映射的缓存;如果缓存中有多个缓存行可以放置某个数据块,则其为组相联的缓存;如果缓存中的任何缓存行都可以放置某个数据块,则其为全相联的缓存。缓存可以是指令缓存和/或数据缓存。
根据本发明的一个实施例,缓存管理方法用于包含一级缓存的处理器,该级缓存可以采用组相联映射或者全相联映射。
根据本发明的一个实施例,缓存管理方法用于包含二级缓存的处理器,第一、第二级缓存都可以采用组相联映射;或者,第一、第二级缓存都可以采用全相联映射;或者,第一级缓存可以采用组相联映射,第二级缓存可以采用全相联映射;或者,第一级缓存可以采用全相联映射,第二级缓存可以采用组相联映射;
根据本发明的一个实施例,缓存管理方法用于包含三级缓存的处理器,第一、第二、第三级缓存都可以采用组相联映射;或者,第一、第二、第三级缓存都可以采用全相联映射;又或者,第一、第二、第三级缓存采用的映射技术可以在全相联映射或者组相联映射中选择。应当注意的是,以上仅是仅是举例,本发明并不是只能特定用于包括一级、二级或者三级缓存的处理器,也可以是包含四级甚至更多级缓存的处理器,本文对此不进行任何限制。
根据本发明的一个实施例,参见图3,可以看到,本发明中,实际上是对缓存结构进行调整,将一个缓存组分为了临时小组和持续小组。此外,对于每个缓存行,现有处理器的缓存行是包括用于存储数据块的存储空间(Data)、地址标记(Tag)和缓存行状态标记(Flag)。而本发明在缓存中新增了一些标记,以能实现本发明的缓存管理方法,即小组标记、投机状态标记、原始位置标记、重排序索引标记和线程号(Thread id,TID)标记,而现代处理器的缓存中没有预留存储这些标记的存储空间,因此,是不能通过对现有处理器进行软件层面的改动而实现本发明的缓存管理方法的。根据本发明的一个实施例,本发明增加的小组标记、投机状态标记、原始位置标记、重排序索引标记和线程号(Thread id,TID)标记可以和地址标记(Tag)和缓存行状态标记(Flag)一样,存储在标记阵列(tag array)中。
根据本发明的一个实施例,缓存管理方法包括:响应于访存请求,将包含投机的访存装载指令所需数据的数据块装载到普通缓存;和/或响应于访存请求,将包含非投机的访存装载指令所需数据的数据块装载到普通缓存。
根据本发明的一个实施例,缓存管理方法包括:将每个缓存组的缓存空间划分为持续小组和临时小组,所述持续小组和临时小组包括一个或者多个缓存行;在某级缓存中持续小组的数据块被投机的访存装载指令装载进来的数据块踢出持续小组时,将被踢出的数据块装入与该持续小组位于同一缓存组的临时小组;在某个投机的访存装载指令投机失败时,将被该投机的访存装载指令装载进来的数据块踢出持续小组的数据块回滚到其在被踢到临时小组前位于持续小组内的原始位置;在某级缓存中持续小组的数据块被非投机的访存装载指令装载进来的数据块踢出持续小组时,将被踢出的数据块踢出该级缓存。持续小组和临时小组包括一个或者多个缓存行是指持续小组包括一个或者多个缓存行并且临时小组包括一个或者多个缓存行,每个缓存组的持续小组和临时小组分别包括该持续组的部分缓存行。参见图4,示出了数据块被投机的访存装载指令或者被非投机的访存装载指令装载的数据块踢出持续小组的不同操作。位于图4上部的缓存组中,如果投机的访存装载指令投机失败,被踢到临时小组第一个缓存行的数据块还会进一步回滚到其在持续小组的原始位置,即,图4所示缓存组的持续小组的第三个缓存行。该实施例的技术方案至少能够实现以下有益技术效果:本发明通过对缓存的缓存架构进行改变,让一个缓存组可以被分为持续小组和临时小组,而由于同一缓存组的持续小组和临时小组必然是在同一级缓存上,存在这两个小组内的数据块的访问速度是相同的,在熔断(Meltdown)和幽灵(Spectre)攻击这类利用投机执行发起攻击的攻击机制下,在某级缓存中持续小组的数据块被投机的访存装载指令装载进来的数据块踢出持续小组时,将被踢出的数据块装入与该持续小组位于同一缓存组的临时小组,而在投机失败时,被踢到临时小组的数据块还会回滚到其在被踢到临时小组前位于持续小组内的原始位置,有效防止了攻击者对缓存布局的改变,因此,本发明可以防止攻击者利用投机的访存装载指令将特定的数据块踢出某级缓存而造成访问速度的改变,不会被侧信道攻击探测到秘密的值。比如,对于布置+探测攻击(Prime+Probe),攻击程序会先占满某些缓存组(Cache Set),每个缓存行包括多个缓存行,而后被攻击程序执行,会造成攻击者布置的缓存组中的某些缓存行被替换出去,此时攻击者再次遍历这些缓存组,根据访问时间就可以判断哪些缓存行被换出,从而推测出被攻击程序的访存行为,继而再推测出其他信息。而本发明中,投机的访存装载指令不会造成真正的替换,所以可以阻断布置+探测攻击。
可选的,本发明的一种实施方式是每个缓存组始终被划分为持续小组和临时小组,这种实施方式下,防御机制始终是开启的。
可选的,本发明的另一种实施方式是每个缓存组可以根据在执行的程序的安全需要而适应性的开启防御机制,而没有需要安全保护的程序在执行时,可以关闭防御机制,让每个缓存组内所有的缓存行都作为一组来进行缓存,即,关闭防御机制的情况下,每个缓存组不被划分为持续小组和临时小组,可以和现有的处理器一样工作。例如,响应于开启防御机制的请求,将所述缓存中每个缓存组划分为持续小组和临时小组。在运行的所有程序均没有发出开启防御机制的请求时,不开启防御机制。开启防御机制的请求可以是由当前运行的某个程序发出的请求。比如,一个银行的应用程序,被配置为在该应用程序运行时或者被在用户发生交易时需要处理器开启防御机制,则处理器响应于该请求,将缓存中每个缓存组划分为持续小组和临时小组。
根据本发明的一个实施例,将缓存组划分为持续小组和临时小组是通过在缓存中存储每个缓存行对应的小组标记实现的,相当于在缓存中设置了用于小组标记的存储空间,通过小组标记的值来区分对应的缓存行属于持续小组还是临时小组。比如,在开启防御机制时,设置每级缓存的每个缓存行的小组标记,将每个缓存组中的部分缓存行的小组标记设为对应持续小组的值而另一部分缓存行的小组标记设为临时小组对应的值。比如,假设一个缓存组有16个缓存行,没开启防御机制之前,16个缓存行作为一个无差别的组工作,跟现有的处理器相同。在开启防御机制后,根据初始的设定,假设将12个缓存行的小组标记的值设置为0,表示这12个缓存行属于持续小组,将其余4个缓存行的小组标记设置为1,表示这4个缓存行属于临时小组,由此实现识别一个缓存组中缓存行属于的持续小组还是临时小组。持续小组保存从下一级存储介质装载进来或者从上一级存储介质踢下来的数据块。下一级存储介质是指下一级缓存或者主存。临时小组保存与该临时小组位于同一缓存组的持续小组中被投机的访存装载指令装载进来的数据块踢出持续小组的数据块。投机状态标记的第一状态值指示该缓存行的数据块是由投机的访存装载指令装载进来的,投机状态标记的第二状态值指示该缓存行的数据块由非投机的访存装载指令装载进来的。比如,第一状态值是1,第二状态值是0。
优选的,缓存管理方法包括:在某个投机的访存装载指令投机成功的情况下,将由该投机的访存装载指令装载进来的数据块所在的缓存行对应的投机状态标记由第一状态值修改为第二状态值。因为投机成功时,则可以认为该指令前面的指令都是正确执行的,投机成功后,该指令可以被视为非投机的指令。
根据本发明的一个实施例,缓存管理方法还包括:在缓存中存储临时小组内每个缓存行对应的原始位置标记,原始位置标记用于指示该缓存行的数据块在被踢到临时小组前位于持续小组内的原始位置;在缓存中存储临时小组内每个缓存行对应的重排序索引标记,重排序索引标记用于指示将该缓存行的数据块由持续小组踢到临时小组的投机的访存装载指令在重排序缓冲器中对应的重排序索引。现有的处理器的缓存行是没有预留对应的原始位置标记和重排序索引标记的存储位置的,因此,在投机失败时,只能修改寄存器,而没有相应的技术措施去根据装载数据块到缓存行的指令的投机状态来对该指令对缓存造成的影响进行对应的处理,比如,不能在指令投机失败时找到被踢数据块将其回滚到原始位置,导致无法对缓存进行回滚。
优选的,在某个投机的访存装载指令投机成功时,根据该投机的访存装载指令在重排序缓冲器中对应的重排序索引(Program Counter of Re-order Buffer,RobPC),寻找重排序索引标记中记录的值等于该重排序索引的缓存行,将该缓存行对应的重排序索引标记清空(NUL)。指令在提交前均在重排序缓存中有一单元。重排序索引即指令在提交前在重排序缓存中的单元号。投机成功时,将该缓存行对应的重排序索引标记清空(NUL),但是该缓存行依然是有效的,如果是处于第一级缓存,则依然可以被线程访问,保证了本发明的访问效率。
优选的,在某个投机的访存装载指令投机失败时,根据该投机的访存装载指令在重排序缓冲器中对应的重排序索引,寻找重排序索引标记中记录的值等于该重排序索引的缓存行,根据该缓存行对应的原始位置标记将该缓存行的数据块回滚到其在被踢到临时小组前位于持续小组内的原始位置。本发明通过设置重排序索引标记和原始位置标记,在投机的访存装载指令投机成功或者失败时,重排序缓冲器可以将该指令投机成功或者失败的信息以及该指令的重排序索引发送给缓存控制器。由缓存控制器来执行本实施例的缓存管理方法,从而让本发明可以防止攻击者利用投机的访存装载指令将特定的数据块踢出某级缓存而造成访问速度的改变,不会被侧信道攻击探测到秘密的值。
根据本发明的一个实施例,缓存管理方法还包括:在某级缓存中临时小组内相应的缓存行对应的重排序索引标记不为空但该缓存行的数据块将要被踢出临时小组的情况下,根据该缓存行对应的原始位置标记将该缓存行的数据块回滚到其在被踢到临时小组前位于持续小组内的原始位置,让将其踢出持续小组的数据块被踢出该级缓存,即,让将其踢出持续小组的数据块被踢到下一级存储介质。该实施例的技术方案至少能够实现以下有益技术效果:因为临时小组中缓存行的数量有限,攻击者可能通过多次投机,尝试将目标项再从临时小组中挤出,导致秘密被攻击探测到,因此,本发明通过该方式,在临时小组内相应的缓存行对应的重排序索引标记不为空(NUL),即将其踢到临时小组的投机的访存指令的投机过程还未确定,但该缓存行的数据块将要被踢出临时小组的情况下,则根据该缓存行对应的原始位置标记将该缓存行的数据块回滚到其在被踢到临时小组前位于持续小组内的原始位置,让将其踢出持续小组的数据块被踢出该级缓存,由此,进一步提高本发明的防御效果。
根据本发明的一个实施例,缓存管理方法还包括:在某级缓存中持续小组的数据块被非投机的访存装载指令装载进来的数据块踢出持续小组时,将被踢出的数据块踢出该级缓存。比如,非投机的访存装载指令例如可以是atomic指令、store指令、内存屏障指令。这些指令在执行时会按程序序执行,而非乱序执行,不会被熔断(Meltdown)和幽灵(Spectre)攻击这类攻击者利用,因此,可以在某级缓存中持续小组的数据块被非投机的访存装载指令装载进来的数据块踢出持续小组时,将被踢出的数据块踢出该级缓存,避免被这类指令踢出的数据块占用宝贵的临时小组的资源,从而进一步保证本发明的防御效果。
根据本发明的一个实施例,缓存管理方法还包括:在缓存中存储每个缓存行对应的线程号标记,通过线程号标记指示装载数据块到该缓存行的线程ID;在装载数据块到某一缓存行的投机的访存装载指令的投机过程还未确定而与装载数据块到该缓存行的线程ID不一致的其他线程要访问该缓存行时,延迟访问结果的传输直到该投机的访存装载指令的投机过程已经确定,其中,在确定该投机的访存装载指令投机成功时,传输的访问结果为命中,在确定该投机的访存装载指令投机失败时,传输的访问结果为未命中。该实施例的技术方案至少能够实现以下有益技术效果:当攻击者可控制多个线程时,首先可在其中一个线程中用敏感数据为索引,将辅助数组中的某一项装载入缓存中,之后,在另一线程中扫描该辅助数组,探测具体是哪一项被装载进缓存中(速度变快),从而推测出敏感数据,而本发明通过线程ID标记,可以识别出装载数据块到缓存的具体线程,在投机确定前,可延迟其他线程对当前线程投机装载进来数据的访问,从而避免使攻击者探测到结果,达到防御效果。这样设计的目的是为了防止攻击者通过多线程并发(Concurrent)的清空+重载方式(Flush+Reload),度量出投机引起的缓存副作用。
根据本发明的一个实施例,缓存管理方法还包括:通过计数器分别统计每个持续小组和临时小组发生缓存未命中的次数;当同一缓存组的持续小组和临时小组中任一小组发生缓存未命中次数超过预设次数阈值且两个小组发生缓存未命中的比例差超过预设比例差阈值时,动态调整该组中持续小组和临时小组所包含的缓存行的数量。优选的,动态调整该组中持续小组和临时小组所包含的缓存行的数量包括:将发生缓存未命中次数较少的小组的部分缓存行调整至另一个小组,并且调整完成后将该组的持续小组和临时小组对应的计数器清零。
优选的,预设次数阈值的取值范围是50~10000次,预设比例差阈值的取值范围是20%~50%。
可选的,将发生缓存未命中次数较少的小组的部分缓存行调整至另一个小组包括如下步骤:将两个小组中各小组发生缓存未命中的次数与两个小组所在的缓存组发生缓存未命中的总次数之比分别乘以该缓存组的缓存行数量,取整后作为各小组在本次调整后所具有的缓存行数量并据此将发生缓存未命中次数较少的小组的部分缓存行调整至另一个小组。比例差是指两个小组中各小组发生缓存未命中的次数与两个小组所在的缓存组发生缓存未命中的总次数之比的差值的绝对值。比如,假设预设次数阈值是1000次,预设比例差阈值为20%,一个缓存组有16行,其中,持续小组有12行,临时小组有4行。假设在某个时刻,该缓存组中,临时小组发生缓存未命中次数达到了1000次,而持续小组此时发生缓存未命中次数为500次,临时小组和持续小组发生缓存未命中的比例差为33%大于设定的预设比例差阈值20%,则需要对两个小组的缓存行数量进行调整,持续小组在本次调整后所具有的缓存行数量为:四舍五入取整为5,临时小组在本次调整后所具有的缓存行数量为:四舍五入取整为11,则据此将持续小组的7个缓存行调整给临时小组。
可选的,将发生缓存未命中次数较少的小组的部分缓存行调整至另一个小组是通过以下方式实现的:将发生缓存未命中次数较少的小组的一个缓存行调整至另一个小组。即,在某个时刻,需要对两个小组的缓存行数量进行调整时,则将发生缓存未命中次数较少的小组的一个缓存行调整至另一个小组。
根据本发明的一个实施例,缓存管理方法还包括:在具有多个核心的处理器的每个核心所对应缓存的持续小组和临时小组之间实施缓存一致性协议。比如,缓存一致性协议是MESI一致性协议。
根据本发明的一个实施例,一种数据处理装置,包括:一个或者多个处理器;以及存储器,用于存储一个或多个可执行指令,存储器包括一级或者多级缓存和缓存控制器;缓存控制器对一级或者多级缓存按照如前述任一实施例的方法进行缓存管理。优选的,数据处理装置例如可以是数据处理芯片、微处理器、计算设备。该实施例中缓存控制器进行缓存管理的细节与上述缓存管理方法的实施例的相对应,因此对于本发明实施例中未披露的细节,请参照本发明上述缓存管理方法的实施例。
根据本发明的一个实施例,一种计算设备,包括一个或者多个前述实施例所述的数据处理装置。
根据本发明的一个实施例,本发明的数据处理装置还包括转译后备缓冲器,转译后备缓冲器内设有页表解析缓冲区(PageTable Walking Request Buffer,PWRB),用于保存投机状态还未确定但是需要进行页表访问的请求,所述页表访问的请求是在该请求对应的投机的访存装载指令的投机状态确定后才进行处理,其中,如果投机成功,则根据该请求开始页表访问,如果投机失败,则删除该请求。该实施例的技术方案至少能够实现以下有益技术效果:本发明通过增设页表解析缓冲区,既可以避免流水线阻塞,又可以抵挡攻击者采用熔断(Meltdown)和幽灵(Spectre)攻击这类利用投机执行发起攻击的方式来对转译后备缓冲器发起攻击,进一步提高了本发明的防御能力或者说安全性。
为了便于理解,下面参照图5通过一个具体的示例来说明本发明的技术方案。
根据本发明的一个示例,假设处理器模型包含两级缓存,其中第一级缓存是每个核心各一个,使用基于嗅探(snoop)的MESI一致性协议,第二级缓存(Last Level Cache,LLC)是整个处理器共享,二者是包含(inclusive)关系。以上假设只是为了简化分析过程,本申请提出的防御机制不依赖于任何具体的缓存结构或一致性协议。
参见图5,第一级缓存又分为指令缓存(I-cache)和数据缓存(D-cache)。指令缓存用于缓存处理器取指阶段访问过的数据,大小是32KB,采用组相联,每个缓存行是64B,共分为4路128组,在本防御机制打开的情况下,处理器会从每组中选出1路作为临时小组。数据缓存用于缓存处理器访存阶段访问过的数据,大小是64KB,采用组相联,每个缓存行是64B,共分为8路128组,在本防御机制打开的情况下,处理器会从每组中选出2路作为临时小组。第二级缓存大小是2MB,采用组相联,每个缓存行是64字节,共分为16路2048组,在本防御机制打开的情况下,处理器会从每组中选出4路作为临时小组。全相联也可以按此方法设置。比如,对于全相联的缓存结构,每个主存块可以存放在缓存中的任意缓存行,在使用本发明的方法对全相联的缓存结构进行动态划分时,就是直接对所有缓存行进行持续小组和临时小组划分。
为了实现持续小组和临时小组的划分,缓存行可以增加一个1位(bit)的小组标记。另外由于回滚只能保证线程内的安全,如果在某一个线程执行完投机的访存装载指令之后还未发生回滚之前,攻击者利用另一个线程探测投机装载进来的缓存行,同样也能实现攻击,所以此时需要通过线程隔离,保证在投机确定前,一个线程不能直接使用另一个线程装载进来的数据。为了实现对投机装载进来缓存行的线程隔离,缓存行还需要增加1位甚至更多位的线程号标记,比如,如果处理器只有一个核心,该核心内两个线程,则只需要1位;如果假设处理器包括两个核心,每个核心存在2个超线程,则需要区分4个线程,线程号标记需要2位。
为了实现投机指令提交后即投机执行结束后对临时小组的清理,处理器的装载/存储队列(load/store queue)需要为每一项增加两个4bit的重排序索引标记,因为重排序缓冲器的装载队列中每一项都保存着一条已经发射,但还未提交的装载指令,具体包括:指令ip,指令访存地址,访存宽度,缓存命中情况,取回的数据。而且,每一项都有一个对应的单元号,即前面提及的重排序索引,通常也可被称为重排序缓冲器索引或者重排序缓存单元号。在某条投机装载指令提交时,处理器会根据该指令的重排序索引,如果有被该重排序索引对应的指令装载的数据块踢到临时小组中的数据块,则缓存控制器会根据该重排序索引找到临时小组中被对应的指令装载的数据块踢到临时小组中的数据块所在的缓存行,在投机成功的情况下,将该缓存行的重排序索引和原始位置标记清空,在投机失败的情况下,根据原始位置标记将被该投机的访存装载指令装载进来的数据块踢出持续小组的数据块回滚到其在被踢到临时小组前位于持续小组内的原始位置,而占用其原始位置的数据块被踢到下级存储器。
为了使防御机制更加灵活高效,以适应不同的工作场景,本机制还提供了一对特权态指令—“GCG/SCG reg1,reg2”,用于动态获取/配置缓存的某缓存组中临时小组包含的缓存行的数量。现有各指令集可以根据对应编码规则添加。通过该指令,操作系统或虚拟机监视器(hypervisor)可通过对程序行为的分析,动态调整某些关键数据对应缓存组的临时小组的大小,降低缓存划分对程序性能的影响。“程序行为分析”具体指的是开发者利用“GCG”指令,获取程序执行到当前阶段时,缓存中某些缓存组中两个小组发生缓存未命中的情况。“动态调整”是指开发者首先在部署前进行“程序行为分析”,然后根据分析结果,在程序中使用“SCG”指令设置某个缓存组中小组的划分。比如,分析在程序不同阶段,每个缓存组中不同小组发生缓存未命中次数。如果临时小组的发生缓存未命中的次数较多,则需要此时为临时小组分配更多的路(way),即缓存行,所以,程序员可以在该位置插入新的指令,调整临时小组和持续小组的划分大小。对于频繁访问的热数据,比如GOT表、虚函数表等,可以在程序加载时,根据其加载地址,找到对应的缓存组,将该缓存组的临时小组调大。
对于某个程序,可能某些缓存组在程序运行某一阶段时临时小组发生缓存未命中的次数较多,此时很有可能是因为临时小组过小,频繁发生替换造成的,所以可以在这时调大临时小组,也就是调小持续小组,而过一段时间后,可能发生相反的情况,这时就可以调大持续小组。具体的调整方法以及何时进行调整是程序本身、缓存大小、组内路数(即,缓存行的行数)等因素决定的,属于可以由开发者自己设计的范畴,本发明对此不进行任何限制。
另外,需要强调,为了安全,“GCG/SCG”是特权态指令,程序无法直接使用,需借助系统调用,由内核代码代为完成。实现“GCG/SCG”指令主要需要在缓存中每一组内增加两个用于分别记录两个小组发生缓存未命中次数的计数器以及小组划分寄存器。对于缓存中的每个小组,都会为之准备一个计数器。每个缓存组设有一个小组划分寄存器,小组划分寄存器可以用于保存计算出的本次调整后该组的持续小组和临时小组所具有的缓存行的数量。缓存控制器根据小组划分寄存器内存储的本次调整后该组的持续小组和临时小组所具有的缓存行的数量对该组的缓存行分配进行调整。
整个防御机制主要是在投机的访存装载指令执行过程中发挥作用,所以以下是围绕投机的访存装载指令执行过程,以及对各种其他情况处理的具体描述。
在投机的访存装载指令的处理过程中,投机的访存装载指令会查询其需要的数据在缓存中是否命中,在缓存中任意缓存组的持续小组或者临时小组中命中都认为命中。如果命中,缓存会直接将数据返回。如果未命中,引发缓存未命中,处理器会根据缓存的替换策略从内存读取数据,并将其装入缓存中的持续小组,并在投机状态标记中标记这些数据对应的缓存行是投机的访存装载指令或者是非投机的访存装载指令装载进来的。
对于投机的访存装载指令,处理器会将新的从主存读取的数据的缓存行装入到某一组的持续小组中,如果对应的持续小组已满,在装入新的缓存行之前,需在该组中的持续小组中选择被驱逐行(victim cache line)踢出到临时小组中,缓存行还是可以按照原有的缓存替换策略选择,一般是近期最少使用算法,即LRU(Least Recently Used)策略,只是选择的范围仅限于持续小组,而不是原有的整个缓存组。该被驱逐行会被装入该组中的临时小组中,并且通过重排序索引记录该被驱逐行是由哪条投机的访存装载指令踢出的以及通过原始位置标记记录该被驱逐行被踢出持续小组之前所在的路号,以便在投机失败时根据原始位置标记中记录的路号进行回滚。这些信息记录于缓存的标记阵列(tag array)中,而现有技术中,标记阵列(tag array)只是记录每一个缓存行的地址标记(tag)以及缓存行状态标记(flag)。对于非投机的访存装载指令,处理器会将新的从主存读取的数据的缓存行装入到某一组的持续小组中,如果对应的持续小组已满,则根据LRU策略将其中最近最小使用的缓存行内的数据块踢到下一级存储介质中。
在该投机的访存装载指令提交(retire)之前,即投机确定前,如果本核心中其他线程再次命中该项,则缓存会延迟结果的传输,直到投机结束才会将数据返回,即,直到该投机的访存装载指令的投机过程已经确定才会将数据返回。缓存会延迟结果的传输,是因为在被投机的访存装载指令装载进来的数据块对应的缓存行上标记了线程号,而其他线程的线程号与该缓存行上的线程号不符,所以在投机确定前,不能直接使用这个数据块,从而实现线程隔离,提高了本发明的防御效果。如果投机成功,则将该投机的访存装载指令加载的缓存行的投机状态标记改为表示非投机的值,并将因该投机的访存装载指令踢出至临时小组中对应的缓存行(即被驱逐行)的原始位置标记和重排序缓冲器标记清空(NUL)。如果投机失败,被踢到临时小组的数据块还会回滚到其在被踢到临时小组前位于持续小组内的原始位置。
处理器包括转译后备缓冲器。转译后备缓冲器(Translation Lookaside Buffer,以下简称TLB)内可以设有页表解析缓冲区,用于保存还未确定但是已经触发了页表访问的TLB请求,页表解析缓冲区中的请求会在投机的访存装置指令的投机状态确定时被提交或清除,即投机成功时,请求被提交,投机失败时,请求被清除。针对TLB的处理,以上过程涉及到的访存操作默认都是TLB命中的,也就是不会造成TLB状态被更改。如果发生TLB未命中,必然会造成已有TLB项被替换,从而有可能被基于TLB的侧信道攻击探查到。为了解决这一问题,防御机制会推迟造成TLB未命中的投机的访存装载指令的执行,直到该指令已确认安全,即该指令已投机成功。为了避免流水线阻塞,又保证安全,防御机制会为TLB增设一个页表解析缓冲区(PageTable Walking Request Buffer,PWRB),保存还未确定但是已经触发了页表访问的TLB请求,页表解析缓冲区中的请求会在投机的访存装置指令的投机状态确定时被提交或清除。即,页表解析缓冲区保存了投机状态还未确定,但是需要进行页表访问的请求,如果投机成功,页表解析缓冲区中相应的请求则可以开始页表访问,如果投机失败,相应的请求则可以被删除。
关于对第一级缓存核间一致性的维护问题,虽然本机制将一个缓存组划分为了两个小组,但是临时小组中的缓存行在被回收前依然需要向所在核心服务,所以依然需要维护其一致性,而装载到持续小组中的数据块在投机失败发生回滚(Rollback)时,因为其是干净(Clean)的,所以不需要向其他核心发送无效(Invalid)请求,所以原有不需要对原有缓存一致性协议进行更改。
关于对预取(Prefetch)的支持问题,现代处理器都会通过软硬件预取提升程序性能,但是由于预取会一次将大量数据装载到缓存中,所以本发明背景技术部分提到的其他防御机制从运行原理或安全性上都不支持预取,而本发明的防御机制可以良好地兼容各种预取机制。对于各种软硬件的预取请求,如果它是投机的,就按投机处理,如果是非投机的,就按非投机的处理。背景技术里面踢到的技术方案,都不允许在投机未确定的情况下,对投机的访存装载指令所需的数据进行预取,只有投机成功的情况下才装载其所需的数据,导致了其不支持预取,而本发明可以按照现有的技术方案对数据进行预取,因此,本发明的机制本身对预取没有任何影响,可以避免防御机制对计算效率造成过多的影响。
需要说明的是,虽然上文按照特定顺序描述了各个步骤,但是并不意味着必须按照上述特定顺序来执行各个步骤,实际上,这些步骤中的一些可以并发执行,甚至改变顺序,只要能够实现所需要的功能即可。
本发明可以是系统、方法和/或计算机程序产品。计算机程序产品可以包括计算机可读存储介质,其上载有用于使处理器实现本发明的各个方面的计算机可读程序指令。
计算机可读存储介质可以是保持和存储由指令执行设备使用的指令的有形设备。计算机可读存储介质例如可以包括但不限于电存储设备、磁存储设备、光存储设备、电磁存储设备、半导体存储设备或者上述的任意合适的组合。计算机可读存储介质的更具体的例子(非穷举的列表)包括:便携式计算机盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、静态随机存取存储器(SRAM)、便携式压缩盘只读存储器(CD-ROM)、数字多功能盘(DVD)、记忆棒、软盘、机械编码设备、例如其上存储有指令的打孔卡或凹槽内凸起结构、以及上述的任意合适的组合。
以上已经描述了本发明的各实施例,上述说明是示例性的,并非穷尽性的,并且也不限于所披露的各实施例。在不偏离所说明的各实施例的范围和精神的情况下,对于本技术领域的普通技术人员来说许多修改和变更都是显而易见的。本文中所用术语的选择,旨在最好地解释各实施例的原理、实际应用或对市场中的技术改进,或者使本技术领域的其它普通技术人员能理解本文披露的各实施例。
Claims (10)
1.一种缓存管理方法,用于包含一级或者多级缓存的处理器,每级缓存包括至少一个缓存组;其特征在于,
所述缓存管理方法包括:
将每个缓存组的缓存空间划分为持续小组和临时小组,所述持续小组和临时小组包括一个或者多个缓存行;
在所述缓存中持续小组的数据块被投机的访存装载指令装载进来的数据块踢出持续小组时,将被踢出的数据块装入与该持续小组位于同一缓存组的临时小组;
在投机的访存装载指令投机失败时,将被该投机的访存装载指令装载进来的数据块踢出持续小组的数据块回滚到其在被踢到临时小组前位于持续小组内的原始位置。
2.根据权利要求1所述的缓存管理方法,其特征在于,所述缓存管理方法还包括:
在所述缓存中存储每个缓存行对应的投机状态标记,其中,投机状态标记的第一状态值指示该缓存行的数据块是由投机的访存装载指令装载进来的,投机状态标记的第二状态值指示该缓存行的数据块由非投机的访存装载指令装载进来的;
在投机的访存装载指令投机成功的情况下,将由该投机的访存装载指令装载进来的数据块所在的缓存行对应的投机状态标记由第一状态值修改为第二状态值。
3.根据权利要求2所述的缓存管理方法,其特征在于,所述缓存管理方法还包括:
在所述缓存中存储临时小组内每个缓存行对应的原始位置标记,所述原始位置标记用于指示该缓存行的数据块在被踢到临时小组前位于持续小组内的原始位置;
在所述缓存中存储临时小组内每个缓存行对应的重排序索引标记,所述重排序索引标记用于指示将该缓存行的数据块由持续小组踢到临时小组的投机的访存装载指令在重排序缓冲器中对应的重排序索引;
其中,在投机的访存装载指令投机成功时,根据该投机的访存装载指令在重排序缓冲器中对应的重排序索引,寻找重排序索引标记中记录的值等于该重排序索引的缓存行,将该缓存行对应的重排序索引标记清空,
或者,在投机的访存装载指令投机失败时,根据该投机的访存装载指令在重排序缓冲器中对应的重排序索引,寻找重排序索引标记中记录的值等于该重排序索引的缓存行,根据该缓存行对应的原始位置标记将该缓存行的数据块回滚到其在被踢到临时小组前位于持续小组内的原始位置。
4.根据权利要求3所述的缓存管理方法,其特征在于,所述缓存管理方法还包括:
在临时小组内相应的缓存行对应的重排序索引标记不为空但该缓存行的数据块将要被踢出临时小组的情况下,根据该缓存行对应的原始位置标记将该缓存行的数据块回滚到其在被踢到临时小组前位于持续小组内的原始位置,让将其踢出持续小组的数据块被踢到下一级存储介质,下一级存储介质是下一级缓存或者主存。
5.根据权利要求1至4任一项所述的缓存管理方法,其特征在于,所述缓存管理方法还包括:在所述缓存中持续小组的数据块被非投机的访存装载指令装载进来的数据块踢出持续小组时,将被踢出的数据块踢到下一级存储介质。
6.根据权利要求1至4任一项所述的缓存管理方法,其特征在于,所述缓存管理方法还包括:
在所述缓存中存储每个缓存行对应的线程号标记,通过线程号标记指示装载数据块到该缓存行的线程ID;
在装载数据块到缓存行的投机的访存装载指令的投机过程还未确定而与装载数据块到该缓存行的线程ID不一致的其他线程要访问该缓存行时,延迟访问结果的传输直到该投机的访存装载指令的投机过程已经确定,其中,在确定该投机的访存装载指令投机成功时,传输的访问结果为命中,在确定该投机的访存装载指令投机失败时,传输的访问结果为未命中。
7.根据权利要求1至4任一项所述的缓存管理方法,其特征在于,所述缓存管理方法还包括:
通过计数器分别统计每个持续小组和临时小组发生缓存未命中的次数;
当同一缓存组的持续小组和临时小组中任一小组发生缓存未命中次数超过预设次数阈值且两个小组发生缓存未命中的比例差超过预设比例差阈值时,动态调整该组中持续小组和临时小组所包含的缓存行的数量。
8.根据权利要求7所述的缓存管理方法,其特征在于,所述动态调整该组中持续小组和临时小组所包含的缓存行的数量包括:
将发生缓存未命中次数较少的小组的部分缓存行调整至另一个小组,并且调整完成后将该组的持续小组和临时小组对应的计数器清零。
9.根据权利要求8所述的缓存管理方法,其特征在于,所述预设次数阈值的取值范围是50~10000次,所述预设比例差阈值的取值范围是20%~50%,所述将发生缓存未命中次数较少的小组的部分缓存行调整至另一个小组包括如下步骤:
将两个小组中各小组发生缓存未命中的次数与两个小组所在的缓存组发生缓存未命中的总次数之比分别乘以该缓存组的缓存行数量,取整后作为各小组在本次调整后所具有的缓存行数量并据此将发生缓存未命中次数较少的小组的部分缓存行调整至另一个小组;或者
将发生缓存未命中次数较少的小组的一个缓存行调整至另一个小组。
10.一种数据处理装置,其特征在于,包括:
一个或者多个处理器;以及
存储器,用于存储一个或多个可执行指令,所述存储器包括一级或者多级缓存和缓存控制器;
所述缓存控制器对所述一级或者多级缓存按照如权利要求1至9任一所述的方法进行缓存管理。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010053240.3A CN111241010B (zh) | 2020-01-17 | 2020-01-17 | 一种基于缓存划分及回滚的处理器瞬态攻击防御方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010053240.3A CN111241010B (zh) | 2020-01-17 | 2020-01-17 | 一种基于缓存划分及回滚的处理器瞬态攻击防御方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN111241010A CN111241010A (zh) | 2020-06-05 |
CN111241010B true CN111241010B (zh) | 2022-08-02 |
Family
ID=70864213
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010053240.3A Active CN111241010B (zh) | 2020-01-17 | 2020-01-17 | 一种基于缓存划分及回滚的处理器瞬态攻击防御方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111241010B (zh) |
Families Citing this family (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112328306B (zh) * | 2020-11-06 | 2023-11-24 | 海光信息技术股份有限公司 | 一种分支预测器的隔离方法、预测方法及分支预测器 |
CN117215973B (zh) * | 2023-09-13 | 2024-05-28 | 之江实验室 | 一种缓存数据的处理方法、深度学习训练方法和系统 |
CN117389630B (zh) * | 2023-12-11 | 2024-03-05 | 北京开源芯片研究院 | 一种数据缓存方法、装置、电子设备及可读存储介质 |
CN117806992B (zh) * | 2024-02-29 | 2024-06-07 | 山东云海国创云计算装备产业创新中心有限公司 | 数据块替换方法、装置、电子设备及存储介质 |
Citations (12)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101615133A (zh) * | 2008-06-27 | 2009-12-30 | 国际商业机器公司 | 用于细粒度延迟写拷贝的装置和方法 |
CN103455308A (zh) * | 2012-05-31 | 2013-12-18 | 辉达公司 | 多线程事务性存储器一致性 |
CN103558992A (zh) * | 2011-02-24 | 2014-02-05 | 泰若考特股份有限公司 | 堆外直接内存数据存储器,创建和/或管理堆外直接内存数据存储器的方法,和/或包括堆外直接内存数据存储器的系统 |
CN105612503A (zh) * | 2013-08-09 | 2016-05-25 | 桑迪士克科技股份有限公司 | 持久性数据结构 |
CN106030522A (zh) * | 2014-03-27 | 2016-10-12 | 英特尔公司 | 利用基于二进制翻译的处理器的锁省略 |
CN108140048A (zh) * | 2015-10-22 | 2018-06-08 | 甲骨文国际公司 | 分层存储装置中的列式高速缓存 |
CN108459988A (zh) * | 2017-02-17 | 2018-08-28 | 英特尔公司 | 持续性远程直接存储器存取 |
CN108694056A (zh) * | 2017-03-30 | 2018-10-23 | 英特尔公司 | 用于基于二进制翻译的微处理器的混合原子性支持 |
CN109284176A (zh) * | 2017-07-20 | 2019-01-29 | 龙芯中科技术有限公司 | 中断响应方法、装置及计算机可读存储介质 |
CN109313554A (zh) * | 2016-05-27 | 2019-02-05 | Arm有限公司 | 用于在非均匀计算装置中进行调度的方法和设备 |
CN110018790A (zh) * | 2019-03-26 | 2019-07-16 | 华中科技大学 | 一种保证持久性内存中数据崩溃一致性的方法及系统 |
CN110036377A (zh) * | 2017-06-28 | 2019-07-19 | 辉达公司 | 可缓存的但不可通过推测指令访问的内存类型 |
Family Cites Families (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101546282B (zh) * | 2008-03-28 | 2011-05-18 | 国际商业机器公司 | 用于在处理器中执行写拷贝的方法和设备 |
US8521961B2 (en) * | 2009-08-20 | 2013-08-27 | International Business Machines Corporation | Checkpointing in speculative versioning caches |
-
2020
- 2020-01-17 CN CN202010053240.3A patent/CN111241010B/zh active Active
Patent Citations (12)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101615133A (zh) * | 2008-06-27 | 2009-12-30 | 国际商业机器公司 | 用于细粒度延迟写拷贝的装置和方法 |
CN103558992A (zh) * | 2011-02-24 | 2014-02-05 | 泰若考特股份有限公司 | 堆外直接内存数据存储器,创建和/或管理堆外直接内存数据存储器的方法,和/或包括堆外直接内存数据存储器的系统 |
CN103455308A (zh) * | 2012-05-31 | 2013-12-18 | 辉达公司 | 多线程事务性存储器一致性 |
CN105612503A (zh) * | 2013-08-09 | 2016-05-25 | 桑迪士克科技股份有限公司 | 持久性数据结构 |
CN106030522A (zh) * | 2014-03-27 | 2016-10-12 | 英特尔公司 | 利用基于二进制翻译的处理器的锁省略 |
CN108140048A (zh) * | 2015-10-22 | 2018-06-08 | 甲骨文国际公司 | 分层存储装置中的列式高速缓存 |
CN109313554A (zh) * | 2016-05-27 | 2019-02-05 | Arm有限公司 | 用于在非均匀计算装置中进行调度的方法和设备 |
CN108459988A (zh) * | 2017-02-17 | 2018-08-28 | 英特尔公司 | 持续性远程直接存储器存取 |
CN108694056A (zh) * | 2017-03-30 | 2018-10-23 | 英特尔公司 | 用于基于二进制翻译的微处理器的混合原子性支持 |
CN110036377A (zh) * | 2017-06-28 | 2019-07-19 | 辉达公司 | 可缓存的但不可通过推测指令访问的内存类型 |
CN109284176A (zh) * | 2017-07-20 | 2019-01-29 | 龙芯中科技术有限公司 | 中断响应方法、装置及计算机可读存储介质 |
CN110018790A (zh) * | 2019-03-26 | 2019-07-16 | 华中科技大学 | 一种保证持久性内存中数据崩溃一致性的方法及系统 |
Also Published As
Publication number | Publication date |
---|---|
CN111241010A (zh) | 2020-06-05 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
Yan et al. | Invisispec: Making speculative execution invisible in the cache hierarchy | |
CN111241010B (zh) | 一种基于缓存划分及回滚的处理器瞬态攻击防御方法 | |
US20210173931A1 (en) | Speculative side-channel attack mitigations | |
CN110232031B (zh) | 保护缓存免受侧信道攻击的方法、系统和存储介质 | |
JP7416727B2 (ja) | 投機制限メモリ領域タイプ | |
US10394716B1 (en) | Apparatus and method for controlling allocation of data into a cache storage | |
KR101757098B1 (ko) | 메모리 액세스에 의한 효용성 기반 공격성 레벨 프리패칭 | |
JP7413280B2 (ja) | 複数のソフトウェア・ワークロードのための分岐予測キャッシュ | |
US11907369B2 (en) | Processor that mitigates side channel attacks by preventing cache memory state from being affected by a missing load operation by inhibiting or canceling a fill request of the load operation if an older load generates a need for an architectural exception | |
CN111274584B (zh) | 一种基于缓存回滚以防御处理器瞬态攻击的装置 | |
CN110036377B (zh) | 可缓存的但不可通过推测指令访问的内存类型 | |
WO2020000989A1 (zh) | 可抵御边信道攻击的缓存加固方法及装置 | |
US20090077350A1 (en) | Data processing system and method | |
CN111259384B (zh) | 一种基于缓存随机无效的处理器瞬态攻击防御方法 | |
US11340901B2 (en) | Apparatus and method for controlling allocation of instructions into an instruction cache storage | |
Skarlatos et al. | Jamais vu: Thwarting microarchitectural replay attacks | |
CN111274198B (zh) | 一种微架构 | |
Sternberger | Spectre-ng: An avalanche of attacks | |
CN110889147B (zh) | 一种利用填充缓存抵御Cache边信道攻击的方法 | |
US11294828B2 (en) | Apparatus and method for controlling allocation of information into a cache storage | |
Seddigh et al. | Breaking KASLR on Mobile Devices without Any Use of Cache Memory | |
CN111241551B (zh) | 基于缓存命中状态的处理器芯片假安全依赖冲突的识别方法 | |
Meng et al. | Secure Access Policy (SAP): Invisibly Executing Speculative Unsafe Accesses in an Isolated Environment | |
Meng et al. | Execute on Clear (EoC): Enhancing Security for Unsafe Speculative Instructions by Precise Identification and Safe Execution | |
Seddigh et al. | Breaking KASLR on mobile devices without any use of cache memory (extended version) |
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 |