TWI807371B - 利用預測器模式標籤的Spectre修復方法和微處理器 - Google Patents
利用預測器模式標籤的Spectre修復方法和微處理器 Download PDFInfo
- Publication number
- TWI807371B TWI807371B TW110126489A TW110126489A TWI807371B TW I807371 B TWI807371 B TW I807371B TW 110126489 A TW110126489 A TW 110126489A TW 110126489 A TW110126489 A TW 110126489A TW I807371 B TWI807371 B TW I807371B
- Authority
- TW
- Taiwan
- Prior art keywords
- privilege level
- branch
- tag
- fetched
- branch instruction
- Prior art date
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; 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/3861—Recovery, e.g. branch miss-prediction, exception handling
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/50—Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
- G06F21/57—Certifying or maintaining trusted computer platforms, e.g. secure boots or power-downs, version controls, system software checks, secure updates or assessing vulnerabilities
- G06F21/577—Assessing vulnerabilities and evaluating computer system security
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; 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/3836—Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
- G06F9/3842—Speculative instruction execution
- G06F9/3848—Speculative instruction execution using hybrid branch prediction, e.g. selection between prediction techniques
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/22—Indexing; Data structures therefor; Storage structures
- G06F16/2282—Tablespace storage structures; Management thereof
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/50—Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
- G06F21/52—Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems during program execution, e.g. stack integrity ; Preventing unwanted data erasure; Buffer overflow
- G06F21/54—Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems during program execution, e.g. stack integrity ; Preventing unwanted data erasure; Buffer overflow by adding security routines or objects to programs
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/60—Protecting data
- G06F21/62—Protecting access to data via a platform, e.g. using keys or access control rules
- G06F21/6218—Protecting access to data via a platform, e.g. using keys or access control rules to a system of files or objects, e.g. local or distributed file system or database
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/70—Protecting specific internal or peripheral components, in which the protection of a component leads to protection of the entire computer
- G06F21/78—Protecting specific internal or peripheral components, in which the protection of a component leads to protection of the entire computer to assure secure storage of data
- G06F21/79—Protecting specific internal or peripheral components, in which the protection of a component leads to protection of the entire computer to assure secure storage of data in semiconductor storage media, e.g. directly-addressable memories
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; 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/3802—Instruction prefetching
- G06F9/3804—Instruction prefetching for branches, e.g. hedging, branch folding
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; 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/3802—Instruction prefetching
- G06F9/3804—Instruction prefetching for branches, e.g. hedging, branch folding
- G06F9/3806—Instruction prefetching for branches, e.g. hedging, branch folding using address prediction, e.g. return stack, branch history buffer
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; 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/3802—Instruction prefetching
- G06F9/3814—Implementation provisions of instruction buffers, e.g. prefetch buffer; banks
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; 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/3836—Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
- G06F9/3842—Speculative instruction execution
- G06F9/3844—Speculative instruction execution using dynamic branch prediction, e.g. using branch history tables
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2221/00—Indexing scheme relating to security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F2221/03—Indexing scheme relating to G06F21/50, monitoring users, programs or devices to maintain the integrity of platforms
- G06F2221/034—Test or assess a computer or a system
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06Q—INFORMATION AND COMMUNICATION TECHNOLOGY [ICT] SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES; SYSTEMS OR METHODS SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES, NOT OTHERWISE PROVIDED FOR
- G06Q30/00—Commerce
- G06Q30/018—Certifying business or products
- G06Q30/0185—Product, service or business identity fraud
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Computer Security & Cryptography (AREA)
- Computer Hardware Design (AREA)
- Databases & Information Systems (AREA)
- Data Mining & Analysis (AREA)
- Computing Systems (AREA)
- Bioethics (AREA)
- General Health & Medical Sciences (AREA)
- Health & Medical Sciences (AREA)
- Advance Control (AREA)
- Dc Digital Transmission (AREA)
Abstract
本申請涉及利用預測器模式標籤的Spectre修復方法和微處理器。在一個實施例中,一種在微處理器中實現的方法,所述方法包括:接收所拾取的分支指令;使用與包括多個條目的分支預測表中的特權等級相對應的第一標籤所指示的特權等級對所拾取的分支指令進行特權等級測試,所述多個條目中的各條目包括與特權等級相對應的標籤;以及基於所述特權等級測試的失敗提供針對所拾取的分支指令的預測分支未命中。
Description
本發明是有關於一種微處理器,且特別是有關於一種微處理器安全。
在2018年早期,研究人員發佈了與微處理器的潛在安全性漏洞有關的資訊,並且具體地,與可以允許惡意程式碼使存儲在電腦晶片中的特權資料(例如,秘密或私有資料,諸如屬於在微處理器上運行的其它程式的資料、僅管理員可用的資料等)暴露的安全缺陷有關的資訊。存在安全缺陷的若干變化,其中兩個歸類為Spectre(幽靈)的通用標籤並且第三個稱為Meltdown。這些漏洞透過對現代微處理器中使用的推測執行和快取記憶體機制的開發而產生。
存在Spectre漏洞的兩種變體。第一種(有時被稱為邊界校驗旁路)涉及惡意程式碼,該惡意程式碼引起核心模式中的錯誤推測並且間接地學習對快取記憶體的訪問模式,因而推測性地訪問內核記憶體以訪問特權資料。第二變體(有時稱為分支目標注入)使用間接分支預測來欺騙微處理器推測地執行到其原本將不執行的記憶體位置中。如果執行這些指令可以在快取記憶體中留下可使用快取記憶體推斷攻擊來檢測的狀態,則攻擊者然後可以訪問內核記憶體的內容。
公開的緩解Spectre漏洞的嘗試包括針對第一變體(變體I)的靜態分析和防禦、以及針對第二變體(變體II)(其是本發明的關注點)的微代碼更新,其中該微代碼更新採用兩種值得注意的緩解技術的形式:間接分支限制推測(IBRS)和間接分支預測器(有時也稱為“預測”)屏障(IBPB)形式的。IBRS防止較低特權等級代碼中的間接分支影響較高特權等級代碼中的預測。IBRS具有變體,其中也防止較高特權等級代碼影響較低特權等級代碼中的預測(因此需要準確的特權等級匹配)。IBPB清除分支目標位址快取記憶體(BTAC)以用於在使用者模式或訪客模式上下文切換之間運行的間接分支推測。
在一個實施例中,一種在微處理器中實現的方法,所述方法包括:接收被拾取的分支指令;使用由第一標籤指示的特權等級對所拾取的分支指令進行特權等級測試,其中,所述第一標籤與包括多個條目的分支預測表中的特權等級相對應,所述多個條目中的各條目包括與特權等級相對應的標籤;以及基於所述特權等級測試的失敗而針對所拾取的分支指令提供預測分支未命中。
在檢查以下附圖和詳細描述時,本發明的其它系統、方法、特徵和優點對於本領域具有通常知識者將是明顯的或變得明顯。所有這樣的附加系統、方法、特徵和優點旨在被包括在本說明書內、本發明的範圍內,並且受所附申請專利範圍的保護。
公開了用於微處理器的基於間接分支限制推測(IBRS)和間接分支預測器屏障(IBPB)緩解技術來提供Spectre修復的分支預測安全系統和方法的某些實施例。IBRS防止較低特權等級代碼中的間接分支影響較高特權等級代碼中的預測。IBRS還具有變體,在該變體中,也防止較高特權等級代碼影響較低特權等級代碼中的預測(例如,因此需要準確的特權等級匹配)。在一個實施例中,分支預測安全系統透過在預測表(例如,分支目標位址快取記憶體或BTAC)條目中使用額外兩(2)個標籤位表示Intel®使用的多個(例如,四(4)個)特權狀態來實現IBRS。Intel®將這2個位稱為預測器模式,但未公開在BTAC中存在這些位。而是,如可以最好地理解的,如IBPB那樣,當微代碼轉變到更高特權模式時,Intel®看上去會清除預測器。與特權等級和預測器模式有關的附加資訊可以在屬於Intel®的美國專利申請公開號20200133679中找到。如果分支指令未透過特權等級測試,則分支預測安全系統的實施例使分支指令未命中並且不被預測。IBPB在從較低特權代碼轉變為較高特權代碼時清除間接分支。在一個實施例中,分支預測安全系統透過針對間接分支指令添加單獨的間接有效表來實現IBPB。間接有效表可以在單個時脈週期中被清除,這是因為所有位被同時清除。在分支預測表(例如,BTAC)讀取時,間接分支指令應具有要被讀取作為分支指令的正常有效位元以及間接有效位。基於間接有效表中的對應條目的清除,將分支預測表配置為無效。
另外,IBRS和IBPB是用於Spectre II變體的兩種緩解技術。然而,實現細節已留給各晶片製造商。在一些情況下,硬體修復已經導致性能問題,這並不意外,因為現代處理器的推測處理起因於需要經由硬體來加速處理。此外,一些技術(如IBPB,其中間接分支被清除)對於大型分支預測表(諸如BTAC等)是不可行的。例如,當前BTAC可能具有四千(4k)個條目(具有多個路),各條目九十(90)位寬,其中散佈並存儲有分支類型的混合。針對所有分支條目在各週期清除各有效位條目(例如,設置為零)消耗相當大的功率並且是浪費的。此外,創建如下的表(陣列)是不可行的,其中,該表(陣列)在不順次讀取表中的每個條目的情況下基於也存儲在該表中的類型資料有條件地清除有效位元條目,這至少部分地因所需的週期數量而不切實際。相反,分支預測安全系統的某些實施例透過以下來規避這些和/或其它挑戰:將(預測器模式)標籤添加至預測表以使得能夠確定當前預測器模式是否等於或大於由標籤指示的預測器模式、以及/或者使用小的(例如,在一些實施例中為單個位的條目的多個行,但也可以使用每行的附加條目或者一個或多個附加小表,諸如BTAC中通常用於主要有效條目的用於實現快速清除的附加條目或表)間接有效表來在監督器與用戶代碼之間轉變時在單個時脈週期中清除有效條目。因此,當與其它IBRS/IBPB方法相比時,改進了速度和效率方面的性能。
已經總結了本發明的分支預測安全系統的某些特徵,現在將詳細參考如附圖中所示的分支預測安全系統的描述。雖然將結合這些附圖描述分支預測安全系統,但是不旨在將其限制為本文所公開的一個或多個實施例。即,雖然本發明容許修改和替代形式,但是其具體實施例在附圖中以示例的方式示出並且本文將詳細描述為足以使本領域具有通常知識者理解。然而,應當理解,附圖及其詳細描述不旨在將本發明限制為所公開的特定形式。相反,本發明將覆蓋落在由所附申請專利範圍限定的本發明的精神和範圍內的所有修改、等同物和替代物。如貫穿本申請所使用的,詞語“可以”是以許可的意義(即,意味著具有潛在性)而不是強制的意義(即,意味著必須)來使用的。類似地,詞語“包括(include)”、“包括(including)”和“包括(includes)”意味著包括但不限於。
各種單元、模組、電路、邏輯或其它元件可以被描述為“被配置為”進行一個或多個任務。在這樣的背景下,“被配置為”是結構的廣泛敘述,該結構通常意味著“具有電路或其它物理結構”,該電路或其它物理結構在操作期間進行或能夠進行一個或多個任務。電路可以是專用電路,或者是在編碼指令的控制下操作的更通用的處理電路。即,在描述本發明的各種實現的某些方面或特徵時,本文可以使用如“單元”、“模組”、“電路”、“邏輯”和“元件”的術語。本領域具有通常知識者將理解,利用電路來實現相應的特徵,無論該電路是專用電路還是在微編碼指令控制下操作的更通用的電路。
此外,單元/模組/電路/邏輯/元件可以被配置為即使在該單元/模組/電路/邏輯/元件當前不在操作中時也進行任務。敘述被配置為進行一個或多個任務的單元/模組/電路/邏輯/元件明確地旨在針對該單元/模組/電路/邏輯/元件不進行功能性限定。對此,本領域具有通常知識者將瞭解,電路元件的具體結構或互連將通常由設計自動化工具的編譯器(諸如寄存器傳送語言(RTL)編譯器等)來確定。RTL編譯器對非常類似於組合語言代碼的腳本進行操作,以將腳本編譯成用於最終電路的佈局或製造的形式。
即,使用更高級軟體工具來設計積體電路(諸如本發明的積體電路等),以對電路的期望功能操作進行建模。如眾所周知的,“電子設計自動化”(或EDA)是用於設計電子系統(諸如積體電路等)的軟體工具的類別。EDA工具還用於將設計功能程式設計到現場可程式設計閘陣列(FPGA)中。如Verilog和甚高速積體電路硬體描述語言(VHDL)的硬體描述語言(HDL)被用於創建電路的高級表示,從該高級表示可以得到低級表示和最終的實際佈線。實際上,由於現代半導體晶片可以具有數十億個元件,因此EDA工具被認為對於它們的設計是必要的。實際上,電路設計者使用如C/C++的程式設計語言來指定操作功能。EDA軟體工具將該指定功能轉換成RTL。然後,硬體描述語言(例如Verilog)將RTL轉換成離散的門網表。該網表定義由例如鑄造廠生產的實際電路。實際上,這些工具因其在促進電子和數位系統的設計工藝中的作用和用途而眾所周知和理解,因此本文不需要描述。
圖1A示出微處理器10的示例性分支單元流水線的實施例。應當瞭解,為了簡潔以及易於解釋和說明,本文省略了微處理器10的某些已知元件。如已知的,流水線架構提供在執行中重疊的多個指令,其中各個級稱為管道級。分支單元流水線中所示的方塊可以各自根據一個或多個級來實施,這些級在方塊的左側示出並且在所描繪的實施例中由從上至下按順序前進並且被重定向(如箭頭所示)的大寫字母C、I、B、U、L、M、F、G、W、X、E、S、W、Y和Z表示。本領域具有通常知識者應瞭解,圖1A中所描繪的級的數量和/或佈置僅說明一個示例性實施例,並且在一些實施例中,可以實現級的不同數量和/或佈置,因此預期在本發明的範圍內。本領域具有通常知識者還應瞭解,方塊提供對分支流水線的功能性的一般描述,並且為了簡潔,本文省略了本領域具有通常知識者已知的相關聯邏輯或電路。例如,本領域具有通常知識者應瞭解,如已知的,流水線的各級可以由時脈流水線寄存器或鎖存器分開。作為另一示例,雖然圖1A中未明確示出,但本領域具有通常知識者應瞭解,前端處的操作涉及與指令快取記憶體的資料交換或交互。
指令快取記憶體是微處理器內的隨機存取記憶體裝置,微處理器將最近從較大快取記憶體(例如,L2快取記憶體、L3快取記憶體)或系統記憶體獲取和/或預獲取(例如,透過匯流排界面單元從DRAM獲取和/或預獲取)並且由微處理器在運行ISA機器語言程式的過程中進行的ISA機器語言程式的指令(諸如x86 ISA機器語言指令等)放入指令快取記憶體中。ISA定義保持要進行的下一ISA指令的記憶體位址(由x86 ISA定義為指令指標(IP),但有時稱為程式計數器(PC))的指令位址寄存器,並且微處理器在其運行機器語言程式以控制程式的流程時更新指令位址寄存器內容。為了隨後在下一次機器語言程式流執行時基於指令位址寄存器內容從指令快取記憶體而不是從系統記憶體更快地拾取ISA指令的目的,對ISA指令進行快取記憶體,使得寄存器保持指令快取記憶體中所存在的ISA指令的記憶體位址。特別地,基於保持在指令位址寄存器中的記憶體位址(例如,IP)而非排他性地基於由載入或存儲指令指定的記憶體位址來訪問指令快取記憶體。因此,將ISA指令保持為資料(諸如可存在於採用軟體轉譯器的系統的硬體部分中等)、並且排他地基於載入/存儲位址而不是透過指令位址寄存器值來訪問的專用資料快取記憶體不是指令快取記憶體。此外,為了本發明的目的,對指令和資料進行快取記憶體(即,基於指令位址寄存器值和載入/存儲位址,而不是排他地基於載入/存儲位址所訪問)的統一快取記憶體旨在被包括在指令快取記憶體的定義中。
特別注意圖1A的微處理器10的分支單元流水線,微處理器10包括流水線微處理器,在一個實施例中,該流水線微處理器的指令集基本上符合x86架構指令集。如本領域具有通常知識者從本文提供的描述中將瞭解的,本發明可以以各種不同的電路結構和架構來實現,並且圖1A中所示的架構僅是許多合適的架構之一。示例性微處理器10包括快速預測器12、分支目標位址快取記憶體(BTAC)14、指令位元組佇列(XIB)16、分支解碼器18、格式指令佇列(FIQ)/迴圈佇列20、指令轉譯器22、寄存器別名表(RAT)/保留站(RS)24、執行單元(例如,整數單元、浮點單元等)26、以及分支表更新器28。微處理器10的各附圖標記的方塊對應於在相應的多個級C、I、B、U、L、M、F、G、W、X、E、S、W、Y和Z上實現的邏輯電路,其中流水線架構在每個級啟用不同指令組。在一個實施例中,可以在每個級處運行四個或更多個指令,其中控制信號沿著流水線標記各級。與快速預測器12、BTAC 14和XIB 16相關聯的級涉及對指令快取記憶體(I快取記憶體,圖1A中未示出)的訪問。
快速預測器12包括單週期分支預測器,該單週期分支預測器提供單週期預測(例如,花費一個週期來產生目標位址,在一個實施例中在I級提供該預測)。在一個實施例中,快速預測器12包括存儲先前執行的分支指令的分支目標位址的表(本文也被稱為陣列或目標陣列),該表在隨後遇到所存儲的分支指令時實現分支預測。在一個實施例中,表包括128個條目,但是在一些實施例中可以使用其它大小(例如,64個條目、32個條目等)的表。該表被組織為n路(例如,n是大於1的整數)的組關聯快取記憶體。一般而言,n路的組關聯快取記憶體在這裡也稱為多組關聯快取記憶體。在一個實施例中,各條目存儲八(8)個3位元數目器和當前局部分支模式,該計數器是由3位元局部分支模式而選擇的。快速預測器12還包括條件分支預測器,該條件分支預測器與該表並行地被訪問並且為條件分支提供採取/不採取的方向。快速預測器還包括返回堆疊,該返回堆疊可以提供目標而不是表。在一個實施例中,返回堆疊包括四(4)個條目,並且為返回指令提供目標。注意,以上列出的規範僅用於說明,並且一些實施例可以在不同的規範下進行,因此預期在本發明的範圍內。快速預測器12被配置為立即(在單個週期內)遞送預測分支目標,而沒有採用分支懲罰。在一些實施例中,快速預測器12可以根據其預測機制和/或表配置的其它規範來操作,或者在一些實施例中,可以省略快速預測器12。大多數分支被快速預測器12正確地預測。在一些實施例中,在快速預測器12基於同一所獲取的分支指令而提供與BTAC 14的分支預測不同(例如,在方向和/或目標上不同)的分支預測的情況下,BTAC 14利用BTAC 14所提供的分支預測資訊(例如,方向、目標位址、分支預測類型)來在BTAC 14的一組級內(例如,在U級)重寫快速預測器12的分支預測並更新快速預測器表。
I級和/或B級對應於對分支單元流水線的各種表(包括I快取記憶體、標籤陣列、轉譯後備暫存器(TLB)陣列、BTAC陣列、返回堆疊陣列等)的訪問、(例如,基於標籤)透過多工給出方向或路、以及讀出指令。
BTAC 14保持其用於預測後續執行期間的目標位址、方向和類型的與先前執行分支指令有關的資訊。BTAC 14包括比快速預測器12的表大得多的一個或多個表。在一個實施例中,BTAC 14包括4k條目、m路的組關聯表(這裡也稱為陣列或目標陣列),其中m是大於1的整數。BTAC 14的各條目包括有效位元、分支目標位址預測、方向預測和分支類型。在一個實施例中,各條目另外包括兩個標籤位,在這裡也被稱為預測器模式位元。如上文所說明的,預測器模式位元表示也由Intel®使用的四(4)個不同特權狀態。分支類型指定分支指令是呼叫/返回、是間接分支、是條件相對分支、還是無條件相對分支。在一個實施例中,BTAC 14包括具有多條目(例如,12k)的基於標籤幾何(TAGE)的條件分支預測器的條件相對分支預測器(或者簡稱為條件分支預測器)、多個表、多位(例如,3位)、採取/不採取(T/NT)計數器以及多位元全域分支歷史,或者與上述這些協作。也就是說,TAGE條件分支預測器包括具有幾何上增加的分支歷史長度的標籤表,這是眾所周知的。作為另一示例,間接預測包括多條目(例如,1.5k) TAGE預測器,並且將表條目用於靜態間接分支。在一個實施例中,使用了兩個TAGE條件分支預測器,一個用於表的邊A,以及一個用於表的邊B。TAGE條件分支預測器可以是BTAC的一部分或與BTAC 14結合使用。
在一個實施例中,BTAC 14包括具有比TAGE條件分支預測器低的複雜度的第二類型的條件分支預測器(例如與表的邊C相關聯的GSHARE預測器)或與之協作。GSHARE條件分支預測器可以是BTAC 14的一部分或與BTAC 14結合使用。GSHARE條件分支預測器包括在快速預測器12的複雜度與TAGE條件分支預測器的複雜度之間的複雜度(例如,大約TAGE條件分支預測器的大小的1/10)。在一個實施例中,GSHARE條件分支預測器包括單個表(例如,包括最後m個執行的分支指令的分支模式的m位元全域歷史寄存器,其中,m通常為10-12位,但不限於該數量)。GSHARE條件分支預測器使用全域分支歷史和分支指令的位置(例如IP)來(經由XOR邏輯運算)創建到計數器(例如2位元數目器)的表中的索引,其中索引的結果是針對當前分支的預測。由於TAGE和GSHARE類型的條件分支預測器在本領域中是已知的,因此為簡潔起見,在此省略對其的進一步描述。注意,在一些實施例中,可以使用其它類型的預測機制,包括基於相關性的預測機制、使用全域和局部分支歷史的組合的條件分支預測器等。此外,儘管這裡強調了邊A、B和C,但是在一些實施例中,可以使用更少的或額外的邊。對於指令快取記憶體的快取記憶體行的各部分或各獲取單位(quantum)(例如,16位元組),BTAC 14可以保持三個條目(例如,邊A、B和C,儘管在一些實施例中可以使用更少的邊來存儲針對更少的分支指令的預測資訊),該三個條目可以保持針對可能存在於快取記憶體行的一部分中的多達三個分支指令的預測資訊。BTAC 14包括透過一組級(例如,I級、B級和U級)的操作。實際上,分支指令的U級用作目標的C級(例如,從B級到C級的箭頭反映B級處的分支指令的情況,並且下一個時脈是目標的C級,或者在這裡也是快取記憶體位址),從而導致BTAC預測的二時脈延遲。
BTAC 14具有二時脈採取懲罰(two-clock taken penalty),這也揭示快速預測器12透過立即將新快取記憶體位址引導為目標來提供快速分支預測(無採取懲罰)的益處。在一個實施例中,BTAC 14大於快速預測器12且具有更複雜的分支預測機制,其被配置為(例如,總是)在分支預測中存在不一致(例如,BTAC 14確定的分支預測與快速預測器12所確定的採取判斷和/或分支目標位址不同)時重寫快速預測器12的分支預測。在一些實施例中,BTAC 14被配置為透過將分支預測資訊寫入到快速預測器12的表中(且還寫入BTAC 14的表中)來在BTAC級其中之一(例如,U級)期間更新快速預測器12。在一些實施例中,延遲對BTAC 14的更新,直到分支被執行或引退為止,其中對BTAC 14的更新涉及對BTAC 14的預測器表的寫入。在一個實施例中,更新涉及目標資訊更新和/或計數器更新。然而,對快速預測器12的更新不等待那麼久,而在BTAC級期間發生。注意,不在快速預測器12中的分支在兩個週期之後在與BTAC級相對應的時間(例如,在BTAC級期間)被寫入快速預測器12中。
XIB 16是條目佇列,各條目保持來自指令快取記憶體的16個位元組的資料。例如,來自XIB 16的快取記憶體資料僅是採用16個位元組的塊的指令位元組流,並且鑒於指令具有可變長度,給定x86指令在流內或給定塊內在何處開始或結束是未知的。XIB 16包括用以確定和標記各指令在流內的開始和結束位元組、從而將位元組流分解成x86指令流的已知邏輯,其中該x86指令流被提供給FIQ/迴圈佇列20並存儲在FIQ/迴圈佇列20中以供微處理器流水線的其餘部分處理。在L(長度)級,XIB 16確定指令長度。在一個實施例中,預解碼器(圖1A中未示出)在U級處實現,並且被配置為檢測潛在分支指令並且在佇列中針對各指令位元組來如此地標記它們。注意,在該級,存在關於給定位元組是否為指令的開始的模糊性。如果位元組是在稍後(M級)確定的分支指令的操作碼位元組,則該指令被確認為分支指令。例如,分支解碼器18包括用於在多工或M級中對指令進行多工的指令多工(未示出),其中分支指令被這樣確認。
在F級中,如以上所說明的對這些指令進行格式化。在一個實施例中,格式化指令包括基本上符合x86架構指令集的指令。此外,在M級確定給定指令(可能由預解碼器預先標記)是否確實是分支。例如,在快速預測器12或BTAC 14中發生未命中的情況下(例如,在初始啟動時),分支解碼器18(例如,指令多工)決定為當前指令是分支,向BOT寫入,並且在G級將快取記憶體位址重定向到新目標並更新微處理器10的前端中的表。實際上,當在快速預測器12或BTAC 14處未命中時,分支解碼器18提供分支預測,其中分支指令在C級轉向目標。在一些情況下,諸如在BTAC 14處針對各獲取存在多於有限或預定最大數量的分支(例如,針對各16位元組獲取存在多於三個分支)的情況下,延遲額外分支的分支預測,直到解碼時間為止。
FIQ/迴圈佇列20接收格式化指令並且對它們進行緩存,直到它們可以被轉譯成微指令為止。FIQ/迴圈佇列20還提供初步解碼和快速迴圈功能(例如,在BTAC迴圈分支上,迴圈佇列被啟動並且迴圈指令被重複發送),後者由方塊20右側的箭頭表示。
W級提供可選的額外定時時脈。
在X級,指令轉譯器22(在X級或轉譯級中)將存儲在FIQ/迴圈佇列20中的格式化指令轉譯成微指令。
指令以程式順序被提供至寄存器別名表/保留表(RAT/RS) 24。RAT/RS 24的RAT功能維持和生成針對各指令的依賴性資訊。RAT/RS 24的RAT功能將指令的源和目的地重命名到內部寄存器上,並且將指令分派到RAT/RS 24的保留站,該保留站(可能不按照程式順序)向執行單元26發出指令。包括整數單元的功能或執行單元26在E(執行)級執行分支指令。執行單元、分支單元和整數單元是本文中可互換使用的術語。在一個實施例中,執行單元26 (例如,兩個執行單元)在單個時脈週期中執行兩個分支。執行單元26還指示BTAC 14是否已正確地預測分支指令。
在一個實施例中,將執行的結果提供給重排序暫存器(未示出),該重排序暫存器包括與已經執行的指令有關的資訊。眾所周知,重排序暫存器在指令發出之後保持指令的原始程式順序,並允許在退出級期間對結果進行序列化。在一個實施例中,可以將重排序暫存器的資訊中的一些存儲在沿著流水線的其它地方,諸如在解碼器18處等。存儲在重排序暫存器中的資訊可以包括分支資訊,諸如分支的類型、分支模式、目標、預測中使用的表以及快取記憶體替換策略資訊(例如,最近最少使用或LRU)等。
分支表更新器28包括S、W、Y和Z級,並且被配置為用與完全解碼和執行的分支指令有關的資訊(例如,分支的最終結果)來(例如,在S級處)對前端的各種表(例如,BTAC、TAGE)進行更新。在S、W、Y和Z級,更新可能涉及表讀取、目標位址寫入以及計數器遞增或遞減,這可能涉及一些延遲。在一個實施例中,分支表更新器28針對給定條件分支指令和緩存有該條件分支指令的邊(例如,A、B或C)提供錯誤預測的指示。
現在參考圖1B並繼續參考圖1A,示出在針對圖1A的微處理器10示出的分支單元流水線的前端30處使用的示例快速預測器12和其它示例性源。前端30包括獲取單元32(例如,包括多工和時脈寄存器)、轉譯後備暫存器(TLB) 34、指令快取記憶體(I快取記憶體資料)36、I快取記憶體標籤38(或標籤陣列)、BTAC 14以及快速預測器12。獲取單元32接收多個快取記憶體指令位址源,包括順次的指令位址(例如,來自I級)、經校正指令位址(例如,來自S級)、解碼時間指令位址(例如,來自G級)以及來自BTAC 14和快速預測器12的位址。獲取單元32的輸出是作為對TLB 34、I快取記憶體資料36、I快取記憶體標籤38、BTAC 14和用於訪問I快取記憶體資料36的下一指令的快速預測器12的輸入而提供的快取記憶體位址。
TLB 34在記憶體管理單元(未示出)的管理下提供如已知的虛擬到物理頁位址轉譯。即,TLB 34存儲最近使用的虛擬位址的物理位址。TLB 34從分段單元(其將來自程式的邏輯位址轉換成線性位址)接收線性位址,並且將該線性位址的一部分與TLB 34的條目進行比較以查找匹配。如果存在匹配,則根據TLB條目計算物理位址。如果不存在匹配,則拾取來自記憶體的頁表條目且將該頁表條目放置到TLB 34中。
I快取記憶體資料36包括已經從L2、L3或主記憶體拾取或預拾取的指令的1級快取記憶體。I快取記憶體資料36包括多個時脈寄存器。
I快取記憶體標籤38包括與I快取記憶體資料36中的指令相對應的標籤陣列,並且包括多個時脈寄存器,並且用於確定與所拾取的快取記憶體指令相關聯的資訊(例如,快取記憶體位址的標籤或部分)與I快取記憶體資料36和BTAC 14之間的匹配。
上文結合圖1A說明了BTAC 14,並且該BTAC 14具有多個時脈寄存器和二(2)時脈採取懲罰。同樣在上文中說明的快速預測器12具有零(0)時脈採取懲罰。例如,假定沿著I快取記憶體以每週期16個位元組進行拾取,並且假設快取記憶體位址20至快取記憶體位址95的分支指令。注意,在該示例中由地址描述暗示十六進位標記法(例如,0x0、0x10、0x20等)。由此,獲取在快取記憶體位址0、快取記憶體位址10、快取記憶體位址20 (分支指令,但由於BTAC 14跨越多個週期進行讀取和多工因而尚未解決,其中在一些實施例中,該多個週期是與I快取記憶體相同的定時)、快取記憶體位址30 (相對時脈1)、快取記憶體位址40 (相對時脈2)、然後在第3時脈(相對時脈3)上發生,快取記憶體指令獲取被重定向到緩存位址95。因此在該示例中採取的分支懲罰包括兩個時脈週期,因為快取記憶體位址30和40發生在分支之後。換言之,在沒有快速預測器12的情況下,對於該特定設計示例,採用的分支懲罰總是兩個時脈。利用更小且更快的快速預測器12,快取記憶體位址獲取(在以上示例中)包括0、10、20和95,對快取記憶體地址沒有延遲且採取的懲罰為零。如上所述,在一些實施例中,快速預測器12可以被省略。
在開始對分支預測安全系統的某些實施例的更詳細描述之前,下面進一步說明Spectre漏洞。通常,可以在用戶程式設計代碼和監督程式設計代碼的上下文中理解漏洞或安全缺陷。監督代碼是指需要較高特權或安全授權來訪問的代碼,包括與密碼規定、隱私資料等有關的代碼,其通常僅旨在用於網站或作業系統中的(例如,由具有適當安全憑證的那些 (例如,網站或雲計算服務的管理員))的特權訪問。監督代碼可以包括在作業系統或管理程式中涉及的內核代碼。另一方面,用戶代碼是可以由用戶運行並且具有比監督代碼更低的特權要求的代碼。用戶代碼不應當能夠訪問監督代碼。在硬體水準上,晶片實施安全協定以防止從較低特權等級到較高特權等級(例如,在使用者和/或應用之間)的訪問。Spectre安全缺陷可以透過從定時模式推斷資料的性質以訪問資料而利用晶片中的推測性分支預測機制,並且更具體地,利用間接分支預測機制。諸如IBPB和甚至IBRS等的緩解技術在從較低(用戶代碼)轉變為較高(監督)特權代碼時清除例如BTAC中的間接分支指令。例如,當轉變到監督器代碼或模式或者從監督器代碼或模式轉變時,清除間接分支。在被稱為retpoline的另一技術中,每個間接分支被替換為返回目標。然而,如上文所說明的,在給定預測表中的大小、路佈置和分支類型的混合的情況下,間接分支清除可能損害性能。進一步,在編譯器處實現retpoline,其中除了可能具有有限軟體庫的嵌入式應用之外,與硬體修復相比,在給定軟體應用的程度和範圍的情況下更多地涉及改變代碼。
給定以上附加背景,現在將轉向注意圖2,圖2示出部分地基於Spectre變體II漏洞的間接分支限制推測(IBRS)緩解技術的示例分支預測安全系統40的實施例。通常,分支預測安全系統40防止使用者代碼影響監督代碼。更具體地,存在兩種針對由分支預測安全系統40實現的方法的變型。一個變型是特權等級(或等效地,預測器模式)必須準確地匹配,而另一個變型是較低特權代碼不能影響較高特權代碼。在一個實施例中,分支預測安全系統40包括BTAC 14(但在一些實施例中,可以使用其它分支預測表類型),並且BTAC條目42包括有效條目44、預測器模式(PM)標籤46 (或特權等級標籤)、位址標籤48和資料條目50。有效條目44包括指示BTAC 14中的分支指令是否有效的1位元設置。預測器模式標籤46包括與四(4)個特權等級中的任一個相對應的2位值。位址標籤48和資料條目50分別與針對分支指令和分支資訊或資料的位址識別字或索引相對應。
分支預測安全系統40還包括邏輯52,該邏輯52用於從BTAC條目42的選擇條目接收資訊,並且透過使不滿足某些特權等級條件的分支無效來加強安全。在一些實施例中,邏輯52為BTAC 14的一部分或與BTAC 14協作地工作。邏輯52包括比較器邏輯54和56以及多工器58。在一個實施例中,比較器邏輯54接收拾取到的分支指令(例如,間接分支指令)的當前預測器模式和PM標籤46,並且進行特權等級檢查。特權等級檢查確定當前預測器模式是否等於PM標籤46以及預測器模式是否大於或等於PM標籤46(例如,較低特權代碼不能影響較高特權代碼),並且當滿足時,觸發多工器58以提供PM匹配的輸出。該操作與標籤匹配一起進行。即比較器邏輯56接收獲取位址和位址標籤48,並且當這些值相等時提供標籤匹配。實際上,導致BTAC 14中的命中的條件包含有效標籤44、來自比較器邏輯56的標籤匹配和來自多工器58的PM匹配。相反,透過在特權測試失敗時引起未命中(並且因此不被預測)而在不同特權等級的代碼之間拒絕訪問。值得注意的是,不同於使用微代碼來針對代碼特權等級的每次改變而清除預測器的傳統修復,分支預測安全系統40的某些實施例保留分支,而保留的分支僅在處於相同特權等級時可訪問。在本發明的上下文中,本領域具有通常知識者應當理解,圖2中描繪的組件的佈置是示例實施例,並且在一些實施例中,可以使用元件的其它佈置來實現類似的功能,並且因此預期其它佈置在本發明的範圍內。
現在參考圖3,示出部分地基於Spectre變體II漏洞的間接分支預測器屏障(IBPB)緩解技術的示例分支預測安全系統60的實施例。如上文所指示,IBPB由分支預測安全系統60透過在從較低特權代碼轉變為較高特權代碼時清除分支預測表(例如,BTAC 14)中的間接分支來實現。在一個實施例中,如下文所說明的,分支預測安全系統60透過使用單獨的間接有效表來進行該功能。分支預測安全系統60包括多個路(表條目) 62,並且在該示例中,為四(4)個BTAC路0、1、2和3(例如,針對邊A、B、C等中的各邊)。應當理解,在一些實施例中,可以使用更少的或額外的BTAC路62,因此預期在本發明的範圍內。分支預測安全系統60還包括比較器邏輯64、路多工器66和間接有效表68。間接有效表68存儲針對BTAC 14的間接分支指令的有效位元條目(例如,間接有效位條目)。間接有效表68遠小於BTAC 14,其中在一個實施例中,各條目在長度上是單個位。間接有效表68可以在單個時脈中被清除。如本領域具有通常知識者在本發明的上下文中所理解的,對間接有效表68的清除可以簡單地使用正常信號。透過這種小表(例如,僅包含間接有效位)的低功率/電流約束,利用用於實現對表的所有位的同時清除的足夠電流,使得所有條目的單個時脈清除成為可能。
進一步說明,在一個實施例中,間接有效表68包括多個行和針對各行的一個或多個條目。例如,間接有效表68包括六十四(64)行×十六(16)位元的物理佈置,其中,各個位條目(例如,列)包括寄存器和驅動器(以提供所需的電流)以將清除匯流排(例如,16位元)鎖存和分配至表68中的所有隨機存取記憶體(例如,SRAM)單元。可以單獨清除條目,或者可以使用例如針對每個單元的電晶體一次(例如,在單個時脈週期中)清除整個表,該電晶體在被清除信號啟動時將單元的記憶體狀態清零。當清除信號未啟動時,單元作為正常SRAM單元而進行。64行×16位表還被多工以在邏輯上產生間接有效表配置。在一個實施例中,間接有效表68包括512×2位表,其中一個位條目與主有效相關聯,而其它條目與間接有效相關聯。在一些實施例中,多工器可以產生512×1位表,其中各條目僅與間接有效相關聯(並且BTAC 14中的條目為主有效)。
BTAC路62向路多工器66和比較器邏輯64提供相應輸出。在一個實施例中,比較器邏輯64從BTAC路62接收分支類型(例如,間接分支,4位元)的指示,並且在一個實施例中,還從BTAC 14(例如,從BTAC 14的針對所拾取的分支指令的條目)接收主有效條目和位址標籤匹配。比較器邏輯64的另一輸入是來自間接有效表68的間接有效條目。比較器邏輯64將命中的指示提供到路多工器66,其中命中與主有效、具有間接有效(例如,如經由間接有效表68提供)的間接類型和地址標籤匹配相對應。另一方面,當清除間接有效表68時,不管BTAC 14的有效條目如何(例如,有效或無效),基於所清除的間接有效表條目,BTAC條目仍被視為無效。換句話說,在讀取BTAC 14時,可以(例如,由比較器邏輯64)確定為存在針對給定位址標籤處的主有效的間接分支類型,但是如果來自間接有效表68的輸入指示間接無效位元,則間接分支指令無效,從而防止其在從用戶代碼轉變到特權或監督代碼之後的使用(因此防止惡意程式碼使用間接分支指令來利用Spectre型安全缺陷)。實際上,與BTAC 14並行地,間接有效表68使得能夠讀出(在主有效條目或BTAC有效條目、或者在如上文所說明的一些實施例中的間接有效表中的主有效條目之外的)第二有效位條目,並且間接有效表68被設計為在單個週期中可清除,從而避免因從大得多的BTAC 14中清除間接分支而預期造成的效能影響。將根據主有效、間接類型分支指令、間接有效和位址標籤匹配而產生的命中提供到路多工器66,並且產生BTAC輸出(例如,具有包括特定位址、特定路、邊、目標、分支指令的類型的分支指令的資訊)。在本發明的上下文中,本領域具有通常知識者應當理解,圖3中所描繪的組件的佈置是示例實施例,並且在一些實施例中,可以使用元件的其它佈置來實現類似的功能,並且因此預期其它佈置在本發明的範圍內。
在本發明的上下文中,本領域具有通常知識者應當理解,微處理器的一些實施例可以被配置為進行兩種方法(基於IBRS的實施例和基於IBPB的實施例),並且一些實施例可以僅能夠進行一種或另一種方法。
已經描述了分支預測安全系統40的某些實施例,應當理解的是,在微處理器中實現的並且基於IBRS的示例分支預測安全方法的一個實施例(表示為圖4中的方法70)包括:接收拾取到的分支指令(步驟72);使用由與包括多個條目的分支預測表中的特權等級相對應的第一標籤指示的特權等級對所拾取的分支指令進行特權等級測試,所述多個條目中的各條目包括與特權等級相對應的標籤(步驟74);以及基於所述特權等級測試的失敗而針對所拾取的分支指令提供預測分支未命中(步驟76)。
已經描述了分支預測安全系統60的某些實施例,應當理解的是,在微處理器中實現的並且基於IBPB的示例方法的又一實施例(表示為圖5中的方法78)包括:在包含多個條目的分支預測表處接收間接分支指令獲取,其中,所述多個條目中的至少一部分與間接分支類型相對應(步驟80);以及所述分支預測表中的與間接分支指令相對應的條目基於對間接有效表中的相應條目的清除而被配置為無效(步驟82)。
流程圖中的任何處理描述或方塊應被理解為表示代碼的模組、段、邏輯或部分(其包括用於在過程中實現特定邏輯功能或步驟的一個或多個可執行指令),並且替代實現包括在實施例的範圍內,其中如本發明領域具有通常知識者將理解的,功能可以不按所示或討論的順序地執行(包括基本上併發執行或以不同循序執行),這取決於所涉及的功能。
雖然已經在附圖和前面的描述中詳細示出和描述了本發明,但是這樣的示出和描述應被認為是說明性的或示例性的而不是限制性的;本發明不限於所公開的實施例。本領域具有通常知識者透過研究附圖、公開內容和所附申請專利範圍書,在實踐要求保護的發明時可以理解並實現所公開的實施例的其它變化。
注意,可以使用所公開的實施例的不同組合,因此參考實施例或一個實施例並不意味著排除來自該實施例的特徵與來自其它實施例的特徵一起使用。在申請專利範圍書中,詞語“包括”不排除其它要素或步驟。
10:微處理器
12:快速預測器
14:分支目標位址快取記憶體
16:指令位元組佇列
18:分支解碼器
20:格式指令佇列/迴圈佇列
22:指令轉譯器
24:暫存器別名表/保留站
26:執行單元
28:分支表更新器
30:前端
32:獲取單元
34:轉譯後備暫存器
36:I快取記憶體資料
38:I快取記憶體標籤
40:分支預測安全系統
42:BTAC條目
44:有效條目
46:預測器模式標籤
48:位址標籤
50:資料條目
52:邏輯
54、56:比較器邏輯
58:多工器
60:分支預測安全系統
62:BTAC路
64:比較器邏輯
66:路多工器
68:間接有效表
70:方法
72-76:步驟
78:方法
80-82:步驟
參考以下附圖,可以更好地理解本發明的各個方面。不必按比例繪製附圖中的組件,而是將重點放在清楚地例示本發明的原理上。此外,在附圖中,相同的附圖標記在多個視圖中表示相應部件。
圖1A是示出實現分支預測安全系統的實施例的微處理器所用的示例分支單元流水線的方塊圖。
圖1B是示出圖1A中所示的分支單元流水線的示例前端的示意圖。
圖2是示出部分地基於對Spectre變體II漏洞的間接分支限制推測(IBRS)緩解技術的示例分支預測安全系統的實施例的示意圖。
圖3是示出部分地基於對Spectre變體II漏洞的間接分支預測器屏障(IBPB)緩解技術的示例分支預測安全系統的實施例的示意圖。
圖4是示出基於IBRS的示例分支預測安全方法的實施例的流程圖。
圖5是示出基於IBPB的示例分支預測安全方法的實施例的流程圖。
70:方法
72:步驟
74:步驟
76:步驟
Claims (18)
- 一種微處理器,包括:分支目標位址快取記憶體,其包括多個條目,所述多個條目中的各條目包括與特權等級相對應的標籤;以及邏輯,其被配置為使用所述標籤所指示的所述特權等級對被拾取的分支指令進行特權等級測試,並且基於所述特權等級測試的失敗,所述分支目標位址快取記憶體被配置為針對所拾取的分支指令提供預測分支未命中。
- 如請求項1所述的微處理器,其中所述標籤與基於位元設置的多個特權等級中的任何特權等級相對應。
- 如請求項1所述的微處理器,其中所述邏輯將所拾取的分支指令的特權等級與所述標籤所指示的所述特權等級進行比較,其中,在不存在準確匹配的情況下,所述特權等級測試的結果為失敗。
- 如請求項1所述的微處理器,其中所述邏輯將所拾取的分支指令的所述特權等級與所述標籤所指示的所述特權等級進行比較,其中,在所拾取的分支指令的所述特權等級低於所述標籤所指示的所述特權等級的情況下,所述特權等級測試的結果為失敗。
- 如請求項1所述的微處理器,其中所述多個條目中的各條目還包括位址標籤,其中,所述邏輯還被配置為將該所拾取的分支指令的位址與所述位址標籤進行比較。
- 如請求項5所述的微處理器,其中所述多個條目中的各條目還包括有效位條目,其中,所述分支預測表基於所述有效位、與所述位址標籤的匹配、以及所拾取的分支指令的所述特權等級與所述標籤所指示的所述特權等級的準確匹配或者所拾取的分支指令的所述特權等級高於所述標籤所指示的所述特權等級,針對所拾取的分支指令提供預測分支命中。
- 如請求項1所述的微處理器,其中所述標籤包括2位標籤。
- 如請求項1所述的微處理器,其中所拾取的分支指令包括間接分支指令,其中,透過針對拾取的間接分支指令提供預測分支未命中,所述分支預測表被配置為防止較低特權等級代碼中的間接分支指令影響較高特權等級代碼,並且防止較高特權等級代碼中的間接分支指令影響較低特權等級代碼。
- 如請求項8所述的微處理器,其中所述間接分支指令被惡意程式碼破壞。
- 一種在微處理器中實現的方法,所述方法包括:接收被拾取的分支指令;藉由比較相關於所述被拾取的分支指令的特權等級與包括多個條目的分支目標位址快取記憶體的條目中的第一標籤所指示的特權等級對所述被拾取的分支指令進行特權等級測試,其中,所述多個條目中的各條目包括與特權等級相對應的標籤;以及基於所述特權等級測試的失敗而針對所拾取的分支指令提供 預測分支未命中。
- 如請求項10所述的方法,其中所述第一標籤與基於位元設置的多個特權等級中的任何特權等級相對應。
- 如請求項10所述的方法,更包括將所拾取的分支指令的特權等級與所述第一標籤所指示的所述特權等級進行比較,其中,在不存在準確匹配的情況下,所述特權等級測試的結果為失敗。
- 如請求項10所述的方法,更包括將所拾取的分支指令的所述特權等級與所述第一標籤所指示的所述特權等級進行比較,其中,在所拾取的分支指令的所述特權等級低於所述第一標籤所指示的所述特權等級的情況下,所述特權等級測試的結果為失敗。
- 如請求項10所述的方法,其中所述多個條目中的各條目還包括位址標籤,所述方法還包括將所拾取的分支指令的位址與所述位址標籤進行比較。
- 如請求項14所述的方法,其中所述多個條目中的各條目還包括有效位條目,所述方法還包括:基於所述有效位、與所述位址標籤的匹配、以及所拾取的分支指令的所述特權等級與所述第一標籤所指示的所述特權等級的準確匹配或者所拾取的分支指令的所述特權等級高於所述第一標籤所指示的所述特權等級,針對所拾取的分支指令提供預測分支命中。
- 如請求項10所述的方法,其中所述第一標籤包括2位標籤。
- 如請求項10所述的方法,其中所拾取的分支指令包括間接分支指令,其中,透過針對所拾取的間接分支指令提供預測分支未命中,所述分支預測表被配置為防止較低特權等級代碼中的間接分支指令影響較高特權等級代碼,並且防止較高特權等級代碼中的間接分支指令影響較低特權等級代碼。
- 如請求項17所述的方法,其中所述間接分支指令被惡意程式碼破壞。
Applications Claiming Priority (2)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| US17/098,191 | 2020-11-13 | ||
| US17/098,191 US11783050B2 (en) | 2020-11-13 | 2020-11-13 | Spectre fixes with predictor mode tag |
Publications (2)
| Publication Number | Publication Date |
|---|---|
| TW202219945A TW202219945A (zh) | 2022-05-16 |
| TWI807371B true TWI807371B (zh) | 2023-07-01 |
Family
ID=78013468
Family Applications (1)
| Application Number | Title | Priority Date | Filing Date |
|---|---|---|---|
| TW110126489A TWI807371B (zh) | 2020-11-13 | 2021-07-19 | 利用預測器模式標籤的Spectre修復方法和微處理器 |
Country Status (3)
| Country | Link |
|---|---|
| US (1) | US11783050B2 (zh) |
| CN (1) | CN113504941A (zh) |
| TW (1) | TWI807371B (zh) |
Families Citing this family (5)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| US20220207148A1 (en) * | 2020-12-26 | 2022-06-30 | Intel Corporation | Hardening branch hardware against speculation vulnerabilities |
| US12008370B2 (en) * | 2021-05-06 | 2024-06-11 | Purdue Research Foundation | Method for preventing security attacks during speculative execution |
| CN114721724A (zh) * | 2022-03-07 | 2022-07-08 | 电子科技大学 | 一种基于risc-v指令集的六级流水线处理器 |
| CN119473401B (zh) * | 2024-10-25 | 2025-09-30 | 海光信息技术股份有限公司 | 数据处理方法、分支预测器及相关设备 |
| CN119473400B (zh) * | 2024-10-25 | 2025-11-28 | 海光信息技术股份有限公司 | 分支预测方法、分支预测器及相关设备 |
Family Cites Families (13)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| US7278012B2 (en) * | 2005-06-02 | 2007-10-02 | Qualcomm Incorporated | Method and apparatus for efficiently accessing first and second branch history tables to predict branch instructions |
| US8555040B2 (en) * | 2010-05-24 | 2013-10-08 | Apple Inc. | Indirect branch target predictor that prevents speculation if mispredict is expected |
| GB2483907A (en) * | 2010-09-24 | 2012-03-28 | Advanced Risc Mach Ltd | Privilege level switching for data processing circuitry when in a debug mode |
| US9146742B2 (en) * | 2011-04-07 | 2015-09-29 | Via Technologies, Inc. | Heterogeneous ISA microprocessor that preserves non-ISA-specific configuration state when reset to different ISA |
| US9032191B2 (en) * | 2012-01-23 | 2015-05-12 | International Business Machines Corporation | Virtualization support for branch prediction logic enable / disable at hypervisor and guest operating system levels |
| US9619230B2 (en) * | 2013-06-28 | 2017-04-11 | International Business Machines Corporation | Predictive fetching and decoding for selected instructions |
| US10135825B2 (en) * | 2014-12-24 | 2018-11-20 | Intel Corporation | Protecting supervisor mode information |
| JP2018200545A (ja) * | 2017-05-26 | 2018-12-20 | ルネサスエレクトロニクス株式会社 | プロセッサ装置 |
| JP7284761B2 (ja) * | 2018-01-12 | 2023-05-31 | ヴァーセック・システムズ・インコーポレーテッド | 投機的実行のエクスプロイトに対する防御 |
| CN108427576B (zh) | 2018-02-12 | 2022-04-01 | 华夏芯(北京)通用处理器技术有限公司 | 一种免受Spectre攻击的高性能推测执行算法 |
| US11347507B2 (en) * | 2018-03-15 | 2022-05-31 | SiFive, Inc. | Secure control flow prediction |
| GB2574042B (en) * | 2018-05-24 | 2020-09-09 | Advanced Risc Mach Ltd | Branch Prediction Cache |
| US11029957B1 (en) * | 2020-03-27 | 2021-06-08 | Intel Corporation | Apparatuses, methods, and systems for instructions to compartmentalize code |
-
2020
- 2020-11-13 US US17/098,191 patent/US11783050B2/en active Active
-
2021
- 2021-07-16 CN CN202110804540.5A patent/CN113504941A/zh active Pending
- 2021-07-19 TW TW110126489A patent/TWI807371B/zh active
Also Published As
| Publication number | Publication date |
|---|---|
| TW202219945A (zh) | 2022-05-16 |
| CN113504941A (zh) | 2021-10-15 |
| US11783050B2 (en) | 2023-10-10 |
| US20220156379A1 (en) | 2022-05-19 |
Similar Documents
| Publication | Publication Date | Title |
|---|---|---|
| TWI783582B (zh) | 利用間接有效表的Spectre修復的方法和微處理器 | |
| TWI807371B (zh) | 利用預測器模式標籤的Spectre修復方法和微處理器 | |
| US20220358210A1 (en) | Conditioning store-to-load forwarding (stlf) on past observations of stlf propriety | |
| US7437537B2 (en) | Methods and apparatus for predicting unaligned memory access | |
| US12524538B1 (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 | |
| TWI844775B (zh) | 快速預測器覆寫方法和微處理器 | |
| US12118076B2 (en) | Physically-tagged data cache memory that uses translation context to reduce likelihood that entries allocated during execution under one translation context are accessible during execution under another translation context | |
| KR20090009955A (ko) | 블록-기반 브랜치 타겟 어드레스 캐시 | |
| US11354128B2 (en) | Optimized mode transitions through predicting target state | |
| CN101176060A (zh) | 每索引存储两个或更多分支目标地址的分支目标地址高速缓冲存储器 | |
| JP2009540439A (ja) | スライドウィンドウブロックベースの分岐ターゲットアドレスキャッシュ | |
| WO2017112361A2 (en) | Method and apparatus for recovering from bad store-to-load forwarding in an out-of-order processor | |
| US20190235873A1 (en) | System and method of reducing computer processor power consumption using micro-btb verified edge feature | |
| TWI858271B (zh) | 微處理器和分支預測控制方法 | |
| US20220067143A1 (en) | Virtually-tagged data cache memory that uses translation context to make entries allocated during execution under one translation context inaccessible during execution under another translation context | |
| TWI788912B (zh) | 可調整分支預測方法和微處理器 | |
| TWI793739B (zh) | 推測分支模式更新方法和微處理器 | |
| US11360774B2 (en) | Dual branch format | |
| Talpes et al. | Power reduction through work reuse | |
| US11461103B2 (en) | Dual branch execute and table update with single port | |
| Kucuk et al. | Reducing power dissipation of register alias tables in high-performance processors |