本發(fā)明總體上涉及請求及響應(yīng)協(xié)議,且更具體言之,涉及指示事務(wù)狀態(tài)的一致性協(xié)議增強(qiáng)。
芯片上的中央處理單元(CPU)核心的數(shù)目及連接至共享存儲器的CPU核心的數(shù)目持續(xù)顯著地增長以支持不斷增長的工作負(fù)載容量需求。合作以處理相同工作負(fù)載的CPU的增加數(shù)目對軟件伸縮性施予顯著負(fù)擔(dān);舉例而言,受到傳統(tǒng)旗號(semaphore)保護(hù)的共享隊(duì)列或數(shù)據(jù)結(jié)構(gòu)變?yōu)闊狳c(diǎn)且導(dǎo)致次線性n路定標(biāo)曲線。傳統(tǒng)上,此情形已通過在軟件中實(shí)施較細(xì)粒度鎖定且借助硬件中的較低延時(shí)/較高帶寬互連來應(yīng)對。實(shí)施細(xì)粒度鎖定以改進(jìn)軟件伸縮性可以是非常復(fù)雜且易出錯(cuò)的,且在現(xiàn)今的CPU頻率下,硬件互連的延時(shí)受到芯片及系統(tǒng)的物理尺寸限制且受到光速限制。
已引入硬件事務(wù)存儲器(HTM,或在此論述中簡單地為TM),其中指令組(被稱為事務(wù))在存儲器中的數(shù)據(jù)結(jié)構(gòu)上以原子方式操作,如由其他中央處理單元(CPU)及I/O子系統(tǒng)所看到的(原子操作在其他文獻(xiàn)中亦被稱為塊并行或串行化)。事務(wù)在不獲得鎖的情況下樂觀地執(zhí)行,但在執(zhí)行事務(wù)對存儲器位置的操作與對同一存儲器位置的另一操作相沖突的情況下可能需要中止及重試事務(wù)執(zhí)行。先前,已提議軟件事務(wù)存儲器實(shí)施方式以支持軟件事務(wù)存儲器(TM)。
技術(shù)實(shí)現(xiàn)要素:
各實(shí)施例包括一種用于實(shí)施一致性協(xié)議的方法、系統(tǒng)及計(jì)算機(jī)程序產(chǎn)品。將針對數(shù)據(jù)的請求發(fā)送至遠(yuǎn)程處理器。處理器自所述遠(yuǎn)程處理器接收響應(yīng),且所述響應(yīng)具有所述遠(yuǎn)程處理器上的遠(yuǎn)程事務(wù)的事務(wù)狀態(tài)。所述處理器將所述遠(yuǎn)程處理器上的所述遠(yuǎn)程事務(wù)的所述事務(wù)狀態(tài)添加至本地事務(wù)干擾追蹤表中。
附圖說明
當(dāng)本說明書完結(jié)時(shí)在權(quán)利要求中特定地指出且清楚地要求保護(hù)被視為實(shí)施例的主題。實(shí)施例的前述及其他特征及優(yōu)點(diǎn)自結(jié)合附圖而進(jìn)行的以下詳細(xì)描述顯而易見,在附圖中:
圖1描繪根據(jù)一個(gè)實(shí)施例的實(shí)例多處理器(CPU)/核心事務(wù)存儲器環(huán)境的示意性方塊圖;
圖2描繪說明根據(jù)一個(gè)實(shí)施例的事務(wù)處理器的示意性方塊圖;
圖3描繪根據(jù)一個(gè)實(shí)施例的圖1及圖2所示的事務(wù)處理器(CPU)的例示性組件的示意性方塊圖;
圖4描繪用于允許根據(jù)一個(gè)實(shí)施例的硬件事務(wù)存儲器環(huán)境中的請求及響應(yīng)的具有作為圖1至圖3所示的多處理器系統(tǒng)的組件的計(jì)算機(jī)系統(tǒng)的示意性方塊圖;
圖5描繪根據(jù)一個(gè)實(shí)施例的例示性協(xié)議請求及響應(yīng);
圖6描繪根據(jù)一個(gè)實(shí)施例的例示性協(xié)議請求;
圖7描繪根據(jù)一個(gè)實(shí)施例的由做出針對數(shù)據(jù)的請求的處理器進(jìn)行的協(xié)議請求產(chǎn)生的流程圖;
圖8描繪根據(jù)一個(gè)實(shí)施例的由接收請求且發(fā)送響應(yīng)的接收/遠(yuǎn)程處理器進(jìn)行的請求處置的流程圖;
圖9描繪說明根據(jù)一個(gè)實(shí)施例的由處理器進(jìn)行的事務(wù)處置的流程圖;
圖10描繪根據(jù)一個(gè)實(shí)施例的協(xié)議請求及新協(xié)議響應(yīng);
圖11描繪根據(jù)一個(gè)實(shí)施例的協(xié)議寫入請求及新響應(yīng);
圖12描繪說明根據(jù)一個(gè)實(shí)施例的由接收請求的接收/遠(yuǎn)程處理器進(jìn)行的一致性請求處置的流程圖;
圖13描繪說明根據(jù)一個(gè)實(shí)施例的由請求處理器進(jìn)行的協(xié)議請求發(fā)起及處理的流程圖;
圖14描繪說明根據(jù)一個(gè)實(shí)施例的由處理器進(jìn)行的事務(wù)處置的流程圖;
圖15描繪說明根據(jù)一個(gè)實(shí)施例的處理器如何對本地追蹤事務(wù)干擾存儲表中的干擾指示作出響應(yīng)的流程圖;
圖16描繪說明根據(jù)一個(gè)實(shí)施例的處理器如何對本地追蹤事務(wù)干擾存儲表中的干擾指示作出響應(yīng)的流程圖;
圖17描繪根據(jù)一個(gè)實(shí)施例的用于一致性協(xié)議處置的方法;及
圖18描繪根據(jù)一個(gè)實(shí)施例的計(jì)算機(jī)可讀介質(zhì)。
具體實(shí)施方式
多處理器系統(tǒng)使用一致性協(xié)議以維護(hù)分布式共享存儲器的系統(tǒng)中的全部高速緩存之間的一致性。當(dāng)進(jìn)行來自某一高速緩存的針對數(shù)據(jù)的請求時(shí),該高速緩存發(fā)出所述數(shù)據(jù)且更新其不再具有所述數(shù)據(jù)或所述數(shù)據(jù)不被獨(dú)占式地保留的狀態(tài)。如果處理器在事務(wù)執(zhí)行中,且向其高速緩存請求為事務(wù)的一部分的數(shù)據(jù),則處理器將中止事務(wù),且發(fā)送數(shù)據(jù)。
不提供請求是否已造成另一事務(wù)中止的信息。在一些情況下,將需要向原始請求者通知請求是否影響另一事務(wù)、提供反饋且允許請求者的發(fā)起者改變其執(zhí)行,例如,檢測活鎖(livelock)情景且處理其他性能降級情景。
根據(jù)實(shí)施例,一致性協(xié)議被擴(kuò)展以包括關(guān)于事務(wù)狀態(tài)的額外信息。當(dāng)處理器在事務(wù)執(zhí)行中時(shí),一致性請求能造成其執(zhí)行中止,例如,這是因?yàn)閿?shù)據(jù)為事務(wù)讀取或?qū)懭爰系囊徊糠?,且檢測到?jīng)_突。根據(jù)各實(shí)施例,一致性協(xié)議請求借助其(接收一致性請求的處理器)在事務(wù)執(zhí)行期間中止事務(wù)的額外信息而擴(kuò)展。
“2013年5月22日公開的來自且全文以引用方式并入本文中的Power ISATM版本2.07教導(dǎo)了實(shí)例精簡指令集計(jì)算機(jī)(RISC)指令集架構(gòu)(ISA)”。又,來自且全文以引用方式并入本文中的“z/Architecture Principles of Operation”SA22-7832-09(2012年8月)教導(dǎo)了實(shí)例復(fù)雜指令集計(jì)算機(jī)(CISC)指令集架構(gòu)。
歷史上,計(jì)算機(jī)系統(tǒng)或處理器具有僅單處理器(亦稱為處理單元或中央處理單元)。處理器包括指令處理單元(IPU)、分支單元、存儲器控制單元及其類似者。此類處理器能夠每次執(zhí)行程序的單個(gè)線程。開發(fā)出可通過分派待在處理器上執(zhí)行一時(shí)段的程序且接著分派待在所述處理器上執(zhí)行另一時(shí)段的另一程序而在時(shí)間上共享所述處理器的操作系統(tǒng)。隨著技術(shù)演進(jìn),常常將存儲器子系統(tǒng)高速緩存添加至處理器以及包括轉(zhuǎn)換后備緩沖器(TLB)的復(fù)雜動態(tài)地址轉(zhuǎn)換。IPU自身常常被稱作處理器。隨著技術(shù)繼續(xù)演進(jìn),可將整個(gè)處理器封裝于單個(gè)半導(dǎo)體芯片或管芯中,此類處理器被稱作微處理器。接著開發(fā)出合并有多個(gè)IPU的處理器,此類處理器常常被稱作多處理器。多處理器計(jì)算機(jī)系統(tǒng)(處理器)的每個(gè)此類處理器可包括個(gè)體或共享高速緩存、存儲器接口、系統(tǒng)總線、地址轉(zhuǎn)換機(jī)構(gòu)及其類似者。虛擬機(jī)及指令集架構(gòu)(ISA)仿真器將軟件層添加至處理器,其通過單個(gè)硬件處理器中的單個(gè)IPU的時(shí)間分片使用而向虛擬機(jī)提供多個(gè)“虛擬處理器”亦稱為處理器)。隨著技術(shù)進(jìn)一步演進(jìn),開發(fā)出多線程處理器,從而使具有單個(gè)多線程IPU的單個(gè)硬件處理器能夠提供同時(shí)地執(zhí)行不同程序的線程的能力,因此,多線程處理器的每一線程對于操作系統(tǒng)表現(xiàn)為一個(gè)處理器。隨著技術(shù)進(jìn)一步演進(jìn),有可能將多個(gè)處理器(每一者具有一個(gè)IPU)放置于單個(gè)半導(dǎo)體芯片或管芯上。這些處理器被稱為處理器核心或僅稱為核心。因此,諸如處理器、中央處理單元、處理單元、微處理器、核心、處理器核心、處理器線程、線程的術(shù)語常??杀换Q地使用。在不脫離本文中的教導(dǎo)的情況下,可由包括上文所示的處理器的任何或全部處理器實(shí)施本文中的實(shí)施例的各方面。其中,本文中使用術(shù)語“線程”或“處理器線程”,預(yù)期可在處理器線程實(shí)施方式中具有實(shí)施例的特定優(yōu)點(diǎn)。
在基于的實(shí)施例中的事務(wù)執(zhí)行
在2012年2月的全文以引用方式并入本文中的“Architecture Instruction Set Extensions Programming Reference”319433-012A中,第8章部分地教導(dǎo)多線程應(yīng)用可利用增加數(shù)目的CPU核心以獲得較高性能。然而,多線程應(yīng)用的寫入需要編程人員理解及考慮在多個(gè)線程之間共享的數(shù)據(jù)。對共享數(shù)據(jù)的存取通常需要同步機(jī)制。這些同步機(jī)制用于確保多個(gè)線程通過應(yīng)用于共享數(shù)據(jù)的串行化操作而常常經(jīng)由使用受鎖保護(hù)的關(guān)鍵區(qū)段來更新共享數(shù)據(jù)。因?yàn)榇谢拗撇⑿行裕跃幊倘藛T試圖限制歸因于同步的開銷。
事務(wù)同步擴(kuò)展(TSX)允許處理器動態(tài)地判定線程是否需要經(jīng)由受鎖保護(hù)的關(guān)鍵區(qū)段而串行化,且僅當(dāng)時(shí)需要才執(zhí)行該串行化。這允許處理器曝露及利用由于不必要的動態(tài)同步而隱藏于應(yīng)用中的并行性。
在使用Intel TSX的情況下,事務(wù)性地執(zhí)行編程人員指定的代碼區(qū)域(亦被稱作“事務(wù)區(qū)域”或僅僅被稱作“事務(wù)”)。如果事務(wù)執(zhí)行成功地完成,則在事務(wù)區(qū)域內(nèi)執(zhí)行的全部存儲器操作將看起來在自其他處理器進(jìn)行查看時(shí)已瞬時(shí)地發(fā)生。處理器進(jìn)行在事務(wù)區(qū)域內(nèi)執(zhí)行的被執(zhí)行事務(wù)的存儲器操作,僅當(dāng)發(fā)生成功提交時(shí)(亦即,當(dāng)事務(wù)成功地完成執(zhí)行時(shí))才可為其他處理器所見。此過程常常被稱作原子提交。
Intel TSX提供兩個(gè)軟件接口以指定用于事務(wù)執(zhí)行的代碼區(qū)域。硬件鎖省略(Hardware Lock Elision,HLE)為用于指定事務(wù)區(qū)域的舊版兼容指令集擴(kuò)展(包括XACQUIRE及XRELEASE前綴)。受限事務(wù)存儲器(Restricted Transactional Memory,RTM)為供編程人員以比在使用HLE的情況下可能的方式更靈活的方式定義事務(wù)區(qū)域的新指令集接口(包括XBEGIN、XEND及XABORT指令)。HLE用于喜好常規(guī)互斥程序設(shè)計(jì)模型的回溯兼容性且愿意在舊版硬件上執(zhí)行具備HLE功能的軟件但亦愿意在具有HLE支持的硬件上利用新鎖省略能力的編程人員。RTM用于喜好事務(wù)執(zhí)行硬件的靈活接口的編程人員。另外,Intel TSX亦提供XTEST指令。此指令允許軟件查詢邏輯處理器是否正在由HLE或RTM識別的事務(wù)區(qū)域中事務(wù)地執(zhí)行。
因?yàn)槌晒κ聞?wù)執(zhí)行確保原子提交,所以處理器在無顯式同步的情況下樂觀地執(zhí)行代碼區(qū)域。如果同步對于該特定執(zhí)行是不必要的,則執(zhí)行能夠在無任何跨線程串行化的情況下提交。如果處理器不能原子地提交,則樂觀執(zhí)行失敗。當(dāng)發(fā)生此情形時(shí),處理器將回滾執(zhí)行,其是被稱作事務(wù)中止的過程。在事務(wù)中止時(shí),處理器將丟棄在由事務(wù)所使用的存儲器區(qū)域中執(zhí)行的全部更新、還原架構(gòu)狀態(tài)以看起來好像樂觀執(zhí)行從未發(fā)生,且非事務(wù)地恢復(fù)執(zhí)行。
處理器可出于眾多原因而執(zhí)行事務(wù)中止。中止事務(wù)的主要原因歸因于事務(wù)執(zhí)行邏輯處理器與另一邏輯處理器之間的沖突存儲器存取。此類沖突存儲器存取可阻止成功事務(wù)執(zhí)行。自事務(wù)區(qū)域內(nèi)讀取的存儲器地址構(gòu)成事務(wù)區(qū)域的讀取集合,且寫入至事務(wù)區(qū)域內(nèi)的地址構(gòu)成事務(wù)區(qū)域的寫入集合。Intel TSX以高速緩存行的粒度維護(hù)讀取集合及寫入集合。如果另一邏輯處理器讀取是事務(wù)區(qū)域的寫入集合的一部分的位置或?qū)懭胧鞘聞?wù)區(qū)域的讀取集合或?qū)懭爰系囊徊糠值奈恢?,則發(fā)生沖突存儲器存取。沖突存取通常意味著此代碼區(qū)域需要串行化。因?yàn)镮ntel TSX檢測到在高速緩存行的粒度下的數(shù)據(jù)沖突,所以放置于同一高速緩存行中的無關(guān)數(shù)據(jù)位置將被檢測為引起事務(wù)中止的沖突。事務(wù)中止亦可歸因于有限事務(wù)資源而發(fā)生。舉例而言,在所述區(qū)域中存取的數(shù)據(jù)量可超過實(shí)施方式特定的容量。另外,一些指令及系統(tǒng)事件可造成事務(wù)中止。頻繁事務(wù)中止引起浪費(fèi)周期及無效率增加。
硬件鎖省略
硬件鎖省略(HLE)提供用于使編程人員使用事務(wù)執(zhí)行的舊版兼容指令集接口。HLE提供兩個(gè)新指令前綴提示:XACQUIRE及XRELEASE。
在使用HLE的情況下,編程人員將XACQUIRE前綴添加至用于獲取正保護(hù)關(guān)鍵區(qū)段的鎖的指令前方。處理器將前綴處理為用于省略與鎖獲取操作相關(guān)聯(lián)的寫入的提示。即使鎖獲取具有對鎖的關(guān)聯(lián)寫入操作,處理器仍不將鎖的地址添加至事務(wù)區(qū)域的寫入集合,其亦不發(fā)出對鎖的任何寫入請求。取而代之,將鎖的地址添加至讀取集合。邏輯處理器進(jìn)入事務(wù)執(zhí)行。如果鎖在XACQUIRE前綴指令之前可用,則全部其他處理器此后將繼續(xù)將鎖視為可用。因?yàn)槭聞?wù)執(zhí)行邏輯處理器既不將鎖的地址添加至其寫入集合亦不執(zhí)行對鎖的外部可見寫入操作,所以其他邏輯處理器能在不造成數(shù)據(jù)沖突的情況下讀取鎖。這允許其他邏輯處理器亦進(jìn)入且并行地執(zhí)行受鎖保護(hù)的關(guān)鍵區(qū)段。處理器自動地檢測在事務(wù)執(zhí)行期間發(fā)生的任何數(shù)據(jù)沖突且將在必要時(shí)執(zhí)行事務(wù)中止。
即使省略處理器(eliding processor)不執(zhí)行對鎖的任何外部寫入操作,硬件仍確保對鎖的操作的程序次序。如果省略處理器自身讀取關(guān)鍵區(qū)段中的鎖的值,則將看起來好像處理器已獲取鎖,亦即,讀取將返回非省略值(non-elided value)。此行為允許HLE執(zhí)行在功能上等效于無HLE前綴的執(zhí)行。
能夠?qū)RELEASE前綴添加于用于釋放保護(hù)關(guān)鍵區(qū)段的鎖的指令前方。釋放鎖涉及對鎖的寫入。如果指令用于將鎖的值還原至鎖在對同一鎖的XACQUIRE前綴鎖獲取操作之前所具有的值,則處理器省略與鎖的釋放相關(guān)聯(lián)的外部寫入請求且不將鎖的地址添加至寫入集合。處理器接著嘗試提交事務(wù)執(zhí)行。
在使用HLE的情況下,如果多個(gè)線程執(zhí)行受到同一鎖保護(hù)的關(guān)鍵區(qū)段,但它們不對彼此的數(shù)據(jù)執(zhí)行任何沖突操作,則線程能夠并行地且在無串行化的情況下執(zhí)行。即使軟件使用對公用鎖的鎖獲取操作,硬件仍識別此情形、省略鎖,且在兩個(gè)線程上在無需經(jīng)由鎖的任何通信的情況下(如果此類通信為動態(tài)地不必要的)執(zhí)行關(guān)鍵區(qū)段。
如果處理器不能夠事務(wù)地執(zhí)行該區(qū)域,則處理器將非事務(wù)地且在無省略的情況下執(zhí)行該區(qū)域。具備HLE功能的軟件具有與基于底層非HLE鎖的執(zhí)行相同的前向進(jìn)度保證。為了成功HLE執(zhí)行,鎖及關(guān)鍵區(qū)段代碼必須遵循某些準(zhǔn)則。這些準(zhǔn)則僅影響性能;且遵循這些準(zhǔn)則的失敗將不引起功能失敗。無HLE支持的硬件將忽略XACQUIRE及XRELEASE前綴提示且將不執(zhí)行任何省略,這是因?yàn)檫@些前綴對應(yīng)于其中XACQUIRE及XRELEASE有效的指令上忽略的REPNE/REPE IA-32前綴。重要地,HLE與現(xiàn)有基于鎖的程序設(shè)計(jì)模型兼容。提示的不當(dāng)使用將不造成功能錯(cuò)誤,但其可曝露已經(jīng)在代碼中的潛在錯(cuò)誤。
受限事務(wù)存儲器(RTM)提供用于事務(wù)執(zhí)行的靈活軟件接口。RTM提供三個(gè)新指令(XBEGIN、XEND及XABORT)以供編程人員開始、提交及中止事務(wù)執(zhí)行。
編程人員使用XBEGIN指令以指定事務(wù)代碼區(qū)域的開始且使用XEND指令以指定事務(wù)代碼區(qū)域的結(jié)束。如果不能成功地事務(wù)地執(zhí)行RTM區(qū)域,則XBEGIN指令采取將相對偏移提供至后退(fallback)指令地址的操作數(shù)。
處理器可出于許多原因而中止RTM事務(wù)執(zhí)行。在許多情況下,硬件自動地檢測事務(wù)中止條件且自具有與在XBEGIN指令的開始時(shí)存在的架構(gòu)狀態(tài)對應(yīng)的架構(gòu)狀態(tài)及被更新以描述中止?fàn)顟B(tài)的EAX寄存器的后退指令地址重新開始執(zhí)行。
XABORT指令允許編程人員顯式地中止RTM區(qū)域的執(zhí)行。XABORT指令采取加載至EAX寄存器中的8位直接自變量且因此將在RTM中止之后可用于軟件。RTM指令不具有與其相關(guān)聯(lián)的任何數(shù)據(jù)存儲器位置。雖然硬件不提供關(guān)于RTM區(qū)域是否將永遠(yuǎn)成功地事務(wù)地提交的保證,但遵循建議準(zhǔn)則的大多數(shù)事務(wù)被預(yù)期為成功地事務(wù)地提交。然而,編程人員必須始終在后退路徑中提供替代代碼序列以保證前向進(jìn)度。此情形可與獲取鎖且非事務(wù)地執(zhí)行指定代碼區(qū)域一樣簡單。另外,始終在給定實(shí)施方式上中止的事務(wù)可在未來實(shí)施方式上事務(wù)地完成。因此,編程人員必須確保在功能上測試用于事務(wù)區(qū)域及替代代碼序列的代碼路徑。
HLE支持的檢測
如果CPUID.07H.EBX.HLE[bit 4]=1,則處理器支持HLE執(zhí)行。然而,應(yīng)用能夠在不檢查處理器是否支持HLE的情況下使用HLE前綴(XACQUIRE及XRELEASE)。無HLE支持的處理器忽略這些前綴且將在不進(jìn)入事務(wù)執(zhí)行的情況下執(zhí)行代碼。
RTM支持的檢測
如果CPUID.07H.EBX.RTM[bit 11]=1,則處理器支持RTM執(zhí)行。應(yīng)用必須檢查處理器在其使用RTM指令(XBEGIN、XEND、XABORT)之前是否支持RTM。這些指令將在不支持RTM的處理器上使用時(shí)產(chǎn)生#UD異常。
XTEST指令的檢測
如果處理器支持HLE或RTM,則其支持XTEST指令。應(yīng)用必須在使用XTEST指令之前檢查這些特征標(biāo)志中的任一者。此指令將在不支持HLE或RTM的處理器上使用時(shí)產(chǎn)生#UD異常。
查詢事務(wù)執(zhí)行狀態(tài)
XTEST指令能夠用于判定由HLE或RTM指定的事務(wù)區(qū)域的事務(wù)狀態(tài)。應(yīng)注意,雖然在不支持HLE的處理器上忽略HLE前綴,但XTEST指令將在不支持HLE或RTM的處理器上使用時(shí)產(chǎn)生#UD異常。
針對HLE鎖的要求
對于用于成功地事務(wù)地提交的HLE執(zhí)行,鎖必須滿足某些屬性且對鎖的存取必須遵循某些準(zhǔn)則。
XRELEASE前綴指令必須將被省略鎖的值還原至其在鎖獲取之前所具有的值。這允許硬件通過不將鎖添加至寫入集合而安全地省略鎖。鎖釋放(XRELEASE前綴)指令的數(shù)據(jù)大小及數(shù)據(jù)地址必須匹配于鎖獲取(XACQUIRE前綴)的數(shù)據(jù)大小及數(shù)據(jù)地址,且鎖必須不跨越高速緩存行邊界。
軟件不應(yīng)將除了XRELEASE前綴指令以外的任何指令寫入至事務(wù)HLE區(qū)域內(nèi)部的被省略鎖,否則此寫入可造成事務(wù)中止。另外,遞歸鎖(其中線程在無首先釋放鎖的情況下多次獲取同一鎖)亦可造成事務(wù)中止。應(yīng)注意,軟件能夠觀察關(guān)鍵區(qū)段內(nèi)部的被省略鎖獲取的結(jié)果。此類讀取操作將寫入的值返回給鎖。
處理器自動地檢測對這些準(zhǔn)則的違反,且在無省略的情況下安全地轉(zhuǎn)變至非事務(wù)執(zhí)行。因?yàn)镮ntel TSX檢測到在高速緩存行的粒度下的沖突,所以至共置于與被省略鎖相同的高速緩存行上的數(shù)據(jù)的寫入可由省略同一鎖的其他邏輯處理器檢測為數(shù)據(jù)沖突。
事務(wù)嵌套(Transactional Nesting)
HLE及RTM兩者支持嵌套式事務(wù)區(qū)域。然而,事務(wù)中止將狀態(tài)還原至開始事務(wù)執(zhí)行的操作:最外XACQUIRE前綴HLE合格指令或最外XBEGIN指令。處理器將全部嵌套式事務(wù)視為一個(gè)事務(wù)。
HLE嵌套及省略
編程人員能夠?qū)LE區(qū)域嵌套直至為MAX_HLE_NEST_COUNT的實(shí)施方式特定的深度。每一邏輯處理器在內(nèi)部追蹤嵌套計(jì)數(shù),但此計(jì)數(shù)不可用于軟件。XACQUIRE前綴HLE合格指令遞增嵌套計(jì)數(shù),且XRELEASE前綴HLE合格指令遞減嵌套計(jì)數(shù)。當(dāng)嵌套計(jì)數(shù)自0變?yōu)?時(shí),邏輯處理器進(jìn)入事務(wù)執(zhí)行。僅當(dāng)嵌套計(jì)數(shù)變?yōu)?時(shí),邏輯處理器才嘗試提交。如果嵌套計(jì)數(shù)超過MAX_HLE_NEST_COUNT,則可發(fā)生事務(wù)中止。
除了支持嵌套式HLE區(qū)域以外,處理器亦能夠省略多個(gè)嵌套鎖。處理器追蹤用于省略的鎖,該鎖以用于該鎖的XACQUIRE前綴HLE合格指令開始且以用于該同一鎖的XRELEASE前綴HLE合格指令結(jié)束。處理器能夠在任一時(shí)間追蹤高達(dá)MAX_HLE_ELIDED_LOCKS數(shù)目個(gè)鎖。舉例而言,如果實(shí)施方式支持為2的MAX_HLE_ELIDED_LOCKS值,且如果編程人員嵌套三個(gè)HLE識別關(guān)鍵區(qū)段(在不對三個(gè)相異鎖中的任一者執(zhí)行介入XRELEASE前綴HLE合格指令的情況下通過對所述三個(gè)鎖執(zhí)行XACQUIRE前綴HLE合格指令),則將省略前兩個(gè)鎖,但將不省略第三鎖(但被添加至事務(wù)的寫入集合)。然而,執(zhí)行仍將事務(wù)地繼續(xù)。一旦遇到用于兩個(gè)省略鎖中的一者的XRELEASE,就將省略經(jīng)由XACQUIRE前綴HLE合格指令而獲取的后續(xù)鎖。
當(dāng)全部省略的XACQUIRE及XRELEASE對已匹配、嵌套計(jì)數(shù)變?yōu)?且鎖已滿足要求時(shí),處理器嘗試提交HLE執(zhí)行。如果執(zhí)行不能被原子地提交,則執(zhí)行在無省略的情況下轉(zhuǎn)變至非事務(wù)執(zhí)行,就好像第一指令不具有XACQUIRE前綴那樣。
RTM嵌套
編程人員能夠?qū)TM區(qū)域嵌套直至實(shí)施方式特定的MAX_RTM_NEST_COUNT。邏輯處理器在內(nèi)部追蹤嵌套計(jì)數(shù),但此計(jì)數(shù)不可用于軟件。XBEGIN指令遞增嵌套計(jì)數(shù),且XEND指令遞減嵌套計(jì)數(shù)。僅當(dāng)嵌套計(jì)數(shù)變?yōu)?時(shí),邏輯處理器才嘗試提交。如果嵌套計(jì)數(shù)超過MAX_RTM_NEST_COUNT,則發(fā)生事務(wù)中止。
嵌套HLE及RTM
HLE及RTM提供至公共事務(wù)執(zhí)行能力的兩個(gè)替代軟件接口。當(dāng)HLE及RTM嵌套在一起(例如,HLE在RTM內(nèi)部或RTM在HLE內(nèi)部)時(shí),事務(wù)處理行為是實(shí)施方式特定的。然而,在全部狀況下,實(shí)施方式將維護(hù)HLE及RTM語義。實(shí)施方式可在用于RTM區(qū)域內(nèi)部時(shí)選擇忽略HLE提示,且可在RTM指令用于HLE區(qū)域內(nèi)部時(shí)造成事務(wù)中止。在后一情況中,自事務(wù)執(zhí)行至非事務(wù)執(zhí)行的轉(zhuǎn)變無縫地發(fā)生,這是因?yàn)樘幚砥鲗⒃诓粚?shí)際上進(jìn)行省略的情況下重新執(zhí)行HLE區(qū)域,且接著執(zhí)行RTM指令。
中止?fàn)顟B(tài)定義
RTM使用EAX寄存器以將中止?fàn)顟B(tài)傳達(dá)給軟件。在RTM中止之后,EAX寄存器具有以下定義。
表1
用于RTM的EAX中止?fàn)顟B(tài)僅提供中止的原因。對于RTM區(qū)域,無論發(fā)生中止抑或提交,EAX中止?fàn)顟B(tài)自身皆不編碼。在RTM中止之后,EAX的值可為0。舉例而言,CPUID指令在用于RTM區(qū)域內(nèi)部時(shí)造成事務(wù)中止,且可不滿足用于設(shè)定EAX位中的任一者的要求。此情形可引起為0的EAX值。
RTM存儲器排序
成功RTM提交造成RTM區(qū)域中的全部存儲器操作看起來好像原子地執(zhí)行。由XBEGIN接著由XEND組成的被成功提交的RTM區(qū)域(甚至在RTM區(qū)域中無存儲器操作的情況下)具有與LOCK前綴指令相同的排序語義。
XBEGIN指令不具有柵欄(fencing)語義。然而,如果RTM執(zhí)行中止,則來自RTM區(qū)域內(nèi)的全部存儲器更新被丟棄且不可為任何其他邏輯處理器所見。
具備RTM功能的除錯(cuò)程序支持
默認(rèn)地,RTM區(qū)域內(nèi)部的任何除錯(cuò)異常將造成事務(wù)中止,且將使控制流程重新導(dǎo)向至架構(gòu)狀態(tài)被復(fù)原且EAX中的位4被設(shè)定的后退指令地址。然而,為了允許軟件除錯(cuò)程序在除錯(cuò)異常時(shí)攔截執(zhí)行,RTM架構(gòu)提供額外能力。
如果DR7的位11及IA32_DEBUGCTL_MSR的位15皆為1,則歸因于除錯(cuò)異常(#DB)或斷點(diǎn)異常(#BP)的任何RTM中止造成執(zhí)行回滾且自XBEGIN指令而非后退地址重新開始。在此情景下,EAX寄存器亦將還原回至XBEGIN指令的點(diǎn)。
程序設(shè)計(jì)考慮
典型編程人員識別區(qū)域被預(yù)期為事務(wù)地執(zhí)行且成功地提交。然而,Intel TSX不提供任何此類保證。事務(wù)執(zhí)行可出于許多原因而中止。為了完全地利用事務(wù)能力,編程人員應(yīng)遵循某些準(zhǔn)則以增加其事務(wù)執(zhí)行成功地提交的機(jī)率。
此章節(jié)論述可造成事務(wù)中止的各種事件。架構(gòu)確保在隨后中止執(zhí)行的事務(wù)內(nèi)執(zhí)行的更新將永不變得可見。僅已提交的事務(wù)執(zhí)行發(fā)起對架構(gòu)狀態(tài)的更新。事務(wù)中止永不造成功能失敗且僅影響性能。
基于指令的考慮
編程人員可安全地在事務(wù)(HLE或RTM)內(nèi)部使用任何指令且可使用處于任何特權(quán)層級的事務(wù)。然而,一些指令將始終中止事務(wù)執(zhí)行且造成執(zhí)行無縫地及安全地轉(zhuǎn)變至非事務(wù)路徑。
Intel TSX允許最常見的指令在不造成中止的情況下用于事務(wù)內(nèi)部。事務(wù)內(nèi)部的以下操作通常不造成中止:
·對指令指針寄存器(通用寄存器(GPR)及狀態(tài)標(biāo)志(CF、OF、SF、PF、AF及ZF)的操作;及
·對XMM及YMM寄存器以及MXCSR寄存器的操作。
然而,當(dāng)在事務(wù)區(qū)域內(nèi)部互混SSE操作與AVX操作時(shí),編程人員必須小心?;セ齑嫒MM寄存器的SSE指令與存取YMM寄存器的AVX指令可造成事務(wù)中止。編程人員可在事務(wù)內(nèi)部使用REP/REPNE前綴字符串操作。然而,長字符串可造成中止。另外,如果CLD指令及STD指令改變DF標(biāo)志的值,則CLD指令及STD指令的使用可造成中止。然而,如果DF為1,則STD指令將不造成中止。類似地,如果DF為0,則CLD指令將不造成中止。
此處未被列舉為用于事務(wù)內(nèi)部時(shí)造成中止的指令通常將不造成事務(wù)中止(實(shí)例包括但不限于MFENCE、LFENCE、SFENCE、RDTSC、RDTSCP等)。
以下指令將中止任何實(shí)施方式上的事務(wù)執(zhí)行:
·XABORT
·CPUID
·PAUSE
另外,在一些實(shí)施方式中,以下指令可始終造成事務(wù)中止。這些指令不被預(yù)期為常用于典型事務(wù)區(qū)域內(nèi)部。然而,編程人員必須不依賴于這些指令以迫使事務(wù)中止,這是因?yàn)槠涫欠裨斐墒聞?wù)中止是實(shí)施方式相關(guān)的。
·對X87及MMX架構(gòu)狀態(tài)的操作。此情形包括全部MMX及X87指令,包括FXRSTOR及FXSAVE指令。
·對EFLAGS的非狀態(tài)部分的更新:CLI、STI、POPFD、POPFQ、CLTS。
·更新段寄存器、除錯(cuò)寄存器和/或控制寄存器的指令:MOV至DS/ES/FS/GS/SS、POP DS/ES/FS/GS/SS、LDS、LES、LFS、LGS、LSS、SWAPGS、WRFSBASE、WRGSBASE、LGDT、SGDT、LIDT、SIDT、LLDT、SLDT、LTR、STR、遠(yuǎn)CALL、遠(yuǎn)JMP、遠(yuǎn)RET、IRET、MOV至DRx、MOV至CR0/CR2/CR3/CR4/CR8及LMSW。
·環(huán)形轉(zhuǎn)變:SYSENTER、SYSCALL、SYSEXIT,及SYSRET。
·TLB及緩存能力控制:CLFLUSH、INVD、WBINVD、INVLPG、INVPCID,及具有非時(shí)間提示的存儲器指令(MOVNTDQA、MOVNTDQ、MOVNTI、MOVNTPD、MOVNTPS及MOVNTQ)。
·處理器狀態(tài)存儲:XSAVE、XSAVEOPT及XRSTOR。
·中斷:INTn、INTO。
·IO:IN、INS、REP INS、OUT、OUTS、REP OUTS及其變型。
·VMX:VMPTRLD、VMPTRST、VMCLEAR、VMREAD、VMWRITE、VMCALL、VMLAUNCH、VMRESUME、VMXOFF、VMXON、INVEPT及INVVPID。
·SMX:GETSEC。
·UD2、RSM、RDMSR、WRMSR、HLT、MONITOR、MWAIT、XSETBV、VZEROUPPER、MASKMOVQ及V/MASKMOVDQU。
運(yùn)行時(shí)考慮
除了基于指令的考慮以外,運(yùn)行時(shí)事件亦可造成事務(wù)執(zhí)行中止。這些事件可歸因于數(shù)據(jù)存取模式或微架構(gòu)實(shí)施方式特征。以下清單并非全部中止原因的全面論述。
將抑制必須曝露于軟件的事務(wù)中的任何故障或陷阱。事務(wù)執(zhí)行將中止且執(zhí)行將轉(zhuǎn)變至非事務(wù)執(zhí)行,就好像故障或陷阱從未發(fā)生。如果異常未被屏蔽,則該未屏蔽異常將引起事務(wù)中止且狀態(tài)將看起來好像異常從未發(fā)生。
在事務(wù)執(zhí)行期間發(fā)生的同步異常事件(#DE、#OF、#NP、#SS、#GP、#BR、#UD、#AC、#XF、#PF、#NM、#TS、#MF、#DB、#BP/INT3)可造成執(zhí)行不事務(wù)地提交,且需要非事務(wù)執(zhí)行。這些事件被抑制,就好像其從未發(fā)生。在使用HLE的情況下,因?yàn)榉鞘聞?wù)代碼路徑與事務(wù)代碼路徑相同,所以這些事件通常將在造成異常的指令非事務(wù)地被重新執(zhí)行時(shí)重新出現(xiàn),從而造成關(guān)聯(lián)同步事件在非事務(wù)執(zhí)行中適當(dāng)?shù)剡f送。在事務(wù)執(zhí)行期間發(fā)生的異步事件(NMI、SMI、INTR、IPI、PMI等)可造成事務(wù)執(zhí)行中止且轉(zhuǎn)變至非事務(wù)執(zhí)行。在處理事務(wù)中止之后,將擱置及處置異步事件。
事務(wù)僅支持回寫可緩存存儲型操作。如果事務(wù)包括對任何其他存儲器類型的操作,則事務(wù)可始終中止。此情形包括對UC存儲器類型的指令取回。
事務(wù)區(qū)域內(nèi)的存儲器存取可需要處理器設(shè)定被引用頁表表項(xiàng)的已存取標(biāo)志及已變更(dirty)標(biāo)志。處理器如何處置此情形的行為是實(shí)施方式特定的。即使事務(wù)區(qū)域隨后中止,一些實(shí)施方式仍可允許對這些標(biāo)志的更新變得外部可見。如果這些標(biāo)志需要被更新,則一些Intel TSX實(shí)施方式可選擇中止事務(wù)執(zhí)行。另外,處理器的頁表遍歷可產(chǎn)生對其自身事務(wù)寫入但未提交的狀態(tài)的存取。在此類情形下,一些Intel TSX實(shí)施方式可選擇中止事務(wù)區(qū)域的執(zhí)行。無論如何,架構(gòu)皆確保:如果事務(wù)區(qū)域中止,則經(jīng)由諸如TLB的結(jié)構(gòu)的行為將不會使事務(wù)寫入狀態(tài)在架構(gòu)上可見。
事務(wù)地執(zhí)行自修改代碼亦可造成事務(wù)中止。即使當(dāng)采用HLE及RTM時(shí),編程人員仍必須繼續(xù)遵循Intel建議準(zhǔn)則以用于寫入自修改及交叉修改代碼。雖然RTM及HLE的實(shí)施方式通常將提供足夠資源以用于執(zhí)行公共事務(wù)區(qū)域,但用于事務(wù)區(qū)域的實(shí)施方式約束及過度大小可造成事務(wù)執(zhí)行中止且轉(zhuǎn)變至非事務(wù)執(zhí)行。架構(gòu)不提供可用于進(jìn)行事務(wù)執(zhí)行的資源量的保證,且不保證事務(wù)執(zhí)行將永遠(yuǎn)成功。
對事務(wù)區(qū)域內(nèi)存取的高速緩存行的沖突請求可防止事務(wù)成功地執(zhí)行。舉例而言,如果邏輯處理器P0在事務(wù)區(qū)域中讀取行A,且另一邏輯處理器P1寫入行A(在事務(wù)區(qū)域內(nèi)部或外部),則邏輯處理器P0可在邏輯處理器P1的寫入干擾處理器P0事務(wù)地執(zhí)行的能力的情況下中止。
類似地,如果P0在事務(wù)區(qū)域中寫入行A,且P1讀取或?qū)懭胄蠥(在事務(wù)區(qū)域內(nèi)部或外部),則P0可在P1對行A的存取干擾P0事務(wù)地執(zhí)行的能力的情況下中止。另外,其他一致性業(yè)務(wù)可有時(shí)表現(xiàn)為沖突請求且可造成中止。雖然可發(fā)生這些錯(cuò)誤沖突,但其被預(yù)期為不常見。用于在上述情景下判定P0抑或P1中止的沖突解決策略是實(shí)施方式特定的。
通用事務(wù)執(zhí)行實(shí)施例:
根據(jù)由Austen McDonald在2009年6月為了部分地滿足哲學(xué)博士學(xué)位的要求而提交給斯坦福大學(xué)的計(jì)算機(jī)科學(xué)系及研究生委員會的論文“ARCHITECTURES FOR TRANSACTIONAL MEMORY”(其全文以引用方式并入本文中),基本上存在實(shí)施原子且隔離的事務(wù)區(qū)域所需要的三個(gè)機(jī)制:版本設(shè)定、沖突檢測,及爭用管理。
為了使事務(wù)代碼區(qū)域顯得是原子的,必須存儲由該事務(wù)代碼區(qū)域執(zhí)行的全部修改且使其保持與其他事務(wù)隔離直至提交時(shí)間為止。系統(tǒng)通過實(shí)施版本設(shè)定策略而執(zhí)行此情形。存在兩個(gè)版本設(shè)定范例:急切(eager)及緩慢(lazy)。急切版本設(shè)定系統(tǒng)在適當(dāng)位置中存儲新產(chǎn)生的事務(wù)值且另外在被稱為復(fù)原日志(undo-log)的日志中存儲先前存儲器值。緩慢版本設(shè)定系統(tǒng)在被稱為寫入緩沖器的緩沖器中暫時(shí)地存儲新值,從而僅在提交時(shí)將新值復(fù)制至存儲器。在任一系統(tǒng)中,高速緩存用于優(yōu)化新版本的存儲。
為了確保事務(wù)看起來好像被原子地執(zhí)行,必須檢測及解決沖突。兩個(gè)系統(tǒng)(亦即,急切版本設(shè)定系統(tǒng)及緩慢版本設(shè)定系統(tǒng))通過實(shí)施沖突檢測策略(樂觀或悲觀)來檢測沖突。樂觀系統(tǒng)并行地執(zhí)行事務(wù),從而僅當(dāng)事務(wù)提交時(shí)才檢查沖突。悲觀系統(tǒng)在每一加載及存儲時(shí)檢查沖突。類似于版本設(shè)定,沖突檢測亦使用高速緩存,從而將每一行標(biāo)記為讀取集合的部分、寫入集合的部分,或兩者。兩個(gè)系統(tǒng)通過實(shí)施爭用管理策略來解決沖突。存在許多爭用管理策略,一些策略更適合于樂觀沖突檢測且一些策略更適合于悲觀沖突檢測。下文描述一些實(shí)例策略。
因?yàn)槊恳皇聞?wù)存儲器(TM)系統(tǒng)需要版本設(shè)定檢測及沖突檢測兩者,所以這些選項(xiàng)引起四個(gè)相異TM設(shè)計(jì):急切-悲觀(EP)、急切-樂觀(EO)、緩慢-悲觀(LP)及緩慢-樂觀(LO)。表2簡要地描述全部四個(gè)相異TM設(shè)計(jì)。
圖1及圖2描繪多核心TM環(huán)境的一個(gè)實(shí)例。圖1示出一個(gè)管芯100上的在互連控件120a、120b的管理下與互連122連接的許多具備TM功能的CPU(CPU1 114a、CPU2 114b等)。每一CPU 114a、114b(亦被稱為處理器)可具有由用于自存儲器緩存待執(zhí)行指令的指令高速緩存116a、116b及用于緩存待由CPU 114a、114b操作的存儲器位置的數(shù)據(jù)(操作數(shù))的具有TM支持的數(shù)據(jù)高速緩存118a、118b組成的分割高速緩存(在圖1中,每一CPU 114a、114b及其關(guān)聯(lián)高速緩存被引用為112a、112b)。在一實(shí)施方式中,多個(gè)管芯100的高速緩存被互連以支持多個(gè)管芯100的高速緩存之間的高速緩存一致性。在一實(shí)施方式中,使用單個(gè)高速緩存而非分割高速緩存,從而保留指令及數(shù)據(jù)兩者。在各實(shí)施方式中,CPU高速緩存為分層高速緩存結(jié)構(gòu)中的一個(gè)緩存級。舉例而言,每一管芯100可使用待在管芯100上的全部CPU之間共享的共享高速緩存124。在另一實(shí)施方式中,每一管芯可存取在全部管芯100的全部處理器之間共享的共享高速緩存124。
圖2示出實(shí)例事務(wù)CPU 114的細(xì)節(jié),包括用于支持TM的添加物。事務(wù)CPU(處理器)114可包括用于支持寄存器檢查點(diǎn)126及特殊TM寄存器128的硬件。事務(wù)CPU高速緩存可具有常規(guī)高速緩存的MESI位130、標(biāo)簽140及數(shù)據(jù)142,而且具有(例如)示出一行已由CPU 114讀取同時(shí)執(zhí)行事務(wù)的R位132,及示出一行已由CPU 114寫入同時(shí)執(zhí)行事務(wù)的W位138。
用于任何TM系統(tǒng)中的編程人員的關(guān)鍵細(xì)節(jié)為非事務(wù)存取如何與事務(wù)交互。根據(jù)設(shè)計(jì),使用上述機(jī)制將事務(wù)存取彼此過濾。然而,仍必須考慮規(guī)則非事務(wù)加載與含有用于該地址的新值的事務(wù)之間的交互。另外,亦必須探索非事務(wù)存儲與已讀取該地址的事務(wù)之間的交互。這些情形為數(shù)據(jù)庫概念隔離的問題。
當(dāng)每一非事務(wù)載入及存儲就像原子事務(wù)時(shí),TM系統(tǒng)被稱為實(shí)施強(qiáng)隔離,有時(shí)被稱為強(qiáng)原子性。因此,非事務(wù)加載不能看到未提交數(shù)據(jù)且非事務(wù)存儲造成已讀取該地址的任何事務(wù)的原子性違反。并非此狀況的系統(tǒng)被稱為實(shí)施弱隔離,有時(shí)被稱為弱原子性。
歸因于強(qiáng)隔離的概念化及實(shí)施的相對簡易性,強(qiáng)隔離相比于弱隔離常常更理想。另外,如果編程人員已忘記使用事務(wù)來環(huán)繞一些共享存儲器引用,從而造成錯(cuò)誤,則在使用強(qiáng)隔離的情況下,編程人員將常常使用簡單除錯(cuò)接口來檢測該失察,這是因?yàn)榫幊倘藛T將看到造成原子性違反的非事務(wù)區(qū)域。又,在一個(gè)模型中寫入的程序可在另一模型上不同地工作。
另外,強(qiáng)隔離相比于弱隔離常常較易于在硬件TM中支持。在使用強(qiáng)隔離的情況下,因?yàn)橐恢滦詤f(xié)議已經(jīng)管理處理器之間的加載及存儲通信,所以事務(wù)能夠檢測非事務(wù)加載及存儲且適當(dāng)?shù)仄鹱饔谩榱嗽谲浖聞?wù)存儲器(TM)中實(shí)施強(qiáng)隔離,必須修改非事務(wù)代碼以包括讀取及寫入屏障;從而潛在地削弱性能。盡管已花費(fèi)極大努力以移除許多不需要的屏障,但此類技術(shù)常常是復(fù)雜的且性能通常遠(yuǎn)低于HTM的性能。
表2
表2說明事務(wù)存儲器的基本設(shè)計(jì)空間(版本設(shè)定及沖突檢測)。
急切-悲觀(EP)
下文所描述的此第一TM設(shè)計(jì)被稱為急切-悲觀。EP系統(tǒng)將其寫入集合存儲“在適當(dāng)位置中”(因此,名稱「急切」),且為了支持回滾,在“復(fù)原日志”中存儲覆蓋行的舊值。處理器使用W 138及R 132高速緩存位以追蹤讀取及寫入集合且當(dāng)接收到窺探加載請求時(shí)檢測沖突?;蛟S,已知文獻(xiàn)中的EP系統(tǒng)的最值得注意的實(shí)例為LogTM及UTM。
在EP系統(tǒng)中開始事務(wù)非常類似于在其他系統(tǒng)中開始事務(wù):tm_begin()獲取寄存器檢查點(diǎn),且初始化任何狀態(tài)寄存器。EP系統(tǒng)亦需要初始化復(fù)原日志,其細(xì)節(jié)取決于日志格式,但常常涉及初始化指向預(yù)分配線程專用存儲器的區(qū)域的日志基址指針,及清除日志界限寄存器。
版本設(shè)定:在EP中,歸因于急切版本設(shè)定被設(shè)計(jì)以起作用的方式,MESI 130狀態(tài)轉(zhuǎn)變(對應(yīng)于已修改、獨(dú)占、共享及無效代碼狀態(tài)的高速緩存行指示符)通常不變。在事務(wù)外部,MESI 130狀態(tài)轉(zhuǎn)變完全地不變。當(dāng)在事務(wù)內(nèi)部讀取一行時(shí),標(biāo)準(zhǔn)一致性轉(zhuǎn)變適用(S(共享)→S,I(無效)→S,或I→E(獨(dú)占)),從而按需要而發(fā)出加載未命中,但亦設(shè)定R 132位。同樣地,寫入一行應(yīng)用標(biāo)準(zhǔn)轉(zhuǎn)變(S→M,E→I,I→M),從而按需要而發(fā)出未命中,但亦設(shè)定W 138(寫入)位。在第一次寫入行時(shí),載入整個(gè)行的舊版本,接著寫入至復(fù)原日志以在當(dāng)前事務(wù)中止的狀況下保留舊版本。接著在舊數(shù)據(jù)上方將新寫入數(shù)據(jù)存儲“在適當(dāng)位置中”。
沖突檢測:悲觀沖突檢測使用在未命中時(shí)交換的一致性消息,或升級,以尋找事務(wù)之間的沖突。當(dāng)在事務(wù)內(nèi)發(fā)生讀取未命中時(shí),其他處理器接收加載請求;但如果其不具有所需行,則其忽略該請求。如果其他處理器非推測式地具有所需行或具有行R 132(讀取),則其將該行降級至S,且在某些狀況下,如果其具有處于MESI 130的M或E狀態(tài)的行,則發(fā)出高速緩存至高速緩存?zhèn)鬏?。然而,如果高速緩存具有行W 138,則在兩個(gè)事務(wù)之間檢測到?jīng)_突且必須采取額外動作(多個(gè))。
類似地,當(dāng)事務(wù)設(shè)法將一行自共享升級至已修改(在第一寫入時(shí))時(shí),事務(wù)發(fā)出獨(dú)占加載請求,其亦用于檢測沖突。如果接收高速緩存非推測式地具有該行,則該行失效,且在某些狀況下發(fā)出高速緩存至高速緩存?zhèn)魉?M或E狀態(tài))。但是,如果行為R 132或W 138,則檢測到?jīng)_突。
驗(yàn)證:因?yàn)閷γ恳患虞d執(zhí)行沖突檢測,所以事務(wù)始終具有對其自身寫入集合的獨(dú)占存取。因此,驗(yàn)證無需任何額外工作。
提交:因?yàn)榧鼻邪姹驹O(shè)定在適當(dāng)位置中存儲數(shù)據(jù)項(xiàng)的新版本,所以提交過程簡單地清除W 138及R 132位且丟棄復(fù)原日志。
中止:當(dāng)事務(wù)回滾時(shí),必須還原復(fù)原日志中的每一高速緩存行的原始版本,其為被稱為“展開(unrolling)”或“應(yīng)用(applying)”日志的過程。這在tm_discard()期間進(jìn)行,且相對于其他事務(wù)必須為原子的。具體言之,寫入集合必須仍用于檢測沖突:此事務(wù)具有其復(fù)原日志中的行的唯一正確版本,且請求事務(wù)必須等待正確版本自該日志還原。可使用硬件狀態(tài)機(jī)或軟件中止處理機(jī)來應(yīng)用此類日志。
急切-悲觀具有以下特性:提交為簡單的,且因?yàn)槠湓谶m當(dāng)位置中,所以非??焖?。類似地,驗(yàn)證為無操作(no-op)。悲觀沖突檢測提早地檢測到?jīng)_突,藉此縮減“注定(doomed)”事務(wù)的數(shù)目。舉例而言,如果兩個(gè)事務(wù)涉及讀取后寫入相關(guān)性,則在悲觀沖突檢測中立即檢測該相關(guān)性。然而,在樂觀沖突檢測中,在寫入器提交以前不檢測此類沖突。
急切-悲觀亦具有以下特性:如上文所描述,在第一次寫入高速緩存行時(shí),必須將舊值寫入至日志,從而招致額外高速緩存存取。中止是昂貴的,這是因?yàn)槠湫枰獜?fù)原該日志。對于日志中的每一高速緩存行,必須發(fā)出一加載,或許在繼續(xù)至下一行之前直至主存儲器。悲觀沖突檢測亦防止存在某些可串行化調(diào)度。
另外,因?yàn)殡S著發(fā)生沖突而處置沖突,所以存在活鎖的可能性,且必須使用小心爭用管理機(jī)制以保證前向進(jìn)度。
緩慢-樂觀(LO)
另一流行TM設(shè)計(jì)為緩慢-樂觀(LO),其將其寫入集合存儲于“寫入緩沖器”或“重做日志”中且在提交時(shí)檢測沖突(仍使用R 132及W 138位)。
版本設(shè)定:正如在EP系統(tǒng)中,在事務(wù)外部強(qiáng)制LO設(shè)計(jì)的MESI協(xié)議。一旦在事務(wù)內(nèi)部,讀取一行就招致標(biāo)準(zhǔn)MESI轉(zhuǎn)變,而且設(shè)定R 132位。同樣地,寫入一行會設(shè)定該行的W 138位,但處置LO設(shè)計(jì)的MESI轉(zhuǎn)變不同于EP設(shè)計(jì)的轉(zhuǎn)變。第一,在使用緩慢版本設(shè)定的情況下,寫入數(shù)據(jù)的新版本存儲于高速緩存分層中直至提交為止,同時(shí)其他事務(wù)能夠存取存儲器或其他高速緩存中可提供的舊版本。為了使舊版本可用,當(dāng)通過事務(wù)進(jìn)行第一次寫入時(shí)必須驅(qū)逐已變更行(M行)。第二,由于樂觀沖突檢測特征而無需升級未命中:如果事務(wù)具有處于S狀態(tài)的行,則其可簡單地寫入至該行且將該行升級至M狀態(tài)而不向其他事務(wù)傳達(dá)改變,這是因?yàn)闆_突檢測是在提交時(shí)進(jìn)行。
沖突檢測及驗(yàn)證:為了驗(yàn)證事務(wù)且檢測沖突,僅當(dāng)LO準(zhǔn)備提交時(shí),LO才將已推測式修改行的地址傳達(dá)給其他事務(wù)。在驗(yàn)證時(shí),處理器發(fā)送含有寫入集合中的全部地址的一個(gè)潛在大的網(wǎng)絡(luò)分組。數(shù)據(jù)未被發(fā)送,但存留于提交者的高速緩存中且被標(biāo)記為已變更(M)。為了在不搜尋用于被標(biāo)記為W的行的高速緩存的情況下構(gòu)建此分組,使用簡單位向量(被稱為“存儲緩沖器”,其中每高速緩存行具有一個(gè)位)以追蹤這些推測修改行。其他事務(wù)使用此地址分組以檢測沖突:如果在高速緩存中找到地址且設(shè)定R 132和/或W 138位,則發(fā)起沖突。如果找到行,但既不設(shè)定R 132亦不設(shè)定W 138,則該行簡單地失效,其類似于處理獨(dú)占加載。
為了支持事務(wù)原子性,必須原子地處置這些地址分組,亦即,不可同時(shí)存在具有相同地址的兩個(gè)地址分組。在LO系統(tǒng)中,這可通過在發(fā)送地址分組之前簡單地獲取全局提交令牌來實(shí)現(xiàn)。然而,可通過首先發(fā)送出地址分組、收集響應(yīng)、強(qiáng)制排序協(xié)議(或許首先為最舊事務(wù))且在全部響應(yīng)令人滿意后就提交而使用兩階段提交方案。
提交:一旦已發(fā)生驗(yàn)證,提交就無需特殊處理:簡單地清除W 138及R 132位以及存儲緩沖器。事務(wù)的寫入已經(jīng)在高速緩存中被標(biāo)記為已變更,且這些行的其他高速緩存的復(fù)本已經(jīng)由地址分組而失效。其他處理器能夠接著經(jīng)由規(guī)則一致性協(xié)議而存取已提交數(shù)據(jù)。
中止:回滾同等地容易:因?yàn)楸镜馗咚倬彺鎯?nèi)含有寫入集合,所以這些行可失效,接著清除W 138及R 132位以及存儲緩沖器。存儲緩沖器允許找到W行以在無需搜尋高速緩存的情況下失效。
緩慢-樂觀具有以下特性:中止非??焖?,從而無需額外加載或存儲且僅進(jìn)行本地改變。相比于在EP中找到的可串行化調(diào)度,可存在更多可串行化調(diào)度,這允許LO系統(tǒng)更積極地推測出事務(wù)是獨(dú)立的,其可得到較高性能。最后,沖突的晚檢測能夠增加前向進(jìn)度的可能性。
緩慢-樂觀亦具有以下特性:驗(yàn)證花費(fèi)與寫入集合的大小成比例的全局通信時(shí)間。因?yàn)閮H在提交時(shí)檢測沖突,所以注定事務(wù)會浪費(fèi)工作。
緩慢-悲觀(LP)
緩慢-悲觀(LP)代表第三TM設(shè)計(jì)選項(xiàng),位于EP與LO之間的某處:在寫入緩沖器中存儲新寫入行,但基于每一存取而檢測沖突。
版本設(shè)定:版本設(shè)定類似于但不相同于LO的版本設(shè)定:讀取一行會設(shè)定其R位132,寫入一行會設(shè)定其W位138,且存儲緩沖器用于追蹤高速緩存中的W行。又,當(dāng)通過事務(wù)進(jìn)行第一次寫入時(shí)必須驅(qū)逐已變更(M)行,正如在LO中那樣。然而,因?yàn)闆_突檢測是悲觀的,所以必須在自I,S→M升級事務(wù)行時(shí)執(zhí)行加載獨(dú)占,這不同于LO。
沖突檢測:LP的沖突檢測操作與EP的沖突檢測相同:使用一致性消息以尋找事務(wù)之間的沖突。
驗(yàn)證:類似于EP中,悲觀沖突檢測確保:在任何點(diǎn)處,正在運(yùn)行的事務(wù)不具有與任何其他正在運(yùn)行的事務(wù)的沖突,因此,驗(yàn)證為無操作。
提交:提交無需特殊處理:簡單地清除W 138及R 132位以及存儲緩沖器,類似于LO中。
中止:回滾亦類似于LO的回滾:使用存儲緩沖器而簡單地使寫入集合失效,且清除W及R位以及存儲緩沖器。
急切-樂觀(EO)
LP具有以下特性:類似于LO,中止非??焖?。類似于EP,悲觀沖突檢測的使用會縮減“注定”事務(wù)的數(shù)目。類似于EP,不允許一些可串行化調(diào)度,且必須在每一快取未命中時(shí)執(zhí)行沖突檢測。
版本設(shè)定與沖突檢測的最后組合為急切-樂觀(EO)。EO可為用于HTM系統(tǒng)的次最佳選擇:因?yàn)樵谶m當(dāng)位置中寫入新事務(wù)版本,所以其他事務(wù)無選擇,但隨著發(fā)生沖突(亦即,隨著發(fā)生快取未命中)而注意沖突。但是,因?yàn)镋O等待直至提交時(shí)為止以檢測沖突,所以這些事務(wù)變?yōu)椤敖┦?zombie)”,從而繼續(xù)執(zhí)行、浪費(fèi)資源,又“注定”中止。
EO已被證實(shí)為有用于STM中且由Bartok-STM及McRT實(shí)施。緩慢版本設(shè)定STM需要在每一讀取時(shí)檢查其寫入緩沖器以確保其正讀取最新值。因?yàn)閷懭刖彌_器并非硬件結(jié)構(gòu),所以這是昂貴的,因此首選在適當(dāng)位置中寫入急切版本設(shè)定。另外,因?yàn)闄z查沖突在STM中也是昂貴的,所以樂觀沖突檢測提供大量執(zhí)行此操作的優(yōu)點(diǎn)。
爭用管理
上文已描述事務(wù)在系統(tǒng)已決定中止該事務(wù)后如何回滾,但是,因?yàn)闆_突涉及兩個(gè)事務(wù),所以需要探索哪一事務(wù)應(yīng)中止、應(yīng)如何發(fā)起該中止及應(yīng)何時(shí)重試已中止事務(wù)的主題。這些主題為通過爭用管理(CM)(事務(wù)存儲器的關(guān)鍵組件)而處理的主題。下文描述關(guān)于系統(tǒng)如何發(fā)起中止的策略及管理哪些事務(wù)應(yīng)在沖突中中止的各種已建立方法。
爭用管理策略
爭用管理(CM)策略為判定沖突中涉及的哪一事務(wù)應(yīng)中止且何時(shí)應(yīng)重試中止事務(wù)的機(jī)制。舉例而言,通常為如下狀況:立即重試已中止事務(wù)不會導(dǎo)致最佳性能。相反地,采用退避機(jī)制(其延遲已中止事務(wù)的重試)能得到較好性能。STM首先盡力尋找最佳爭用管理策略,且下文所概述的許多策略最初被開發(fā)用于STM。
CM策略利用數(shù)種度量以進(jìn)行決策,包括事務(wù)的年齡、讀取及寫入集合的大小、先前中止的數(shù)目等。用于進(jìn)行此類決策的度量的組合是無限的,但下文大致按增加復(fù)雜性的次序描述某些組合。
為了建立某一命名法,首先應(yīng)注意,在沖突中存在兩方:攻擊者及防御者。攻擊者為請求對共享存儲器位置的存取的事務(wù)。在悲觀沖突檢測中,攻擊者為發(fā)出加載或加載獨(dú)占的事務(wù)。在樂觀中,攻擊者為嘗試驗(yàn)證的事務(wù)。防御者在兩種狀況下為接收攻擊者的請求的事務(wù)。
積極CM策略立即且始終重試攻擊者或防御者。在LO中,積極意味著攻擊者始終獲勝,且因此,積極有時(shí)被稱為提交者獲勝。此策略用于最早LO系統(tǒng)。在EP的情況下,積極可為防御者獲勝或攻擊者獲勝。
重新開始將立即經(jīng)歷另一沖突的沖突事務(wù)必然浪費(fèi)工作—即,互連帶寬再填充快取未命中。禮貌CM策略在重新開始沖突之前采用指數(shù)退避(但亦可使用線性)。為了防止耗盡(過程不具有由調(diào)度器分配給其的資源的情形),指數(shù)退避在一些n次重試之后極大地增加事務(wù)成功的勝算。
沖突解決的另一方法是隨機(jī)地中止攻擊者或防御者(被稱為隨機(jī)化的策略)。可將此策略與隨機(jī)化退避方案組合以避免不需要的爭用。
然而,當(dāng)選擇事務(wù)以中止時(shí),進(jìn)行隨機(jī)選擇可引起中止已完成“大量工作”的事務(wù),這會浪費(fèi)資源。為了避免此浪費(fèi),當(dāng)判定哪一事務(wù)中止時(shí)可考慮在事務(wù)時(shí)完成的工作量。工作的一個(gè)度量可為事務(wù)的年齡。其他方法包括最舊、塊狀TM、大小物質(zhì)、Karma及Polka。最舊為中止沖突中的較年輕事務(wù)的簡單時(shí)間戳方法。塊狀TM使用此方案。大小物質(zhì)類似于最舊而非事務(wù)年齡,讀取/寫入字的數(shù)目用作優(yōu)先級,在固定數(shù)目次中止之后還原至最舊。Karma是類似的,使用寫入集合的大小作為優(yōu)先級。在退避固定時(shí)間量之后,回滾接著進(jìn)行。已中止事務(wù)在中止之后保持其優(yōu)先級(因此,名稱Karma)。Polka的工作類似于Karma而非退避預(yù)定時(shí)間量,其每次更按指數(shù)律成比例地退避。
因?yàn)橹兄估速M(fèi)工作,所以爭論停止攻擊者直至防御者已完成其事務(wù)為止將導(dǎo)致較好性能是邏輯的。不幸的是,此簡單方案容易導(dǎo)致死鎖。
死鎖避免技術(shù)能夠用于解決此問題。貪婪使用兩個(gè)規(guī)則以避免死鎖。第一規(guī)則為:如果第一事務(wù)T1相比于第二事務(wù)T0具有較低優(yōu)先級,或如果T1等待另一事務(wù),則T1在與T0沖突時(shí)中止。第二規(guī)則為:如果T1相比于T0具有較高優(yōu)先級且不等待,則T0等待直至T1提交、中止或開始等待為止(在此狀況下應(yīng)用第一規(guī)則)。貪婪提供關(guān)于時(shí)間界限的一些保證以用于執(zhí)行一事務(wù)集合。一種EP設(shè)計(jì)(LogTM)使用類似于貪婪的CM策略以使用保守死鎖避免來實(shí)現(xiàn)停止。
實(shí)例MESI一致性規(guī)則提供多處理器高速緩存系統(tǒng)的高速緩存行可駐留的四個(gè)可能狀態(tài)M、E、S及I,其被定義如下:
已修改(M):高速緩存行僅存在于當(dāng)前高速緩存中,且為已變更;其已自主存儲器中的值修改。在準(zhǔn)許(不再有效的)主存儲器狀態(tài)的任何其他讀取之前,需要高速緩存以在未來的某一時(shí)間將數(shù)據(jù)回寫至主存儲器?;貙憣⒃撔懈淖?yōu)楠?dú)占狀態(tài)。
獨(dú)占(E):高速緩存行僅存在于當(dāng)前高速緩存中,但為未變更(clean);其匹配于主存儲器。響應(yīng)于讀取請求,高速緩存行可在任何時(shí)間改變?yōu)楣蚕頎顟B(tài)。替代地,當(dāng)寫入至高速緩存行時(shí),其可改變?yōu)橐研薷臓顟B(tài)。
共享(S):指示此高速緩存行可存儲于機(jī)器的其他高速緩存中且為“未變更”;其匹配于主存儲器。可在任何時(shí)間丟棄該行(改變?yōu)闊o效狀態(tài))。
無效(I):指示此高速緩存行為無效(未使用)。
除了MESI一致性位以外或編碼于MESI一致性位中,亦可針對每一高速緩存行提供TM一致性狀態(tài)指示符(R 132、W 138)。R 132指示符指示已自高速緩存行的數(shù)據(jù)讀取當(dāng)前事務(wù),且W 138指示符指示已將當(dāng)前事務(wù)寫入至高速緩存行的數(shù)據(jù)。
在TM設(shè)計(jì)的另一方面中,使用事務(wù)存儲緩沖器來設(shè)計(jì)系統(tǒng)。2000年3月31日申請且全文以引用方式并入本文中的名為“Methods and Apparatus for Reordering and Renaming Memory References in a Multiprocessor Computer System”的美國專利第6,349,361號教導(dǎo)一種用于在至少具有第一處理器及第二處理器的多處理器計(jì)算機(jī)系統(tǒng)中重新排序及重新命名存儲器引用的方法。第一處理器具有第一專用高速緩存及第一緩沖器,且第二處理器具有第二專用高速緩存及第二緩沖器。所述方法包括如下操作:對于由第一處理器接收以存儲數(shù)據(jù)的多個(gè)選通存儲請求中的每一者,由第一專用高速緩存獨(dú)占地獲取含有所述數(shù)據(jù)的高速緩存行,且在第一緩沖器中存儲所述數(shù)據(jù)。在第一緩沖器自第一處理器接收到對加載特定數(shù)據(jù)的加載請求后,基于載入及存儲操作的按次序序列而將特定數(shù)據(jù)自存儲于第一緩沖器中的數(shù)據(jù)當(dāng)中提供至第一處理器。在第一高速緩存自第二高速緩存接收到針對給定數(shù)據(jù)的加載請求后,指示一錯(cuò)誤條件,且當(dāng)針對給定數(shù)據(jù)的加載請求對應(yīng)于存儲于第一緩沖器中的數(shù)據(jù)時(shí),將所述處理器中的至少一者的當(dāng)前狀態(tài)重設(shè)至較早狀態(tài)。
一個(gè)此類事務(wù)存儲器工具的主要實(shí)施組件為用于保留預(yù)事務(wù)GR(通用寄存器)內(nèi)容的事務(wù)備份寄存器文件、用于追蹤在事務(wù)期間存取的高速緩存行的高速緩存目錄、用于緩沖存儲直至事務(wù)結(jié)束為止的存儲高速緩存,及用于執(zhí)行各種復(fù)雜功能的固件例程。在此章節(jié)中描述詳細(xì)實(shí)施方式。
IBM zEnterprise EC12企業(yè)服務(wù)器實(shí)施例
IBM zEnterprise EC12企業(yè)服務(wù)器在事務(wù)存儲器中引入事務(wù)執(zhí)行(TX),且部分地描述于可得自IEEE計(jì)算機(jī)學(xué)會會議出版服務(wù)(CP)的2012年12月1至5日在MICRO-45處呈現(xiàn)的論文集第25至36頁的論文“Transactional Memory Architecture and Implementation for IBM System z”(溫哥華、英國哥倫比亞、加拿大)中,該論文的全文以引用方式并入本文中。
表3示出實(shí)例事務(wù)。并不保證以TBEGIN開始的事務(wù)以TEND永遠(yuǎn)成功地完成,這是因?yàn)槠淇稍诿恳灰褔L試執(zhí)行時(shí)經(jīng)歷中止條件,例如,歸因于與其他CPU的重復(fù)沖突。這要求程序(例如)通過使用傳統(tǒng)鎖定方案來支持后退路徑以非事務(wù)地執(zhí)行相同操作。這對程序設(shè)計(jì)及軟件檢驗(yàn)團(tuán)隊(duì)施予顯著負(fù)擔(dān),尤其是在后退路徑未由可靠編譯器自動地產(chǎn)生的情況下。
表3
針對已中止事務(wù)執(zhí)行(TX)事務(wù)提供后退路徑的要求是麻煩的。對共享數(shù)據(jù)結(jié)構(gòu)操作的許多事務(wù)被預(yù)期為短的、接觸僅幾個(gè)相異存儲器位置,且僅使用簡單指令。對于這些事務(wù),IBM zEnterprise EC12引入受約束事務(wù)的概念;在正常條件下,盡管是在不對必要重試的數(shù)目提供嚴(yán)格限制的情況下,但CPU 114保證受約束事務(wù)最終成功地結(jié)束。受約束事務(wù)以TBEGINC指令開始且以規(guī)則TEND結(jié)束。將任務(wù)實(shí)施為受約束或非受約束事務(wù)通常會引起非常相當(dāng)?shù)男阅?,但受約束事務(wù)通過移除針對后退路徑的需要而簡化軟件開發(fā)。IBM的事務(wù)執(zhí)行架構(gòu)進(jìn)一步描述于2012年9月自IBM公開的第十版SA22-7832-09的z/Architecture,Principles of Operation(其全文以引用方式并入本文)中。
受約束事務(wù)以TBEGINC指令開始。以TBEGINC起始的事務(wù)必須遵循一系列程序設(shè)計(jì)約束;否則,程序采取非可過濾約束違反中斷。例示性約束可包括但不限于:事務(wù)可執(zhí)行最大32個(gè)指令,全部指令文字必須在存儲器的256個(gè)連續(xù)字節(jié)內(nèi);事務(wù)僅含有前向指向相對分支(亦即,無循環(huán)或子例程調(diào)用);事務(wù)可存取存儲器的最大4個(gè)對準(zhǔn)八進(jìn)制字(八進(jìn)制字為32個(gè)字節(jié));及限定指令集合以排除類似于十進(jìn)制或浮點(diǎn)運(yùn)算的復(fù)雜指令。約束被選擇為使得可執(zhí)行類似于雙重鏈接列表-插入/刪除操作的許多公共操作,包括原子比較及交換以高達(dá)4個(gè)對準(zhǔn)八進(jìn)制字為目標(biāo)的非常強(qiáng)大的概念。同時(shí),約束被保守地選擇為使得未來CPU實(shí)施方式可在無需調(diào)整約束的情況下保證事務(wù)成功,這是因?yàn)檫@原本將會導(dǎo)致軟件不兼容性。
TBEGINC通常作用就像在IBM的zEC12服務(wù)器上的TSX或TBEGIN中的XBEGIN,只是不存在浮點(diǎn)寄存器(FPR)控件及程序中斷過濾字段且控件被視為0。在事務(wù)中止時(shí),將指令地址直接地設(shè)定回至TBEGINC而非在反映立即重試及用于受約束事務(wù)的中止路徑的不存在之后的指令。
在受約束事務(wù)內(nèi)不允許嵌套事務(wù),但如果在非受約束事務(wù)內(nèi)發(fā)生TBEGINC,則其被處理為開啟新非受約束嵌套層級,正如TBEGIN那樣。此情形可(例如)在非受約束事務(wù)調(diào)用在內(nèi)部使用受約束事務(wù)的子例程的情況下發(fā)生。
因?yàn)橹袛噙^濾隱含地關(guān)閉,所以在受約束事務(wù)期間的全部異常導(dǎo)致操作系統(tǒng)(OS)的中斷。事務(wù)的最終成功完成依賴于OS頁入通過任何受約束事務(wù)而觸控的至多4個(gè)頁的能力。OS亦必須確保時(shí)間片段足夠長以允許事務(wù)完成。
表4
表4示出表3中的代碼的受約束事務(wù)實(shí)施方式,這假定受約束事務(wù)不與其他基于鎖定的代碼交互。因此未示出鎖測試,但在受約束事務(wù)與基于鎖的代碼混合的情況下可添加鎖測試。
當(dāng)重復(fù)地發(fā)生失敗時(shí),使用毫代碼(millicode)作為系統(tǒng)固件的一部分來執(zhí)行軟件仿真。有利地,受約束事務(wù)由于自編程人員移除負(fù)擔(dān)而具有期望屬性。
參看圖3,IBM zEnterprise EC12處理器引入事務(wù)執(zhí)行工具。該處理器可每時(shí)鐘周期解碼3個(gè)指令;將簡單指令分派為單個(gè)微操作,且將較復(fù)雜指令斷裂成多個(gè)微操作。將微操作(Uop 232b)寫入至統(tǒng)一發(fā)出隊(duì)列216中,所述微操作可從該處被無次序地發(fā)出。每隔一個(gè)周期可執(zhí)行高達(dá)兩個(gè)定點(diǎn)、一個(gè)浮點(diǎn)、兩個(gè)載入/存儲及兩個(gè)分支指令。全局完成表(GCT)232保留每一微操作及事務(wù)嵌套深度(TND)232a。GCT 232在解碼時(shí)被按次序?qū)懭搿⒆粉櫭恳晃⒉僮?32b的執(zhí)行狀態(tài),且當(dāng)最舊指令組的全部微操作232b已成功地執(zhí)行時(shí)完成指令。
第1級(L1)數(shù)據(jù)高速緩存240為具有256個(gè)字節(jié)高速緩存行及4周期使用延時(shí)的96KB(千字節(jié))6路關(guān)聯(lián)性高速緩存,耦合至具有用于L1 240未命中的7周期使用延時(shí)損失的專用1MB(兆字節(jié))8路關(guān)聯(lián)性第2級(L2)數(shù)據(jù)高速緩存268。L1 240高速緩存是最接近于處理器的高速緩存,且Ln高速緩存為在第n緩存級處的高速緩存。L1 240及L2 268高速緩存兩者是貫穿存儲的(store-through)。每一中央處理器(CP)芯片上的六個(gè)核心共享48MB第3級存儲內(nèi)高速緩存,且六個(gè)CP芯片連接至片外384MB第4級高速緩存,在玻璃陶瓷多芯片模塊(MCM)上封裝在一起。高達(dá)4個(gè)多芯片模塊(MCM)可連接至具有高達(dá)144個(gè)核心(并非全部核心皆可用于執(zhí)行客戶工作負(fù)載)的一致對稱多處理器(SMP)系統(tǒng)。
一致性以MESI協(xié)議的變型而管理。高速緩存行可被擁有為只讀(共享)或獨(dú)占;L1 240及L2 268是貫穿存儲的且因此不含有已變更行。L3 272及L4高速緩存(未示出)是存儲內(nèi)的且追蹤已變更狀態(tài)。每一高速緩存包括全部其連接的低級高速緩存。
一致性請求被稱為“交叉詢問”(XI),且自較高級至較低級高速緩存及在L4之間分層式地發(fā)送。當(dāng)一個(gè)核心未命中L1 240及L2 268且從其本地L3 272請求高速緩存行時(shí),L3 272檢查其是否擁有該行,且在其將高速緩存行返回至請求者之前在必要時(shí)將XI發(fā)送至在該L3 272下的當(dāng)前擁有的L2 268/L1 240以確保一致性。如果請求亦未命中L3 272,則L3 272將請求發(fā)送至L4(未圖示),此情形通過將XI發(fā)送至在該L4下的全部必要L3且發(fā)送至相鄰L4而強(qiáng)制一致性。接著,L4對將響應(yīng)轉(zhuǎn)發(fā)至L2 268/L1240的請求L3作出響應(yīng)。
應(yīng)注意,歸因于高速緩存分層的包括性規(guī)則,有時(shí)歸因于由來自請求的關(guān)聯(lián)性溢出導(dǎo)致的在較高級高速緩存上的驅(qū)逐而將高速緩存行自低級高速緩存XI至其他高速緩存行。這些XI可被稱為“LRU XI”,其中LRU代表最近最少使用。
在引用又一類型的XI請求的情況下,降級XI將高速緩存所有權(quán)自獨(dú)占式轉(zhuǎn)變成只讀狀態(tài),且獨(dú)占式XI將高速緩存所有權(quán)自獨(dú)占式轉(zhuǎn)變成無效狀態(tài)。降級XI及獨(dú)占式XI需要回至XI發(fā)送者的響應(yīng)。目標(biāo)高速緩存可“接受”XI,或在其在接受XI之前第一次需要驅(qū)逐已變更數(shù)據(jù)的情況下發(fā)送“拒絕”響應(yīng)。L1 240/L2 268高速緩存是貫穿存儲的,但在其具有需要在降級獨(dú)占式狀態(tài)之前發(fā)送至L3的在其存儲隊(duì)列中的存儲的情況下可拒絕降級XI及獨(dú)占式XI。已拒絕XI將由發(fā)送者重復(fù)。只讀XI被發(fā)送至擁有行只讀的高速緩存;無需針對此類XI的響應(yīng),這是因?yàn)槠洳荒鼙痪芙^。SMP協(xié)議的細(xì)節(jié)類似于由P.Mak、C.Walters及G.Strait在2009年IBM研究及開發(fā)雜志第53:1卷的“IBM System z10processor cache subsystem microarchitecture”中針對IBM z10所描述的細(xì)節(jié),其全文以引用方式并入本文中。
事務(wù)指令執(zhí)行
圖3描繪實(shí)例CPU環(huán)境112的實(shí)例組件,包括CPU 114及與其交互的高速緩存/組件(諸如,圖1及圖2所描繪的高速緩存/組件)。指令解碼單元208(IDU)保持追蹤當(dāng)前事務(wù)嵌套深度212(TND)。當(dāng)IDU 208接收到TBEGIN指令時(shí),嵌套深度212遞增,且相反地針對TEND指令遞減。嵌套深度212針對每一已分派指令而寫入至GCT 232中。當(dāng)TBEGIN或TEND在稍后被清倉的推測式路徑上解碼時(shí),IDU 208的嵌套深度212自未被清倉的最年輕GCT 232項(xiàng)被刷新。事務(wù)狀態(tài)亦寫入至發(fā)出隊(duì)列216中以供執(zhí)行單元(通常由加載/存儲單元(LSU)280)使用,其亦具有包括于LSU280中的有效地址計(jì)算器236。如果事務(wù)在到達(dá)TEND指令之前中止,則TBEGIN指令可指定一事務(wù)診斷塊(TDB)以用于記錄狀態(tài)信息。
類似于嵌套深度,IDU 208/GCT 232經(jīng)由事務(wù)嵌套而協(xié)作地追蹤存取寄存器/浮點(diǎn)寄存器(AR/FPR)修改屏蔽;當(dāng)AR/FPR修改指令被解碼且修改屏蔽阻止該情形時(shí),IDU 208可將中止請求放置至GCT 232中。當(dāng)指令變得接近完成時(shí),完成被阻止且事務(wù)中止。其他受限指令被類似地處置,在受約束事務(wù)中的同時(shí)解碼的情況下包括TBEGIN,或超過最大嵌套深度。
最外TBEGIN取決于GR存儲屏蔽而斷裂成多個(gè)微操作;每一微操作232b(包括(例如)uop 0、uop 1及uop 2)將由兩個(gè)定點(diǎn)單元(FXU)220中的一者執(zhí)行以將一對GR 228保存至專用事務(wù)備份寄存器文件224(其用于在事務(wù)中止的狀況下稍后還原GR 228內(nèi)容)中。又,如果指定了1,則TBEGIN繁衍微操作232b以針對TDB執(zhí)行可存取性測試;地址保存在專用寄存器中以供稍后在中止?fàn)顩r下使用。在最外TBEGIN的解碼時(shí),TBEGIN的指令地址及指令文字亦保存在專用寄存器中以供以后進(jìn)行潛在中止處理。
TEND及NTSTG為單微操作232b指令;NTSTG(非事務(wù)存儲)類似于正常存儲而處置,除了在發(fā)出隊(duì)列216中被標(biāo)記為非事務(wù)以使得LSU 280可對其進(jìn)行適當(dāng)處理。TEND在執(zhí)行時(shí)為無操作,當(dāng)TEND完成時(shí)執(zhí)行事務(wù)的結(jié)束。
如所提到,在事務(wù)內(nèi)的指令因而被標(biāo)記于發(fā)出隊(duì)列216中,但以其他方式通常不變地執(zhí)行;LSU 280執(zhí)行如下一章節(jié)中所描述的隔離追蹤。
因?yàn)榻獯a是按次序的,且因?yàn)镮DU 208保持追蹤當(dāng)前事務(wù)狀態(tài)且將其連同來自事務(wù)的每一指令一起寫入至發(fā)出隊(duì)列216中,所以可無次序地執(zhí)行在事務(wù)之前、之內(nèi)及之后的TBEGIN、TEND及指令的執(zhí)行。甚至有可能的是(但未必),首先執(zhí)行TEND,接著執(zhí)行整個(gè)事務(wù),且最后執(zhí)行TBEGIN。在完成時(shí)經(jīng)由GCT 232而還原程序次序。事務(wù)的長度不受到GCT 232的大小限制,這是因?yàn)橥ㄓ眉拇嫫?GR)228可自備份寄存器文件224被還原。
在執(zhí)行期間,基于事件抑制控制而過濾程序事件記錄(PER)事件,且在啟用的情況下檢測PER TEND事件。類似地,在事務(wù)模式中時(shí),偽隨機(jī)產(chǎn)生器可在通過事務(wù)診斷控制而啟用時(shí)造成隨機(jī)中止。
追蹤事務(wù)隔離
加載/存儲單元280追蹤在事務(wù)執(zhí)行期間存取的高速緩存行,且在來自另一CPU的XI(或LRU-XI)與占用空間(footprint)沖突的情況下觸發(fā)中止。如果沖突XI為獨(dú)占或降級XI,則在期待在L3 272重復(fù)XI之前完成事務(wù)的情況下,LSU 280將XI拒絕回至L3 272。此“伸直手推開(stiff-arming)”在高度爭用事務(wù)中非常有效。為了在兩個(gè)CPU彼此伸直手推開時(shí)防止掛起,實(shí)施XI拒絕計(jì)數(shù)器,其在滿足閾值時(shí)觸發(fā)事務(wù)中止。
L1高速緩存目錄240傳統(tǒng)上以靜態(tài)隨機(jī)存取存儲器(SRAM)而實(shí)施。對于事務(wù)存儲器實(shí)施方式,目錄的有效位244(64列×6路)已移動至正常邏輯鎖存器中,且每高速緩存行補(bǔ)充有兩個(gè)更多位:TX讀取248及TX已變更252位。
當(dāng)解碼新的最外TBEGIN(其相對于先前仍擱置事務(wù)而互鎖)時(shí)重設(shè)TX讀取248位。在執(zhí)行時(shí)由在發(fā)出隊(duì)列中被標(biāo)記為“事務(wù)”的每一加載指令設(shè)定TX讀取248位。應(yīng)注意,如果(例如)在錯(cuò)誤預(yù)測分支路徑上執(zhí)行推測加載,則此情形可導(dǎo)致過度標(biāo)記。因?yàn)槎鄠€(gè)加載可同時(shí)完成,所以在加載完成時(shí)設(shè)定TX讀取248位的替代方案對于硅區(qū)而言代價(jià)太大,從而需要加載隊(duì)列上的許多讀取端口。
存儲以與非事務(wù)模式相同的方式執(zhí)行,但事務(wù)標(biāo)記被放置于存儲指令的存儲隊(duì)列(STQ)260項(xiàng)中。在回寫時(shí),當(dāng)來自STQ 260的數(shù)據(jù)寫入至L1240中時(shí),L1目錄256中的TX已變更位252被設(shè)定用于所寫入的高速緩存行。僅在存儲指令已完成之后才發(fā)生至L1 240中的存儲回寫,且每周期回寫至多一個(gè)存儲。在完成及回寫之前,加載可借助于存儲轉(zhuǎn)發(fā)而自STQ260存取數(shù)據(jù);在回寫之后,CPU 114(圖2)能存取L1 240中的推測式更新的數(shù)據(jù)。如果事務(wù)成功地結(jié)束,則全部高速緩存行的TX已變更位252被清除,且尚未寫入的存儲的TX標(biāo)記亦在STQ 260中被清除,從而將擱置存儲有效轉(zhuǎn)變成正常存儲。
在事務(wù)中止時(shí),自STQ 260使全部擱置事務(wù)存儲失效,即使這些存儲已完成亦是如此。通過L1 240中的事務(wù)而修改(亦即,使TX已變更位252開啟)的全部高速緩存行使其有效位關(guān)斷,從而瞬時(shí)地自L1 240高速緩存有效地移除所述高速緩存行。
架構(gòu)要求在完成新指令之前保持事務(wù)讀取集合與寫入集合的隔離。當(dāng)XI擱置時(shí),通過在適當(dāng)時(shí)間停止指令完成而確保此隔離;允許推測式無次序執(zhí)行,這樂觀地假定擱置XI是到不同地址且實(shí)際上不造成事務(wù)沖突。此設(shè)計(jì)非常自然地與實(shí)施于目前最新系統(tǒng)上以確保架構(gòu)所需要的強(qiáng)存儲器排序的XI-完成互鎖配合。
當(dāng)L1 240接收到XI時(shí),L1 240存取目錄以檢查L1 240中的已XI地址的有效性,且如果TX讀取位248在已XI行上活動且XI未被拒絕,則LSU 280觸發(fā)中止。當(dāng)具有活動TX讀取位248的高速緩存行是自L1 240被LRU時(shí),特殊LRU擴(kuò)展向量對于L1 240的64列中的每一者記住TX讀取行存在于該列上。因?yàn)閷τ贚RU擴(kuò)展不存在精確地址追蹤,所以命中LSU 280的有效擴(kuò)展列的任何非拒絕XI觸發(fā)中止。提供LRU擴(kuò)展會將讀取占用空間能力自L1大小有效地增加至L2大小及關(guān)聯(lián)性,前提是相對于非精確LRU擴(kuò)展追蹤的與其他CPU 114(圖1)的沖突不造成中止。
存儲占用空間受到存儲高速緩存大小(下文更詳細(xì)地論述存儲高速緩存)限制且因此隱含地受到L2 268大小及關(guān)聯(lián)性限制。當(dāng)TX已變更252高速緩存行自L1 240被LRU時(shí),無需執(zhí)行LRU擴(kuò)展動作。
存儲高速緩存
在目前最新系統(tǒng)中,因?yàn)長1 240及L2 268為貫穿存儲高速緩存,所以每一存儲指令造成L3 272存儲存??;在現(xiàn)在每L3 272具有6個(gè)核心且每一核心的性能進(jìn)一步改進(jìn)的情況下,針對L3 272的存儲率(及針對L2 268在較少程度上)對于某些工作負(fù)載變得有問題。為了避免存儲排隊(duì)延遲,必須添加搜集存儲高速緩存264,其在將相鄰地址發(fā)送至L3 272之前將存儲組合至相鄰地址。
對于事務(wù)存儲器性能,可接受的是在事務(wù)中止時(shí)使來自L1 240的每一TX已變更252高速緩存行失效,這是因?yàn)長2 268高速緩存非常接近(7循環(huán)L1 240未命中損失)取回未變更行。然而,對于性能(及用于追蹤的硅面積)將不可接受的是使事務(wù)存儲在事務(wù)結(jié)束之前寫入L2 268且接著在中止時(shí)使全部已變更L2 268高速緩存行失效(或在共享L3 272上甚至更壞)。
存儲帶寬及事務(wù)存儲器存儲處置的兩個(gè)問題可皆使用搜集存儲高速緩存264而解決。高速緩存232是64個(gè)項(xiàng)的循環(huán)隊(duì)列,每一項(xiàng)保存具有字節(jié)精確有效位的數(shù)據(jù)的128個(gè)字節(jié)。在非事務(wù)操作中,當(dāng)自LSU 280接收到存儲時(shí),存儲高速緩存檢查是否存在針對相同地址的項(xiàng),且如果如此,則將新存儲搜集至現(xiàn)有項(xiàng)中。如果不存在項(xiàng),則將新項(xiàng)寫入至隊(duì)列中,且如果自由項(xiàng)的數(shù)目降至低于閾值,則將最舊項(xiàng)回寫至L2 268及L3 272高速緩存。
當(dāng)新的最外事務(wù)開始時(shí),存儲高速緩存中的全部現(xiàn)有項(xiàng)被標(biāo)記為關(guān)閉,使得無新存儲可搜集至其中,且這些項(xiàng)至L2 268及L3 272的驅(qū)逐開始。自該點(diǎn)上看,來自LSU 280STQ 260的事務(wù)存儲分配新項(xiàng),或搜集至現(xiàn)有事務(wù)項(xiàng)中。這些存儲至L2 268及L3 272中的回寫被阻止,直至事務(wù)成功地結(jié)束為止;在該點(diǎn)處,后續(xù)(后事務(wù))存儲能繼續(xù)搜集至現(xiàn)有項(xiàng)中,直至下一事務(wù)再次關(guān)閉這些項(xiàng)為止。
在每一獨(dú)占或降級XI時(shí)查詢存儲高速緩存,且在XI與任何活動項(xiàng)相當(dāng)?shù)那闆r下造成XI拒絕。如果在連續(xù)地拒絕XI時(shí)核心并未完成另外指令,則事務(wù)在某一閾值處中止以避免掛起。
當(dāng)存儲高速緩存溢出時(shí),LSU 280請求事務(wù)中止。當(dāng)LSU 280試圖發(fā)送不能合并至現(xiàn)有項(xiàng)中的新存儲時(shí),LSU 280檢測此條件,且整個(gè)存儲高速緩存被填充有來自當(dāng)前事務(wù)的存儲。存儲高速緩存被管理為L2 268的子集:雖然可自L1 240驅(qū)逐事務(wù)已變更行,但其必須在整個(gè)事務(wù)中保持駐留在L2 268中。最大存儲占用空間因此限于64×128字節(jié)的存儲高速緩存大小,且其亦受到L2 268的關(guān)聯(lián)性限制。因?yàn)長2 268為8路關(guān)聯(lián)性的且具有512個(gè)列,所以其通常足夠大以不造成事務(wù)中止。
如果事務(wù)中止,則通知存儲高速緩存且使保留事務(wù)數(shù)據(jù)的全部項(xiàng)失效。存儲高速緩存還具有每雙字(8字節(jié))一標(biāo)記,不管項(xiàng)是否由NTSTG指令寫入,這些雙字在整個(gè)事務(wù)中止中保持有效。
毫代碼實(shí)施的功能
傳統(tǒng)上,IBM大型主機(jī)服務(wù)器處理器含有被稱為毫代碼的固件層,其執(zhí)行類似于某些CISC指令執(zhí)行、中斷處置、系統(tǒng)同步及RAS的復(fù)雜功能。毫代碼包括機(jī)器相關(guān)指令,以及自存儲器取回及執(zhí)行的指令集架構(gòu)(ISA)的指令,類似于應(yīng)用程序及操作系統(tǒng)(OS)的指令。固件駐留于客戶程序不能存取的主存儲器的受限區(qū)中。當(dāng)硬件檢測到需要調(diào)用毫代碼的情形時(shí),指令取回單元204切換成“毫代碼模式”且開始在毫代碼存儲器區(qū)中的適當(dāng)位置處取回。毫代碼可以以與指令集架構(gòu)(ISA)的指令相同的方式被取回及執(zhí)行,且可包括ISA指令。
對于事務(wù)存儲器,毫代碼涉及各種復(fù)雜情形。每一事務(wù)中止調(diào)用專用毫代碼子例程以執(zhí)行必要中止操作。事務(wù)中止毫代碼通過讀取保存硬件內(nèi)部中止原因、潛在異常原因及已中止指令地址的專用寄存器(SPR)而開始,如果指定了1,則此毫代碼接著用于存儲TDB。自SPR加載TBEGIN指令文字以獲得GR保存屏蔽,這對于使毫代碼知道哪些GR 238將被還原是所需的。
CPU 114(圖2)支持特殊僅毫代碼指令以讀出備份GR 224且將其復(fù)制至主GR 228中。亦自SPR加載TBEGIN指令地址以在PSW中設(shè)定新指令地址以便一旦在毫代碼中止子例程結(jié)束后就在TBEGIN之后繼續(xù)執(zhí)行。在中止是由非過濾程序中斷造成的狀況下,該P(yáng)SW稍后可被存儲為程序舊PSW。
TABORT指令可被毫代碼實(shí)施;當(dāng)IDU 208解碼TABORT時(shí),其指示指令取回單元分支至TABORT的毫代碼中,毫代碼自其分支至公共中止子例程中。
提取事務(wù)嵌套深度(ETND)指令亦可被毫編碼,這是因?yàn)槠洳⒎切阅荜P(guān)鍵的;毫代碼自專用硬件寄存器中加載當(dāng)前嵌套深度且將其放置至GR 228中。PPA指令被毫編碼;其基于由軟件作為操作數(shù)而提供給PPA的當(dāng)前中止計(jì)數(shù)且亦基于其他硬件內(nèi)部狀態(tài)來執(zhí)行最佳延遲。
對于受約束事務(wù),毫代碼可保持追蹤中止的數(shù)目。在成功TEND完成時(shí),或如果發(fā)生至OS中的中斷(因?yàn)椴⒉恢繭S是否或何時(shí)將返回至程序),則將計(jì)數(shù)器重設(shè)至0。取決于當(dāng)前中止計(jì)數(shù),毫代碼能夠調(diào)用某些機(jī)制以改進(jìn)后續(xù)事務(wù)重試的成功可能性。該機(jī)制涉及(例如)連續(xù)增加重試之間的隨機(jī)延遲,及縮減推測執(zhí)行量以避免遇到由對事務(wù)并未實(shí)際上使用的數(shù)據(jù)的推測存取造成的中止。作為最后手段,毫代碼可廣播至其他CPU 114(圖2)以在釋放其他CPU 114以繼續(xù)正常處理之前停止全部沖突工作、重試本地事務(wù)。多個(gè)CPU 114必須被協(xié)調(diào)以不造成死鎖,因此需要不同CPU114上的毫代碼實(shí)例之間的某一串行化。
圖4說明根據(jù)一個(gè)實(shí)施例的計(jì)算機(jī)系統(tǒng)300。圖4被配置為實(shí)施圖1至圖3及圖5至圖18中論述的特征。計(jì)算機(jī)300包括通過分層高速緩存子系統(tǒng)而與存儲器310通信的被指定為處理器112a(CPU1)及處理器112b(CPU2)的多處理器(連同未圖示的額外處理器),其中由處理器進(jìn)行的事務(wù)加載在分層高速緩存子系統(tǒng)的高速緩存中被監(jiān)視。圖4所示的計(jì)算機(jī)系統(tǒng)300具有與圖1所示的計(jì)算機(jī)系統(tǒng)100相同的組件及相同標(biāo)號,但圖4中并未示出圖1中的每一組件。
計(jì)算機(jī)系統(tǒng)300可管理呈現(xiàn)給可用于或當(dāng)前處理事務(wù)的一個(gè)或多個(gè)處理器的請求,例如,中斷。在一個(gè)實(shí)例中,請求處理器(例如,CPU 1(112a))可選擇接收/遠(yuǎn)程處理器(例如,CPU 2(112b))且將一請求發(fā)送至選定遠(yuǎn)程處理器。在一個(gè)實(shí)例中,計(jì)算機(jī)系統(tǒng)為事務(wù)執(zhí)行(TX)系統(tǒng)或環(huán)境,例如,包括能夠執(zhí)行事務(wù)的CPU或處理器。每一事務(wù)分別被示出為分別在處理器112a及112b中執(zhí)行的事務(wù)指令320a及320b。每一處理器112a及112b分別具有其自己的寄存器334a及334b。
每一數(shù)據(jù)高速緩存118a及118b可分別包括其自己的L1及L2高速緩存。計(jì)算機(jī)存儲器一般地由存儲器310表示,其可包括在被指定為TX CPU的CPU(亦即,處理器112a及112b)中的較高級高速緩存。每一處理器112a及112b分別具有被指定為表1350a及1350b的其自己的本地事務(wù)干擾追蹤表。表1350a及1350b可分別存儲于數(shù)據(jù)高速緩存118a、118b、寄存器334a、334b和/或存儲器310中。存儲器310亦可包括用于存儲事務(wù)的診斷信息的事務(wù)診斷塊350,所述診斷信息可包括存儲于表1350a及1350b中的事務(wù)干擾信息(連同統(tǒng)計(jì)),如本文中進(jìn)一步所論述。
計(jì)算機(jī)系統(tǒng)300是根據(jù)各實(shí)施例的發(fā)送、接收及處理請求及響應(yīng)兩者的事務(wù)(TX)環(huán)境的表示。應(yīng)注意,提供各種實(shí)例,其中處理器112a(CPU1)被例示為產(chǎn)生請求且將該請求發(fā)送至被例示為接收該請求的接收/遠(yuǎn)程處理器的處理器112b(CPU2)的請求處理器。應(yīng)理解,此指定是出于解釋目的,這是因?yàn)槿我惶幚砥骺砂l(fā)送及接收針對數(shù)據(jù)的請求,如本領(lǐng)域技術(shù)人員所理解的。
圖5說明協(xié)議請求及響應(yīng)實(shí)例。所述協(xié)議請求可被稱作大型機(jī)多處理器協(xié)議,且協(xié)議可經(jīng)由基于總線或基于交換機(jī)的互連。協(xié)議可為全部并行信令(總線窺探)、串行分組或它們的組合。
作為一個(gè)實(shí)例,針對數(shù)據(jù)的請求505可自CPU 1(112a)發(fā)送至CPU 2(112b)。請求505包括告知何種類型的請求正被發(fā)送的類型字段506(例如,讀取共享或讀取獨(dú)占—或,針對所有權(quán)的讀取—根據(jù)已知MESI一致性協(xié)議的請求,或根據(jù)其他此類協(xié)議的協(xié)議請求),及識別發(fā)送請求的特定處理器(例如,CPU1)且可選地識別請求正被發(fā)送至的接收處理器(例如,CPU 2)及可選地在多個(gè)請求可被并行地處理的情況下識別特定請求ID以唯一地識別每一請求的標(biāo)簽字段507。請求505亦包括識別正由請求處理器(CPU1)請求的存取的類型的存取字段508,及地址字段509。地址字段509識別正被請求的高速緩存行或存儲器字的存儲器地址。請求505協(xié)議可包括含有所使用的錯(cuò)誤檢測和/或校正碼(例如,循環(huán)冗余校驗(yàn)(CRC)、奇偶校驗(yàn)位或ECC)的錯(cuò)誤校正字段510。
響應(yīng)515可自接收處理器(CPU 2)發(fā)送回至請求處理器(CPU 1)。響應(yīng)515包括指示響應(yīng)的類型(諸如,讀取響應(yīng)(READRESPONSE))的類型字段516,及標(biāo)簽字段517。標(biāo)簽字段517可為與原始請求505的標(biāo)簽字段507相同的標(biāo)簽,和/或標(biāo)簽字段517可包括高速緩存行的被請求存儲器地址。響應(yīng)515包括是由請求處理器(CPU 1)請求的被請求數(shù)據(jù)的數(shù)據(jù)字段518。一些協(xié)議響應(yīng)可不包括數(shù)據(jù)傳送(例如,對將所有權(quán)自共享提升至用于行的獨(dú)占所有權(quán)的協(xié)議請求),且可僅包括處理已執(zhí)行的應(yīng)答。錯(cuò)誤校正字段519包括于響應(yīng)515中。
在一些實(shí)施例中,用于協(xié)議請求的信令可并行地在多個(gè)位線上發(fā)生,且任何未使用字段可對應(yīng)于不具有協(xié)議定義值、被設(shè)定為默認(rèn)值或以其他方式不被視為協(xié)議消息的一部分的行。在一些實(shí)施例中,協(xié)議請求可在多個(gè)“拍頻(beat)”(例如,整體上表示協(xié)議消息的連續(xù)位組)中傳輸。在其他實(shí)施例中,協(xié)議請求可被位串行地傳輸。在多個(gè)拍頻中或串行地傳輸?shù)膮f(xié)議中,一些消息相比于其他協(xié)議請求可由更多總線信令周期組成。
圖6說明另一協(xié)議請求實(shí)例。許多協(xié)議經(jīng)由RFO(針對所有權(quán)的讀取)而獲取獨(dú)占存取或用于寫入操作的讀取獨(dú)占請求,而一些其他協(xié)議可直接地寫入(受限制)。作為一個(gè)實(shí)例,對寫入數(shù)據(jù)的實(shí)例請求605可自CPU 1(112a)被發(fā)送至CPU 2(112b)。請求605包括識別正被發(fā)送(例如,寫入)的請求的類型的類型字段506,及識別發(fā)送寫入請求的特定處理器(例如,CPU1)且可選地識別請求正被發(fā)送至的接收處理器(例如CPU 2)及特定請求的標(biāo)簽字段507。請求605亦包括傳輸正由請求處理器(CPU 1)寫入的數(shù)據(jù)的數(shù)據(jù)字段504,及地址字段509。地址字段509識別正被寫入到的高速緩存行或地址線的存儲器地址。請求605協(xié)議可包括含有所使用的錯(cuò)誤檢測和/或校正碼(例如,循環(huán)冗余校驗(yàn)(CRC)、奇偶檢驗(yàn)位或ECC)的錯(cuò)誤校正字段510。
響應(yīng)于寫入請求,通常不存在響應(yīng),這是因?yàn)闆]有必要在執(zhí)行寫入之前獲得用于獨(dú)占存取的數(shù)據(jù)。
圖7為根據(jù)一個(gè)實(shí)施例的由做出針對數(shù)據(jù)的請求的處理器(例如,CPU1(112a))進(jìn)行的協(xié)議請求產(chǎn)生的流程圖700。在塊705處,處理器(例如,CPU 1)具有針對存儲器數(shù)據(jù)的請求。在塊710處,處理器(例如CPU 1(112a))檢查被請求數(shù)據(jù)是否在其自己的本地高速緩存(例如,數(shù)據(jù)高速緩存118a中的L1高速緩存)中。當(dāng)在處理器自己的本地高速緩存中可提供數(shù)據(jù)時(shí),流程進(jìn)行至塊735。當(dāng)處理器(CPU1)的本地高速緩存中不能提供數(shù)據(jù)時(shí),在塊715處,處理器產(chǎn)生XI請求(交叉詢問)以向其他處理器(諸如,CPU 2(112b))請求所要數(shù)據(jù)。在塊720處,請求處理器(CPU1)經(jīng)由互連122將針對數(shù)據(jù)的XI請求發(fā)送至接收處理器(CPU 2),且在塊725處,請求處理器(CPU 1)自接收處理器(CPU 2)接收具有(被請求)數(shù)據(jù)的XI響應(yīng)。在塊730處,請求處理器(CPU 1)將數(shù)據(jù)放置于數(shù)據(jù)高速緩存118a中的其本地高速緩存(例如,L1、L2高速緩存)中。在塊735處,請求處理器(CPU 1)經(jīng)由指令高速緩存116a而自其本地高速緩存118a獲得數(shù)據(jù)。在塊740處,請求處理器的指令高速緩存116a將數(shù)據(jù)提供給CPU 1的電路以供處理。
在一個(gè)實(shí)施例中,且根據(jù)公共高速緩存協(xié)議(例如,已知MESI協(xié)議),當(dāng)處理器存取數(shù)據(jù)以供讀取,且數(shù)據(jù)不可用時(shí),XI被產(chǎn)生用于讀取共享,其中數(shù)據(jù)是以共享方式而獲得,使得多個(gè)CPU 112a、112b可在高速緩存中具有數(shù)據(jù)的復(fù)本,且其中每一CPU可處理對應(yīng)于該數(shù)據(jù)的存儲器讀取存取。所接收數(shù)據(jù)放置于高速緩存中且被標(biāo)記用于共享存取,且處理器可響應(yīng)于存儲器讀取操作而執(zhí)行來自復(fù)本的讀取存取。當(dāng)處理器存取用于寫入的數(shù)據(jù),且數(shù)據(jù)不可用于獨(dú)占狀態(tài)中時(shí),XI被產(chǎn)生用于讀取獨(dú)占,其中數(shù)據(jù)是以獨(dú)占式方式而獲得,使得僅單個(gè)CPU(例如,CPU 112a)可在高速緩存中具有數(shù)據(jù)的復(fù)本。所接收數(shù)據(jù)放置于高速緩存中且被標(biāo)記用于獨(dú)占存取,且處理器可響應(yīng)于存儲器寫入操作而更新復(fù)本。在一個(gè)實(shí)施例中,當(dāng)數(shù)據(jù)以共享模式而存在,且寫入存取被接收時(shí),產(chǎn)生讀取獨(dú)占XI。在至少一個(gè)實(shí)施例中,這被指示為相異讀取獨(dú)占請求,其中無數(shù)據(jù)被接收為響應(yīng)的一部分。在一個(gè)實(shí)施例中,當(dāng)已接收到響應(yīng)時(shí),高速緩存數(shù)據(jù)被標(biāo)記用于獨(dú)占存取。
圖8說明根據(jù)一個(gè)實(shí)施例的由接收/遠(yuǎn)程處理器(例如,CPU 2(112b))接收請求且發(fā)送響應(yīng)而進(jìn)行的請求處置的實(shí)例流程圖800。
在塊805處,遠(yuǎn)程處理器(CPU2)自請求處理器(CPU1)接收針對數(shù)據(jù)的XI請求。在塊810處,遠(yuǎn)程處理器(CPU 2)通過檢查遠(yuǎn)程處理器是否正處理當(dāng)前需要被請求數(shù)據(jù)(在遠(yuǎn)程處理器的本地高速緩存中)的事務(wù)而檢查是否檢測到干擾。當(dāng)遠(yuǎn)程處理器(CPU 2(112b))在塊810處判定遠(yuǎn)程處理器當(dāng)前正使用由請求處理器(CPU 1(112a))請求的數(shù)據(jù)時(shí),遠(yuǎn)程處理器判定(是)檢測到干擾,且在塊815處,遠(yuǎn)程處理器(CPU 2)中止在遠(yuǎn)程處理器(CPU 2)處發(fā)生的本地事務(wù)。一旦在遠(yuǎn)程處理器(CPU 2)處中止本地事務(wù),在塊820處,遠(yuǎn)程處理器就將具有讀取響應(yīng)(READ RESPONSE)的數(shù)據(jù)傳輸至請求處理器(CPU 1)。遠(yuǎn)程處理器(CPU 2)在塊825處改變數(shù)據(jù)狀態(tài)且可選地在必要時(shí)自其本地高速緩存清除數(shù)據(jù)。在一個(gè)實(shí)施例中,高速緩存狀態(tài)改變可包括當(dāng)事務(wù)已中止時(shí)自讀取或?qū)懭爰现械闹辽僖徽哚尫艛?shù)據(jù)。在一個(gè)實(shí)施例中,高速緩存狀態(tài)改變可包括改變高速緩存目錄中的高速緩存行的狀態(tài),例如,根據(jù)諸如已知MESI協(xié)議之類的高速緩存協(xié)議而將狀態(tài)設(shè)定為共享、獨(dú)占、無效等中的一者。遠(yuǎn)程處理器(CPU 1)在塊830處發(fā)起事務(wù)失敗處理,且流程結(jié)束。當(dāng)遠(yuǎn)程處理器(CPU 2(112b))在塊810處判定遠(yuǎn)程處理器當(dāng)前未使用由請求處理器(CPU 1(112a))請求的數(shù)據(jù)時(shí),遠(yuǎn)程處理器判定未檢測到干擾,且在塊835處,遠(yuǎn)程處理器(CPU 2)傳輸具有讀取響應(yīng)(READ RESPONSE)的數(shù)據(jù)。遠(yuǎn)程處理器(CPU 2)在塊840處改變數(shù)據(jù)狀態(tài)且可選地在必要時(shí)自本地高速緩存清除數(shù)據(jù),且流程結(jié)束。
圖9為根據(jù)一個(gè)實(shí)施例的說明由處理器進(jìn)行的事務(wù)處置的流程圖900。在塊905處,事務(wù)開始在處理器(例如,CPU 1或CPU 2)上執(zhí)行。在圖9中,應(yīng)注意,每一處理器(CPU 1及CPU2)可正執(zhí)行這些動作,亦即,事務(wù)可由112a、112b兩者處理,等等。在塊910處,處理器執(zhí)行事務(wù)內(nèi)的指令(例如,如圖7所論述)。在塊915處,處理器響應(yīng)于事務(wù)指令而執(zhí)行協(xié)議動作。在920處,處理器檢查是否存在需要處理器中止其事務(wù)的干擾(借助使用數(shù)據(jù))。當(dāng)處理器判定(是)存在所檢測的干擾時(shí),在塊925處,處理器中止其自己的事務(wù)(針對該數(shù)據(jù)),且流程進(jìn)行至塊935。當(dāng)處理器判定未檢測到干擾時(shí),在塊930處,處理器完成其事務(wù)(的指令)。在塊935處,處理器在寄存器中寫入事務(wù)信息(諸如,事務(wù)診斷塊(TBD))。
根據(jù)多個(gè)實(shí)施例,一致性協(xié)議被擴(kuò)展以包括關(guān)于事務(wù)狀態(tài)的額外信息。圖10說明根據(jù)多個(gè)實(shí)施例的協(xié)議請求505及新協(xié)議響應(yīng)1005。如圖10所示出,請求505的一些字段與圖5論述的字段相同。如上文所提及,請求505包括識別何種類型的請求正被發(fā)送(例如,READ)的類型字段506,及識別發(fā)送請求的特定處理器(例如,CPU 1)(且可選地識別請求正被發(fā)送至的接收/遠(yuǎn)程處理器(例如CPU 2)及請求數(shù)目)的標(biāo)簽字段507。請求505亦包括告知正由請求處理器(CPU 1)請求的存取的類型的存取字段508,及告知正被請求的高速緩存行或地址線的存儲器地址的地址字段509。請求505協(xié)議包括告知所使用的錯(cuò)誤碼(諸如,循環(huán)冗余校驗(yàn)(CRC))的類型的錯(cuò)誤校正字段510。
新響應(yīng)1005包括響應(yīng)515(在圖5中)的字段連同額外事務(wù)中止?fàn)顟B(tài)字段1010。響應(yīng)1005可自接收/遠(yuǎn)程處理器(CPU 2)發(fā)送回至請求處理器(CPU1)。響應(yīng)515包括指示響應(yīng)的類型(諸如,讀取響應(yīng)(READRESPONSE))的類型字段516,及指示高速緩存行的被請求存儲器地址的標(biāo)簽字段517(其可為與原始請求505的標(biāo)簽字段507相同的標(biāo)簽)。響應(yīng)515包括是由請求處理器(CPU 1)請求的被請求數(shù)據(jù)的數(shù)據(jù)字段518。如果數(shù)據(jù)未以協(xié)議響應(yīng)而傳輸,則數(shù)據(jù)字段518為空或不存在。錯(cuò)誤檢測/校正字段519包括于響應(yīng)1005中。
另外,新協(xié)議響應(yīng)1005(由遠(yuǎn)程處理器CPU 2發(fā)送至請求處理器CPU1)具有事務(wù)中止?fàn)顟B(tài)字段1010。事務(wù)中止?fàn)顟B(tài)字段1010包括關(guān)于在中止之前先前在遠(yuǎn)程/接收處理器(CPU 2)上執(zhí)行的事務(wù)的以下信息中的一者或多者:
1)請求505(來自請求處理器(CPU 1)是否造成和/或不造成回滾(亦即,中止);
2)在中止之前在遠(yuǎn)程/接收處理器(CPU 2)上執(zhí)行的此事務(wù)的優(yōu)先級;
3)多少指令、存儲器操作和/或工作的其他度量已通過在事務(wù)中止之前先前在遠(yuǎn)程/接收處理器(CPU 2)上執(zhí)行的事務(wù)而執(zhí)行;
4)識別先前在遠(yuǎn)程處理器(CPU 2)上執(zhí)行的事務(wù)(例如,令牌、TBEGIN的地址,和/或識別已中止事務(wù)的其他方式)。
此外,事務(wù)中止?fàn)顟B(tài)字段1010告知何種數(shù)據(jù)是通過必須中止的事務(wù)(先前在遠(yuǎn)程/接收處理器上執(zhí)行)而獲得、告知事務(wù)的地址,且告知中止事務(wù)的成本(其可能為工作的3個(gè)時(shí)鐘周期或20,000個(gè)時(shí)鐘周期)。
當(dāng)處理器(例如,在實(shí)例情景下為接收處理器CPU 2)在事務(wù)執(zhí)行中時(shí),一致性請求能夠造成事務(wù)執(zhí)行中止,例如,這是因?yàn)閿?shù)據(jù)為事務(wù)讀取或?qū)懭爰系囊徊糠郑覚z測到?jīng)_突(亦即,干擾)。
根據(jù)一個(gè)實(shí)施例,圖11說明圖6中對寫入數(shù)據(jù)(自請求處理器CPU 1(112a)發(fā)送至接收/遠(yuǎn)程處理器CPU 2(112b))的(寫入)請求605,且新響應(yīng)1105是自遠(yuǎn)程處理器CPU 2(112b)發(fā)送回至請求處理器CPU 1(112a)。圖11為根據(jù)一個(gè)實(shí)施例通過將新協(xié)議響應(yīng)引入至先前無需協(xié)議響應(yīng)的事務(wù)而在響應(yīng)中添加事務(wù)信息以便將事務(wù)干擾/中止信息傳輸至請求發(fā)起方的協(xié)議請求及響應(yīng)實(shí)例。在至少一個(gè)實(shí)施例中,出于提供事務(wù)中止?fàn)顟B(tài)的唯一目的而傳輸?shù)膮f(xié)議響應(yīng)是可選的,且可在一些模式中、響應(yīng)于配置位、響應(yīng)于總線擁塞和/或出于其他原因而受到抑制。在此情景下,當(dāng)未接收到響應(yīng)時(shí),不報(bào)告對應(yīng)于尚未接收到響應(yīng)所針對的請求的事務(wù)中止?fàn)顟B(tài)。在至少一個(gè)實(shí)施例中,可報(bào)告一個(gè)或多個(gè)響應(yīng)的不存在。如上文所提及,請求605包括告知何種類型的請求正被發(fā)送(例如,寫入)的類型字段506,及識別發(fā)送寫入請求的特定處理器(例如,CPU 1)(及請求正被發(fā)送至的接收處理器(例如,CPU 2))的標(biāo)簽字段507。請求605亦包括告知正由請求處理器(CPU 1)請求的存取的類型的存取字段508,及地址字段509。地址字段509告知正被請求寫入至的高速緩存行或地址線的存儲器地址。請求605協(xié)議可包括具有錯(cuò)誤校正/檢測碼(諸如,奇偶檢驗(yàn)位、ECC或循環(huán)冗余校驗(yàn)(CRC)碼)的錯(cuò)誤檢測和/或校正字段510。
響應(yīng)于寫入請求605,新響應(yīng)1105(對寫入請求)現(xiàn)在包括本文中論述的事務(wù)中止?fàn)顟B(tài)字段1010。新響應(yīng)1105包括響應(yīng)1005(在圖10中)的字段。響應(yīng)1105可自接收/遠(yuǎn)程處理器(CPU 2)發(fā)送回至請求處理器(CPU 1)。響應(yīng)1105包括指示響應(yīng)的類型(諸如,寫入響應(yīng)(WRITERESPONSE))的類型字段516,及指示高速緩存行的被請求存儲器地址的標(biāo)簽字段517(其可為與原始請求505的標(biāo)簽字段507相同的標(biāo)簽以識別響應(yīng)所對應(yīng)的請求)。響應(yīng)515可包括是由請求處理器(CPU 1)請求的被請求數(shù)據(jù)的數(shù)據(jù)字段518。因?yàn)闊o數(shù)據(jù)來自接收/遠(yuǎn)程處理器(CPU 2)的(本地)高速緩存,所以數(shù)據(jù)字段518為空。錯(cuò)誤校正字段519包括于響應(yīng)1005中。
如本文中所論述,事務(wù)中止?fàn)顟B(tài)字段1010提供由于寫入請求605(來自請求處理器(CPU 1))而中止所需要的事務(wù)(先前在接收/遠(yuǎn)程處理器(CPU2)上執(zhí)行)的狀態(tài)。
雖然已在一個(gè)例示性實(shí)施例中結(jié)合將對應(yīng)于事務(wù)中止?fàn)顟B(tài)及關(guān)聯(lián)信息的協(xié)議字段添加至對讀取請求的現(xiàn)有讀取響應(yīng),且在另一例示性實(shí)施例中結(jié)合添加與不具有根據(jù)目前最新的協(xié)議響應(yīng)的協(xié)議寫入請求對應(yīng)的協(xié)議響應(yīng)以便傳輸對應(yīng)于事務(wù)中止?fàn)顟B(tài)及關(guān)聯(lián)信息且識別對應(yīng)寫入請求的至少一個(gè)協(xié)議字段而描述根據(jù)本發(fā)明的協(xié)議加強(qiáng),但本領(lǐng)域技術(shù)人員能夠?qū)⒈疚闹泻械慕虒?dǎo)應(yīng)用于其他XI格式、協(xié)議格式、請求類型、一致性協(xié)議等。
根據(jù)一個(gè)實(shí)施例,圖12為說明(例如)由自請求處理器CPU 1(112a)接收請求的接收/遠(yuǎn)程處理器CPU 2(112b)進(jìn)行的一致性請求處置的流程圖1200。圖12包括圖8的塊,連同包括傳輸事務(wù)中止?fàn)顟B(tài)(在事務(wù)中止字段1010中)作為協(xié)議響應(yīng)的一部分的的新(已修改)塊1205及1210。
在圖12中,根據(jù)一個(gè)實(shí)施例,由接收/遠(yuǎn)程處理器(例如,CPU 2(112b))進(jìn)行的請求處置接收請求。在塊805處,遠(yuǎn)程處理器(CPU 2)自請求處理器(CPU 1)接收針對數(shù)據(jù)的XI請求(例如,請求505和/或請求605)。在塊810處,遠(yuǎn)程處理器(CPU 2)通過檢查遠(yuǎn)程處理器是否正處理以與所接收請求(例如,請求505及605)不兼容的方式引用數(shù)據(jù)的事務(wù)而檢查是否檢測到干擾。舉例而言,在一個(gè)例示性實(shí)施例中,讀取共享請求與對事務(wù)讀取集合中的數(shù)據(jù)的引用兼容,但寫入請求并不兼容。另外,讀取獨(dú)占、讀取提升(亦即,自共享改變?yōu)楠?dú)占)或?qū)懭胝埱蟛⒉慌c在事務(wù)的讀取或?qū)懭爰现幸玫南嗤瑪?shù)據(jù)兼容。當(dāng)遠(yuǎn)程處理器(CPU 2(112b))在塊810處判定遠(yuǎn)程處理器(自身)當(dāng)前正使用由請求處理器(CPU 1(112a))請求的數(shù)據(jù)時(shí),遠(yuǎn)程處理器判定(是)檢測到干擾,且在塊815處,遠(yuǎn)程處理器(CPU 2)中止在遠(yuǎn)程處理器(CPU 2)處發(fā)生的本地事務(wù)。一旦本地事務(wù)在遠(yuǎn)程處理器(CPU 2)處中止,在塊1205處,遠(yuǎn)程處理器就將具有讀取響應(yīng)(READ RESPONSE)的數(shù)據(jù)連同事務(wù)狀態(tài)字段1010(其通知請求造成事務(wù)(先前執(zhí)行)在遠(yuǎn)程/接收處理器(CPU 2)處中止以便實(shí)現(xiàn)請求)傳輸至請求處理器(CPU 1)。在另一實(shí)施例中,可以以寫入響應(yīng)1105應(yīng)答所接收寫入請求。在目前最新的系統(tǒng)中,無事務(wù)狀態(tài)字段1010將被包括在自遠(yuǎn)程CPU 2(其先前執(zhí)行其自己的現(xiàn)在中止的事務(wù))發(fā)送回至請求CPU 1(其發(fā)送請求505和/或605)的響應(yīng)(RESPONSE)中。遠(yuǎn)程處理器(CPU 2)在塊825處改變數(shù)據(jù)狀態(tài)且可選地在必要時(shí)自其本地高速緩存清除數(shù)據(jù)。遠(yuǎn)程處理器(CPU 1)在塊830處發(fā)始事務(wù)失敗處理,且流程結(jié)束。當(dāng)遠(yuǎn)程處理器(CPU 2(112b))在塊810中判定遠(yuǎn)程處理器當(dāng)前未使用由請求處理器(CPU 1(112a))請求的數(shù)據(jù)時(shí),遠(yuǎn)程處理器判定未檢測到干擾,且在塊1210處,遠(yuǎn)程處理器(CPU 2)連同事務(wù)狀態(tài)字段1010(其指示請求不造成事務(wù)中止)一起傳輸具有讀取響應(yīng)(READ RESPONSE)的數(shù)據(jù)。遠(yuǎn)程處理器(CPU 2)在塊840處改變數(shù)據(jù)狀態(tài)且可選地在必要時(shí)自本地高速緩存清除數(shù)據(jù),且流程結(jié)束。
圖13說明根據(jù)一個(gè)實(shí)施例的由請求處理器(CPU 1(112a))進(jìn)行的協(xié)議請求發(fā)起及處理的流程圖1300。圖13包括上文在圖7中論述的塊,且不重復(fù)圖7的論述。另外,流程圖1300包括新塊1305及1310。舉例而言,在塊1305處,請求處理器(CPU 1)自遠(yuǎn)程處理器(CPU 2)接收具有數(shù)據(jù)的XI響應(yīng)(塊725)連同新事務(wù)中止?fàn)顟B(tài)字段1010。在塊730處,請求處理器(CPU 1)將數(shù)據(jù)放置于本地高速緩存(諸如,L1和/或L2高速緩存)中。在塊1310處,請求處理器(CPU 1)將所接收狀態(tài)(例如,事務(wù)狀態(tài)字段1010中的信息)添加至數(shù)據(jù)高速緩存118a(和/或存儲器310)中的本地事務(wù)干擾追蹤表1350a。當(dāng)請求處理器(CPU 1)造成干擾(在遠(yuǎn)程處理器(CPU 2)處引起事務(wù)中止)時(shí),本地事務(wù)干擾追蹤表1350a可為保持追蹤干擾的存儲位置,且本地事務(wù)干擾追蹤表1350a可包括此信息的日志。本地追蹤事務(wù)干擾(存儲)表1350a包括增量統(tǒng)計(jì)及當(dāng)前事務(wù)狀態(tài)。增量統(tǒng)計(jì)針對每一事務(wù)中止而增加(報(bào)告回至接收處理器(CPU 1)),且增量統(tǒng)計(jì)可分離成共享/獨(dú)占(R/W)請求及匯總請求。本地追蹤事務(wù)干擾存儲表1350a可包括針對由請求處理器(CPU 1)造成的每一事務(wù)中止及針對每次在請求處理器(CPU 1)處未中止事務(wù)而遞增的計(jì)數(shù)器。在一些實(shí)施例中,結(jié)合塊1310而接收的事務(wù)中止?fàn)顟B(tài)亦可匯總于性能監(jiān)視單元、運(yùn)行時(shí)插裝單元和/或另一性能追蹤邏輯中以便使信息可用于動態(tài)優(yōu)化器、適時(shí)(JIT)編譯器或用于由編程人員進(jìn)行的性能調(diào)諧。信息可通過在存儲器中在性能監(jiān)視時(shí)導(dǎo)向的結(jié)構(gòu)中記入和/或通過引發(fā)通知(例如,根據(jù)Power ISATM的基于PMU事件的分支,或異常)而被記錄。報(bào)告可包括干擾的性質(zhì)、干擾和/或被干擾事務(wù)的標(biāo)識、處理器ID、經(jīng)受此干擾的地址等等。
如本文中所論述,一致性協(xié)議使用多個(gè)位—地址、數(shù)據(jù)以及狀態(tài)和控制位。這些數(shù)據(jù)用于發(fā)出數(shù)據(jù)請求,且指示其所有權(quán)(例如,共享、獨(dú)占)及狀態(tài)(例如,已變更、未變更)。額外一個(gè)或多個(gè)位(用于事務(wù)中止?fàn)顟B(tài)字段1010)被添加以指示請求造成事務(wù)中止和/或可造成事務(wù)中止。舉例而言,狀態(tài)位(事務(wù)中止?fàn)顟B(tài)字段1010)指示當(dāng)被請求數(shù)據(jù)由遠(yuǎn)程處理器(CPU 1)放棄時(shí),該數(shù)據(jù)造成用于事務(wù)執(zhí)行的沖突。如所提及,對請求的響應(yīng)可以以事務(wù)在進(jìn)行中且請求造成事務(wù)中止的指示而復(fù)原。
在一個(gè)實(shí)施例中,額外度量(諸如,已中止事務(wù)中的指令的數(shù)目)被在事務(wù)中止?fàn)顟B(tài)字段1010中傳輸。在一個(gè)實(shí)施例中,指示用于判定(例如)在獲勝事務(wù)稍后變得中止且重新開始的狀況下相對于事務(wù)的重新開始的失步(holdoff),以避免活鎖情景。當(dāng)請求處理器(CPU 1)判定請求處理器已通過檢查本地事務(wù)中止?fàn)顟B(tài)字段1010而在遠(yuǎn)程/接收處理器(CPU 2)中造成過多(例如,預(yù)定量)的事務(wù)中止時(shí),請求處理器(CPU 1)亦能夠響應(yīng)于中止過多的遠(yuǎn)程事務(wù)而節(jié)流(縮減)其請求率以增加總系統(tǒng)吞吐量。
在又一實(shí)施例中,此類通知(在事務(wù)中止?fàn)顟B(tài)字段1010中)被搜集于日志中和/或經(jīng)由通知機(jī)制(例如,異常)而向動態(tài)再優(yōu)化組件通知;動態(tài)再優(yōu)化組件能夠動態(tài)地再優(yōu)化代碼以縮減干擾和/或產(chǎn)生替代代碼以使用鎖來代替事務(wù)。
現(xiàn)在,圖9的塊包括于圖14中,但不重復(fù)其論述。圖14亦包括對圖9的修改。圖14為根據(jù)一個(gè)實(shí)施例的說明由處理器進(jìn)行的事務(wù)處置的流程圖1400??杉俣ㄌ幚砥鳛檎埱筇幚砥?CPU 1)。圖14包括圖9的塊,連同塊1405。在塊1405處,請求處理器(CPU 1)在塊1405處將包括事務(wù)干擾統(tǒng)計(jì)(自新事務(wù)中止?fàn)顟B(tài)字段1010獲得且存儲于本地追蹤事務(wù)干擾存儲表1350a中)的事務(wù)信息(諸如,事務(wù)診斷塊(TBD))寫入寄存器334、高速緩存118a,和/或存儲器310中。在一個(gè)實(shí)施例中,當(dāng)事務(wù)完成時(shí),事務(wù)可包括其是否已造成一個(gè)或多個(gè)事務(wù)中止作為結(jié)果碼(例如,結(jié)果寄存器、結(jié)果條件寄存器等(例如,在寄存器334a、334b中))的一部分的指示。在一個(gè)實(shí)施例中,當(dāng)事務(wù)在一個(gè)或多個(gè)寄存器(例如,寄存器334a、334b)和/或存儲器位置中設(shè)定結(jié)果狀態(tài)時(shí),所述一個(gè)或多個(gè)寄存器(例如,在寄存器334a、334b中)和/或存儲器位置(例如,在存儲器310、高速緩存118a、118b中)可包括被中止以將數(shù)據(jù)至提供事務(wù)的被干擾事務(wù)的數(shù)目、干擾的性質(zhì)(具有寫入集合的讀取請求,或具有讀取或?qū)懭氲膶懭胝埱蟮?。在一個(gè)實(shí)施例中,如此存儲的信息可包括關(guān)于事務(wù)中的每一者的特定信息,且包括用于識別發(fā)生干擾的處理器的方式、已中止(例如,通過指定事務(wù)開始XBEGIN或TBEGIN的地址、令牌、事務(wù)ID等)的事務(wù)、在中止之前已由該事務(wù)執(zhí)行的工作的度量等。在一個(gè)實(shí)施例中,當(dāng)根據(jù)本發(fā)明而擴(kuò)展目前最新事務(wù)診斷塊以具有對應(yīng)于干擾及事務(wù)中止?fàn)顟B(tài)的額外字段時(shí),存儲至一個(gè)或多個(gè)存儲器位置的信息對應(yīng)于(例如)根據(jù)z/Architecture(以引用方式包括于本文中)的事務(wù)診斷塊(TDB)的存儲器位置,及根據(jù)本發(fā)明的事務(wù)診斷塊的字段,所述字段對應(yīng)于由新引入的協(xié)議字段個(gè)別地和/或由來自多個(gè)此類字段的匯總信息所傳輸?shù)男畔?。在另一?shí)施例中,存儲于寄存器和/或存儲器位置中的信息被提供為相異的、分離的且獨(dú)立于目前最新TDB。
在塊1405處,請求處理器(CPU 1)被配置為經(jīng)由性能監(jiān)視單元和/或運(yùn)行時(shí)插裝單元而將干擾統(tǒng)計(jì)提供給編程人員,且將干擾信息提供給固件、毫代碼等。在毫代碼中,毫代碼可使用干擾統(tǒng)計(jì)信息以避免活鎖和/或使用干擾統(tǒng)計(jì)信息以優(yōu)化事務(wù)重新開始。在應(yīng)用中,所述應(yīng)用能夠使用干擾統(tǒng)計(jì)信息以避免活鎖且優(yōu)化事務(wù)重新開始。
根據(jù)一個(gè)實(shí)施例,下文出于解釋目的而提供實(shí)例代碼。
當(dāng)事務(wù)已中止且具體地被優(yōu)化以避免活鎖情景時(shí),以下偽代碼(在處理器112a、112b上執(zhí)行)提供一種執(zhí)行事務(wù)重新開始優(yōu)化的形式(明顯地在毫代碼中和/或通過集成在在處理器上運(yùn)行的應(yīng)用中的代碼)以便重新開始該事務(wù)。例示性代碼使用以例示性方式而存儲于TDB中的信息,然而,本領(lǐng)域技術(shù)人員能夠使用自包括但不限于存儲位置(例如,存儲器310)、寄存器334a、334b、狀態(tài)代碼和/或性能監(jiān)視單元、運(yùn)行時(shí)插裝單元等獲得的信息:
根據(jù)例示性程序代碼,事務(wù)重新開始代碼包括檢查其自身是否已中止,及其是否又已中止另一事務(wù)。在一個(gè)實(shí)施例中,立即診斷可能的活鎖。在另一實(shí)施例中,如果目前事務(wù)及被干擾事務(wù)為循環(huán)干擾圖的一部分(亦即,每一事務(wù)直接地或間接地中止其他事務(wù)),則執(zhí)行測試(未圖示)。在一個(gè)實(shí)施例中,當(dāng)診斷到互擊落(mutual shootdown)時(shí),采取干擾避免動作。在一個(gè)實(shí)施例中,當(dāng)診斷到互擊落時(shí),采取活鎖避免動作。在一個(gè)實(shí)施例中,通過調(diào)用函數(shù)avoid_livelock()而調(diào)用干擾避免動作。在一些實(shí)施例中,這些動作可包括但不限于以下各者中的一者或多者:目前事務(wù)的較低優(yōu)先級;等待退避時(shí)期;使用鎖而同步;等等。
在另一例示性實(shí)施例中,當(dāng)事務(wù)已中止且具體地被優(yōu)化以避免活鎖情景時(shí),以下偽代碼提供一種執(zhí)行事務(wù)重新開始優(yōu)化的形式(明顯地在毫代碼中或通過集成在在處理器上運(yùn)行的應(yīng)用中的代碼)以便重新開始所述事務(wù)。例示性代碼使用以例示性方式而存儲于TDB中的信息;然而,本領(lǐng)域技術(shù)人員能夠使用自包括但不限于存儲位置、寄存器、狀態(tài)代碼或性能監(jiān)視單元、運(yùn)行時(shí)插裝單元等獲得的信息。在例示性代碼中,當(dāng)其對應(yīng)于已超過(可能)互擊落的閾值的事務(wù)時(shí),事務(wù)采取活鎖防止操作:
根據(jù)例示性代碼,事務(wù)重新開始代碼包括檢查事務(wù)自身是否已中止,及其是否又已中止另一事務(wù)。在一個(gè)實(shí)施例中,立即診斷可能的活鎖。在另一實(shí)施例中,如果目前事務(wù)及被干擾事務(wù)為循環(huán)干擾圖的一部分(亦即,每一事務(wù)直接地或間接地中止其他事務(wù)),則執(zhí)行測試(未圖示)。在一個(gè)實(shí)施例中,當(dāng)已診斷超過閾值數(shù)目個(gè)互擊落(mutual_shootdown>閾值)時(shí),采取干擾避免動作。在一個(gè)實(shí)施例中,當(dāng)已診斷超過閾值數(shù)目個(gè)互擊落(mutual_shootdown>閾值)時(shí),采取活鎖避免動作。在一個(gè)實(shí)施例中,通過調(diào)用函數(shù)avoid_livelock()而調(diào)用干擾避免動作。在一些實(shí)施例中,這些動作可包括但不限于以下各者中的一者或多者:目前事務(wù)的較低優(yōu)先級;等待退避時(shí)期;使用鎖而同步;等等。
重新開始優(yōu)化(明顯地在毫代碼中或在應(yīng)用中):
根據(jù)例示性代碼,事務(wù)重新開始代碼包括檢查事務(wù)自身是否已中止,及其是否又已中止另一事務(wù)。在一個(gè)實(shí)施例中,立即診斷可能的活鎖。在一個(gè)實(shí)施例中,當(dāng)已被診斷超過閾值數(shù)目個(gè)互擊落(mutual_shootdown>閾值)時(shí),如果目前事務(wù)及被干擾事務(wù)為(或在另一實(shí)施例中可為)循環(huán)干擾圖的一部分(亦即,每一事務(wù)直接地或間接地中止其他事務(wù)),則測試被執(zhí)行l(wèi)ive_lock_loop_detected(),其可存取經(jīng)由響應(yīng)中止?fàn)顟B(tài)消息且可選地結(jié)合其他方式而接收的額外信息。如果如此,則采取活鎖避免動作。在一個(gè)實(shí)施例中,通過調(diào)用函數(shù)avoid_livelock()而調(diào)用活鎖避免動作。在一些實(shí)施例中,這些動作可包括但不限于以下各者中的一者或多者:目前事務(wù)的較低優(yōu)先級;等待退避時(shí)段;使用鎖定而同步;等等。
根據(jù)一個(gè)實(shí)施例,圖15為說明處理器(例如,請求處理器CPU 1)如何根據(jù)事務(wù)中止?fàn)顟B(tài)字段1010中的信息而對干擾指示(例如,在本地追蹤事務(wù)干擾存儲表1350a中存儲(及遞增/追蹤))作出響應(yīng)的流程圖1500。在塊1505處,請求處理器(CPU 1)報(bào)告干擾統(tǒng)計(jì)。報(bào)告干擾統(tǒng)計(jì)可包括如塊1405中所論述而寫入事務(wù)信息。在塊1510處,請求處理器(CPU 1)通過判定干擾成本何時(shí)過高而判定額外同步是否有可能避免重復(fù)干擾。當(dāng)請求處理器(CPU 1)重復(fù)地中止在接收/遠(yuǎn)程處理器(CPU 2)上執(zhí)行的(同一)事務(wù)達(dá)預(yù)定次數(shù)(例如,4次)和/或事務(wù)在中止之前已完成指令的預(yù)定數(shù)目個(gè)時(shí)鐘周期(例如,10,000個(gè)時(shí)鐘周期)時(shí),干擾成本過高。
當(dāng)請求處理器(CPU 1)在塊1510中判定額外同步?jīng)]有可能避免重復(fù)干擾(由來自請求處理器(CPU 1)的針對數(shù)據(jù)的請求造成的在遠(yuǎn)程處理器(CPU 2)上的重復(fù)事務(wù)中止)時(shí),在塊1515處,請求處理器(CPU 1)檢查代碼再優(yōu)化是否為可能的。當(dāng)請求處理器(CPU 1)判定再優(yōu)化為可能的時(shí),在塊1520處,請求處理器再優(yōu)化代碼。當(dāng)請求處理器(CPU 1)判定再優(yōu)化為不可能的時(shí),在塊1525處,請求處理器以當(dāng)前代碼(包括諸如退避的耐受性度量)繼續(xù)。退避是請求處理器判定在做出針對數(shù)據(jù)的請求之前等待預(yù)定時(shí)間量,以便使接收/遠(yuǎn)程處理器(CPU 2)具有用于接收/遠(yuǎn)程處理器的事務(wù)的時(shí)間以完成執(zhí)行(而不必中止)。
當(dāng)請求處理器(CPU 1)在塊1510中判定額外同步有可能避免重復(fù)干擾(由來自請求處理器(CPU 1)的針對數(shù)據(jù)的請求造成的在遠(yuǎn)程處理器(CPU2)上的重復(fù)事務(wù)中止)時(shí),在塊1530處,請求處理器(CPU 1)利用替代同步。在塊1535處,請求處理器(CPU 1)檢查(例如)本地追蹤事務(wù)干擾存儲表1350a中的日志以判定(同一事務(wù)(亦即,具有相同高速緩存/存儲器地址)的)重復(fù)干擾何時(shí)已在遠(yuǎn)程/接收處理器(CPU 2)上發(fā)生。當(dāng)不存在重復(fù)干擾時(shí),流程進(jìn)行至塊1525。當(dāng)請求處理器(CPU 1)判定存在重復(fù)干擾(對于遠(yuǎn)程/接收處理器(CPU 2)上的同一已中止事務(wù))時(shí),在塊1540處,請求處理器檢查代碼再優(yōu)化是否為可能的。當(dāng)再優(yōu)化為可能的時(shí),在塊1545處,請求處理器(CPU 1)再優(yōu)化代碼。
當(dāng)請求處理器(CPU 1)判定代碼再優(yōu)化為不可能時(shí),在塊1550處,請求處理器(CPU 1)被配置為永久地(和/或歷時(shí)一預(yù)定時(shí)期)選擇替代同步方法以用于向接收/遠(yuǎn)程處理器(CPU 2)請求數(shù)據(jù)的此特定事務(wù)(在請求處理器(CPU 1)上執(zhí)行)。
根據(jù)一個(gè)實(shí)施例,圖16為說明處理器(例如,請求處理器CPU 1)如何根據(jù)事務(wù)中止?fàn)顟B(tài)字段1010中的信息而對干擾指示(例如,在本地追蹤事務(wù)干擾存儲表1350a中存儲(及遞增/追蹤))作出響應(yīng)的流程圖1600。圖16包括圖15的塊,除塊1605替換塊1540以外。不重復(fù)圖15的塊。
當(dāng)塊1535為是時(shí),流程進(jìn)行至圖16中的塊1605。在塊1605處,請求處理器(CPU 1)檢查再優(yōu)化或替代同步是否為優(yōu)選的。當(dāng)塊1605中的判定為是時(shí),流程進(jìn)行至塊1545。當(dāng)塊1605中的判定為否時(shí),流程進(jìn)行至塊1550。在圖15的塊1540中,當(dāng)代碼再優(yōu)化為可能的時(shí),代碼再優(yōu)化被始終執(zhí)行。在1605中,計(jì)算度量以判定代碼再優(yōu)化或替代同步方法(例如,鎖)是否為期望的,且選擇一者或另一者。這可基于(例如)將使用替代同步方法的匯總成本與使用再最佳化成本的成本加執(zhí)行再優(yōu)化的成本相比較的測試,以判定哪一者為所期望的。其他成本度量是可能的且由本發(fā)明涵蓋,諸如,(例如)通過將再最佳化成本與閾值相比較而最小化再優(yōu)化開銷的成本。
圖17為根據(jù)一個(gè)實(shí)施例的用于實(shí)施一致性協(xié)議的方法(由處理器112a、112b執(zhí)行)的流程圖1700。
在塊1705處,請求處理器112a(CPU1)經(jīng)由互連122而將針對數(shù)據(jù)的請求(諸如,請求505、605)發(fā)送至遠(yuǎn)程處理器112b(CPU2)。在塊1710處,請求處理器112a(CPU1)自遠(yuǎn)程處理器112b接收響應(yīng)(諸如,響應(yīng)1005、1105),其中該響應(yīng)包括遠(yuǎn)程處理器112b上的遠(yuǎn)程事務(wù)(例如,事務(wù)320b)的事務(wù)狀態(tài)(例如,事務(wù)中止?fàn)顟B(tài)1010)。在塊1715處,請求處理器112a將遠(yuǎn)程處理器上的遠(yuǎn)程事務(wù)的事務(wù)狀態(tài)(來自字段1010的信息)添加到本地事務(wù)干擾追蹤表(例如,表1350a)。
除了上文所描述的特征中的一者或多者以外,或作為替代方案,另外的實(shí)施例亦可包括其中將遠(yuǎn)程事務(wù)的事務(wù)狀態(tài)添加至事務(wù)診斷塊(TBD)(由請求處理器112a)。遠(yuǎn)程事務(wù)在遠(yuǎn)程處理器112b上執(zhí)行且基于將針對數(shù)據(jù)的請求發(fā)送至遠(yuǎn)程處理器而中止執(zhí)行。該請求是由在發(fā)送請求的請求處理器112a上執(zhí)行的請求事務(wù)(例如,事務(wù)320a)做出。
除了上文所描述的特征中的一者或多者以外,或作為替代方案,另外的實(shí)施例亦可包括其中基于由請求事務(wù)進(jìn)行的請求造成遠(yuǎn)程事務(wù)(例如,事務(wù)320b)在遠(yuǎn)程處理器112b上中止,請求處理器112a將遠(yuǎn)程事務(wù)的事務(wù)狀態(tài)(自字段1010獲得)添加至本地事務(wù)干擾追蹤表1350a且遞增已針對遠(yuǎn)程事務(wù)(中止的每一特定事務(wù)320b)而發(fā)生的事務(wù)中止的計(jì)數(shù)。
除了上文所描述的特征中的一者或多者以外,或作為替代方案,另外的實(shí)施例亦可包括其中由請求處理器112a在響應(yīng)1005、1105中自遠(yuǎn)程處理器112b接收的遠(yuǎn)程事務(wù)的事務(wù)狀態(tài)指示遠(yuǎn)程事務(wù)(事務(wù)320b)必須基于自請求處理器112a接收到請求505、605而中止。
除了上文所描述的特征中的一者或多者以外,或作為替代方案,另外的實(shí)施例亦可包括其中本地事務(wù)干擾追蹤表1350a維護(hù)已被干擾且由在請求處理器112a上執(zhí)行的請求事務(wù)320a中止的事務(wù)數(shù)。本地事務(wù)干擾追蹤表1350a維護(hù)描述遠(yuǎn)程處理器112b(及其他處理器)上的遠(yuǎn)程事務(wù)320b的信息。描述遠(yuǎn)程處理器112a上的遠(yuǎn)程事務(wù)320b的信息包括以下各者中的至少一者:由在處理器上執(zhí)行的請求事務(wù)造成的干擾的類型、由請求事務(wù)中止的遠(yuǎn)程事務(wù)中的每一者的標(biāo)識或地址、發(fā)生干擾的遠(yuǎn)程處理器中的每一者的標(biāo)識、已中止的遠(yuǎn)程事務(wù)中的每一者的地址,和/或在中止之前已由遠(yuǎn)程事務(wù)中的每一者執(zhí)行的工作的度量。
技術(shù)效果及益處包括被擴(kuò)展以包括關(guān)于事務(wù)狀態(tài)的額外信息的一致性協(xié)議。當(dāng)處理器在事務(wù)執(zhí)行中時(shí),一致性請求能夠因?yàn)闄z測到?jīng)_突而造成接收處理器的事務(wù)執(zhí)行中止。根據(jù)各實(shí)施例,使用接收處理器已中止其事務(wù)執(zhí)行的額外信息來擴(kuò)展一致性協(xié)議請求。
本文中所用的術(shù)語,僅僅是為了描述特定的優(yōu)選實(shí)施例,而不意圖限定本發(fā)明。本文中所用的單數(shù)形式的“一”和“該”,旨在也包括復(fù)數(shù)形式,除非上下文中明確地另行指出。還要知道,“包含”和/或“包括”在本說明書中使用時(shí),說明存在所指出的特征、整體、步驟、操作、單元和/或組件,但是并不排除存在或增加一個(gè)或多個(gè)其它特征、整體、步驟、操作、單元和/或組件,以及/或者它們的組合。
以下的權(quán)利要求中的對應(yīng)結(jié)構(gòu)、材料、操作以及所有功能性限定的裝置(means)或步驟的等同替換,旨在包括任何用于與在權(quán)利要求中具體指出的其它單元相組合地執(zhí)行該功能的結(jié)構(gòu)、材料或操作。所給出的對本發(fā)明的描述其目的在于示意和描述,并非是窮盡性的,也并非是要將本發(fā)明限定到所表述的形式。對于所屬技術(shù)領(lǐng)域的普通技術(shù)人員來說,顯然可以作出許多修改和變型而不偏離本發(fā)明的精神和范圍。對實(shí)施例的選擇和描述,是為了最好地解釋本發(fā)明的原理和實(shí)際應(yīng)用,使所屬技術(shù)領(lǐng)域的普通技術(shù)人員能夠明了,本發(fā)明可以有適合所要的特定用途的具有各種改變的各種實(shí)施例。
本發(fā)明的各種實(shí)施例的描述已為達(dá)成說明的目的而呈現(xiàn),但不意欲為窮盡性的或限于所揭示的實(shí)施例。在不脫離所描述實(shí)施例的范圍及精神的情況下,許多修改及變化對于本領(lǐng)域技術(shù)人員將顯而易見。本文中所使用的術(shù)語被選擇以最好地解釋實(shí)施例的原理、實(shí)際應(yīng)用或?qū)κ袌鲋姓业降募夹g(shù)的技術(shù)改進(jìn),或使其他本領(lǐng)域技術(shù)人員能夠理解本文所揭示的實(shí)施例。
現(xiàn)在參看圖18,大體上示出根據(jù)一個(gè)實(shí)施例的包括計(jì)算機(jī)可讀存儲介質(zhì)1802及程序指令1804的計(jì)算機(jī)程序產(chǎn)品1800。
本發(fā)明可以是系統(tǒng)、方法和/或計(jì)算機(jī)程序產(chǎn)品。計(jì)算機(jī)程序產(chǎn)品可以包括計(jì)算機(jī)可讀存儲介質(zhì),其上載有用于使處理器實(shí)現(xiàn)本發(fā)明的各個(gè)方面的計(jì)算機(jī)可讀程序指令。
計(jì)算機(jī)可讀存儲介質(zhì)可以是可以保持和存儲由指令執(zhí)行設(shè)備使用的指令的有形設(shè)備。計(jì)算機(jī)可讀存儲介質(zhì)例如可以是但不限于電存儲設(shè)備、磁存儲設(shè)備、光存儲設(shè)備、電磁存儲設(shè)備、半導(dǎo)體存儲設(shè)備或者上述的任意合適的組合。計(jì)算機(jī)可讀存儲介質(zhì)的更具體的例子(非窮舉的列表)包括:便攜式計(jì)算機(jī)盤、硬盤、隨機(jī)存取存儲器(RAM)、只讀存儲器(ROM)、可擦式可編程只讀存儲器(EPROM或閃存)、靜態(tài)隨機(jī)存取存儲器(SRAM)、便攜式壓縮盤只讀存儲器(CD-ROM)、數(shù)字多功能盤(DVD)、記憶棒、軟盤、機(jī)械編碼設(shè)備、例如其上存儲有指令的打孔卡或凹槽內(nèi)凸起結(jié)構(gòu)、以及上述的任意合適的組合。這里所使用的計(jì)算機(jī)可讀存儲介質(zhì)不被解釋為瞬時(shí)信號本身,諸如無線電波或者其他自由傳播的電磁波、通過波導(dǎo)或其他傳輸媒介傳播的電磁波(例如,通過光纖電纜的光脈沖)、或者通過電線傳輸?shù)碾娦盘枴?/p>
這里所描述的計(jì)算機(jī)可讀程序指令可以從計(jì)算機(jī)可讀存儲介質(zhì)下載到各個(gè)計(jì)算/處理設(shè)備,或者通過網(wǎng)絡(luò)、例如因特網(wǎng)、局域網(wǎng)、廣域網(wǎng)和/或無線網(wǎng)下載到外部計(jì)算機(jī)或外部存儲設(shè)備。網(wǎng)絡(luò)可以包括銅傳輸電纜、光纖傳輸、無線傳輸、路由器、防火墻、交換機(jī)、網(wǎng)關(guān)計(jì)算機(jī)和/或邊緣服務(wù)器。每個(gè)計(jì)算/處理設(shè)備中的網(wǎng)絡(luò)適配卡或者網(wǎng)絡(luò)接口從網(wǎng)絡(luò)接收計(jì)算機(jī)可讀程序指令,并轉(zhuǎn)發(fā)該計(jì)算機(jī)可讀程序指令,以供存儲在各個(gè)計(jì)算/處理設(shè)備中的計(jì)算機(jī)可讀存儲介質(zhì)中。
用于執(zhí)行本發(fā)明操作的計(jì)算機(jī)程序指令可以是匯編指令、指令集架構(gòu)(ISA)指令、機(jī)器指令、機(jī)器相關(guān)指令、微代碼、固件指令、狀態(tài)設(shè)置數(shù)據(jù)、或者以一種或多種編程語言的任意組合編寫的源代碼或目標(biāo)代碼,所述編程語言包括面向?qū)ο蟮木幊陶Z言—諸如Smalltalk、C++等,以及常規(guī)的過程式編程語言—諸如“C”語言或類似的編程語言。計(jì)算機(jī)可讀程序指令可以完全地在用戶計(jì)算機(jī)上執(zhí)行、部分地在用戶計(jì)算機(jī)上執(zhí)行、作為一個(gè)獨(dú)立的軟件包執(zhí)行、部分在用戶計(jì)算機(jī)上部分在遠(yuǎn)程計(jì)算機(jī)上執(zhí)行、或者完全在遠(yuǎn)程計(jì)算機(jī)或服務(wù)器上執(zhí)行。在涉及遠(yuǎn)程計(jì)算機(jī)的情形中,遠(yuǎn)程計(jì)算機(jī)可以通過任意種類的網(wǎng)絡(luò)—包括局域網(wǎng)(LAN)或廣域網(wǎng)(WAN)—連接到用戶計(jì)算機(jī),或者,可以連接到外部計(jì)算機(jī)(例如利用因特網(wǎng)服務(wù)提供商來通過因特網(wǎng)連接)。在一些實(shí)施例中,通過利用計(jì)算機(jī)可讀程序指令的狀態(tài)信息來個(gè)性化定制電子電路,例如可編程邏輯電路、現(xiàn)場可編程門陣列(FPGA)或可編程邏輯陣列(PLA),該電子電路可以執(zhí)行計(jì)算機(jī)可讀程序指令,從而實(shí)現(xiàn)本發(fā)明的各個(gè)方面。
這里參照根據(jù)本發(fā)明實(shí)施例的方法、裝置(系統(tǒng))和計(jì)算機(jī)程序產(chǎn)品的流程圖和/或框圖描述了本發(fā)明的各個(gè)方面。應(yīng)當(dāng)理解,流程圖和/或框圖的每個(gè)方框以及流程圖和/或框圖中各方框的組合,都可以由計(jì)算機(jī)可讀程序指令實(shí)現(xiàn)。
這些計(jì)算機(jī)可讀程序指令可以提供給通用計(jì)算機(jī)、專用計(jì)算機(jī)或其它可編程數(shù)據(jù)處理裝置的處理器,從而生產(chǎn)出一種機(jī)器,使得這些指令在通過計(jì)算機(jī)或其它可編程數(shù)據(jù)處理裝置的處理器執(zhí)行時(shí),產(chǎn)生了實(shí)現(xiàn)流程圖和/或框圖中的一個(gè)或多個(gè)方框中規(guī)定的功能/動作的裝置。也可以把這些計(jì)算機(jī)可讀程序指令存儲在計(jì)算機(jī)可讀存儲介質(zhì)中,這些指令使得計(jì)算機(jī)、可編程數(shù)據(jù)處理裝置和/或其他設(shè)備以特定方式工作,從而,存儲有指令的計(jì)算機(jī)可讀介質(zhì)則包括一個(gè)制造品,其包括實(shí)現(xiàn)流程圖和/或框圖中的一個(gè)或多個(gè)方框中規(guī)定的功能/動作的各個(gè)方面的指令。
也可以把計(jì)算機(jī)可讀程序指令加載到計(jì)算機(jī)、其它可編程數(shù)據(jù)處理裝置、或其它設(shè)備上,使得在計(jì)算機(jī)、其它可編程數(shù)據(jù)處理裝置或其它設(shè)備上執(zhí)行一系列操作步驟,以產(chǎn)生計(jì)算機(jī)實(shí)現(xiàn)的過程,從而使得在計(jì)算機(jī)、其它可編程數(shù)據(jù)處理裝置、或其它設(shè)備上執(zhí)行的指令實(shí)現(xiàn)流程圖和/或框圖中的一個(gè)或多個(gè)方框中規(guī)定的功能/動作。
附圖中的流程圖和框圖顯示了根據(jù)本發(fā)明的多個(gè)實(shí)施例的系統(tǒng)、方法和計(jì)算機(jī)程序產(chǎn)品的可能實(shí)現(xiàn)的體系架構(gòu)、功能和操作。在這點(diǎn)上,流程圖或框圖中的每個(gè)方框可以代表一個(gè)模塊、程序段或指令的一部分,所述模塊、程序段或指令的一部分包含一個(gè)或多個(gè)用于實(shí)現(xiàn)規(guī)定的邏輯功能的可執(zhí)行指令。在有些作為替換的實(shí)現(xiàn)中,方框中所標(biāo)注的功能也可以以不同于附圖中所標(biāo)注的順序發(fā)生。例如,兩個(gè)連續(xù)的方框?qū)嶋H上可以基本并行地執(zhí)行,它們有時(shí)也可以按相反的順序執(zhí)行,這依所涉及的功能而定。也要注意的是,框圖和/或流程圖中的每個(gè)方框、以及框圖和/或流程圖中的方框的組合,可以用執(zhí)行規(guī)定的功能或動作的專用的基于硬件的系統(tǒng)來實(shí)現(xiàn),或者可以用專用硬件與計(jì)算機(jī)指令的組合來實(shí)現(xiàn)。