CN112596792A - 分支预测方法、装置、介质及设备 - Google Patents
分支预测方法、装置、介质及设备 Download PDFInfo
- Publication number
- CN112596792A CN112596792A CN202011494254.5A CN202011494254A CN112596792A CN 112596792 A CN112596792 A CN 112596792A CN 202011494254 A CN202011494254 A CN 202011494254A CN 112596792 A CN112596792 A CN 112596792A
- Authority
- CN
- China
- Prior art keywords
- branch
- indirect
- target buffer
- entry
- security check
- 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.)
- Granted
Links
- 238000000034 method Methods 0.000 title claims abstract description 103
- 238000007689 inspection Methods 0.000 claims description 19
- 238000004590 computer program Methods 0.000 claims description 11
- 230000008569 process Effects 0.000 description 35
- 238000010586 diagram Methods 0.000 description 22
- 238000012549 training Methods 0.000 description 16
- 238000012545 processing Methods 0.000 description 9
- 230000006870 function Effects 0.000 description 7
- 230000006399 behavior Effects 0.000 description 6
- 238000002347 injection Methods 0.000 description 5
- 239000007924 injection Substances 0.000 description 5
- 230000008859 change Effects 0.000 description 4
- 238000005516 engineering process Methods 0.000 description 4
- 238000004458 analytical method Methods 0.000 description 3
- 230000009286 beneficial effect Effects 0.000 description 2
- 238000004364 calculation method Methods 0.000 description 2
- 230000008878 coupling Effects 0.000 description 2
- 238000010168 coupling process Methods 0.000 description 2
- 238000005859 coupling reaction Methods 0.000 description 2
- 239000000243 solution Substances 0.000 description 2
- 230000003044 adaptive effect Effects 0.000 description 1
- 230000001174 ascending effect Effects 0.000 description 1
- 230000008901 benefit Effects 0.000 description 1
- 230000001413 cellular effect Effects 0.000 description 1
- 238000004891 communication Methods 0.000 description 1
- 230000001934 delay Effects 0.000 description 1
- 238000007726 management method Methods 0.000 description 1
- 230000007246 mechanism Effects 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 230000002093 peripheral effect Effects 0.000 description 1
- 230000008054 signal transmission Effects 0.000 description 1
- 230000011664 signaling Effects 0.000 description 1
- 238000001228 spectrum Methods 0.000 description 1
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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3867—Concurrent instruction execution, e.g. pipeline or look ahead using instruction pipelines
-
- 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30094—Condition code generation, e.g. Carry, Zero flag
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Advance Control (AREA)
Abstract
本申请实施例提供分支预测方法、装置及设备。所述分支预测方法,用于处理器核,所述分支预测方法基于分支目标缓冲器条目进行分支预测,所述方法包括:获取分支目标缓冲器条目中的至少部分信息以及至少部分运行信息;根据系统安全检查选项的系统配置,基于所述分支目标缓冲器条目中的至少部分信息以及所述至少部分运行信息,进行是否允许使用该分支预测器条目进行预测的安全检查。本申请实施例中技术方案可以提升安全性。
Description
技术领域
本申请实施例涉及电路领域,具体涉及分支预测方法、装置、介质及设备。
背景技术
现代处理器一般采用流水线技术并行处理指令,以加速指令处理效率;在处理分支指令时,为避免等待分支指令执行结果而决定分支方向的情况,大多数现代处理器均采用分支预测(Branch Prediction)技术。
分支预测可对分支指令的分支方向等结果进行预测,从而推动处理器进行下一步取指,避免等待分支指令执行结果而导致的流水线延迟。然而,分支预测技术也为处理器安全带来安全风险。
如何避免分支预测技术中的安全风险称为亟待解决的问题。
申请内容
有鉴于此,本申请实施例中提供一种分支预测方法,用于处理器核,所述分支预测方法基于分支目标缓冲器条目进行分支预测,所述方法包括:
获取分支目标缓冲器条目中的至少部分信息以及至少部分运行信息;
根据系统安全检查选项的系统配置,基于所述分支目标缓冲器条目中的至少部分信息以及所述至少部分运行信息,进行是否允许使用该分支预测器条目进行预测的安全检查。
可选的,所述系统安全检查选项包括以下至少一种选项:
是否使能间接分支限制推测保护用户对操作系统的攻击;
是否使能间接分支限制推测保护操作系统对用户的攻击;
是否使能间接分支限制推测保护虚拟机对虚拟机监视器的攻击;
是否使能间接分支限制推测保护虚拟机监视器对虚拟机的攻击;
是否使能单线程间接分支预测器保护。
可选的,至少部分运行信息包括:当前为操作系统模式或用户模式;当前为虚拟机模式或虚拟机监视器模式;当前逻辑核心的识别符;所述安全检查包括以下至少一种:
当使能间接分支限制推测保护用户对操作系统的攻击时,检查是否满足:当前为用户模式,或者当前为操作系统模式且分支目标缓冲器条目为操作系统所有;
当使能间接分支限制推测保护操作系统对用户的攻击时,检查是否满足:当前为操作系统模式,或者当前为用户模式且分支目标缓冲器条目为用户所有;
当使能间接分支限制推测保护虚拟机对虚拟机监视器的攻击时,检查是否满足:当前为虚拟机模式,或者当前为虚拟机监视器模式且分支目标缓冲器条目为虚拟机监视器所有;
当使能间接分支限制推测保护虚拟机监视器对虚拟机的攻击时,检查是否满足:当前为虚拟机监视器模式,或者当前为虚拟机模式且分支目标缓冲器条目为虚拟机所有;
当使能单线程间接分支预测器保护时,检查当前逻辑核心与分支目标缓冲器中线程识别符表示的逻辑核心是否一致。
可选的,所述分支预测方法还包括:对所述分支目标缓冲器条目进行匹配;在所述分支目标缓冲器条目的匹配逻辑中进行所述安全检查,在所述分支目标缓冲器条目中标签匹配通过并且通过所述安全检查时,判断为匹配,否则为不匹配。
可选的,在所述分支目标缓冲器条目的匹配逻辑中进行所述安全检查包括:在确定所述分支目标缓冲器条目中包含间接分支后进行所述安全检查。
可选的,在所述安全检查之前还包括:判断是否只对间接分支进行安全检查,若是,则在所述分支为间接分支时进行安全检查,若否,则进行所述安全检查。
可选的,所述分支预测方法还包括:在所述分支目标缓冲器条目匹配成功后,使用匹配成功的分支目标缓冲器条目进行预测;在所述分支目标缓冲器条目匹配成功后,在使用匹配成功的分支目标缓冲器条目进行预测之前,进行所述安全检查。
可选的,所述分支预测方法还包括:在所述分支目标缓冲器条目匹配成功后,根据匹配成功的所述分支的分支类型访问相应的预测器;在所述分支目标缓冲器条目匹配成功,且确定匹配成功的分支类型为间接分支后,进行所述安全检查,若通过所述安全检查,则根据分支类型访问相应的分支预测器。
可选的,所述分支预测方法还包括:在所述分支目标缓冲器条目匹配成功后,使用匹配成功的分支目标缓冲器条目进行预测;在所述安全检查之前还包括:判断是否只对间接分支进行安全检查,若是,则在所述分支目标缓冲器条目匹配成功,且确定匹配成功的分支类型为间接分支后,进行所述安全检查,若否,则在所述分支目标缓冲器条目匹配成功后进行所述安全检查。
可选的,所述分支预测方法还包括:采用所述分支目标缓冲器条目的间接分支的目标地址作为跳转目标地址;在采用所述分支目标缓冲器中存储的目标地址作为分支预测的跳转目标地址前,进行所述安全检查。
可选的,所述分支预测方法还包括:在分支目标缓冲器条目匹配,且间接类型的分支与间接分支预测器中条目无匹配时,采用所述分支目标缓冲器条目的间接分支的目标地址作为跳转目标地址;在所述分支目标缓冲器条目匹配成功,且确定间接类型的分支与间接分支预测器中条目无匹配后,进行所述安全检查,若通过安全检查,则确定跳转目标地址为分支目标缓冲器中存储的目标地址。
可选的,所述分支预测方法还包括:使用取指地址对所述分支目标缓冲器条目进行匹配,确定匹配成功的分支;若未通过所安全检查,则对所述分支目标缓冲器中其余匹配成功的分支进行安全检查,直至安全检查通过或直至对所述分支目标缓冲器中匹配成功的所有分支进行检查;若所述分支目标缓冲器中匹配成功的所有分支均未通过安全检查,则根据微架构的边界定义取指结束地址和下一取指起始地址。
本申请实施例还提供一种分支预测装置,用于处理器核,所述分支预测装置基于分支目标缓冲器条目进行分支预测,所述装置包括:
信息获取单元,适于获取分支目标缓冲器条目中的至少部分信息以及至少部分运行信息;
安全检查单元,适于根据系统安全检查选项的系统配置,基于所述分支目标缓冲器条目中的至少部分信息以及所述至少部分运行信息,进行是否允许使用该分支预测器条目进行预测的安全检查。
可选的,至少部分运行信息包括:当前为操作系统模式或用户模式;当前为虚拟机模式或虚拟机监视器模式;当前逻辑核心的识别符;所述安全检查单元包括以下至少一检查子单元:
第一检查子单元,适于当使能间接分支限制推测保护用户对操作系统的攻击时,检查是否满足:当前为用户模式,或者当前为操作系统模式且分支目标缓冲器条目为操作系统所有;
第二检查子单元,适于当使能间接分支限制推测保护操作系统对用户的攻击时,检查是否满足:当前为操作系统模式,或者当前为用户模式且分支目标缓冲器条目为用户所有;
第三检查子单元,适于当使能间接分支限制推测保护虚拟机对虚拟机监视器的攻击时,检查是否满足:当前为虚拟机模式,或者当前为虚拟机监视器模式且分支目标缓冲器条目为虚拟机监视器所有;
第四检查子单元,适于当使能间接分支限制推测保护虚拟机监视器对虚拟机的攻击时,检查是否满足:当前为虚拟机监视器模式,或者当前为虚拟机模式且分支目标缓冲器条目为虚拟机所有;
第五检查子单元,适于当使能单线程间接分支预测器保护时,检查当前逻辑核心与分支目标缓冲器中线程识别符表示的逻辑核心是否一致。
可选的,分支预测装置还包括:条目匹配单元,适于对所述分支目标缓冲器条目进行匹配;所述安全检查单元适于在所述分支目标缓冲器条目的匹配逻辑中进行所述安全检查,所述匹配单元适于在所述分支目标缓冲器条目中标签匹配通过并且通过所述安全检查时,判断为匹配,否则为不匹配。
可选的,所述安全检查单元适于在判断所述分支目标缓冲器条目中包含间接分支后进行所述安全检查。
可选的,分支预测装置还包括:间接分支判断逻辑单元,适于在所述安全检查之前判断是否只对间接分支进行安全检查,若是,则在所述分支为间接分支时进行安全检查,若否,则进行所述安全检查。
可选的,分支预测装置还包括:预测单元,适于在所述分支目标缓冲器条目匹配成功后,使用匹配成功的分支目标缓冲器条目进行预测;所述安全检查单元适于在所述分支目标缓冲器条目匹配成功后,在使用匹配成功的分支目标缓冲器条目进行预测之前,进行所述安全检查。
可选的,分支预测装置还包括:预测器访问单元,适于在所述分支目标缓冲器条目匹配成功后,根据匹配成功的所述分支的分支类型访问相应的预测器;所述安全检查单元适于在所述分支目标缓冲器条目匹配成功,且确定匹配成功的分支为间接分支后,进行所述安全检查;所述预测器访问单元适于在通过所述安全检查后,根据分支类型访问相应的分支预测器。
可选的,分支预测装置还包括:预测器访问单元,适于在所述分支目标缓冲器条目匹配成功后,使用匹配成功的分支目标缓冲器条目进行预测;所述装置还包括:间接分支判断逻辑单元,适于判断是否只对间接分支进行安全检查,若是,则所述安全检查单元在所述分支目标缓冲器条目匹配成功,且确定匹配成功的分支类型为间接分支后,进行所述安全检查,若否,则所述安全检查单元在所述分支目标缓冲器条目匹配成功后进行所述安全检查。
可选的,分支预测装置还包括:间接分支跳转目标地址单元,适于采用所述分支目标缓冲器条目的间接分支的目标地址作为跳转目标地址;所述安全检查单元适于在所述间接分支跳转目标地址单元采用所述分支目标缓冲器中存储的目标地址作为分支预测的跳转目标地址前,进行所述安全检查。
可选的,分支预测装置还包括:间接分支跳转目标地址单元,在分支目标缓冲器条目匹配,且间接类型的分支与间接分支预测器中条目无匹配时,采用所述分支目标缓冲器条目的间接分支的目标地址作为跳转目标地址;所述安全检查单元适于在所述分支目标缓冲器条目匹配成功,且确定间接类型的分支与间接分支预测器中条目无匹配后,进行所述安全检查;所述间接分支跳转目标地址单元适于在通过安全检查后,确定跳转目标地址为分支目标缓冲器中存储的目标地址。
可选的,所述分支预测装置,还包括分支目标缓冲器条目匹配单元,适于使用取指地址对所述分支目标缓冲器条目进行匹配,确定匹配成功的分支;所述安全检查单元,适于在未通过所安全检查时,对所述分支目标缓冲器中其余匹配成功的分支进行安全检查,直至安全检查通过或直至对所述分支目标缓冲器中匹配成功的所有分支进行检查;若所述分支目标缓冲器中匹配成功的所有分支均未通过安全检查,则根据微架构的边界定义取指结束地址和下一取指起始地址。
本申请实施例还提供一种处理器核,包括:指令流水线、分支预测单元,所述指令执行流水线适于根据所述分支预测单元的预测结果执行指令;所述处理器核还包括:配置寄存器,用于存储安全检查选项的系统配置;
所述分支预测单元还适于获取分支目标缓冲器条目中的至少部分信息以及至少部分运行信息;根据系统安全检查选项的系统配置,基于所述分支目标缓冲器条目中的至少部分信息以及所述至少部分运行信息,进行是否允许使用该分支预测器条目进行预测的安全检查。
可选的,所述配置寄存器适于配置一下至少一种安全选项:
是否使能间接分支限制推测保护用户对操作系统的攻击;
是否使能间接分支限制推测保护操作系统对用户的攻击;
是否使能间接分支限制推测保护虚拟机对虚拟机监视器的攻击;
是否使能间接分支限制推测保护虚拟机监视器对虚拟机的攻击;
是否使能单线程间接分支预测器保护。
本申请实施例还提供一种处理器,包括至少一个前述的处理器核。
本申请实施例还提供一种计算设备,包括至少一个如前所述的处理器。
本申请实施例还提供一种计算机设备,包括存储器和处理器,所述存储器上存储有可在所述处理器上运行的计算机程序,所述处理器运行所述计算机程序时执行前述的分支预测方法。
本申请实施例还提供一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序运行时执行前述的分支预测方法。
本申请实施例中的技术方案,根据系统安全检查选项的系统配置,基于分支目标缓冲器条目中的至少部分信息进行安全检查,可以实现安全检查的灵活配置。通过进行是否允许使用该分支预测器条目进行预测的安全检查,可以在判断分支预测器条目的安全性后对其进行使用,进而可以缓解由于推测执行导致的侧信道攻击,进一步可以提升分支预测执行过程中的安全性。
附图说明
为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据提供的附图获得其他的附图。
图1为一种包含使用流水线技术的处理器核的处理器框图;
图2为一种分支预测单元的结构示意图;
图3为一种分支预测的流程示意图;
图4为一种BTB的训练流程的示意图;
图5为一种BTB条目的结构示意图;
图6为一种BTB匹配流程的示意图;
图7为一种利用BPU共享特性的幽灵漏洞攻击的原理示意图;
图8为本申请实施例中一种分支预测方法的流程示意图;
图9为本申请实施例中一种安全检查的方法的流程示意图;
图10为本申请实施例中一种分支目标缓冲器条目的匹配逻辑的流程示意图;
图11为本申请实施例中一种分支预测方法的流程图;
图12为本申请实施例中另一种分支预测方法的流程图;
图13为本申请实施例中一种分支预测装置的结构示意图;
图14为本申请实施例中一种安全检查单元的结构示意图;
图15为本申请实施例中另一种分支预测装置的结构示意图;
图16为本申请实施例中另一种分支预测装置的结构示意图;
图17为本申请实施例中另一种分支预测装置的结构示意图;
图18为本申请实施例中一种处理器核的部分结构示意图;
图19为本申请实施例中另一种分支预测装置的结构示意图;
图20为计算机系统体系架构的一种框图。
具体实施方式
下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
如背景技术中所述,在采用流水线技术的现代处理器中,可以采用分支预测技术。图1是一种包含使用流水线技术的处理器核的处理器框图,以下首先结合图1对分支预测技术进行说明。
作为一种可选示例,五级流水线的处理过程可以分为取指(Instruction Fetch)、译码(Instruction Decode)、执行(Execute)、访存(Memory Access)和写回(Write Back);为解决在处理分支指令时,处理器核等待分支指令的执行结果来确定下一步取指而导致的流水线延迟,流水线的前端可设置分支预测单元(BPU,BranchPredictionUnit),以实现分支预测。分支指令通常分为两种情况:分支指令不跳转,则下一步指令为分支指令下一步顺序的指令;分支指令跳转,则下一步指令为跳转到的指令。
参考图1,处理器11可以包括:分支预测单元11,取指单元12,译码单元13,执行单元14,重排序单元15,访存单元16,缓存18,内存控制器17;
其中,分支预测单元11,取指单元12,译码单元13,执行单元14,重排序单元15,访存单元16可以是集成在处理器核内的逻辑电路单元。
分支预测单元(BPU,BranchPredictionUnit)11可进行分支预测,得到分支预测结果,如当前指令是否为分支指令、分支指令的分支结果(方向、地址、目标地址等)等;在一种实现中,可基于分支指令的历史执行信息和结果进行分支预测。
基于分支预测单元11的分支预测结果,取指单元12可通过缓存18读取当前取指的指令(包括但不限于读取分支指令、逻辑运算指令、访存指令等),并馈送到译码单元13;在一种可选实现中,取指单元12可将读取的指令存放入处理器核10的指令寄存器,以便译码单元13从指令寄存器读取指令进行译码。
译码单元13可解释指令,得出译码后的指令;译码后的指令可以是解释指令所得出的可由机器执行的操作信息,诸如解释指令的操作码、操作数和控制字段所形成的机器可执行的微指令(uop)等。
执行单元14可基于译码后的指令执行运算,产生执行结果(执行结果与取指指令的指令功能相应,涉及访存、逻辑运算结果、指令跳转等)。具体的,可以基于译码后的指令和操作数信息,从寄存器文件中读取源操作数,执行运算,产生执行结果。可选的,执行单元14可支持乱序执行指令。
重排序单元15可在执行单元14乱序执行指令之后,使得指令按照原有顺序提交;
可选的,执行单元14与重排序单元15可集成于执行引擎内,当然,执行单元14与重排序单元15也可分离开。
对于访存指令,访存单元16可基于执行单元14对访存指令的执行结果(如访存地址)执行访存;可选的,访存单元16可基于访存指令的执行结果,先访问缓存,在缓存缺失相应访存结果时,再访问内存;访存单元在访问缓存的过程中,可先访问L1缓存,在L1缓存缺失访存结果时,再逐级的访问下级缓存。
写回单元(未图示)可基于执行单元104对LOAD指令的执行结果,将执行结果写回寄存器文件。
需要说明的是,图1示例性的示出了一种五级流水线的处理器核架构,而随着技术调整,流水线中不同阶段的逻辑电路单元也可能相整合或者分离,其架构并不固定;同时,本申请实施例的处理器核也可在四级流水线等其他流水线技术中适用。
进一步地,在具体实施中,分支预测单元101可基于分支目标缓冲器(BTB,BranchTarget Buffer)实现。分支信息存放在BTB条目中,通过取指地址查找BTB,可以在匹配的条目中找到分支信息,基于分支信息可以进行分支预测。
结合参考图1和图2,在一种具体实现方式中,图1中分支预测单元101可以包括:取指地址选择单元21、分支目标缓冲器22、方向预测器23、间接分支预测器24、返回地址预测器25以及汇总单元26。
其中,取指地址选择单元21可基于输入的取指起始地址,选择当前取指起始地址。输入的取指起始地址包括执行单元纠正的取指地址,也即重定向的取指地址中的地址,或者汇总单元26输出的下一步取指地址中的起始地址。可以理解的是,取指地址选择单元21的地址来源可以是更多样的,不限于上述两个来源。
若取指地址选择单元21输出的当前取指起始地址命中分支目标缓冲器22,则根据分支目标缓冲器22中命中的BTB条目可确定命中的分支信息。
示例性的,通过命中的分支信息可确定分支指令的类型、位置、目标地址等信息;分支预测单元可根据分支指令的类型,访问相应的预测器,也即适应性的访问方向预测器23、间接分支预测器24或返回地址预测器25。由所访问的预测器提供预测给汇总单元26;同时,分支目标缓冲器可将命中的分支信息的结果提供给汇总单元26。可以理解的是,方向预测器23、间接分支预测器24及返回地址预测器25为预测器的示例,并非对预测器的限定。
如果分支指令的类型为条件分支指令(Jcc),则访问方向预测器23,预测分支指令是否跳转;如果分支指令的类型为返回指令(Return),则访问返回地址预测器25,预测分支指令的返回地址;如果分支指令的类型为间接分支,则访问间接分支预测器24,预测分支指令的目标地址;如果分支指令的类型为非条件分支,则不需要访问预测器,分支目标缓冲器可基于自身存储的分支信息提供预测。
汇总单元26可综合分支目标缓冲器22的预测和至少一个预测器提供的预测结果,确定当前取指结束地址和下一步取指起始地址;从而基于当前取指起始地址和当前取指结束地址,分支预测单元可输出当前取指地址范围,以在缓存中读取相应的指令。同时,汇总单元26将下一步取指起始地址反馈给取指地址选择单元21,以驱动下一周期的分支预测。
作为一种示例,分支预测逻辑主要包括:如果分支预测单元预测分支指令不跳转,或者预测没有分支指令,则当前取指结束地址可以为预先设定的边界(如64字节对应的边界)或者分支指令的结束地址,而下一步取指起始地址可以为当前取指结束地址+1;
如果分支预测单元预测分支指令跳转,则输出的当前取指结束地址为分支指令的结束地址,下一步取指起始地址为分支指令的目标地址(即分支指令跳转的地址)。
图3是一种分支预测的流程图。结合参考图3,分支预测主要可以包括如下步骤:
步骤S31,取指地址选择;
步骤S32,使用取指地址查询BTB;
步骤S33,是否匹配BTB中任一条目;若是,则执行步骤S34,否则,执行步骤S319;
步骤S34,按照分支顺序从BTB条目中取出一个分支的信息;
步骤S35,根据分支类型访问不同的预测器;
步骤S36,判断是否需要预测跳转,若是,则执行步骤S37,否则,执行步骤S39;
步骤S37,访问方向预测器;
步骤S38,判断是否跳转,若是,则执行步骤S39,否则,执行步骤S313;
步骤S39,判断是否为返回类型分支,若是,则执行步骤S314,否则执行步骤310;
步骤S310,判断是否为间接类型的分支,若否,则执行步骤S311,否则执行步骤S316;
步骤S311,确定跳转目标地址为BTB条目中存储的目标地址;
步骤S312,生成第一类的当前取指结束地址和下一取指起始地址,具体的,取指结束地址为跳转分支的结束地址,下一取指起始地址为跳转分支的目标地址,在步骤S312后执行步骤S320;
步骤S313,判断是否为最后一个分支,若是,则执行步骤S319,否则执行步骤S34;
步骤S314,访问返回地址预测器;
步骤S315,确定目标地址为返回地址预测器给出的目标地址,在步骤S315之后执行步骤S312,其中,不同的预测器可以包括如前文所述的方向预测器、间接分支预测器或返回地址预测器;
步骤S316,访问间接分支预测器;
步骤S317,判断是否匹配间接分支预测器中任一条目,若是,则执行步骤S318,否则执行步骤S311;
步骤S318,确定跳转目标地址为间接分支预测器给出的目标地址,在步骤S318后执行步骤S312;
步骤S319,生成第二类的当前取指结束地址和下一取指起始地址,具体的,取指结束地址可以为微架构定义的边界,例如当前缓存行(Cache Line)的结尾,下一个取指起始地址可以为微架构定义的边界,如下一缓存行的开始;
步骤S320,发送下一取指起始地址至取指地址选择单元;
步骤S321,发送取指起始地址和结束地址给取指单元;
步骤S322,进行取指、译码和执行。
通过上述实施例可以看出,在分支预测过程中,可以首先使用取指地址查找BTB,如果匹配到任意条目,则基于该条目进行进一步预测。对于一个BTB条目中有多个分支信息的情况,可以按照分支顺序依次取出每个分支的信息,并进行预测。对于每一个分支,根据其类型的不同,进一步访问不同的预测模块,比如条件分支需要预测方向,则需要访问方向预测器;返回分支需要从返回地址预测器中得到目标地址;间接分支需要从间接分支预测器中得到目标地址。如果间接分支预测器不命中,则仍然使用BTB条目中的目标地址。当发现第一个跳转分支时,可以结束当前BTB条目的预测。如果匹配到BTB条目,且其中有任一个分支预测为跳转,则当前的取指结束地址即为跳转分支的结束地址,下一个取指地址即为跳转分支的目标地址。否则,当前的取指结束地址和下一个取指地址为微架构定义的边界,比如Cache Line边界。
在具体实施中,若发现分支预测失败,则可以进行BTB的训练。图4一种BTB的训练流程的示意图。结合参考图4,BTB的训练流程可以包括如下步骤:
步骤S41,发现分支预测失败;
步骤S42,将预测失败的分支指令的信息发送给分支预测单元进行训练;
步骤S43,获取该分支指令预测时的取指地址,并使用该取指地址访问BTB;
步骤S44,判断是否匹配BTB中任意条目,若是,则执行步骤S45,否则执行步骤S46;
步骤S45,将该分支指令的信息与现有匹配条目进行合并;
步骤S46,为该分支创建新的BTB条目。
其中,预测失败的分支指令的信息可以包括以下至少一种:预测失败的分支指令的结束地址、跳转方向以及目标地址。
图5是一种BTB条目的结构示意图。结合参考图5,BTB可以是组相连的结构,BTB条目中可以包括以下各个域:有效位,用于指示该条目是否有效;标签(Tag)用于查找时的匹配;线程ID、用户/OS、VM/VMM等用于标记该条目的创建者,其中线程ID表示创建该条目的线程标识(ID,Identification),用户/OS用于表示创建者是用户或者操作系统(OS,Operating System),VM/VMM用于表示创建者是虚拟机(VM,Virtual Machine)或者虚拟机监控器(VMM,Virtual Machine Monitor);分支类型1和分支类型2表示分支的具体种类,用于进一步查找不同的预测器;分支结束地址1和分支结束地址2,用于生成取指请求的结束地址;分支目标地址1和分支目标地址2,用于存储分支目标地址,以生成下一个取指地址。
图5只为一种示例,在有些实施例中,上述分支信息相关的域可能有一个,或者更多个。上述线程ID、用户/OS、VM/VMM的标记位可以每个条目一份,也可以是每个分支信息一份。
在具体实施中,可以通过取指地址对BTB进行查找。具体的,可以将取指地址的一部分用作计算索引地址,从BTB中读取出该索引地址对应的多个BTB条目,一部分用作计算tag,判断是否匹配上述从BTB中读取的多个BTB条目中任一条目。具体的匹配判断方式可以如图6所示,可以包括如下步骤:
步骤S61,计算取指地址对应的Tag;
步骤S62,将计算出的Tag与BTB中条目的Tag进行比较;
步骤S63,判断二者是否相等,若相等,则执行步骤S64,否则执行步骤S65;
步骤S64,判断为匹配;
步骤S65,判断为不匹配。
结合参考图3,在步骤S33,确定取指地址与BTB中任意条目匹配后,在合适的条件下可以继续执行步骤S34至步骤S310,在判断为间接类型的分支后,可以访问间接分支预测器。
间接类型的分支可以通过如下方式定义:如果一个分支的目标地址不取决于指令编码本身,而取决于架构寄存器中或者内存中的值,则认为是间接分支。由于架构寄存器中或者内存中的值可能有不同,因此间接分支通常有多个目标地址。间接分支目标预测器可以为每个间接分支存储多个目标地址,并在预测时给出其中的一个目标地址。
幽灵漏洞(Spectre)是近些年暴露出来的一个很重要CPU漏洞,它利用了CPU的推测执行的特性和侧信道攻击的方法获取敏感信息。其中一个变种利用了BPU共享的特性,攻击者通过对BPU进行训练,然后影响与其共享BPU的受害者的分支预测结果,从而使受害者在推测执行时执行一些敏感代码,从而泄漏信息。推测执行即分支预测之后,到分支执行之前,对该分支指令的预测目标地址处的指令执行。由于乱序执行的存在,分支执行之前,可能会提前执行其预测目标地址处的指令。。
图7是一种利用BPU共享特性的幽灵漏洞攻击的原理示意图。
攻击者71通过分支指令(J1)JMP mem1对分支目标缓冲器72进行训练,改变其取指地址对应的BTB条目中的分支目标地址。其中tag的计算方法为分支指令J1的取指地址进行hash运算,其结果即Hash(J1),实现向分支目标缓冲器中分支目标地址的注入,也即图中的注入目标,该注入目标指向敏感代码。在受害者73进行分支预测时,一些场景下使用分支指令J2的取指地址时,可以访问到上述J1所更新的BTB条目,也即target中的注入目标。比如当J1和J2的索引地址一样时,并且tag也一样,即Hash(J1)==Hash(J2),那么J2的预测下一个取指地址即为注入目标对应的地址。在推测执行时执行跳转指令(J2)JMP mem2时,跳转至注入目标指向的程序段,进而使受害者73在推测执行时执行敏感代码并泄露信息。其中,0xffff…ffff和0x0示意了者内存中的部分区域。
本申请实施例提供了一种分支预测方法,结合参考图8,具体可以包括以下步骤:
步骤S81,获取分支目标缓冲器条目中的至少部分信息以及至少部分运行信息;
步骤S82,根据系统安全检查选项的系统配置,基于所述分支目标缓冲器条目中的至少部分信息以及所述至少部分运行信息,进行是否允许使用该分支预测器条目进行预测的安全检查。
其中,分支目标缓冲器条目(entry)中的信息可以参见图5中所示的各个域中的信息。具体获取的信息可以根据安全检查的需要确定。
系统安全检查选项的系统配置可以包括对多个系统安全检查选项的配置。在具体实施中,系统安全检查选项的配置可以是通过配置寄存器实现。例如,一个系统安全检查选项可以对应一个配置寄存器的位,通过该位为0或者为1确定该选项的系统配置。这个配置寄存器的位可以由用户或者系统进行配置。
在本申请实施例中,根据系统安全检查选项的系统配置。通过进行是否允许使用该分支预测器条目进行预测的安全检查,可以在判断分支预测器条目的安全性后对其进行使用,进而可以缓解由于推测执行导致的侧信道攻击,进一步可以提升推测执行过程中的安全性。
在具体实施中,系统安全检查选项可以包括以下至少一种安全检查的选项:是否使能间接分支限制推测保护用户对操作系统的攻击;是否使能间接分支限制推测保护操作系统对用户的攻击;是否使能间接分支限制推测保护虚拟机对虚拟机监视器的攻击;是否使能间接分支限制推测保护虚拟机监视器对虚拟机的攻击;是否使能单线程间接分支预测器保护。
其中,间接分支限制推测(IBRS)是一种用于限制不同特权级别之间共享分支预测的间接分支控制技术。单线程间接分支预测器(STIBP)是限制在某些处理器上的同一物理核心上的多个逻辑核心例如,逻辑处理器)之间共享分支预测的间接分支控制机制。间接分支限制推测保护的实现方式和单线程间接分支预测器保护的实现方式可以参见后文的实施例。另外,根据本申请的技术启示,本领域技术人员可以实现的各种IBRS保护和STIBP保护的方式均在本申请的保护范围内,在此不做限制。
在具体实施中,所述安全检查的方式可以与所述安全检查选项的系统配置相适应。获取目标缓冲器条目中的至少部分信息时,可以根据安全选项的系统配置确定,以节省系统资源。
在具体实施中,运行信息用于指示系统运行的状态,例如可以包括运行模式和/或逻辑核心的逻辑识别符等信息。运行信息可以从处理器的系统寄存器中获得。
至少部分运行信息可以包括:当前为操作系统模式或用户模式,当前为虚拟机模式或虚拟机监视器模式,以及当前逻辑核心的识别符。安全检查可以包括以下至少一种检查方式:
1)当使能间接分支限制推测保护用户对操作系统的攻击时,检查是否满足:当前为用户模式,或者当前为操作系统模式且分支目标缓冲器条目为操作系统所有;
2)当使能间接分支限制推测保护操作系统对用户的攻击时,检查是否满足:当前为操作系统模式,或者当前为用户模式且分支目标缓冲器条目为用户所有;
3)当使能间接分支限制推测保护虚拟机对虚拟机监视器的攻击时,检查是否满足:当前为虚拟机模式,或者当前为虚拟机监视器模式且分支目标缓冲器条目为虚拟机监视器所有;
4)当使能间接分支限制推测保护虚拟机监视器对虚拟机的攻击时,检查是否满足:当前为虚拟机监视器模式,或者当前为虚拟机模式且分支目标缓冲器条目为虚拟机所有;
5)当使能单线程间接分支预测器保护时,检查当前逻辑核心与分支目标缓冲器中线程识别符表示的逻辑核心是否一致。
在具体实施中,当前为何种模式,例如前述的当前为才做系统模式或当前为用户模式为当前软件运行的基本信息,可以从处理器的一些系统寄存器中获得,该寄存器由系统软件配置获得,例如X86架构的控制寄存器(Control Register)等。
在具体实施中,分支目标缓冲器条目为何主体所有,可以根据分支目标缓冲器条目中相应域的内容,也即BTB中相应标记位的数值确定。
例如,结合参考图5,分支目标缓冲器条目为用户或者操作系统所有可以根据用户/OS标志位确定;分支目标缓冲器条目为虚拟机监视器或者虚拟机所有可以根据VM/VMM标志位确定。
当前的模式可以指示执行处于的模式。通过当前的模式和BTB条目的归属,可以判断是否允许使用该分支预测器条目进行预测,。例如,当使能间接分支限制推测保护用户对操作系统的攻击时,如果处于用户模式,则无需保护。而处于OS模式时,则可以判断BTB条目是否在OS模式可用,该点可以通过BTB中条目的归属进行判断。当BTB条目归OS所有时,说明该BTB条目不是由用户修改的,而是OS自身修改的,因此可以视为对OS是安全的,可以使用。通过该判断避免使用由用户修改的BTB条目,进而可以避免用户对OS在推测执行时的攻击。以上以使能间接分支限制推测保护用户对操作系统的攻击为例,对检查方式1)进行了距离说明。检查方式2)至检查方式4)的原理及实现与检查方式1)类似,在此不再一一赘述。
在处理器技术中,处理器通常有多个物理核心,每个物理核心指包括取指、译码、执行、访存等功能在内的一个装置。如果物理核心支持同步多线程技术(SMT),单个物理核心可以支持多个程序同时运行,如果支持两个同时运行,则有两个逻辑核心。
在具体实施中,当前逻辑核心,为当前程序运行的逻辑核心。BTB条目中线程标识(ID)有与其对应的逻辑核心。若BTB条目中线程ID代表的逻辑核心与当前逻辑核心一致,则说明当前条目是被当前逻辑核心修改的,而并非其它逻辑核心修改的,对当前逻辑核心的威胁较小,可以判定为允许使用该分支预测器条目进行预测的安全检查。
在具体实施中,上述安全检查包含的检查方式可以单独使用或者并用。图9为本申请实施例中一种安全检查的方法的流程示意图,其中示出了并用前述各检查方式的示例的流程图。结合参考图9,安全检查可以包括步骤S91至步骤S912。以下分别进行说明。
步骤S91,判断是否使能间接分支限制推测保护用户对操作系统的攻击。若是,则执行步骤S92,否则执行步骤S93。
在判断是否使能IBRS保护用户对OS的攻击时,可以通过系统配置中相应的安全检查选项进行判断。具体可以通过前文所述的相应的配置寄存器的位判断。后续步骤S93、步骤S95、步骤S97以及步骤S99进行判断的信息基础的来源与步骤S91类似,获取进行判断的信息基础的具体实现方式可以参见步骤S91。
步骤S92,判断是否满足如下条件:当前为用户模式,或者当前为操作系统模式且分支目标缓冲器条目为操作系统所有。若满足,则执行步骤S93,否则执行步骤S912。
如前文所述,从当前软件运行的基本信息中可以确定当前是操作系统模式或者用户模式。从BTB条目中可以确定分支目标缓冲器条目的归属。后续步骤S94、步骤S96以及步骤S98中判断当前的模式的方式均可以基于软件运行的基本信息确定;判断分支目标缓冲器条目为何主体所有,也即判断其归属时,同样可以基于BTB中相应标记位的数值确定。
步骤S93,判断是否使能间接分支限制推测保护操作系统对用户的攻击。若是,则执行步骤S94,否则执行步骤S95。
步骤S94,判断是否满足如下条件:当前为操作系统模式,或者当前为用户系统模式且分支目标缓冲器条目为用户所有。若满足,则执行步骤S95,否则执行步骤S912。
步骤S95,判断是否使能间接分支限制推测保护虚拟机对虚拟机监视器的攻击。若是,则执行步骤S96,否则执行步骤S97。
步骤S96,判断是否满足如下条件:当前为虚拟机模式,或者当前为虚拟机监视器模式且分支目标缓冲器条目为虚拟机监视器所有。若满足,则执行步骤S97,否则执行步骤S912。
步骤S97,判断是否使能间接分支限制推测保护虚拟机监视器对虚拟机的攻击。若是,则执行步骤S98,否则执行步骤S99。
步骤S98,判断是否满足如下条件:当前为虚拟机监视器模式,或者当前为虚拟机模式且分支目标缓冲器条目为虚拟机所有。若满足,则执行步骤S99,否则执行步骤S912。
步骤S99,判断是否使能单线程间接分支预测器保护。若是,则执行步骤S910,否则执行步骤S911。
步骤S910,判断是否满足如下条件:检查当前逻辑核心与分支目标缓冲器中线程识别符表示的逻辑核心是否一致。若满足,则执行步骤S911,否则执行步骤S912。
步骤S911,判定为通过安全检查。
步骤S912,判定为违反安全检查。
可以理解的是,若判定为通过安全检查,则可以认为允许使用该分支预测器条目进行预测,否则,认为不允许使用该分支预测器条目进行预测。
在具体实施中,安全检查的方式可以是多样的。对安全检查中对安全检查选项的系统配置的判断顺序在此不做限定。对安全检查中的检查方式的顺序同样不做限定。另外,其它根据系统配置进行安全检查的方法均属于本申请的申请构思范围。
结合参考图8和图9,在具体实施中,可以在步骤S81中获取图9所示的安全检查方法所需的信息,可以包括至少部分运行信息、目标缓冲器条目中至少部分信息以及系统配置。其中,系统配置为系统安全检查选项的系统配置,目标缓冲器条目信息可以包括BTB条目中的线程ID、用户/OS模式标记位、VM/VMM标记位。运行信息可以包括当前的逻辑核心ID、用户/OS模式以及VM/VMM模式。
在具体实施中,安全检查在分支预测过程中的位置可以是不同的。
在本申请一实施例中,可以在分支目标缓冲器条目的匹配逻辑中进行所述安全检查,在所述分支目标缓冲器条目中标签匹配通过并且通过所述安全检查时,判断为匹配,否则为不匹配。
在具体实施中,在分支预测过程中,分支目标缓冲器条目的匹配逻辑。具体的,可以是如图3所示的分支预测的流程中实现步骤S33匹配逻辑。或者图4所示的BTB的训练流程中实现步骤S44的匹配逻辑。可以理解的是,安全检查也可以用于上例之外的分支预测的流程或BTB的训练流程中,在此不做限制。
在具体实施中,可以在判断所述分支目标缓冲器条目中包含间接分支后进行所述安全检查。若分支目标缓冲器条目中不包含间接分支,则可以不进行安全检查。
在具体实施中,在进行安全检查之前还可以判断是否只对间接分支进行安全检查,若是,则可以进行分支目标缓冲器条目中是否包含间接分支的判断,当包含间接分支时,进行安全检查,若否,可以不判断分支目标缓冲器条目中是否包含间接分支而直接进行所述安全检查。
在具体实施中,对是否只对间接分支进行安全检查的判断可以通过相应的配置选项进行判断,具体的,可以对应配置寄存器中的一位,通过对该位的设置,可以设置是否仅对间接分支进行安全检查。
如前文所述,目前已知有对间接分支进行攻击的方式,通过对间接分支进行攻击,实现对推测执行时的攻击。仅对间接分支进行安全检查,对资源占用的较少,对所有分支进行检查,安全性更高。对是否只对间接分支进行安全检查的判断,可以提供对二者进行权衡的途径。
图10为本申请实施例中一种分支目标缓冲器条目的匹配逻辑的流程示意图,结合参考图10,在本申请一实施例中,分支目标缓冲器条目的匹配逻辑可以包括如下步骤:
步骤S101,计算取指地址对应的Tag;
步骤S102,将计算出的Tag与BTB条目中的Tag进行比较;
步骤S103,判断计算出的Tag与BTB条目中的Tag是否相等,若相等,则执行步骤S103,否则,执行步骤S109;
步骤S104,判断是否只对间接分支进行安全检查,若是,则执行步骤S105,否则,执行步骤S106;
步骤S105,判断BTB条目中是否包含间接分支,若包含,则执行步骤S106,否则,执行步骤S108;
步骤S106,进行安全检查;
步骤S107,判断是否通过安全检查,若是,则执行步骤S108,否则,执行步骤S109;
步骤S108,判定为匹配;
步骤S109,判定为不匹配。
在分支目标缓冲器条目的匹配逻辑中进行安全检查的实现方式较为简单,仅需要修改BTB中条目的匹配逻辑,而无需对现有的分支预测的实现步骤进行更改,可以无需修改访问BTB和预测器的逻辑即可实现更安全的分支预测,兼容性较好。由于匹配逻辑较分支预测逻辑更简单,修改匹配逻辑的方案更简单。另外,通过设置是否只对间接分支进行安全检查,可以提供权衡的途径,提供更安全或更少资源占用的方式供选择。
如前文所述,安全检查在分支预测过程中的位置可以是不同的。在具体实施中,可以在所述分支目标缓冲器条目匹配成功后,在使用匹配成功的分支目标缓冲器条目进行预测之前进行所述安全检查。
在本申请另一实施例中,在分支目标缓冲器条目匹配成功,且确定取出的分支为间接分支后,进行所述安全检查,若通过所述安全检查,则根据所述分支类型访问不同的预测器,否则,判断该间接分支是否为分支预测过程中的最后一个待处理的分支。
类似于在分支目标缓冲器条目的匹配逻辑中进行所述安全检查,在具体实施中也可以在安全检查之前判断是否只对间接分支进行安全检查。若是,则可以进行分支目标缓冲器条目中是否包含间接分支的判断,当包含间接分支时,进行安全检查,若否,可以不判断分支目标缓冲器条目中是否包含间接分支而直接进行所述安全检查。
图11为本申请实施例中一种分支预测方法的流程图。结合参考图3和图11,图11中包含的与图3中相同的步骤可以参见对图3的说明,在此不再赘述。
在步骤S33匹配成功,以及通过步骤S34取出分支信息后,可以执行如下步骤:
步骤S111,判断是否仅对间接分支进行安全检查,若是,则执行步骤S112,否则执行步骤S114;
步骤S112,判断该分支是否为间接分支,若是间接分支,则执行步骤S113否则执行步骤S35;
步骤S113,进行安全检查;
步骤S114,判断是否通过安全检查,若通过,则执行步骤S35,否则执行步骤S313。
可以理解的是,分支目标缓冲器条目匹配成功,可以是指取指地址查询BTB时与BTB任一条目匹配成功。图11中的分支预测流程仅为示例,本申请中安全检查同样可以应用与在其它分支预测的具体实现方式中。在分支目标缓冲器条目匹配成功,且确定取出的分支为间接分支后,进行安全检查的实现方式均落入本申请的范围。
前述的在分支目标缓冲器条目匹配成功,且确定取出的分支为间接分支后,进行所述安全检查这种具体实现方式,可以在提升分支预测的安全性。并且,由于该种具体实现方式并未改变匹配逻辑,可以避免匹配过程中产生相同的BTB条目的问题。以下进行进一步说明。
在分支目标缓冲器条目的匹配逻辑中进行安全检查这种具体实现方式中,在一些场景中,可能会引起多个BTB条目同时匹配。例如,当并不存在潜在攻击,但系统仍然使能安全检查的情况下(系统可能无法很好的决策是否可能存在攻击),如果共享BPU的两个软件具有类似的分支跳转行为,比如共享同一个物理核的两个线程来自于同一个程序进程,他们可能具有相同的程序行为,因此会创建出相同的BTB条目。
例如,逻辑核心0使能了STIBP检查,但是逻辑核心1并没有使能STIBP检查,并且两者具有相同的程序行为,则在一些场景中会出现如下情形:
逻辑核心1创建了一个BTB条目,该条目中的线程ID为1;
逻辑核心0在预测过程中查找BTB时,访问到前述逻辑核心1创建的BTB条目,判定并不满足安全检查,因此认为不匹配,从而预测出的取指结束地址为微架构定义的边界,比如当前Cache Line结尾;
逻辑核心0发生分支预测错误,被执行单元纠正;
逻辑核心0为该分支训练BTB,在训练过程中,逻辑核心0查找BTB时,访问到前述逻辑核心1创建的BTB条目,判定并不满足安全检查,因此认为不匹配,从而为逻辑核心0创建出一个新的BTB条目;
逻辑核心1查找BTB时,由于逻辑核心1并没有使能STIBP,因此两者都可以匹配成功。该两条同时匹配的条目分别为逻辑核心1建立的线程ID为1的BTB条目,以及在训练时创建的线程ID为0的BTB条目。
可以理解的是,逻辑核心0、逻辑核心1等仅为逻辑核心的举例,线程ID为1同样为线程的举例。并且上述过程仅为部分场景中的执行过程可能出现的情形。
在一些场景中出现上述问题会对性能产生一定的影响。该问题产生的原因在于:在分支目标缓冲器条目的匹配逻辑中进行安全检查这种具体实现方式改变了匹配逻辑对是否匹配的判断标准,将仅需Tag一致即可判定为匹配,更改为了需要通过安全检查才能判定为匹配。而在分支目标缓冲器条目匹配成功,且确定取出的分支为间接分支后,进行所述安全检查的方式并未改变匹配逻辑,从而可以避免该问题。
在具体实施中,安全检查在分支预测过程中的位置可以是不同的还可以在确定间接类型的分支与间接分支预测器中条目匹配后。具体的,可以在确定间接类型的分支与间接分支预测器中条目无匹配后,进行所述安全检查,若通过安全检查,则确定跳转目标地址为分支预测器中存储的目标地址,否则判断该间接分支是否为分支预测过程中的最后一个待处理的分支。
分支预测的具体实现中,在取指地址与任一BTB条目,也即BTB中任一条目,相匹配时,给出跳转目标地址。在分支预测过程中可以按照分支顺序依次从BTB条目中取出各分支的信息,若已得到跳转目标地址,则可以生成取指结束地址和下一个取指地址,若未得到跳转目标地址,则继续对下一分支进行处理,直至得到跳转目标地址或者直至处理完所有分支。
如前文所述,在分支预测的具体实现中,根据BTB条目中的信息,可以访问相应的预测器,例如可以访问方向预测器、间接分支预测器或返回地址预测器。当分支类型为间接分支时,访问间接分支预测器,判断该分支是否匹配间接分支预测器中任一条目,以预测分支指令的目标地址。具体的,可以在确定间接分支预测器中无匹配后,使用BTB中存储的目标地址。
图12为本申请实施例中另一种分支预测方法的流程图。结合参考图3和图12,图12中包含的与图3中相同的步骤可以参见对图3的说明,在此不再赘述。
在步骤S317,匹配间接分支预测器任一条目失败后,可以执行如下步骤:
步骤S121,进行安全检查;
步骤S122,判断是否通过安全检查,若通过,则执行步骤S311,否则执行步骤S313。
可以理解的是,图12中的分支预测流程仅为示例,本申请中安全检查同样可以应用与在其它分支预测的具体实现方式中。所述分支目标缓冲器条目匹配成功,且确定间接类型的分支与间接分支预测器中条目无匹配后,进行所述安全检查的实现方式均落入本申请的范围。
在本申请该实施例中,在间接分支预测器不命中时,也即间接类型的分支与间接分支预测器中条目无匹配时,才进行安全检查,若安全检查通过,则可以使用BTB条目中的目标地址作为下一取指起始地址,否则,则认为该分支不跳转,继续判断下一分支。该方式是在采用所述分支目标缓冲器中存储的目标地址作为分支预测的跳转目标地址前,进行所述安全检查的一种具体实现方式。
通过在采用所述分支目标缓冲器中存储的目标地址作为分支预测的跳转目标地址前,进行所述安全检查,通过安全检查后才将目标缓冲器中存储的目标地址作为跳转目标地址,可以提分支预测的升安全性。
在具体实施中,间接分支预测器可以为每个分支存储多个目标地址,并且间接分支预测器本身也会进行漏洞修复。故间接分支预测器本身可以被认为其是安全的。在本申请该实现方式中,在间接分支无法提供目标地址(不命中,也即无匹配)的情况下,才进行安全检查,决定是否使用BTB条目中存储的目标地址,如此可以节省系统资源。
另外,在具体实施中,间接分支预测器可以同时存储不同线程的信息。本申请中该种具体实现方式可以避免在一些场景中BTB条目被反复重写的问题,并且可以避免在一些场景中,多个BTB条目同时匹配的问题。以下进一步进行说明。
在前述的在分支目标缓冲器条目匹配成功,且确定取出的分支为间接分支后,进行所述安全检查的实现方式中,一些场景下会出现BTB条目被反复重写的问题。例如,在无潜在的攻击,但依然使能了安全检查的情况下,如果共享BPU的两个软件具有类似的分支跳转行为,比如共享同一个物理核的两个线程来自于同一个程序进程,他们可能具有相同的程序行为,因此会创建出相同的BTB条目。
作为一个具体的示例,逻辑核心0和逻辑核心1都使能了STIBP检查,并且两者具有相同的程序行为,则在一些场景中会出现如下情形:
逻辑核心1创建了一个BTB条目,该条目中的线程ID为1;
逻辑核心0在预测过程中查找BTB时,匹配到了该条目;
逻辑核心0在使用该条目中的分支信息时,先进行安全检查,并不满足安全检查,因此认为该分支不跳转从而预测出的取指结束地址为微架构定义的边界,比如当前CacheLine结尾;
逻辑核心0发生预测错误,被执行单元纠正;
逻辑核心0为该分支训练BTB,在训练过程中逻辑核心0查找BTB时,匹配到该条目,将该分支指令的信息与现有匹配条目进行合并,特别的,将该条目的线程ID修改为0;
逻辑核心1在预测过程中查找BTB时,匹配到了该条目;
由于不满足安全检查,逻辑核心1发生分支预测错误,在训练时又将BTB条目中的线程ID修改为1
逻辑核心0和逻辑核心1会反复修改该条目中的线程ID,并且发生大量的分支预测错误。
可以理解的是,逻辑核心0、逻辑核心1等仅为逻辑核心的举例,线程ID为1同样为线程的举例。并且上述过程仅为部分场景中的执行过程可能出现的情形。
上述问题出现的主要原因在于,在具体实施中,在安全检查未通过时,被作为没有查找到分支信息处理,但是在训练时仍然能匹配到该条目,从而修改其中的信息在分支预测过程中,一些场景下会出现线程0和线程1训练时命中同一个条目的情形,则会交替把自己的信息训练入命中的条目。当线程0写入信息之后,线程1无法使用,从而被作为没有查找到分支信息来处理,进而发生分支预测失败,从而触发线程1的训练。当线程1写入信息之后,线程0也无法使用,进而触发线程0的分支预测失败,从而触发线程0的训练。
而在分支目标缓冲器条目匹配成功,且确定间接类型的分支与间接分支预测器中条目无匹配后,进行所述安全检查的具体实现方式中,可以避免上述反复修改BTB条目中线程ID的问题。
在具体实现中,间接分支预测器可以同时存储线程0和1的信息。线程0分支预测失败,会把线程0的信息写入BTB条目,和间接分支预测器;线程1分支预测失败,会把线程1的信息写入BTB条目(覆盖线程0的信息),和间接分支预测器(和线程0的信息共存)。这样虽然BTB条目中只有1个线程的信息,但是间接分支预测器中有两个线程的信息,再预测时,两个线程都可以从间接分支预测器中得到正确的预测,从而可以避免反复预测失败,反复替换BTB内容的问题。
在具体实施中,从图11和图12可以体现,若未通过所安全检查,则可以对所述分支目标缓冲器中其余匹配成功的分支进行安全检查,直至安全检查通过或直至对所述分支目标缓冲器中匹配成功的所有分支进行检查;或者若所述分支目标缓冲器中匹配成功的所有分支均未通过安全检查,则可以根据微架构的边界定义取指结束地址和下一取指起始地址。
本申请实施例中的技术方案,根据系统安全检查选项的系统配置,基于分支目标缓冲器条目中的至少部分信息进行安全检查,可以实现安全检查的灵活配置。通过进行是否允许使用该分支预测器条目进行预测的安全检查,可以在判断分支预测器条目的安全性后对其进行使用,进而可以缓解由于推测执行导致的侧信道攻击,进一步可以提升分支预测执行过程中的安全性。
本领域技术人员可以理解的是,本申请中的“在具体实施中”“一实施例中”“例如”等描述意指结合该实施例或示例描述的具体特征、结构或者特点包括于本申请的至少一种实施例或示例中。而且,描述的具体特征、结构或者特点可以在任一个或多个实施例或示例中以合适的方式结合。此外,在不相互矛盾的情况下,本领域的技术人员可以将本申请中描述的不同实施例或示例以及不同实施例或示例的特征进行结合和组合。
另外,前述实施例中的流程图中或在此以其他方式描述的任何过程或方法描述可以被理解为,表示包括一个或更多个用于实现特定逻辑功能或过程的步骤的可执行指令的代码的模块、片段或部分。并且本申请的优选实施方式的范围包括另外的实现,其中可以不按所示出或讨论的顺序,包括根据所涉及的功能按基本同时的方式或按相反的顺序,来执行功能。
本申请实施例还提供一种分支预测装置,用于处理器核,所述分支预测装置基于分支目标缓冲器条目进行分支预测。结合参考图13,所述装置可以包括:
信息获取单元131,适于获取分支目标缓冲器条目中的至少部分信息以及至少部分运行信息;
安全检查单元132,适于根据系统安全检查选项的系统配置,基于所述分支目标缓冲器条目中的至少部分信息以及所述至少部分运行信息,进行是否允许使用该分支预测器条目进行预测的安全检查。
在具体实施中,至少部分运行信息可以包括:当前为操作系统模式或用户模式,当前为虚拟机模式或虚拟机监视器模式,以及当前逻辑核心的识别符。所述安全检查单元可以包括以下至少一检查子单元:
第一检查子单元141,适于当使能间接分支限制推测保护用户对操作系统的攻击时,检查是否满足:当前为用户模式,或者当前为操作系统模式且分支目标缓冲器条目为操作系统所有;
第二检查子单元142,适于当使能间接分支限制推测保护操作系统对用户的攻击时,检查是否满足:当前为操作系统模式,或者当前为用户模式且分支目标缓冲器条目为用户所有;
第三检查子单元143,适于当使能间接分支限制推测保护虚拟机对虚拟机监视器的攻击时,检查是否满足:当前为虚拟机模式,或者当前为虚拟机监视器模式且分支目标缓冲器条目为虚拟机监视器所有;
第四检查子单元144,适于当使能间接分支限制推测保护虚拟机监视器对虚拟机的攻击时,检查是否满足:当前为虚拟机监视器模式,或者当前为虚拟机模式且分支目标缓冲器条目为虚拟机所有;
第五检查子单元145,适于当使能单线程间接分支预测器保护时,检查当前逻辑核心与分支目标缓冲器中线程识别符表示的逻辑核心是否一致。
结合参考图13和图15,在具体实施中,分支预测装置还可以包括:条目匹配单元151,适于对所述分支目标缓冲器条目进行匹配;所述安全检查单元132适于在所述分支目标缓冲器条目的匹配逻辑中进行所述安全检查,所述匹配单元适于在所述分支目标缓冲器条目中标签匹配通过并且通过所述安全检查时,判断为匹配,否则为不匹配。
在具体实施中,所述安全检查单元132可以在判断所述分支目标缓冲器条目中包含间接分支后进行所述安全检查。
在具体实施中,分支预测装置还可以进一步包括:间接分支判断逻辑单元152,适于在所述安全检查之前判断是否只对间接分支进行安全检查,若是,则在所述分支为间接分支时进行安全检查,若否,则进行所述安全检查。
在具体实施中,分支预测装置还可以包括:预测单元(图中未示出),适于在所述分支目标缓冲器条目匹配成功后,使用匹配成功的分支目标缓冲器条目进行预测;所述安全检查单元适于在所述分支目标缓冲器条目匹配成功后,在使用匹配成功的分支目标缓冲器条目进行预测之前,进行所述安全检查。
在具体实施中,分支预测装置还可以包括:预测器访问单元161,适于在所述分支目标缓冲器条目匹配成功后,根据匹配成功的所述分支的分支类型访问相应的预测器;所述安全检查单元132适于在所述分支目标缓冲器条目匹配成功,且确定匹配成功的分支为间接分支后,进行所述安全检查;所述预测器访问单元适于在通过所述安全检查后,根据分支类型访问相应的分支预测器。
结合参考图13和图16,在具体实施中,分支预测装置还可以包括:预测器访问单元161,适于在所述分支目标缓冲器条目匹配成功后,使用匹配成功的分支目标缓冲器条目进行预测;所述装置还可以包括:间接分支判断逻辑单元162,适于判断是否只对间接分支进行安全检查,若是,则所述安全检查单元在所述分支目标缓冲器条目匹配成功,且确定匹配成功的分支类型为间接分支后,进行所述安全检查,若否,则所述安全检查单元在所述分支目标缓冲器条目匹配成功后进行所述安全检查。
结合参考图17和图13,在具体实施中,分支预测装置还可以包括:间接分支跳转目标地址单171,适于采用所述分支目标缓冲器条目的间接分支的目标地址作为跳转目标地址;所述安全检查单元132适于在所述间接分支跳转目标地址单元采用所述分支目标缓冲器中存储的目标地址作为分支预测的跳转目标地址前,进行所述安全检查。
在具体实施中,分支预测装置还可以包括:间接分支跳转目标地址单元171,在分支目标缓冲器条目匹配,且间接类型的分支与间接分支预测器中条目无匹配时,采用所述分支目标缓冲器条目的间接分支的目标地址作为跳转目标地址;所述安全检查单元132适于在所述分支目标缓冲器条目匹配成功,且确定间接类型的分支与间接分支预测器中条目无匹配后,进行所述安全检查;所述间接分支跳转目标地址单元适于在通过安全检查后,确定跳转目标地址为分支目标缓冲器中存储的目标地址。
本申请实施例中的分析预测装置与分析预测方法相对应,其原理、名词解释、有益效果以及具体实现方式可以参考本申请实施例中的分析预测方法,在此不再赘述。
本申请实施例中的分支预测装置所描述的各个单元,可以全部或部分地通过软件、硬件、固件或者其任意组合来实现。并且,所述的各个功能模块可以集成在一个处理部件中,也可以是各个模块单独物理存在,也可以两个或两个以上功能模块集成在一个部件中。上述集成的部件既可以采用硬件的形式实现,也可以结合软件功能模块的形式实现。
结合参考图18,本申请实施例还提供一种处理器核,可以包括:指令流水线181和分支预测单元182,所述指令执行流水线181适于根据所述分支预测单元182的预测结果执行指令。
所述处理器核还可以包括:配置寄存器183,用于存储安全检查选项的系统配置;
所述分支预测单元182还适于获取分支目标缓冲器条目中的至少部分信息以及至少部分运行信息;根据系统安全检查选项的系统配置,基于所述分支目标缓冲器条目中的至少部分信息以及所述至少部分运行信息,进行是否允许使用该分支预测器条目进行预测的安全检查。
图18仅示出了处理器核的部分。在具体实施中,上述处理器核中流水线和分支预测单元基本功能的具体实现方式可以结合参考前文所述,例如可以与图1和图2所描述的方式相同或类似,或者也可以是本领域技术人员可以实现的其它方式。
在实现分支预测单元的基本功能的基础上,本申请实施例中的分支预测单元可以还可以获取分支目标缓冲器条目中的至少部分信息以及至少部分运行信息;根据系统安全检查选项的系统配置,基于所述分支目标缓冲器条目中的至少部分信息以及所述至少部分运行信息,进行是否允许使用该分支预测器条目进行预测的安全检查。从而可以实现安全检查的灵活配置,并且可以根据系统配置定是否存在对推测执行阶段的攻击,进而可以提升分支预测执行过程中的安全性。
在具体实施中,所述配置寄存器可以配置一下至少一种安全选项:
是否使能间接分支限制推测保护用户对操作系统的攻击;
是否使能间接分支限制推测保护操作系统对用户的攻击;
是否使能间接分支限制推测保护虚拟机对虚拟机监视器的攻击;
是否使能间接分支限制推测保护虚拟机监视器对虚拟机的攻击;
是否使能单线程间接分支预测器保护。
例如,一个系统安全检查选项可以对应一个配置寄存器的位,通过该位为0或者为1确定该选项的系统配置。这个配置寄存器的位可以由用户或者系统进行配置。
在具体实施中,结合参考图19和图13,分支预测装置还可以包括分支目标缓冲器条目匹配单元1901,适于使用取指地址对所述分支目标缓冲器条目进行匹配,确定匹配成功的分支;所述安全检查单元132,适于在未通过所安全检查时,对所述分支目标缓冲器中其余匹配成功的分支进行安全检查,直至安全检查通过或直至对所述分支目标缓冲器中匹配成功的所有分支进行检查;若所述分支目标缓冲器中匹配成功的所有分支均未通过安全检查,则根据微架构的边界定义取指结束地址和下一取指起始地址。
在本申请实施例中,根据系统安全检查选项的系统配置,基于分支目标缓冲器条目中的至少部分信息进行安全检查。通过进行是否允许使用该分支预测器条目进行预测的安全检查,可以在判断分支预测器条目的安全性后对其进行使用,进而可以缓解由于推测执行导致的侧信道攻击,进一步可以提升分支预测执行过程中的安全性。
本申请实施例中处理器核中的分支预测单元的具体实现和有益效果,可以与本申请实施例中的分支预测装置相同或类似,具体可以参见前文所述,在此不再赘述。
可以理解的是,处理器核也可以包括对理解本申请实施例公开内容不是必需的其他电路(未示出),鉴于所述其他电路对于理解本申请实施例公开内容并不是必需的,本申请实施例就不再赘述。
本申请实施例还提供一种处理器,可以包括至少一个前述的处理器核。
本申请实施例还提供一种计算设备,可以包括至少一个如前所述的处理器。
结合参考图20,作为本申请实施例公开内容的一个可选示例,图20示例性的示出了计算机系统体系架构的一种框图;应该说明的是,该框图是为便于理解本申请实施例公开内容而示出,本申请实施例中的计算机系统并不限于图20所示架构。
参考图20,计算机系统可包括:处理器191,与处理器191耦合的内存192,与处理器耦合的南桥193。
处理器191可包括CISC(复杂指令集计算机)微处理器、RISC(精简指令集计算机)微处理器、VLIW(超长指令字)微处理器、实现指令集的组合的处理器或诸如数字信号处理器的任何其它处理器装置。
处理器191可集成用于执行至少一个指令的至少一个处理器核190,处理器核190表示任何类型的体系结构的处理器核,如RISC处理器核、CISC处理器核、VLIM处理器核或混合处理器核等。处理器核190可以以任何适合的方式实现,在处理器191集成多个处理器核190的情况下,处理器核可在体系结构和/或指令集方面是同构或异构的;在一种可选实现中,一些处理器核可以是有序的,而其它处理器核可以是无序的,在另一种可选实现中,两个或更多个处理器核可执行相同指令集,而其它处理器核可执行该指令集的子集或不同指令集。
作为一种可选示例,处理器191内可集成内存控制器等部件,并对外提供内存接口等;处理器191可通过内存接口耦合到内存192。同时,处理器191可耦合到处理器总线,并通过处理器总线耦合到南桥193。
作为一种可选示例,南桥193可以集成与计算机系统其它组件相通信的总线接口14,从而通过南桥193实现处理器191与计算机系统1中大部分其他组件的信号传递;计算机系统的组件可根据实际情况增设和调整,此处不进行逐一说明;
在一个可选示例中,南桥193所集成的总线接口194包括但不限于:存储器(如硬盘)总线接口、USB总线接口、网络控制器总线接口、PCIE总线接口等。
需要说明的是,图1示例框图中处理器和南桥的耦合结构是基本的,但处理器和南桥的具体细化结构可视具体使用情况设置、调整和/或扩展,并不固定。
在其他的计算机系统体系结构中,例如在分设南桥和北桥的计算机系统体系结构中,内存控制也可能由北桥提供,如北桥主要负责显卡、内存与处理器之间的信号传递,并且向上耦合处理器,向下耦合南桥;南桥主要负责硬盘、外设以及各种对带宽要求较低的IO(输入输出)接口与内存、处理器之间的信号传递。
上述所述是处理器与南桥式的计算机体系结构,在计算机体系结构的其他示例中,也可能通过SoC(System on Chip,片上系统)实现计算机体系结构;示例性的,SoC可集成处理器、内存控制器、以及IO接口等,并且SoC可通过与外部的内存、IO设备、网卡等其他组件相耦合,实现在单个主要芯片上搭建计算机体系结构。
另外,上述所述的处理器并不限于CPU(Central Processing Unit,中央处理器),还可以是加速器(例如,图形加速器或数字信号处理单元)、GPU(Graphics ProcessingUnit,图形处理器)、现场可编程门阵列或任何其它具有指令执行功能的处理器。上述虽然是以单处理器进行的示例说明,但在实际情况下,计算机体系结构可能存在多个处理器,每一处理器具有至少一个处理器核。
可以理解的是,这里的计算设备并不限于计算机系统,也可以是诸如手持式装置和具有嵌入式应用的其他装置;手持式装置的一些示例包括蜂窝电话、因特网协议装置、数码相机、个人数字助理(PDA)或手持式PC(personal computer,个人计算机)。具有嵌入式应用的其他装置可包括网络计算机(Net PC)、机顶盒、服务器、宽域网(WAN)交换机、或可执行至少一个本申请公开实施例的一个或更多个指令的任何其他系统。
本申请实施例还提供一种计算机设备,可以包括存储器和处理器,所述存储器上存储有可在所述处理器上运行的计算机程序,所述处理器运行所述计算机程序时执行前述的分支预测方法。
所述计算机设备包括但不限于:服务器、台式机、智能手机、笔记本电脑、平板电脑、智能手环、智能手表、其它智能设备或其中任意一种或多种的多个设备通信连接构成的分布式处理系统。
本申请实施例还提供一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序运行时执行前述的分支预测方法。
即,上述本申请实施例中的缓存管理方法可被实现为可存储在记录介质中的软件或计算机代码,或者被实现通过网络下载的原始存储在远程记录介质或非暂时机器可读介质中并将被存储在本地记录介质中的计算机代码,从而在此描述的方法可被存储在使用通用计算机、专用处理器或者可编程或专用硬件的记录介质上的这样的软件处理。可以理解,计算机、处理器、微处理器控制器或可编程硬件包括可存储或接收软件或计算机代码的存储组件(例如,RAM、ROM、闪存等),当所述软件或计算机代码被计算机、处理器或硬件访问且执行时,实现在此描述的分支预测方法。
本申请实施例中的技术方案,根据系统安全检查选项的系统配置,基于分支目标缓冲器条目中的至少部分信息进行安全检查。通过进行是否允许使用该分支预测器条目进行预测的安全检查,可以在判断分支预测器条目的安全性后对其进行使用,进而可以缓解由于推测执行导致的侧信道攻击,进一步可以提升分支预测执行过程中的安全性。
虽然本申请实施例披露如上,但本申请并非限定于此。任何本领域技术人员,在不脱离本申请实施例的精神和范围内,均可作各种更动与修改,因此本申请的保护范围应当以权利要求所限定的范围为准。
Claims (29)
1.一种分支预测方法,用于处理器核,所述分支预测方法基于分支目标缓冲器条目进行分支预测,其特征在于,所述方法包括:
获取分支目标缓冲器条目中的至少部分信息以及至少部分运行信息;
根据系统安全检查选项的系统配置,基于所述分支目标缓冲器条目中的至少部分信息以及所述至少部分运行信息,进行是否允许使用该分支预测器条目进行预测的安全检查。
2.根据权利要求1所述的分支预测方法,其特征在于,所述系统安全检查选项包括以下至少一种选项:
是否使能间接分支限制推测保护用户对操作系统的攻击;
是否使能间接分支限制推测保护操作系统对用户的攻击;
是否使能间接分支限制推测保护虚拟机对虚拟机监视器的攻击;
是否使能间接分支限制推测保护虚拟机监视器对虚拟机的攻击;
是否使能单线程间接分支预测器保护。
3.根据权利要求1所述的分支预测方法,其特征在于,至少部分运行信息包括:当前为操作系统模式或用户模式,当前为虚拟机模式或虚拟机监视器模式,以及当前逻辑核心的识别符;所述安全检查包括以下至少一种:当使能间接分支限制推测保护用户对操作系统的攻击时,检查是否满足:当前为用户模式,或者当前为操作系统且分支目标缓冲器条目为操作系统所有;
当使能间接分支限制推测保护操作系统对用户的攻击时,检查是否满足:当前为操作系统,或者当前为用户模式且分支目标缓冲器条目为用户所有;当使能间接分支限制推测保护虚拟机对虚拟机监视器的攻击时,检查是否满足:当前为虚拟机模式,或者当前为虚拟机监视器模式且分支目标缓冲器条目为虚拟机监视器所有;
当使能间接分支限制推测保护虚拟机监视器对虚拟机的攻击时,检查是否满足:当前为虚拟机监视器模式,或者当前为虚拟机模式且分支目标缓冲器条目为虚拟机所有;
当使能单线程间接分支预测器保护时,检查当前逻辑核心与分支目标缓冲器中线程识别符表示的逻辑核心是否一致。
4.根据权利要求1所述的分支预测方法,还包括:对所述分支目标缓冲器条目进行匹配;其特征在于,在所述分支目标缓冲器条目的匹配逻辑中进行所述安全检查,在所述分支目标缓冲器条目中标签匹配通过并且通过所述安全检查时,判断为匹配,否则为不匹配。
5.根据权利要求4所述的分支预测方法,其特征在于,在所述分支目标缓冲器条目的匹配逻辑中进行所述安全检查包括:在确定所述分支目标缓冲器条目中包含间接分支后进行所述安全检查。
6.根据权利要求4所述的分支预测方法,其特征在于,在所述安全检查之前还包括:判断是否只对间接分支进行安全检查,若是,则在所述分支为间接分支时进行安全检查,若否,则进行所述安全检查。
7.根据权利要求1所述的分支预测方法,还包括:在所述分支目标缓冲器条目匹配成功后,使用匹配成功的分支目标缓冲器条目进行预测;其特征在于,在所述分支目标缓冲器条目匹配成功后,在使用匹配成功的分支目标缓冲器条目进行预测之前,进行所述安全检查。
8.根据权利要求1所述的分支预测方法,还包括:在所述分支目标缓冲器条目匹配成功后,根据匹配成功的所述分支的分支类型访问相应的预测器;其特征在于,在所述分支目标缓冲器条目匹配成功,且确定匹配成功的分支类型为间接分支后,进行所述安全检查,若通过所述安全检查,则根据分支类型访问相应的分支预测器。
9.根据权利要求1所述的分支预测方法,其特征在于,还包括:在所述分支目标缓冲器条目匹配成功后,使用匹配成功的分支目标缓冲器条目进行预测;在所述安全检查之前还包括:判断是否只对间接分支进行安全检查,若是,则在所述分支目标缓冲器条目匹配成功,且确定匹配成功的分支类型为间接分支后,进行所述安全检查,若否,则在所述分支目标缓冲器条目匹配成功后进行所述安全检查。
10.根据权利要求1所述的分支预测方法,还包括:采用所述分支目标缓冲器条目的间接分支的目标地址作为跳转目标地址;其特征在于,在采用所述分支目标缓冲器中存储的目标地址作为分支预测的跳转目标地址前,进行所述安全检查。
11.根据权利要求1所述的分支预测方法,还包括:在分支目标缓冲器条目匹配,且间接类型的分支与间接分支预测器中条目无匹配时,采用所述分支目标缓冲器条目的间接分支的目标地址作为跳转目标地址;其特征在于,在所述分支目标缓冲器条目匹配成功,且确定间接类型的分支与间接分支预测器中条目无匹配后,进行所述安全检查,若通过安全检查,则确定跳转目标地址为分支目标缓冲器中存储的目标地址。
12.根据权利要求1所述的分支预测方法,还包括:使用取指地址对所述分支目标缓冲器条目进行匹配,确定匹配成功的分支;其特征在于,若未通过所安全检查,则对所述分支目标缓冲器中其余匹配成功的分支进行安全检查,直至安全检查通过或直至对所述分支目标缓冲器中匹配成功的所有分支进行检查;若所述分支目标缓冲器中匹配成功的所有分支均未通过安全检查,则根据微架构的边界定义取指结束地址和下一取指起始地址。
13.一种分支预测装置,用于处理器核,所述分支预测装置基于分支目标缓冲器条目进行分支预测,其特征在于,所述装置包括:
信息获取单元,适于获取分支目标缓冲器条目中的至少部分信息以及至少部分运行信息;
安全检查单元,适于根据系统安全检查选项的系统配置,基于所述分支目标缓冲器条目中的至少部分信息以及所述至少部分运行信息,进行是否允许使用该分支预测器条目进行预测的安全检查。
14.根据权利要求13所述的分支预测装置,其特征在于,至少部分运行信息包括:当前为操作系统模式或用户模式,当前为虚拟机模式或虚拟机监视器模式,以及当前逻辑核心的识别符;所述安全检查单元包括以下至少一检查子单元:
第一检查子单元,适于当使能间接分支限制推测保护用户对操作系统的攻击时,检查是否满足:当前为用户模式,或者当前为操作系统模式且分支目标缓冲器条目为操作系统所有;
第二检查子单元,适于当使能间接分支限制推测保护操作系统对用户的攻击时,检查是否满足:当前为操作系统模式,或者当前为用户模式且分支目标缓冲器条目为用户所有;
第三检查子单元,适于当使能间接分支限制推测保护虚拟机对虚拟机监视器的攻击时,检查是否满足:当前为虚拟机模式,或者当前为虚拟机监视器模式且分支目标缓冲器条目为虚拟机监视器所有;
第四检查子单元,适于当使能间接分支限制推测保护虚拟机监视器对虚拟机的攻击时,检查是否满足:当前为虚拟机监视器模式,或者当前为虚拟机模式且分支目标缓冲器条目为虚拟机所有;
第五检查子单元,适于当使能单线程间接分支预测器保护时,检查当前逻辑核心的识别符与分支目标缓冲器中线程识别符表示的逻辑核心是否一致。
15.根据权利要求13所述的分支预测装置,还包括:条目匹配单元,适于对所述分支目标缓冲器条目进行匹配;其特征在于,所述安全检查单元适于在所述分支目标缓冲器条目的匹配逻辑中进行所述安全检查,所述匹配单元适于在所述分支目标缓冲器条目中标签匹配通过并且通过所述安全检查时,判断为匹配,否则为不匹配。
16.根据权利要求15所述的分支预测装置,其特征在于,所述安全检查单元适于在判断所述分支目标缓冲器条目中包含间接分支后进行所述安全检查。
17.根据权利要求15所述的分支预测装置,其特征在于,还包括:间接分支判断逻辑单元,适于在所述安全检查之前判断是否只对间接分支进行安全检查,若是,则在所述分支为间接分支时进行安全检查,若否,则进行所述安全检查。
18.根据权利要求13所述的分支预测装置,还包括:预测单元,适于在所述分支目标缓冲器条目匹配成功后,使用匹配成功的分支目标缓冲器条目进行预测;其特征在于,所述安全检查单元适于在所述分支目标缓冲器条目匹配成功后,在使用匹配成功的分支目标缓冲器条目进行预测之前,进行所述安全检查。
19.根据权利要求13所述的分支预测装置,还包括:预测器访问单元,适于在所述分支目标缓冲器条目匹配成功后,根据匹配成功的所述分支的分支类型访问相应的预测器;其特征在于,所述安全检查单元适于在所述分支目标缓冲器条目匹配成功,且确定匹配成功的分支为间接分支后,进行所述安全检查;所述预测器访问单元适于在通过所述安全检查后,根据分支类型访问相应的分支预测器。
20.根据权利要求13所述的分支预测装置,还包括:预测器访问单元,适于在所述分支目标缓冲器条目匹配成功后,使用匹配成功的分支目标缓冲器条目进行预测;其特征在于,所述装置还包括:间接分支判断逻辑单元,适于判断是否只对间接分支进行安全检查,若是,则所述安全检查单元在所述分支目标缓冲器条目匹配成功,且确定匹配成功的分支类型为间接分支后,进行所述安全检查,若否,则所述安全检查单元在所述分支目标缓冲器条目匹配成功后进行所述安全检查。
21.根据权利要求13所述的分支预测装置,还包括,间接分支跳转目标地址单元,适于采用所述分支目标缓冲器条目的间接分支的目标地址作为跳转目标地址;其特征在于,所述安全检查单元适于在所述间接分支跳转目标地址单元采用所述分支目标缓冲器中存储的目标地址作为分支预测的跳转目标地址前,进行所述安全检查。
22.根据权利要求13所述的分支预测装置,还包括,间接分支跳转目标地址单元,在分支目标缓冲器条目匹配,且间接类型的分支与间接分支预测器中条目无匹配时,采用所述分支目标缓冲器条目的间接分支的目标地址作为跳转目标地址;其特征在于,所述安全检查单元适于在所述分支目标缓冲器条目匹配成功,且确定间接类型的分支与间接分支预测器中条目无匹配后,进行所述安全检查;所述间接分支跳转目标地址单元适于在通过安全检查后,确定跳转目标地址为分支目标缓冲器中存储的目标地址。
23.根据权利要求13所述的分支预测装置,还包括:分支目标缓冲器条目匹配单元,适于使用取指地址对所述分支目标缓冲器条目进行匹配,确定匹配成功的分支;其特征在于,所述安全检查单元,适于在未通过所安全检查时,对所述分支目标缓冲器中其余匹配成功的分支进行安全检查,直至安全检查通过或直至对所述分支目标缓冲器中匹配成功的所有分支进行检查;若所述分支目标缓冲器中匹配成功的所有分支均未通过安全检查,则根据微架构的边界定义取指结束地址和下一取指起始地址。
24.一种处理器核,包括:指令流水线和分支预测单元,所述指令执行流水线适于根据所述分支预测单元的预测结果执行指令,其特征在于,所述处理器核还包括:配置寄存器,用于存储安全检查选项的系统配置;
所述分支预测单元还适于获取分支目标缓冲器条目中的至少部分信息以及至少部分运行信息;根据系统安全检查选项的系统配置,基于所述分支目标缓冲器条目中的至少部分信息以及所述至少部分运行信息,进行是否允许使用该分支预测器条目进行预测的安全检查。
25.根据权利要求24所述的处理器核,其特征在于,所述配置寄存器适于配置一下至少一种安全选项:
是否使能间接分支限制推测保护用户对操作系统的攻击;
是否使能间接分支限制推测保护操作系统对用户的攻击;
是否使能间接分支限制推测保护虚拟机对虚拟机监视器的攻击;
是否使能间接分支限制推测保护虚拟机监视器对虚拟机的攻击;
是否使能单线程间接分支预测器保护。
26.一种处理器,其特征在于,包括至少一个如权利要求22或权利要求25所述的处理器核。
27.一种计算设备,其特征在于,包括至少一个如权利要求25所述的处理器。
28.一种计算机设备,包括存储器和处理器,所述存储器上存储有可在所述处理器上运行的计算机程序,其特征在于,所述处理器运行所述计算机程序时执行权利要求1至12中任一项所述的分支预测方法。
29.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,所述计算机程序运行时执行权利要求1至12中任一项所述的分支预测方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011494254.5A CN112596792B (zh) | 2020-12-17 | 2020-12-17 | 分支预测方法、装置、介质及设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011494254.5A CN112596792B (zh) | 2020-12-17 | 2020-12-17 | 分支预测方法、装置、介质及设备 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN112596792A true CN112596792A (zh) | 2021-04-02 |
CN112596792B CN112596792B (zh) | 2022-10-28 |
Family
ID=75196924
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202011494254.5A Active CN112596792B (zh) | 2020-12-17 | 2020-12-17 | 分支预测方法、装置、介质及设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112596792B (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114020441A (zh) * | 2021-11-29 | 2022-02-08 | 锐捷网络股份有限公司 | 一种多线程处理器的指令预测方法及相关装置 |
TWI789183B (zh) * | 2021-09-15 | 2023-01-01 | 瑞昱半導體股份有限公司 | 用於處理器電路之檢測器及檢測方法 |
Citations (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6799268B1 (en) * | 2000-06-30 | 2004-09-28 | Intel Corporation | Branch ordering buffer |
US20180181755A1 (en) * | 2016-12-28 | 2018-06-28 | Intel Corporation | Execution of software with monitoring of return oriented programming exploits |
CN109508536A (zh) * | 2017-09-15 | 2019-03-22 | 华为技术有限公司 | 一种篡改程序流攻击的检测方法和装置 |
WO2019140274A1 (en) * | 2018-01-12 | 2019-07-18 | Virsec Systems, Inc. | Defending against speculative execution exploits |
US20190235873A1 (en) * | 2018-01-30 | 2019-08-01 | Samsung Electronics Co., Ltd. | System and method of reducing computer processor power consumption using micro-btb verified edge feature |
CN110347432A (zh) * | 2019-06-17 | 2019-10-18 | 海光信息技术有限公司 | 处理器、分支预测器及其数据处理方法、分支预测方法 |
CN110659071A (zh) * | 2018-06-29 | 2020-01-07 | 英特尔公司 | 针对推测性执行处理架构的基于边信道的攻击的有效缓解 |
US20200192672A1 (en) * | 2018-12-14 | 2020-06-18 | Apple Inc. | Indirect branch predictor security protection |
CN111886580A (zh) * | 2018-03-29 | 2020-11-03 | Arm有限公司 | 用于控制分支预测的装置和方法 |
CN112035170A (zh) * | 2020-08-20 | 2020-12-04 | 海光信息技术股份有限公司 | 用于分支预测器的方法和系统 |
-
2020
- 2020-12-17 CN CN202011494254.5A patent/CN112596792B/zh active Active
Patent Citations (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6799268B1 (en) * | 2000-06-30 | 2004-09-28 | Intel Corporation | Branch ordering buffer |
US20180181755A1 (en) * | 2016-12-28 | 2018-06-28 | Intel Corporation | Execution of software with monitoring of return oriented programming exploits |
CN109508536A (zh) * | 2017-09-15 | 2019-03-22 | 华为技术有限公司 | 一种篡改程序流攻击的检测方法和装置 |
WO2019140274A1 (en) * | 2018-01-12 | 2019-07-18 | Virsec Systems, Inc. | Defending against speculative execution exploits |
US20190235873A1 (en) * | 2018-01-30 | 2019-08-01 | Samsung Electronics Co., Ltd. | System and method of reducing computer processor power consumption using micro-btb verified edge feature |
CN111886580A (zh) * | 2018-03-29 | 2020-11-03 | Arm有限公司 | 用于控制分支预测的装置和方法 |
CN110659071A (zh) * | 2018-06-29 | 2020-01-07 | 英特尔公司 | 针对推测性执行处理架构的基于边信道的攻击的有效缓解 |
US20200192672A1 (en) * | 2018-12-14 | 2020-06-18 | Apple Inc. | Indirect branch predictor security protection |
CN110347432A (zh) * | 2019-06-17 | 2019-10-18 | 海光信息技术有限公司 | 处理器、分支预测器及其数据处理方法、分支预测方法 |
CN112035170A (zh) * | 2020-08-20 | 2020-12-04 | 海光信息技术股份有限公司 | 用于分支预测器的方法和系统 |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
TWI789183B (zh) * | 2021-09-15 | 2023-01-01 | 瑞昱半導體股份有限公司 | 用於處理器電路之檢測器及檢測方法 |
CN114020441A (zh) * | 2021-11-29 | 2022-02-08 | 锐捷网络股份有限公司 | 一种多线程处理器的指令预测方法及相关装置 |
Also Published As
Publication number | Publication date |
---|---|
CN112596792B (zh) | 2022-10-28 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11347507B2 (en) | Secure control flow prediction | |
KR101706496B1 (ko) | 비인가 스택 피봇팅을 방지하기 위한 시스템들 및 방법들 | |
JPH02260033A (ja) | ブランチ予測 | |
US10564967B2 (en) | Move string processing via inline decode-based micro-operations expansion | |
US10747532B2 (en) | Selecting processing based on expected value of selected character | |
US10564965B2 (en) | Compare string processing via inline decode-based micro-operations expansion | |
US10789069B2 (en) | Dynamically selecting version of instruction to be executed | |
US9851979B2 (en) | Split-level history buffer in a computer processing unit | |
US10255068B2 (en) | Dynamically selecting a memory boundary to be used in performing operations | |
US10613862B2 (en) | String sequence operations with arbitrary terminators | |
CN112596792B (zh) | 分支预测方法、装置、介质及设备 | |
CN112579175B (zh) | 分支预测方法、分支预测装置和处理器核 | |
CN104978284A (zh) | 处理器子程序高速缓冲存储器 | |
US10620956B2 (en) | Search string processing via inline decode-based micro-operations expansion | |
US20220292183A1 (en) | Secure control flow prediction | |
KR100986375B1 (ko) | 피연산자의 빠른 조건부 선택 | |
US9817763B2 (en) | Method of establishing pre-fetch control information from an executable code and an associated NVM controller, a device, a processor system and computer program products | |
JPH08320788A (ja) | パイプライン方式プロセッサ | |
CN110825442B (zh) | 一种指令预取方法及处理器 | |
US10372902B2 (en) | Control flow integrity | |
US12008149B2 (en) | Method and system for on demand control of hardware support for software pointer authentification in a computing system | |
WO2022127347A1 (en) | Hardware support for software pointer authentification in computing system |
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 |