專利名稱:事務型存儲器訪問的混合硬件軟件實現(xiàn)的制作方法
技術(shù)領(lǐng)域:
本發(fā)明的實施方案涉及事務型存儲器(transactional memory)的領(lǐng)域。更具體 地說,本發(fā)明的實施方案涉及事務型存儲器訪問的混合硬件軟件實現(xiàn)。
背景技術(shù):
事務型存儲器服務允許應用、程序、模塊等,更具體地說是允許應用程序接口 (API)以原子式的、一致的并且隔離的方式來訪問存儲器。例如,事務型存儲器可被用作用 于管理持久性的指針豐富型數(shù)據(jù)結(jié)構(gòu)(例如數(shù)據(jù)庫)和目錄服務的運行時引擎的一部分。API可以被認為是由應用、程序、模塊等用來與系統(tǒng)程序(例如操作系統(tǒng)或數(shù)據(jù)庫 管理系統(tǒng)(DBMS))通信的語言或消息格式。API可以通過在程序中寫入函數(shù)調(diào)用來實現(xiàn),所 述函數(shù)調(diào)用提供了到特定子例程的鏈接以供執(zhí)行。因此,API意味著某個程序模塊或例程 已經(jīng)就位,或者被鏈接,以便執(zhí)行函數(shù)調(diào)用所請求的任務。事務型存儲器使得寫并行程序變得更容易,并且事務型存儲器的使用允許不同的 線程同時進行,從而獲得極高的處理效率。然而,目前程序員不得不在使用事務型存儲器時 做出困難的選擇。一種選擇是使用事務型存儲器應用程序接口(API)的單獨硬件實現(xiàn),其中程序員 負責跟蹤程序的硬件資源需求,并確保它們不超過可用的硬件資源。在這種方法下,事務型 存儲器(此后稱為TM)的可適用性和可利用性是受限的。一種替換方案是使用TM API的 單獨軟件實現(xiàn),這是很容易編程的(因為實際上沒有資源限制),但是軟件方法要忍受很高 的執(zhí)行時間開銷。進一步觀察事務型存儲器(TM),TM是從數(shù)據(jù)庫事務中產(chǎn)生的。在數(shù)據(jù)庫中, 事務是必須滿足被稱為ACID屬性的四種屬性的一組操作。第一種ACID屬性是原子性 (atomicity) 0原子性要求數(shù)據(jù)庫事務以要么全有要么全無的方式來執(zhí)行。事務可能因為 程序異常終止(abort)或者由于錯誤而異常終止。原子性要求事務的所有操作要么全都執(zhí) 行,要么全都不執(zhí)行。第二種ACID屬性是一致性。一致性要求如果數(shù)據(jù)庫在事務執(zhí)行前處 于一致狀態(tài)中,那么數(shù)據(jù)庫應當被保留在一致狀態(tài)中。第三種ACID屬性是隔離性。隔離性 屬性是指所有將要執(zhí)行的事務看上去必須是以某種串行順序來完成(即,它們應當是可串 行化的)。符合ACID要求的最后一種也是第四種屬性是持久性。持久性要求事務在機器崩 潰時也要存活下來。也就是說,事務在可被提交(commit)之前必須被寫入一個穩(wěn)定的存儲 設備(例如,盤)。然而,應當注意的是,并非TM的所有實現(xiàn)都要求事務滿足上述所有四種 屬性。例如,在一些實現(xiàn)中,持久性不是一種要求。除了遵從全部或部分上述ACID屬性之外,通常還要求利用事務型存儲器的事務 和數(shù)據(jù)庫支持并發(fā)執(zhí)行、死鎖自由度、以及非阻擋塞性。一般情況下,事務型存儲器系統(tǒng)支持非沖突事務的并發(fā)執(zhí)行。一些數(shù)據(jù)庫實現(xiàn)使用鎖(例如,二相鎖定)來實現(xiàn)這些類型的事務。因此,在這些情形中就可能發(fā)生死鎖。一旦檢測到死鎖,就簡單地異常終止某些事務 而從死鎖中恢復,藉此在事務型存儲器系統(tǒng)中實現(xiàn)死鎖自由度。非阻塞或者說無阻礙屬性 被用來在事務型存儲器系統(tǒng)中防止某一線程妨礙其他線程的前進。到目前為止,有兩種常見的方法來實現(xiàn)使用應用程序接口(API)的事務型存儲器訪問一種是純硬件實現(xiàn);另一種是純軟件實現(xiàn)。硬件實現(xiàn)是基于以下文獻中闡 述的多處理器體系結(jié)構(gòu),所述文獻名為“事務型存儲器對無鎖數(shù)據(jù)結(jié)構(gòu)的體系結(jié)構(gòu)支 持,,(MauriceHerlihy, J.Eliot B. Moss !Transactional Memory !Architectural Support for Lock-Free DataStructure,國際計算機及其應用協(xié)會(ISCA) 1993 :289_300)。這種方 法此后將被稱為“純硬件方法”。純硬件方法提供了一種有效并且易于使用的無鎖(lock-free)同步方法。純硬件 方法除了保證免受一般與基于鎖的同步方法相關(guān)聯(lián)的優(yōu)先級倒置、護送(convoying)和死 鎖等困擾外,還避免了與并行編程相關(guān)聯(lián)的很多精細校正問題。不幸的是,純硬件方法需要由程序員來進行小心的資源管理。這樣一來,純硬件方 法就很難用眾多更先進的處理器結(jié)構(gòu)來實現(xiàn)。一般地,要求軟件可在在處理器實現(xiàn)之間進 行移植,并且如此小心地在應用層上調(diào)節(jié)資源限制了純硬件方法的使用。此外,在實際操作 中,純硬件方法只使用事務型存儲器中的事務型緩存(cache),由于該資源有限,所以不能 保證處理線程完成,從而導致程序故障。另一種常見的用API來實現(xiàn)事務型存儲器訪問的方法是使用純軟件方法, 例如在以下文獻中所闡述的,該文獻名為“用于動態(tài)大小的數(shù)據(jù)結(jié)構(gòu)的軟件事務型存 儲 器,,(MauriceHerlihy, Victor Luchangco, Mark Moir, William N. Scherer III, Software Transactional Memoryfor Dynamic-Sized Data Structures, Principles of Distributed Computing (PODC) 2003。)這種方法此后將被稱為純軟件方法。純軟件方法的 效用在于程序員可以完全不管用來提供事務型存儲器語義的具體技術(shù),并且API特別易于 編程。不幸的是,在操作中,純軟件方法技術(shù)將導致因軟件開銷引起的很大減速。
發(fā)明內(nèi)容
本發(fā)明的實施方案涉及在計算機系統(tǒng)中事務型存儲器訪問的混合硬件軟件實現(xiàn)。 根據(jù)本發(fā)明的一個方面,提供了一種裝置,包括包括事務型緩存和常規(guī)緩存在內(nèi)的處理 器;和選擇第一模式和第二模式之一來實現(xiàn)事務型存儲器訪問的策略管理器;其中,在第 一模式中,所述事務型緩存被用來執(zhí)行讀寫存儲器操作,而在第二模式中,所述常規(guī)緩存被 用來執(zhí)行讀寫存儲器操作。根據(jù)本發(fā)明的另一個方面,提供了一種方法,包括選擇第一模式和第二模式之一 來實現(xiàn)事務型存儲器訪問;利用事務型緩存,在第一模式中執(zhí)行讀寫存儲器操作;以及利 用常規(guī)緩存,在第二模式中執(zhí)行讀寫存儲器操作。根據(jù)本發(fā)明的又一個方面,提供了一種其上存儲有指令的機器可讀介質(zhì),所述指 令在被機器執(zhí)行時使得所述機器執(zhí)行以下操作,其中包括選擇第一模式和第二模式之一 來實現(xiàn)事務型存儲器訪問;利用事務型緩存,在第一模式中執(zhí)行讀寫存儲器操作;以及利 用常規(guī)緩存,在第二模式中執(zhí)行讀寫存儲器操作。
根據(jù)本發(fā)明的再一個方面,提供了一種計算機系統(tǒng),包括包括事務型緩存和常規(guī)緩存在內(nèi)的處理器;和選擇第一模式或第二模式之一,以響應于在數(shù)據(jù)庫中訪問存儲器的 應用程序接口請求來實現(xiàn)事務型存儲器訪問的策略管理器;其中,在第一模式中,所述事務 型緩存被用來執(zhí)行讀寫存儲器操作,而在第二模式中,所述常規(guī)緩存被用來執(zhí)行讀寫存儲 器操作。
圖1是可以實現(xiàn)本發(fā)明實施方案的計算機系統(tǒng)配置的實施例的部分框圖。圖2根據(jù)本發(fā)明的一個實施方案提供了事務型存儲器對象的圖示。圖3是根據(jù)本發(fā)明的一個實施方案,圖示了實現(xiàn)硬件/軟件事務型存儲器事務的 指令集體系結(jié)構(gòu)的表。圖4A是根據(jù)本發(fā)明的一個實施方案,圖示了用于事務型存儲器訪問的混合硬件 軟件實現(xiàn)的過程的流程圖。圖4B是根據(jù)本發(fā)明的一個實施方案,具體圖示了監(jiān)視孤11事務的過程的流程圖。圖5是根據(jù)本發(fā)明的一個實施方案,圖示了利用硬件/軟件事務ISA來有效實現(xiàn) 鎖的過程的流程圖。
具體實施例方式在以下說明書部分中,將詳細描述本發(fā)明的各種實施方案。然而,將這些細節(jié)包括 進來是為了幫助理解本發(fā)明,并且描述用于實現(xiàn)本發(fā)明的示例性實施方案。這些細節(jié)不應 用來將本發(fā)明限制為所描述的具體實施方式
,因為在本發(fā)明的范圍內(nèi),其他變體和實施方 式也是可能的。此外,雖然闡述了大量細節(jié)以便提供對本發(fā)明實施方案的完整理解,但是本 領(lǐng)域的技術(shù)人員將清楚,這些具體細節(jié)不是實現(xiàn)本發(fā)明的實施方案所必需的。此外,諸如公 知的方法、數(shù)據(jù)類型、協(xié)議、過程、元件、電結(jié)構(gòu)和電路等細節(jié)都沒有詳細描述,也沒有以框 圖形式示出,以免模糊了本發(fā)明。此外,本發(fā)明的實施方案將在具體實施方式
中描述,但是 可以用硬件、軟件、固件。中間件或其組合來實現(xiàn)。本發(fā)明的實施方案提供了事務型存儲器(TM)訪問的混合硬件軟件實現(xiàn),例如和 應用程序接口(API) —起用來通過利用處理器的嵌入式硬件支持,然后如果硬件資源耗盡 的話,則轉(zhuǎn)向軟件方案,從而實現(xiàn)高性能的訪問。因而同時實現(xiàn)了硬件TM訪問和軟件TM訪 問的益處。在一個實施方案中,如下面所討論的,在多數(shù)常見情況下通過修改原始事務對象 以實現(xiàn)硬件TM輔助,從而大大減小與TM API軟件方法相關(guān)聯(lián)的性能損失。因此,利用嵌入 式硬件支持(例如,事務型存儲器緩存)來處理常見的情形以獲得高性能,如果出現(xiàn)問題, 那么在硬件資源耗盡的情況下轉(zhuǎn)向軟件TM方案。圖1示出了其中可以實現(xiàn)本發(fā)明的實施方案的計算機系統(tǒng)配置100的實施例的部 分框圖。系統(tǒng)配置100包括諸如中央處理單元(CPU)的至少一個處理器101、芯片組103、 系統(tǒng)存儲器件105、與一個或多個輸入/輸出(I/O)設備113接口的一個或多個接口 111、 以及網(wǎng)絡接口 107。芯片組103可以包括存儲器控制中心(MCH)和/或I/O控制中心。芯片組103可以是對于在處理器101和計算機系統(tǒng)100的其他組件之間的數(shù)據(jù)傳輸起到中心或內(nèi)核作用 的一個或多個集成電路芯片。此外,計算機系統(tǒng)100可以包括附加的組件(未示出),例如 其他處理器(例如,在多處理器系統(tǒng)中)、協(xié)處理器以及其他組件等一這僅僅是計算機系 統(tǒng)一個非常簡單的實施例。用在本說明書中,術(shù)語“處理器”或“CPU”是指能夠執(zhí)行指令序列,并且應被視為 包括但不限于通用微處理器、專用微處理器、專用集成電路(ASIC)、多媒體控制器、信號處 理器和微控制器等的任何機器。在一個實施方案中,CPU 101是能夠執(zhí)行Intel體系結(jié)構(gòu) 指令集的通用高速微處理器。例如,CPU 101可以是INTEL PENTIUM 系列處理器,例如 INTEL⑧體系結(jié)構(gòu)32位(IA-32)處理器(例如PENTIUM 4M)。CPU 101、芯片組103和其他組件經(jīng)由芯片組103來訪問系統(tǒng)存儲器件105。芯片組103例如與存儲器控制中心一起使用,可以服務于指向系統(tǒng)存儲器件105的存儲器事務。系統(tǒng)存儲器件105可以包括適于存儲數(shù)字信息的任何存儲器件,例如靜態(tài)隨機訪 問存儲器(SRAM)、動態(tài)隨機訪問存儲器(DRAM)、同步動態(tài)隨機訪問存儲器(SDRAM)和/或 雙數(shù)據(jù)率(DDR) SDRAM或DRAM等。因此,在一個實施方案中,系統(tǒng)存儲器件105包括易失性 存儲器。此外,系統(tǒng)存儲器件還可以包括非易失性存儲器,例如只讀存儲器(ROM)。此外,系統(tǒng)存儲器件105還可以包括其他存儲設備以及適當?shù)慕涌?,所述其他?儲設備例如是硬盤驅(qū)動器、軟盤驅(qū)動器、光盤驅(qū)動器等。另外,系統(tǒng)存儲器件105可以在非易失性存儲器中存儲硬件/軟件事務型存儲器 (TM)引擎程序,供處理器101運行來實現(xiàn)根據(jù)本發(fā)明實施方案的技術(shù),以由在處理器101上 實現(xiàn)的混合硬件/軟件TM引擎在計算機系統(tǒng)100內(nèi)實現(xiàn)事務型存儲器訪問和事務(此后, 術(shù)語“訪問”和“事務”可以互換使用)。系統(tǒng)存儲器件還可以包括專用于利用數(shù)據(jù)庫108來實現(xiàn)事務型存儲器事務的存 儲器區(qū)域。例如,數(shù)據(jù)庫108可以包括諸如企業(yè)數(shù)據(jù)庫、財務數(shù)據(jù)庫、規(guī)劃管理數(shù)據(jù)庫、目錄 服務之類的數(shù)據(jù)庫,還可以包括一般與事務型存儲器類事務一起使用的其他指針豐富型數(shù) 據(jù)結(jié)構(gòu)。此外,計算機系統(tǒng)100可以包括與I/O設備113接口的適當接口 111,所述I/O設 備113例如包括盤驅(qū)動器、監(jiān)視器、鍵盤、調(diào)制解調(diào)器、打印機、或任何其他類型的適當I/O設備。計算機系統(tǒng)100還可以包括使計算機系統(tǒng)100與網(wǎng)絡109相接口的網(wǎng)絡接口 107, 所述網(wǎng)絡109例如是局域網(wǎng)(LAN)、廣域網(wǎng)(WAN)、因特網(wǎng)等。圖1中的基本計算機系統(tǒng)配置100是可用來實現(xiàn)事務型存儲器訪問的混合硬件軟 件實施方案的一類計算機系統(tǒng)的實施例。本領(lǐng)域的技術(shù)人員將會理解,圖1中示例性的計 算機系統(tǒng)配置100僅僅是基本計算機系統(tǒng)的一個實施例,很多其他的類型和變體都是可能 的。此外,本領(lǐng)域的技術(shù)人員將會認識到,在圖1中示出的示例性環(huán)境并不想限制本發(fā)明的 實施方案。此外,應當明白,除了單個計算機系統(tǒng)配置100之外,或取而代之,多群或其他組 的(與計算機系統(tǒng)配置100類似或不同的)計算機可以用來實現(xiàn)本發(fā)明的實施方案。更具體地說,如圖1所示,利用事務型引擎118的處理器101可以實施混合硬件/ 軟件TM訪問方法。具體地說,事務型引擎118包括標準TM功能,加上由事務型引擎118實 現(xiàn)的增強型TM指令集體系結(jié)構(gòu)(ISA),后面將更詳細地討論,用以實現(xiàn)與混合硬件/軟件TM引擎有關(guān)的本發(fā)明的實施方案。另外,處理器101包括可以相互耦合在一起的事務型緩 存132和常規(guī)存儲器緩存134。正如后面將詳細討論的那樣,用事務型引擎118來實現(xiàn)的TM ISA使得混合硬件/ 軟件TM引擎能夠與例如API —同用來在“硬件模式”中使用硬件支持(例如,事務型緩存 132)而獲得高性能,并且在硬件緩存132耗盡的情況下轉(zhuǎn)向軟件方案(或“軟件模式”)。 按照這種方式,向存儲器105和數(shù)據(jù)庫108讀寫數(shù)據(jù)的API請求116被優(yōu)化。應當注意,此 后“硬件模式”是指主要利用事務型緩存132獲得高性能,而“軟件模式”是指主要利用常 規(guī)緩存134以及其他存儲器資源,這些資源的性能較慢,但卻是耗之不盡的。雖然將在具體實施方案中描述本發(fā)明的實施方式及其各種功能組件,但是應當明 白,這些方面和功能可以用硬件、軟件、固件、中間件或其組合來實現(xiàn)?,F(xiàn)在看圖2,圖2是根據(jù)本發(fā)明的一個實施方案,提供了事務型存儲器對象的圖示 說明的圖。如圖2所示,事務型存儲器(TM)對象202通過定位符204來標識。每個不是只 讀的共享數(shù)據(jù)對象都被放入TM對象202所示的容器。在事務期間,所有TM對象202在被 訪問前都被打開。這將對象與事務關(guān)聯(lián)起來,使得底層軟件系統(tǒng)可以檢測到事務之間的沖 突。典型地,線程用API打開對象,所述API指定了是否將以只讀方式訪問所述對象。一旦 對象已被打開,就可以對事務型對象內(nèi)的數(shù)據(jù)進行操縱。定位符204起到事務型對象定位符的作用。對于每個事務型對象而言,無論同時 訪問該對象的線程數(shù)量為多少,都只有一個事務型對象定位符是活動的。狀態(tài)列表206存 儲當前正在以軟件模式訪問對象的事務的狀態(tài)的存儲器地址。典型地,事務狀態(tài)是以下之 一ACTIVE、COMMITTED或ABORTED (214)。每個事務只有一個狀態(tài)。處于硬件模式的事務也 具有狀態(tài),但是它們從不出現(xiàn)在狀態(tài)列表206中,下面將會討論。TM定位符204還存儲對象210的新版本的內(nèi)容218和對象212的舊版本的內(nèi)容 220的存儲器地址。當事務打開TM對象以獲取內(nèi)容的最新版本時,它獲得的版本取決于前 面打開對象以寫入(即,不是只讀的)的最后一個事務的狀態(tài)。如果最后寫入者的狀態(tài)214 是ACTIVE或ABORTED,那么正在打開對象的事務將接收到舊版本220。如果最后寫入者的 狀態(tài)214是COMMITTED,則正在打開對象的事務將接收到新版本218。當軟件模式的事務打開TM對象202以寫入時,它將最新版本(如上面定義的)的 地址放入TM定位符對象204的舊對象字段212。事務制作最新內(nèi)容的拷貝,并將這一拷貝 的地址放入TM定位符204的新對象字段210。在由軟件模式的事務提交之前,對象的新拷 貝不被任何其他線程訪問,因此是局部的。一旦由事務提交,TM對象的新版本就變?yōu)楣蚕?對象,并且不能再被修改。當硬件模式的事務打開TM對象202以寫入時,它不制作內(nèi)容的 拷貝。硬件模式的事務直接修改對象的最新版本,它依賴硬件來緩沖推測式的寫操作,后面 將討論。TM對象202還包括模式字段208,其指示了 TM對象202是處于讀模式還是寫模式。 當軟件模式的事務打開處于讀模式或?qū)懩J?08的TM對象時,它將其狀態(tài)變量214的地址 加入狀態(tài)列表206。這允許其他(處于軟件模式和硬件模式的)線程異常終止所述事務, 并且消除一度在個體對象上完成驗證操作的需要??梢詥渭兺ㄟ^檢查保持事務狀態(tài)(狀態(tài) 214)的一個位置來驗證該事務。當事務打開TM對象202并且它的模式字段208被設置為 只讀時,如果所述對象正在以只讀模式打開,則不需要明確地異常終止任何事務;然而,如果所述對象正在以寫模式打開,則狀態(tài)列表206中的所有事務在它們的狀態(tài)214為ACTIVE 時都需要被異常終止。當事務打開TM對象202并且模式字段208已被設置為由狀態(tài)列表 206中的單個事務(當前寫入者)設置來寫時,如果該單個事務的值是ACTIVE214,則該事 務需要被異常終止,無論TM對象202正在以只讀模式還是以寫模式打開。在這個實現(xiàn)中,TM對象202在給定的時間上只接納單個讀出者或單個寫入者。在 一些實施方案中,可以通過在狀態(tài)列表206中允許多個事務字段存在,從而接納并發(fā)的讀 出者,藉此來減緩這種限制。這允許在任何給定的時間上有多個(但卻是受限的)事務打 開對象??梢灾饌€對象地來設置這一限制。正如將會討論的,TM對象202使得事務型存儲 器事務更傾向于通過硬件/軟件混合方案來實現(xiàn)。本發(fā)明的實施方案提供了允許以“硬件模式”或“軟件模式”來實現(xiàn)事務型存儲器 事務的硬件/軟件事務指令集體系結(jié)構(gòu)(ISA)。當以硬件描述執(zhí)行事務型存儲器訪問時, 主要利用事務型緩存132(圖1)來完成。按照這種方式,可以向事務提供非常高的性能,然 而,硬件資源有時會耗盡。此外,在硬件模式中,處理器需要跟蹤被訪問的所有存儲器位置。 在硬件模式中,同時執(zhí)行的事務之間的沖突被檢測出來,并且發(fā)生沖突的事務之一被異常 終止。一旦異常終止,在該事務期間被寫入的數(shù)據(jù)就被無效,并且在提交時,該數(shù)據(jù)必須原 子地是存儲器狀態(tài)的一部分。更具體地說,本發(fā)明的實施方案涉及計算機系統(tǒng)中事務型存儲器訪問的混合硬件 軟件實現(xiàn)。包括事務型緩存和常規(guī)緩存在內(nèi)的處理器被用在計算機系統(tǒng)中。策略管理器選 擇第一模式(此后稱為“硬件模式”)或第二模式(此后稱為“軟件模式”)之一來響應于 訪問存儲器的應用程序接口(API)請求而實現(xiàn)事務型存儲器訪問。在硬件模式中,事務型 緩存被用來執(zhí)行讀寫存儲器操作,在軟件模式中,常規(guī)緩存被用來執(zhí)行大多數(shù)讀寫存儲器 操作(只有一個位置被存儲在事務型緩存中,下面將討論)。策略管理器首先選擇硬件模式,以在事務型緩存中使用事務型讀寫指令來執(zhí)行讀 寫操作。如果有足夠的存儲器資源存在于事務型緩存中用于執(zhí)行讀寫操作,則發(fā)出提交指 令以完成事務型存儲器訪問。然而,如果在事務型緩存中檢測到?jīng)_突的事務型讀寫操作,或 者檢測到?jīng)]有足夠的存儲器資源,則發(fā)出異常終止指令。如果對于第一模式發(fā)出了異常終 止指令,則策略管理器可以選擇軟件模式,在該模式中,在常規(guī)緩存中使用常規(guī)的讀寫指令 來執(zhí)行常規(guī)的讀寫操作。當純粹用硬件來實現(xiàn)事務型存儲器事務時,對于單個事務可以訪問的存儲器位置 有數(shù)量上的限制。如果事務超過了這個限制,根據(jù)本發(fā)明的一個實施方案,該事務以“軟件 模式”重新啟動。下面將會討論,當硬件事務被無效時,該線程所執(zhí)行的下一存儲器操作將 引發(fā)例外。這可以防止被無效的硬件事務繼續(xù)進行并破壞存儲器。在發(fā)生例外并進入軟件 模式之后,主要由常規(guī)緩存及其他存儲器資源(見圖1)來執(zhí)行事務型存儲器訪問。為了實施事務型存儲器訪問的這種混合硬件軟件實現(xiàn)方案,本發(fā)明的實施方案提 供了新穎的、非顯而易見的事務型存儲器指令集體系結(jié)構(gòu)(ISA)。參考圖3,圖3是根據(jù)本 發(fā)明的一個實施方案,圖示了實現(xiàn)硬件/軟件事務型存儲器事務的指令集的表。如圖3所示,硬件/軟件事務ISA 300包括具有兩種模式的開始事務302?!伴_ 始事務(全部)” (BeginTransactionAll)用于指定“硬件模式”事務,而“開始事務(選 擇)”(Begin Transaction Select)被用于“軟件模式”事務。具體地說,開始事務指令302標記事務的啟動。用于“硬件模式”的“開始事務(全部)”默認使所有的存儲器訪問成為 事務型的(例如,使用事務型緩存),而“開始事務(選擇)”只完成被明確指定為事務型的 存儲器操作。應當注意,硬件事務不能被嵌套(與基于軟件的事務相反)。因此,在前一事務已 被提交或異常終止之前,新的硬件事務不能開始。通過執(zhí)行異常終止事務指令306或者在 遇到數(shù)據(jù)沖突時,異常終止一個事務,下面將會討論。提交指令304被用來標記事務的結(jié)束,并允許包括事務型緩存在內(nèi)的事務型存儲 器的所有內(nèi)容成為體系結(jié)構(gòu)性的。具體地說,允許事務型存儲來修改系統(tǒng)狀態(tài),并且事務型 加載被從事務型緩存中清除出去。如果在先指令前面未被啟動,則無法讓提交指令開始。異常終止事務指令306異常終止當前事務,并丟棄先前被緩沖的所有事務型寫數(shù) 據(jù)。如果先前沒有任何事務被啟動,那么將發(fā)生錯誤。此外,硬件/軟件事務ISA 300還包括加載/存儲事務指令308,用以執(zhí)行事務型 存儲器加載/存儲操作。硬件/軟件事務ISA 300此外還包括加載/存儲常規(guī)指令,用以執(zhí)行非事務型的 存儲器加載/存儲操作。還提供了檢查點和恢復狀態(tài)指令312。檢查點指令對當前寄存器狀態(tài)進行檢查點 操作并存入存儲器?;謴椭噶顝拇鎯ζ髦谢謴彤斍凹拇嫫鳡顟B(tài)。硬件/軟件事務ISA 300還包括孤兒事務例外指令314。一個事務如果不能提交 的話,就被定義為孤兒事務。例如,如果另一個處理已對它已進行事務型讀的位置進行寫操 作,那么這就可能發(fā)生。在這種情況下,孤兒事務可以發(fā)現(xiàn)存儲器處于不一致狀態(tài)中,并可 以讓程序引發(fā)例外,例如除以零,或者訪問超范圍的存儲器地址。更壞的是,它可能將錯誤 的值寫入有效的存儲器位置,并破壞系統(tǒng)狀態(tài)。孤兒事務例外指令避免了這些復雜問題。具體地說,在某一線程的事務已變?yōu)楣?兒后,由該線程執(zhí)行的第一加載指令將生成孤兒事務例外指令314,后面將會討論?,F(xiàn)在看圖4A,圖4A是根據(jù)本發(fā)明的一個實施方案,圖示了用于事務型存儲器訪問 的混合硬件軟件實現(xiàn)的過程400的流程圖。過程400利用了以下事實,S卩,當針對大多數(shù)正 常情形用“硬件模式”來實現(xiàn)(例如,主要利用處理器的事務型緩存)時,事務型存儲器訪 問是以非??焖俨⑶易顑?yōu)的方式來完成的。然而,該過程也考慮到,當在硬件模式下由處理 器來實現(xiàn)時,事務也許不能完成,因此,它返回到“軟件模式”中,軟件模式總能保證完成事 務。相反的是,“軟件模式”主要使用常規(guī)緩存和其他存儲器資源。下面將會討論,當硬件事 務被無效時,下一存儲器操作引發(fā)孤兒事務例外,其防止被無效的硬件事務繼續(xù)進行并破 壞存儲器。具體閱讀過程400,在框402,事務(例如,從API)開始。在框404,策略管理器選擇硬件模式或軟件模式之一來開始所述事務。在一個實施方案中,首先選擇硬件模式以(例 如,經(jīng)由事務型緩存)利用快速硬件處理的優(yōu)勢,而軟件模式可以用作后備。在選擇了硬件模式之后,發(fā)起來自硬件/軟件事務ISA 300的Begin Transaction All指令302,使得模式被設置為硬件。進一步地,來自硬件/軟件事務ISA的加載事務指 令308也被發(fā)起,以加載事務型存儲器狀態(tài)。接著,在框408,如前所述,使用事務型讀寫操 作,在適當之處對TM對象執(zhí)行事務的讀寫操作。如果硬件事務可以完成(例如,如果有足夠的硬件資源可以用事務型緩存來完成事務),那么生成提交事務指令,并且如框410所示, 狀態(tài)被設置為提交,并且事務被提交。對事務的處理就這樣被提交了(框415)。然而,如果事務不能用硬件來提交(例如,在事務型緩存中沒 有足夠的硬件資 源),則發(fā)起異常終止事務指令,并且狀態(tài)被設置為異常終止,并且事務被異常終止(框 420)。于是,過程被異常終止(框422)。當事務被異常終止時,生成孤兒事務例外指令424。這可能是由于沖突的事務型 讀寫操作或硬件資源不夠引起的。在任一種情形中,事務型存儲器被清理,并且事務被重試 (框426)。一般,如果在硬件模式中發(fā)生故障,那么對于下一次嘗試,策略管理器將選擇軟 件模式。簡要地說,將更詳細地討論提交和異常終止指令。具體地說,如前所述,可以使用 事務型緩存來實現(xiàn)事務型存儲器。例如,如圖1所示,處理器101可以包括事務型緩存132 和常規(guī)緩存134。使用來自硬件/軟件事務ISA 300的加載和存儲事務308進行讀寫的所 有位置都被存儲在事務型緩存中。所有的事務型寫都保留在事務型緩存中,直到事務提交 為止。如果事務型緩存中曾被所述事務讀取的位置被另一個線程寫,那么所述事務變成一 個孤兒,并且最終將被異常終止。提交事務指令304標記事務的結(jié)束,并且使得事務型緩存的所有內(nèi)容變?yōu)轶w系結(jié) 構(gòu)性的(例如,事務型存儲被允許修改系統(tǒng)狀態(tài),并且事務型加載被從事務型緩存中清除 出去)。如果某一事務不能提交的話,它就被定義為一個孤兒。舉例來說,一個事務可能成 為孤兒,如果另一個線程寫它讀過的位置的話。孤兒事務可以發(fā)現(xiàn)存儲器處于不一致狀態(tài) 中,并可以讓處理器引發(fā)例外,例如除以零,或者訪問范圍以外的存儲器位置。更壞的是,它 有可能將錯誤的值寫入有效的存儲器位置,并破壞系統(tǒng)狀態(tài)。因此,當這發(fā)生時,就發(fā)起孤 兒事務例外指令314,并使動作異常終止422。因此,過程400和硬件/軟件事務ISA 300允許例外被異步使用,以通知一個線程 它正在執(zhí)行的事務是否已變?yōu)楣聝骸R坏┦聞找炎優(yōu)楣聝?,則讓所述線程異常終止,并且不 允許該線程使用從來自存儲器的新加載操作所返回的數(shù)據(jù)。為了完成這一目標,在每次加載上使用特殊的例外。具體地說,在某一線程成為孤 兒后的第一次加載在該加載上強制一個例外,并且該線程被異常終止。然后,例外處理者 (handler)負責分支回到事務的開端,這可以如前面的清理和重試框426所述來完成。因 此,用異常終止事務指令306實現(xiàn)的用戶例外處理者負責異常終止事務,展開堆棧,以及利 用清理和重試426來重新啟動被異常終止的事務。簡要參考圖4B,圖4B是具體圖示了監(jiān)視孤兒事務的過程448的流程圖。在框450, 在發(fā)生加載事務后,狀態(tài)標記被設置為事務有效。接著,過程448監(jiān)視由另一個處理器或線 程引發(fā)的沖突(框452)。如果在框454沒有檢測到?jīng)_突,則繼續(xù)處理(框456)。然而,如 果在框454檢測到?jīng)_突,則狀態(tài)標記被重置為事務無效,用以標志該事務已被異常終止(框 460)。在第一次加載事務后的所有加載都檢查狀態(tài)標記,以在提交(例如,將數(shù)據(jù)返回處理 器)前驗證它被設置為事務有效。另一方面,如果狀態(tài)標記被重置,則不允許所述加載被提 交,并且發(fā)生如前所述的異常終止過程。返回圖4A,假設硬件事務由于發(fā)生沖突的事務讀寫操作或硬件資源耗盡而已被異常終止,那么策略管理器在框404處可以選擇“軟件模式”來確保事務的完成。在框430,從 硬件/軟件事務ISA 300發(fā)起B(yǎng)egin Transaction Select指令302,使得模式被設置為軟 件,并且事務狀態(tài)被加載。應當注意,當運行在軟件模式時,處理器并不將所有的存儲器訪 問都視為事務型的。對于每個事務,只有一個位置是以事務型方式(例如,使用加載事務指 令308)來訪問的——即,包含所述事務的狀態(tài)的位置。接著,在框432,通過拷貝并使用常規(guī)讀寫操作(例如,加載/存儲常規(guī)指令310), 對事務執(zhí)行讀寫操作。此外,使用常規(guī)緩存和其他存儲器資源,而不是事務型緩存。如果對 事務的讀寫操作可以執(zhí)行的話,則發(fā)起提交事務指令304,并狀態(tài)被設置為提交(框434)。 于是,對存儲器的讀寫操作被提交(框415)。另一方面,如果檢測到?jīng)_突的事務型寫操作,則過程可以被異常終止,并 且狀態(tài)被 設置為異常終止(框436)。于是,事務在框422處被異常終止,并且基于發(fā)生沖突的寫事務 的例外438,處于軟件模式的過程400可以在軟件模式中再次清理并重試(框440)事務型 操作。在本發(fā)明的另一個實施方案中,前面所討論的硬件/軟件事務ISA 300可以用來 有效地實現(xiàn)鎖。簡要地說,當調(diào)用鎖獲取函數(shù)時,處理器試圖使用事務型存儲器擴展,以硬 件模式來執(zhí)行臨界區(qū)(例如,在鎖獲取和接下來的鎖釋放之間的代碼),并且如果失敗的 話,過程將轉(zhuǎn)回到軟件模式。有三種可能的原因致使臨界區(qū)可能無法以硬件模式完成。例如,可能發(fā)生資源耗 盡,其中用來保存事務型狀態(tài)的事務型緩存溢出?;蛘撸赡艽嬖跀?shù)據(jù)上的沖突。例如,如 果兩個線程想要以硬件模式執(zhí)行它們的臨界區(qū),并且試圖對同一數(shù)據(jù)執(zhí)行沖突的操作,這 也可能引發(fā)故障。舉例來說,一個線程可能要寫另一個線程已經(jīng)讀過的緩存行。另外,在向 軟件模式轉(zhuǎn)移時也可能發(fā)生故障。例如,如果某一線程在軟件模式中奪取了鎖,那么所有需 要這個鎖并且處于臨界區(qū)中間的其他線程都將被異常終止。應當注意,對于任何鎖,在硬件模式中,多個線程可以處于臨界區(qū)中,或者在軟件 模式中,單個線程可以正在持有該鎖。為了在硬件模式中進入鎖的臨界區(qū),線程進行檢查以 確信鎖是可獲得的,并且進入臨界區(qū)而不將其標記為鎖定。為了在軟件模式中進入鎖的臨 界區(qū),線程進行檢查以確信鎖是可獲得的,并將其標記為鎖定。這將在硬件模式中異常終止 任何已處于臨界區(qū)中的線程,并將在硬件或軟件模式中阻止任何新的線程進入臨界區(qū)??磮D5,圖5是根據(jù)本發(fā)明的一個實施方案,圖示了使用硬件/軟件事務ISA 300 來有效實現(xiàn)鎖的過程500的流程圖。在框502,鎖被獲取或發(fā)起。在框504,策略管理器選 擇一種模式。典型地,如前所述,首先選擇硬件模式,從而嘗試最有效地完成事務型存儲器 事務。如果硬件模式無法完成事務的話,則轉(zhuǎn)向軟件模式。接著,在框506,鎖被開啟,并且模式被事務ISA 300的“開始事務(全部)”指令 302設置為硬件。在框508,使用事務型讀寫操作(例如,加載/存儲事務308),對所述事務 執(zhí)行讀寫操作(例如,在事務型緩存中)。如果事務完成,則鎖被釋放(框510),并且事務 被提交。然而,如果存在因沖突的事務型讀寫操作520引起的例外,則鎖被異常終止。然后 發(fā)起清理和重試操作(框522),并且以軟件模式來嘗試鎖。因此,在框504,策略管理器選 擇軟件模式。
在這種情形中,鎖以軟件模式開始,并且鎖的狀態(tài)被設置為鎖定(框530)。接著 (框532),使用常規(guī)讀寫操作(例如,加載和存儲常規(guī)指令310)來執(zhí)行讀寫操作。在軟件 模式中,鎖一般總是被完成,然后鎖被釋放,并且鎖定狀態(tài)被設置為解鎖(在框534)。這結(jié) 束了過程500。為了獲得進一步的性能改進,處理器可以執(zhí)行沖突解決。具體地說,當檢測到數(shù)據(jù)沖突時,處理器可以解決沖突,并允許事務之一完成。剩下的發(fā)生沖突的事務可以被推遲或 異常終止,這取決于它們曾讀取的存儲器位置中是否有哪一個位置已被另一個線程寫入。 此外,當如前所述已發(fā)生例外520 (例如,孤兒事務例外)時,可以記錄事務是否因資源耗盡 或因數(shù)據(jù)沖突而成為孤兒。然后,例外處理器可被修改為只有當資源耗盡時才返回軟件模 式。當只發(fā)生了數(shù)據(jù)沖突時,可以采用以下修改,即再次以硬件模式來重試事務,而不是自 動切換到軟件模式。雖然已在具體實施方案中描述了本發(fā)明的實施方案及其各種功能組件,但是應當 理解,可以用硬件、軟件、固件、中間件或它們的組合來實現(xiàn)本發(fā)明的實施方案,并且本發(fā)明 的實施方案可以用在多種系統(tǒng)、子系統(tǒng)、組件或其子組件中。當用軟件或固件來實現(xiàn)時,本 發(fā)明的單元是用于執(zhí)行必要任務的指令/代碼段。程序或代碼段可被存儲在機器可讀介質(zhì) (例如,處理器可讀介質(zhì)或計算機程序產(chǎn)品)中,或者在傳輸介質(zhì)或通信鏈路中,通過包含 在載波或由載波調(diào)制的信號中的計算機數(shù)據(jù)信號來傳輸。機器可讀介質(zhì)可以包括可存儲或 傳輸機器(例如,處理器、計算機等)可讀并可執(zhí)行形式的信息的任何介質(zhì)。機器可讀介質(zhì) 的例子包括電子線路、半導體存儲器件、ROM、閃存、可擦除可編程ROM(EPROM)、軟盤、壓縮盤 (⑶-ROM)、光盤、硬盤、光纖介質(zhì)、射頻(RF)鏈路等。計算機數(shù)據(jù)信號可以包括可在傳輸介 質(zhì)上傳播的任何信號,所述傳輸介質(zhì)例如是電子網(wǎng)絡信道、光纖、空氣、電磁介質(zhì)、射頻(RF) 鏈路、條形碼等。代碼段可以經(jīng)由因特網(wǎng)、企業(yè)內(nèi)部網(wǎng)等網(wǎng)絡來下載。此外,雖然已參考示意性的實施方案描述了本發(fā)明的實施方式,但是這些描述不 想被理解為限制性的。對本發(fā)明實施方案所屬技術(shù)領(lǐng)域的技術(shù)人員來說很清楚的對示意性 實施方案的各種修改、以及本發(fā)明的其他實施方案都被視為落入本發(fā)明的精神和范圍內(nèi)。
權(quán)利要求
一種裝置,包括包括事務型緩存和常規(guī)緩存在內(nèi)的處理器;以及選擇第一模式和第二模式之一來實現(xiàn)事務型存儲器訪問的策略管理器;其中,在第一模式中,所述事務型緩存被用來執(zhí)行讀寫存儲器操作,而在第二模式中,所述常規(guī)緩存被用來執(zhí)行讀寫存儲器操作。
2.如權(quán)利要求1所述的裝置,其中,所述策略管理器選擇第一模式,以在所述事務型緩 存中使用事務型讀寫指令來執(zhí)行讀寫操作。
3.如權(quán)利要求2所述的裝置,其中,如果在所述事務型緩存中存在足夠的存儲器資源 用于執(zhí)行讀寫操作,則發(fā)出提交指令,以完成所述事務型存儲器訪問。
4.如權(quán)利要求2所述的裝置,其中,如果檢測到發(fā)生沖突的事務型讀寫操作,則發(fā)出異 常終止指令。
5.如權(quán)利要求2所述的裝置,其中,如果在所述事務型緩存中檢測不到足夠的存儲器 資源,則發(fā)出異常終止指令。
6.如權(quán)利要求5所述的裝置,其中,如果對于第一模式發(fā)出了異常終止指令,則所述策 略管理器選擇第二模式,在第二模式中,在所述常規(guī)緩存中使用常規(guī)讀寫指令來執(zhí)行常規(guī) 讀寫操作。
7.如權(quán)利要求6所述的裝置,其中,運行在第二模式中,如果檢測到發(fā)生沖突的寫事 務,則發(fā)出異常終止指令。
8.如權(quán)利要求6所述的裝置,其中,如果未檢測到發(fā)生沖突的寫事務,則發(fā)出提交指令 以完成所述存儲器訪問。
9.一種方法,包括選擇第一模式和第二模式之一來實現(xiàn)事務型存儲器訪問;利用事務型緩存,在第一模式中執(zhí)行讀寫存儲器操作;以及利用常規(guī)緩存,在第二模式中執(zhí)行讀寫存儲器操作。
10.如權(quán)利要求9所述的方法,還包括選擇所述第一模式;以及使用事務型讀寫指令,在所述事務型緩存中執(zhí)行讀寫操作。
11.如權(quán)利要求10所述的方法,其中,如果在所述事務型緩存中存在足夠的存儲器資 源用于執(zhí)行讀寫操作,則還包括發(fā)出提交指令,以完成所述事務型存儲器訪問。
12.如權(quán)利要求10所述的方法,其中,如果檢測到發(fā)生沖突的事務型讀寫操作,則還包 括發(fā)出異常終止指令。
13.如權(quán)利要求10所述的方法,其中,如果在所述事務型緩存中檢測不到足夠的存儲 器資源,則還包括發(fā)出異常終止指令。
14.如權(quán)利要求13所述的方法,其中,如果在第一模式中發(fā)出了異常終止指令,那么還 包括選擇第二模式;以及使用常規(guī)讀寫指令,在所述常規(guī)緩存中執(zhí)行常規(guī)讀寫操作。
15.如權(quán)利要求14所述的方法,其中,當運行在第二模式中時,如果檢測到發(fā)生沖突的 寫事務,則還包括發(fā)出異常終止指令。
16.如權(quán)利要求14所述的方法,其中,如果未檢測到發(fā)生沖突的寫事務,則還包括發(fā) 出提交指令以完成所述存儲器訪問。
17.一種其上存儲有指令的機器可讀介質(zhì),所述指令在被機器執(zhí)行時使得所述機器執(zhí) 行以下操作,其中包括選擇第一模式和第二模式之一來實現(xiàn)事務型存儲器訪問;利用事務型緩存,在第一模式中執(zhí)行讀寫存儲器操作;以及利用常規(guī)緩存,在第二模式中執(zhí)行讀寫存儲器操作。
18.如權(quán)利要求17所述的機器可讀介質(zhì),還包括使得所述機器執(zhí)行以下操作的指令實現(xiàn)所述第一模式;以及使用事務型讀寫指令,在所述事務型緩存中執(zhí)行讀寫操作。
19.如權(quán)利要求18所述的機器可讀介質(zhì),還包括使得所述機器執(zhí)行以下操作的指令 如果在所述事務型緩存中存在足夠的存儲器資源用于執(zhí)行讀寫操作,則發(fā)出提交指令,以 完成所述事務型存儲器訪問。
20.如權(quán)利要求18所述的機器可讀介質(zhì),還包括使得所述機器執(zhí)行以下操作的指令 如果檢測到發(fā)生沖突的事務型讀寫操作,則發(fā)出異常終止指令。
21.如權(quán)利要求18所述的機器可讀介質(zhì),還包括使得所述機器執(zhí)行以下操作的指令 如果在所述事務型緩存中檢測不到足夠的存儲器資源,則發(fā)出異常終止指令。
22.如權(quán)利要求21所述的機器可讀介質(zhì),其中,如果在第一模式中發(fā)出了異常終止指 令,則還包括使得所述機器執(zhí)行以下操作的指令選擇第二模式;以及使用常規(guī)讀寫指令, 在所述常規(guī)緩存中執(zhí)行常規(guī)讀寫操作。
23.如權(quán)利要求22所述的機器可讀介質(zhì),當運行在第二模式中,還包括使得所述機器 執(zhí)行以下操作的指令如果檢測到發(fā)生沖突的寫事務,則發(fā)出異常終止指令。
24.如權(quán)利要求22所述的機器可讀介質(zhì),還包括使得所述機器執(zhí)行以下操作的指令 如果未檢測到發(fā)生沖突的寫事務,則發(fā)出提交指令以完成所述存儲器訪問。
25.一種計算機系統(tǒng),包括包括事務型緩存和常規(guī)緩存在內(nèi)的處理器;以及選擇第一模式或第二模式之一,以響應于在數(shù)據(jù)庫中訪問存儲器的應用程序接口請求 來實現(xiàn)事務型存儲器訪問的策略管理器;其中,在第一模式中,所述事務型緩存被用來執(zhí)行讀寫存儲器操作,而在第二模式中, 所述常規(guī)緩存被用來執(zhí)行讀寫存儲器操作。
26.如權(quán)利要求25所述的計算機系統(tǒng),其中,所述策略管理器選擇第一模式,以在所述 事務型緩存中使用事務型讀寫指令來執(zhí)行讀寫操作。
27.如權(quán)利要求26所述的計算機系統(tǒng),其中,如果在所述事務型緩存中存在足夠的存 儲器資源用于執(zhí)行讀寫操作,則發(fā)出提交指令,以完成所述事務型存儲器訪問。
28.如權(quán)利要求26所述的計算機系統(tǒng),其中,如果檢測到發(fā)生沖突的事務型讀寫操作, 則發(fā)出異常終止指令。
29.如權(quán)利要求26所述的計算機系統(tǒng),其中,如果在所述事務型緩存中檢測不到足夠 的存儲器資源,則發(fā)出異常終止指令。
30.如權(quán)利要求29所述的計算機系統(tǒng),其中,如果對于第一模式發(fā)出了異常終止指令,則所述策略管理器選擇第二模式,在第二模式中,在所述常規(guī)緩存中使用常規(guī)讀寫指令來 執(zhí)行常規(guī)讀寫操作。
31.如權(quán)利要求30所述的計算機系統(tǒng),其中,運行在第二模式中,如果檢測到發(fā)生沖突 的寫事務,則發(fā)出異常終止指令。
32.如權(quán)利要求30所述的計算機系統(tǒng),其中,如果未檢測到發(fā)生沖突的寫事務,則發(fā)出 提交指令以完成所述存儲器訪問。
全文摘要
本發(fā)明的實施方案涉及在計算機系統(tǒng)中事務型存儲器訪問的混合硬件軟件實現(xiàn)。包括事務型緩存和常規(guī)緩存在內(nèi)的處理器被用在包括策略管理器的計算機系統(tǒng)中,所述策略管理器選擇第一模式(硬件模式)和第二模式(軟件模式)之一來實現(xiàn)事務型存儲器訪問。在硬件模式中,事務型緩存被用來執(zhí)行讀寫存儲器操作,在軟件模式中,常規(guī)緩存被用來執(zhí)行讀寫存儲器操作。
文檔編號G06F12/02GK101807169SQ201010144199
公開日2010年8月18日 申請日期2005年9月30日 優(yōu)先權(quán)日2004年9月30日
發(fā)明者克里斯托弗·休斯, 安東尼·納古炎, 帕薩·肯杜, 桑吉夫·庫馬 申請人:英特爾公司