專利名稱:處理多處理器系統(tǒng)中事務緩沖器溢出的方法和系統(tǒng)的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及計算機領(lǐng)域,具體涉及多處理器系統(tǒng)中的并發(fā)控制,更具 體涉及一種用于處理多處理器系統(tǒng)中的事務緩沖器溢出的方法和裝置,以 及一種多處理器系統(tǒng)中的事務存儲器系統(tǒng)。本發(fā)明還涉及一種在多處理器 環(huán)境中,由一個處理器修改其他一個或多個處理器的狀態(tài)的方法和裝置。
背景技術(shù):
事務(transaction)是一個在計算機領(lǐng)域中被廣泛使用的概念。 一個 事務通常是指多條指令以看似原子的方式執(zhí)行,在執(zhí)行期間沒有其他操作 介于其中。例如,如果一個事務訪問了某個存儲器地址上的數(shù)據(jù),則直到 該事務結(jié)束,該地址上的數(shù)據(jù)不應該被該事務以外的操作修改。
事務可以直接在硬件層面實現(xiàn),比如修改處理器體系結(jié)構(gòu)。從體系結(jié) 構(gòu)級別上支持事務的硬件組件稱為事務存儲器(Transactional Memory, 簡稱TM)系統(tǒng)。采用事務存儲器系統(tǒng),在編寫并行程序時程序員無需使 用鎖,因此可以提高軟件生產(chǎn)效率。
下面的示例從程序員的角度說明了事務的含義。圖l示出了一動態(tài)平 衡二叉樹。對該樹的操作有讀取、寫入、刪除和插入。如果有多個線程并 行地訪問該樹,則程序員通常使用一全局鎖來保護整個樹。這種粗粒度的 方法簡單,但它迫使對樹的訪問串行化。因此,該方法不能有好的性能。 細粒度的鎖可解決這個問題。例如,給予該樹中的每個節(jié)點一個鎖。然而, 這樣的話,程序?qū)⒑茈y編寫。當插入或刪除一節(jié)點時,相鄰節(jié)點必須旋轉(zhuǎn) 以保持樹的平衡。為正確起見,必須獲得多個鎖。這會帶來新的問題,例 如死鎖。如果使用細粒度鎖來編寫程序,則程序員必須掌握高超的并行編程技能。因此,生產(chǎn)率很低。
使用事務存儲器則可以解決這個問題。程序員僅需要使用新定義的指
令transaction—start和transaction—end,在代碼中標出事務的邊界。在事 務內(nèi)部,用和往常相同的方式編寫代碼,但是完全不需要考慮鎖。硬件將 保證該事務以看似原子的方式執(zhí)行,不會有其他操作介于其間。以下示例 代碼示出了使用事務存儲器對該動態(tài)平衡二叉樹進行的操作,例如插入或 刪除節(jié)點。
transaction—start { p = rootj while (TRUE) { if (x < p->key) { p = p->left; } else if (x > p->key) {
p = p->right; } else { break;}
}
do read/write/deletion/insertion here; } transaction—end;
圖2示出了目前一般的事務存儲器系統(tǒng)。如圖所示,在體系結(jié)構(gòu)的級 別上,事務訪問的所有數(shù)據(jù)(推測性數(shù)據(jù))將被臨時地存儲在一事務緩沖 器中,而不是寫入到存儲器中。如果兩個事務訪問相同的地址,并且其中 至少一個修改該地址上的數(shù)據(jù),則其中一個事務必須回滾(roll back)并 重新執(zhí)行,而另一個事務繼續(xù)。這種情況被稱為沖突(conflict)。如果沒 有沖突,事務結(jié)束時臨時存儲的數(shù)據(jù)將被寫入到存儲器。該操作稱為提交 (commit)。
在上述示例中,如果該樹很大,則兩個線程訪問同一個節(jié)點的概率是 很低的。這意味著不同事務很可能是并行執(zhí)行的。因此,雖然利用事務存 儲器系統(tǒng)編程時采用了粗粒度的編程風格,但是程序運行時的性能卻可以與細粒度的鎖相比。
如上所述,為實現(xiàn)事務存儲系統(tǒng),需要添加用于臨時存儲的片上緩沖
器。然而,硬件緩沖器只能具有有限的大小。例如,Power4/Power5的每 個處理器核具有32KB —級數(shù)據(jù)高速緩存。臨時緩沖器位于關(guān)鍵路徑上, 因此,它幾乎不可能大于一級高速緩存(事實上,由于面積限制,它應當 遠小于一級高速緩存)。另一方面,程序員又很難精確估計一事務將使用 多少存儲空間。因此, 一種可能的情況是事務所占用的存儲空間大于硬件 緩沖器的大小。這種情況稱為溢出(overflow)。
為保證程序的正確性,溢出必須得到處理。由于溢出是一種罕見的事 件,溢出處理方法的速度對于整體性能來講并不是很關(guān)鍵,而實現(xiàn)該方法
所要求的硬件復雜性是需要關(guān)注的。
Rajwar R, Herlihy M, Lai K. Virtualizing transactional memory. Proceedings of the 32st Annual International Symposium on Computer Architecture(ISCA). Madison, Wisconsin: IEEE Computer Society, 2005. 494-505公開了一種通過硬件處理溢出的解決方案。該解決方案是由Intel 提供的。它通過將推測性數(shù)據(jù)存儲到存儲器中來避免溢出。然而,該方法 需要增加一些新的部件來支持自動存儲,對硬件的修改很復雜。IBM Power 體系結(jié)構(gòu)采用了 RISC (精簡指令集計算機)體系結(jié)構(gòu),該體系結(jié)構(gòu)要求 硬件簡單。因此,上述解決方案不適合于IBM的產(chǎn)品以及所有采用RISC 體系結(jié)構(gòu)的芯片。
Moore K E, Bobba J, Moravan M J, Hill M D, Wood D A. LogTM: log-based transactional memory. The 12th International Symposium on High-Performance Computer Architecture(HPCA). 2006. 254-265 7〉開了 另外一種通過將推測性數(shù)據(jù)寫入存儲器來避免溢出的方法。然而,相比于 日志的方式,在高速緩存或硬件緩沖器中進行沖突檢測會快很多。所以, 該文中提及的基于日志的方式在進行沖突檢測時性能并不理想。
Colin Blundell, Joe Devietti, E Christopher Lewis and et al. Making the Fast Case Common and the Uncommon Case Simple in UnboundedTransactional Memory. Proceedings of Annual International Symposium on Computer Architecture (ISCA). 2007中也公開了一種處理事務緩沖器 溢出的方法,然而,該方法仍然需要復雜的硬件改動,例如,對存儲控制 器的修改。
顯然,本領(lǐng)域中需要一種簡單有效的解決方案來處理事務緩沖器溢出 的問題,該方案不應該對現(xiàn)有硬件體系結(jié)構(gòu)進行很大的修改。
發(fā)明內(nèi)容
根據(jù)本發(fā)明的一個方面,提供了一種處理多處理器系統(tǒng)中事務緩沖器 溢出的方法,包括以下步驟當一處理器的事務緩沖器溢出時,禁止其他 處理器進入事務,并等待任何具有當前事務的處理器完成其當前事務;在 不使用事務緩沖器的情況下,重新執(zhí)行造成所述事務緩沖器溢出的事務; 以及當所述事務執(zhí)行完成以后,使其他處理器能夠進入事務。
根據(jù)本發(fā)明的另一個方面,提供了一種多處理器系統(tǒng)中的事務存儲器 系統(tǒng),包括多個處理器;所述多個處理器可訪問的存儲器;以及每個處 理器的事務緩沖器,其中,當一處理器的事務緩沖器溢出時,所述一處理 器禁止其他處理器進入事務,并等待所述其他處理器中的任何具有當前事 務的處理器完成其當前事務后重新執(zhí)行造成所述事務緩沖器溢出的事務, 并且當所iiit成所述事務緩沖器溢出的事務重新執(zhí)行完成后,使所述其他 處理器能夠i^v事務。
根據(jù)本發(fā)明的再一個方面,提供了一種在多處理器環(huán)境中,由一個處 理器修改其他一個或多個處理器的狀態(tài)的方法,該方法包括以下步驟所 述一個處理器通過總線向所述其他一個或多個處理器中的每一個發(fā)送消 息;所述其他一個或多個處理器中的每一個接受所述消息,并根據(jù)所述消 息修改其寄存器;以及所述其他一個或多個處理器中的每一個返回應答。
本發(fā)明的解決方案能夠解決事務緩沖器溢出的問題,同時它只需要很 少的硬件方面的改動,因此它特別適合于RISC芯片。
9
通過在結(jié)合附圖閱讀時參照下面對說明性實施例的詳細說明,將最好
地理解發(fā)明本身以及其優(yōu)選使用模式、另外的目標以及優(yōu)點,其中
圖1示出了可使用事務存儲器對其進行操作的一動態(tài)平衡二叉樹示
例;
圖2示出了目前一般的事務存儲器系統(tǒng);
圖3示出了 Power體系結(jié)構(gòu)中的芯片互連結(jié)構(gòu);
圖4示出了 Power L2高速緩存的結(jié)構(gòu);
圖5示出了根據(jù)本發(fā)明的實施例的多處理器系統(tǒng)中的事務存儲器系 統(tǒng);以及
圖6示出了示出了在多處理器系統(tǒng)中,根據(jù)本發(fā)明的實施例處理事務 緩沖器溢出的方法。
具體實施例方式
下面參照附圖來說明本發(fā)明的實施例。然而,應當理解的是,本發(fā)明 并不限于所介紹的特定實施例。相反,可以考慮用下面的特征和元素的任 意組合來實施和實踐本發(fā)明,而無論它們是否涉及不同的實施例。因此, 下面的方面、特征、實施例和優(yōu)點僅作說明之用而不應被看作是所附權(quán)利 要求的要素或限定,除非權(quán)利要求中明確提出。
本發(fā)明的基本思想在于當發(fā)生事務緩沖器溢出時,通知軟件來處理 它。該事務應當被中止并重新執(zhí)行。當它第二次執(zhí)行時,硬件不將推測性 數(shù)據(jù)存儲在事務緩沖器中,而是將數(shù)據(jù)寫入存儲器。由于未使用臨時緩沖 器,因此,事務的第二次執(zhí)行將不會發(fā)生溢出.然而,為了保持正確性, 必須有某種機制來防止其他事務訪問同一數(shù)據(jù)。 一條新指令"檢查和禁止" 在總線上廣播一消息,并禁止其他處理器ii^新的事務。當其他處理器完 成其當前事務(如果有的話)后,溢出的事務開始第二次執(zhí)行。由于此時
該事務是系統(tǒng)中唯一的事務,因此它可安全地直接將數(shù)據(jù)寫入存儲器。 下面以本發(fā)明在Power體系結(jié)構(gòu)上的 一示例實現(xiàn)為例來從總體上說明本發(fā)明技術(shù)方案。然而,應指出的是,這并非是對本發(fā)明的限制,相反,
本發(fā)明也可在任何其他RISC體系結(jié)構(gòu)上實現(xiàn),或在采用其他體系結(jié)構(gòu)的 多處理器系統(tǒng)中實現(xiàn)。
圖3示出了 Power體系結(jié)構(gòu)中芯片的互連方式,其中,使用環(huán)來連接 4個芯片以形成一個MCM (多芯片才莫塊)。實際上,參與連接的是每個 芯片中的L2高速緩存(在圖中Power芯片的內(nèi)部,未示出)。圖4示出 了 Power L2高速緩存的結(jié)構(gòu)。
環(huán)總線通常用于傳送高速緩存一致性協(xié)議的消息。這些消息,皮傳送到 環(huán)總線上,并由其他處理器的L2高速緩存通過snoop (探聽)端口接收。 其他處理器的L2高速緩存產(chǎn)生應答,這些應答被合并為一個最終的響應 (combined response, 簡稱cresp )。cresp也會^L每個L2高速緩存從 crcsp 端口監(jiān)聽到。
利用上述結(jié)構(gòu),可實現(xiàn)本發(fā)明而無需大量的硬件修改??稍诿總€處理 器的L2高速緩存中添加兩個反映其狀態(tài)的標志TE (事務使能)指示一 處理器是否可iiA事務;TP(事務進行中)指示一處理器是否正在事務中。 當一處理器上發(fā)生事務緩沖器溢出時,該處理器通過執(zhí)行"檢查和禁止,, 指令在環(huán)總線上向其他處理器廣播一消息。每個處理器可通過其snoop端 口接收該消息,并且根據(jù)該消息設(shè)置其TE標志,從而禁止該處理器ii^ 新的事務。同時,從每個處理器的L2高速緩存中讀取TP標志,作為對所 述消息的響應發(fā)送到環(huán)總線上。這些響應根據(jù)所述"檢查和禁止"指令的 語義被合并。合并TP所產(chǎn)生的最g將被返回到所述處理器。所述一處 理器根據(jù)該值判斷是否有其他處理器當前處于事務中,并在有任何其他處 理器當前處于事務中時,重新執(zhí)行所述"檢查和禁止,,指令,直到所有其 他處理器退出其當前事務,從而所述一處理器可不使用事務緩沖器而直接 在存儲器上重新執(zhí)行其產(chǎn)生緩沖器溢出的事務。
在該修改的硬件體系結(jié)構(gòu)中,將添加若干新的指令。這些指令及其語 義如下
1)Transaction -Start handler語義
if(TE==l) TP=1;
開始執(zhí)行事務; else
go to handlen
2) Transaction-End 語義
將由事務寫入的所有數(shù)據(jù)提交到存儲器; TP = 0;
3) Transaction-Enable 描述
使每個其他處理器能夠進入新的事務 語義
對于每個其他處理器k, TE[k=l
4) Transaction-Disable
描述
禁止每個其他處理器進入新的事務 語義
對于每個其他處理器k, TEk=0
5) Transaction-Check result-register 描述
檢查是否有任何其他處理器處于事務中 語義
當且僅當有某一其他處理器k, TP[k]--l時,result-register = 1
6) Transaction-Check-&-Disable result-register 語義
原子地執(zhí)行如下兩條指令Transaction-Check result-register Transaction-Disable
7) Get畫TP result-register 語義
result-register = TP
8) Set-TP 描述
將TP設(shè)置為1以指示處理器處于事務中
語義
TP = 1
9) Clear-TP
描述
將TP清除為0以指示該處理器本身不在事務中
語義
TP = 0
10) Get-TE result-register 語義
result-register = TE
11) Set-TE 描述
將TE設(shè)置為1以使得該處理器本身可執(zhí)行事務 語義
TE = 1
12) Clear-TE 描述
將TE清除為0以禁止該處理器本身執(zhí)行事務
語義
TE = 0下面以 一事務及其處理程序的示例代碼為例來說明在本發(fā)明的技術(shù)方 案中如何使用以上指令來處理事務緩沖器溢出。應指出的是,以下代碼僅 為示例,而不是對本發(fā)明的限制。
1 Save register; 〃保存寄存器以便事務重新執(zhí)行
2 transaction-start:
3 Recover register; 〃在重新執(zhí)行時恢復寄存器
4 Transaction-Start handler-address; 〃事務開始
5 ...... 〃執(zhí)行事務
6 Transaction-End; 〃事務結(jié)束
7 transaction-succeed:
8 …
9
10 handler-address 〃處理程序的入口
11 …
12 transaction-check: 〃處理溢出的代碼從這里開始
13 Transaction-Check result-register 〃檢查處理器是否在事務中
14 if(result-register==l)
15 go to transaction-check; 〃如果處理器在事務中,再次檢查
16 Set-TP; 〃指示該處理器本身在事務中
17 transaction-check-&-disable:
18 Transaction-Check-&-Disable result-register〃禁止其他處理 器執(zhí)行事務
19 if(result-register ==1) 〃檢查其他處理器是否在事務中
20 go to transaction-check隱&陽disable〃如果一處理器在事務中,再 次檢查
21 ...... 〃重新執(zhí)行事務(可能用存儲器的全局鎖)
22 Transaction-Enable; //使其他處理器能執(zhí)行事務
1423 Clear-TP; 〃指示該處理器本身不在事務中
24 go to transaction-succeed;
根據(jù)以上代碼,如果一處理器的事務緩沖器發(fā)生了溢出,則執(zhí)行流跳 轉(zhuǎn)到處理程序(第10行)。因為這是溢出事件,所以它進一步跳轉(zhuǎn)到第 12行。處理程序等待其他事務的完成(第13-15行)。然后,設(shè)置該處 理器本身的TP (第16行)并禁止所有其他處理器i^新的事務(第18 -20行)。此后,重新執(zhí)行該事務,而沒有臨時緩沖(第21行)。在該階 段,如需要可以使用全局鎖或其他軟件機制來保證正確性。最后,使其他 處理器能夠執(zhí)行事務(第22行),并清除該處理器本身的TP標志(第23 行)。
上述代碼中的關(guān)鍵是"Check-&-Disable"(檢查和禁止)指令,該指 令的如下幾個獨特特征將本發(fā)明的事務存儲器系統(tǒng)與其他事務存儲器系統(tǒng) 區(qū)別開來1)它顯式地利用總線上的消息廣播;2)它檢查和修改其他處 理器的寄存器;3)它顯式地利用Power體系結(jié)構(gòu)中的響應合并機制來產(chǎn) 生返回值。
以上以本發(fā)明在Power體系結(jié)構(gòu)上的一示例實現(xiàn)為例從總體上說明了 本發(fā)明的技術(shù)方案,應指出的是,以上說明僅為示例,而不是對本發(fā)明的 限制。例如,本發(fā)明也可以在其他RISC體系結(jié)構(gòu)或非RISC體系結(jié)構(gòu)的 多處理器系統(tǒng)中實現(xiàn)??蓪崿F(xiàn)本發(fā)明的多處理器系統(tǒng)可以是任何類型的多 處理器系統(tǒng),包括如上所述的多個CPU在總線級別上連接在一起、甚至多 個處理器在單個芯片上的緊密耦合的多處理器系統(tǒng),以及多個獨立的計算 機通過高速通信系統(tǒng)(例如,千兆位以太網(wǎng))互連的松散耦合的多處理器 系統(tǒng);也包括對稱多處理器系統(tǒng)以及非對稱多處理器系統(tǒng)。相應地,本文 中的處理器是指4壬何計算實體,包括單個芯片中的多個核,單個封裝中多 個處理芯片,單個系統(tǒng)單元中的多個封裝,通過網(wǎng)絡(luò)互連的多個獨立的計 算機等。再例如,上述TE、 TP標志既可以位于L2高速緩存中,也可以 位于處理器本身中;并且它們既可以利用現(xiàn)有的寄存器或其他存儲元件或其中的位來實現(xiàn),也可以利用新添加的寄存器或其他存儲元件或其中的位
來實現(xiàn)。并且,所述"檢查和禁止"指令以及其他指令既可以由L2高速 緩存來執(zhí)行,也可以由處理器本身來執(zhí)行。此外, 一處理器設(shè)置和讀取其 他處理器的狀態(tài)既可以如上所述通過在總線上發(fā)送消息來實現(xiàn),也可以通 過在其他通信結(jié)構(gòu)上發(fā)送消息或以其他方式來實現(xiàn)。
下以參照附圖描述根據(jù)本發(fā)明的實施例的、多處理器系統(tǒng)中的事務存 儲器系統(tǒng)以及根據(jù)本發(fā)明的實施例的用于處理事務緩沖器溢出的方法和裝 置。
圖5示出了根據(jù)本發(fā)明的實施例的多處理器系統(tǒng)中的事務存儲器系 統(tǒng)。如圖所示,該事務存儲器系統(tǒng)包括多個處理器501 (為簡明起見, 圖中僅示出兩個);所述多個處理器可訪問的存儲器502;以及每個處理 器的事務緩沖器503。
其中,當一處理器501在執(zhí)行一事務的過程中,如果其事務緩沖器 503溢出,該處理器501能夠禁止其他處理器501 i^v事務,并等待任何 具有當前事務的處理器501完成其當前事務。當所有具有當前事務的處理 器501已完成其當前事務后,該處理器501可重新執(zhí)行造成所述事務緩沖 器503溢出的事務,并且在該事務的重新執(zhí)行中,該處理器501將不再使 用所述事務緩沖器503,而是直接(例如通過數(shù)據(jù)高速緩存)在存儲器502 上執(zhí)行該事務中的操作。由于此時其他處理器501已被禁止^新的事務, 因此,該事務將是整個多處理器系統(tǒng)中唯一的事務,這樣就避免了多處理 器系統(tǒng)中由于不同處理器501在不同事務中訪問相同的存儲器地址所可能 引起的沖突。此外,在所述事務的重新執(zhí)行過程中,如需要還可以使用全 局鎖等機制來進一步保證正確性。當所述事務執(zhí)行完成以后,該處理器501 重新使其他處理器501能夠i^v事務。
在本發(fā)明的一實施例中,當一處理器501在執(zhí)行事務的過程中,如果 發(fā)生了事務緩沖器溢出,該處理器501向該多處理器系統(tǒng)中的所有其他處 理器501發(fā)送一 "檢查和禁止"消息。當所述其他處理器501中的每一個 接收到該"檢查和禁止"消息時,檢查該每一個處理器501是否有正在執(zhí)行的事務,返回檢查結(jié)果,并禁止各自處理器501進入新的事務。當從所 述其他處理器501中的每一個返回的檢查結(jié)果指示任何一個處理器501當 前正在執(zhí)行事務時,所述一處理器501再次發(fā)送所述"檢查和禁止"消息, 直到從所述其他處理器501中的每一個返回的檢查結(jié)果均指示該處理器 501沒有正在執(zhí)行的事務。
例如,在本發(fā)明的一實施例中,當多處理器系統(tǒng)中的一處理器501發(fā) 生事務緩沖器溢出時,該處理器501可通過執(zhí)行上文中的 Transaction-Check-&-Disable指令來向該多處理器系統(tǒng)中的其他處理器發(fā) 送所述"檢查和禁止,,消息,以便檢查其他處理器當前是否正在執(zhí)行事務, 并禁止其他處理器進入新的事務。并且,在該指令的執(zhí)行結(jié)果顯示有任何 其他處理器具有正在執(zhí)行的當前事務時,該處理器可重新執(zhí)行該指令,直 到該指令的執(zhí)行結(jié)構(gòu)顯示其他處理器的當前事務執(zhí)行完畢。
在本發(fā)明的一實施例中,所述多處理器系統(tǒng)中的每一個處理器501具 有一TP標志。該標志表示該處理器501當前是否正在執(zhí)行事務。例如, 該標志可包含一個二進制位,當該位為1時,表示該處理器501當前正在 執(zhí)行事務;當該位為O時,表示該處理器501當前沒有正在執(zhí)行事務。當 然,該標志也可包含多個位,且可由不同的二進制數(shù)表示處理器501是否 正在執(zhí)行事務。在本發(fā)明的一實施例中,該標志位于處理器501的數(shù)據(jù)高 速緩存(例如L2數(shù)據(jù)高速緩存)中。在本發(fā)明的其他實施例中,該標志 也可位于處理器501本身中。該標志既可由數(shù)據(jù)高速緩存或處理器501本 身中的現(xiàn)有元件來實現(xiàn),也可由新增加的元件來實現(xiàn)。
當一處理器501 i^A事務時,設(shè)置其TP標志(例如,通過執(zhí)行上文 中的Set-TP指令來設(shè)置該標志),而當一處理器501完成事務時,清除其 TP標志(例如,通過執(zhí)行上文中的Clear-TP指令來清除該標志)。這樣, 當一處理器501接收到來自另一個處理器501的"檢查和禁止"消息時, 可通過讀取其自身中的TP標志來檢查其自身是否正在執(zhí)行事務(例如, 通過執(zhí)行上文中的Get-TP指令來進行檢查),并將該結(jié)果返回給所述另 一個處理器501。在本發(fā)明的一實施例中,所述多處理器系統(tǒng)中的每一個處理器501還 具有一TE標志。該標志表示該處理器501是否能夠i^V事務。例如,該 標志可包含一個二進制位,當該位為1時,表示該處理器501能夠進入事 務;當該位為0時,表示該處理器501不能進入事務。當然,該標志也可 包含多個位,且可由不同的二進制數(shù)表示處理器501是否能夠i^事務。 在本發(fā)明的一實施例中,該標志位于處理器501的數(shù)據(jù)高速緩存中。在本 發(fā)明的其他實施例中,該標志也可位于處理器501本身中。該標志既可由 數(shù)據(jù)高速緩存或處理器501本身中的現(xiàn)有元件來實現(xiàn),也可由新增加的元 件來實現(xiàn)。
每一處理器501每當其ii^事務之前,首先檢查該TE標志,并僅當 該TE標志已蜂皮i殳置(例如,該標志為l)時,才ii^該事務;當該TE標 志未^i殳置時(例如,該標志為0),該處理器501不能進入該事務,而 是例如執(zhí)行一處理程序。這樣,當一處理器501接收到來自另一個處理器 501的所述"檢查和禁止,,消息時,可通過清除該TE標志來禁止其自身進 入新的事務(例如,通過執(zhí)行上文中的Clear-TE指令來清除該標志)。
在本發(fā)明的一實施例中,當在一處理器501上造成事務緩存溢出的事 務在不使用事務緩存的情況下被重新執(zhí)行完成以后,該處理器501通過向 該多處理器系統(tǒng)中的其他每一處理器501發(fā)送一事務使能消息來4吏得其他 每一處理器501能夠ii^事務。在本發(fā)明的進一步的實施例中,當一處理 器501中接收到來自另一處理器501的事務使能消息時,該處理器501可 通過設(shè)置其自身中的所述TE標志來使其自身能夠i^新的事務(例如, 通過執(zhí)行上文中的Set-TE標志來設(shè)置該標志)。
在本發(fā)明的一優(yōu)選實施例中,當一處理器501的事務緩沖器503溢出 時,該處理器501執(zhí)行一處理程序,并在該處理程序中執(zhí)行以上^作。 該處理程序優(yōu)選地以加載到存儲器502中并可由處理器501訪問的軟件代 碼來實現(xiàn),但也可以處理器501或其他部件中的固件或硬件來實現(xiàn)。
在本發(fā)明的一實施例中,作為進一步的性能優(yōu)化,當一處理器501上 發(fā)生事務緩沖器溢出時,該處理器501不是禁止該多處理器系統(tǒng)中的所有
18其他處理器501進入事務,而僅禁止部分處理器501 ii^事務,或者禁止 處理器ii^有可能與當前事務沖突的事務,或者兩者兼而有之。
在本發(fā)明的一實施例中,所述多處理器系統(tǒng)中的多個處理器501通過 總線互連,這樣,所述"檢查和禁止,,消息以及所述事務使能消息可通過 總線上的消息廣播從一處理器501傳送到其他每個處理器501,且每個處 理器501的響應可通過總線傳回到所述一處理器501。在本發(fā)明的進一步 的實施例中,所述多處理器系統(tǒng)為諸如Power體系結(jié)構(gòu),且可利用Power 體系結(jié)構(gòu)中的響應合并機制由所述每個處理器501的響應生成一個返回 值,并返回給所述一處理器501。
圖6示出了在多處理器系統(tǒng)中,根據(jù)本發(fā)明的實施例處理事務緩沖器 :益出的方法。
如圖所示,當一處理器的事務緩沖器503溢出時,過程開始。在步驟 601,禁止該多處理器系統(tǒng)中的其他處理器進入事務,并等待任何具有當前 事務的處理器完成其當前事務。
在本發(fā)明的一實施例中,該步驟601包括以下子步驟由所述發(fā)生事 務緩沖器溢出的處理器向所述其他處理器中的每一個發(fā)送"檢查和禁止,, 消息;當所述其他處理器中的每一個接收到該"檢查和禁止"消息時,檢 查該處理器是否正在執(zhí)行事務,返回檢查結(jié)果,并禁止該處理器it^新的 事務;以及當從所述其他處理器中的每一個返回的檢查結(jié)果指示任何一個 處理器正在執(zhí)行事務時,所述發(fā)生事務緩沖器溢出的處理器再次發(fā)送所述 "檢查和禁止,,消息,直到從所述其他處理器中的每一個返回的檢查結(jié)果 均指示該每一個處理器沒有正在執(zhí)行的事務。
在本發(fā)明的一實施例中,作為進一步的性能優(yōu)化,當一處理器上發(fā)生 事務緩沖器溢出時,該處理器不是禁止該多處理器系統(tǒng)中的所有其他處理 器i^事務,而僅禁止部分處理器501進入事務,或者禁止處理器i^有 可能與當前事務沖突的事務,或者兩者兼而有之。
在本發(fā)明的一實施例中,該多處理器系統(tǒng)中的每個處理器具有一 TP 標志,該標志表示該處理器是否有正在執(zhí)行的當前事務。這樣,當所述其
19他處理器中的每一個接收到所述"檢查和禁止"消息時,該每一個處理器
通過讀取其TP標志來判斷其是否正在執(zhí)行事務。當該多處理器系統(tǒng)中的 一處理器當進入事務時,設(shè)置該TP標志,而當其完成事務時,清除該TP 標志。該TP標志可位于每個處理器的數(shù)據(jù)高速緩存中,也可位于每個處 理器本身中。
在本發(fā)明的一實施例中,該處理器系統(tǒng)中的每個處理器還具有一 TE 標記,該標志表示該處理器是否能夠^事務。這樣,當所述其他處理器 中的每一個接收到所述"檢查和禁止,,消息時,該每一個處理器通過清除 其本身中的TE標志來禁止其本身進入事務。并且,該多處理器系統(tǒng)中的 每一個處理器當^事務之前都先檢查其te標志,且只有當該te標志
被設(shè)置時,才ii/v該事務;而當該TE標志未被設(shè)置時,不ii^事務,而 是例如執(zhí)行一處理程序。該TE標志可位于每個處理器的數(shù)據(jù)高速緩存中, 也可位于每個處理器本身中。
當該多處理器系統(tǒng)中的每個處理器已在步驟601被禁止i^新的事 務,且任何具有當前事務的處理器已完成其當前事務之后,在步驟602, 在不使用事務緩沖器的情況下,重新執(zhí)行造成所述事務緩沖器溢出的事務。 由于該多處理器系統(tǒng)中的所有其他處理器已凈皮禁止進入事務,因此該重新 執(zhí)行的事務將是該多處理器系統(tǒng)中唯一的事務。這樣,可以不通過事務緩 沖器,而是直接在存儲器上(例如通過數(shù)據(jù)高速緩存)執(zhí)行該重新執(zhí)行的 事務中的^作。
在步驟603,當該事務重新執(zhí)行完成以后,使其他處理器能夠進入事 務。在本發(fā)明的一實施例中,該步驟包括以下子步驟由所述發(fā)生事務緩 沖器溢出的處理器向該多處理器系統(tǒng)中的其他每一個處理器發(fā)送一事務4吏 能消息;并且當所述每一個處理器接收到該事務使能消息時,設(shè)置該處理 器中的上述TE標志,從而使得該處理器能夠i^事務。
優(yōu)選地,當該多處理器系統(tǒng)中的一處理器發(fā)生事務緩沖器溢出時,該 處理器開始執(zhí)行一處理程序,并在該處理程序中執(zhí)行上述各步驟。
在本發(fā)明的一實施例中,該多處理器系統(tǒng)中的多個處理器通過總線互連,并且所述"檢查和禁止"消息以及所述事務使能消息是通過總線上的 消息廣##送的,且每個處理器的響應可通過總線傳回到所^生事務緩 沖器溢出的處理器。在本發(fā)明的進一步的實施例中,所述多處理器系統(tǒng)為
諸如Power體系結(jié)構(gòu),且可利用Power體系結(jié)構(gòu)中的響應合并機制由所述 每個處理器的響應生成一個返回值,并返回給所述發(fā)生事務緩沖器溢出處 理器。
本發(fā)明還提供了一種用于處理多處理器系統(tǒng)中事務緩沖器溢出的裝 置,該裝置中的各功能模塊執(zhí)行上述根據(jù)本發(fā)明的實施例的用于處理多處 理器系統(tǒng)中事務緩沖器溢出的方法中的各相應步驟,并優(yōu)選地以計算機軟 件模塊結(jié)合通用計算機硬件部件以及上述根據(jù)本發(fā)明的實施例的多處理器 系統(tǒng)中的事務存儲器系統(tǒng)中的硬件部件來實現(xiàn)。
以上描述了才艮據(jù)本發(fā)明的實施例的一種用于處理多處理器系統(tǒng)中事務 緩沖器溢出的方法和裝置,以及一種多處理器系統(tǒng)中的事務存儲器系統(tǒng)。 從以上描述可知,本發(fā)明的核心技術(shù)是由一個處理器修改其他處理器的狀 態(tài)的機制,以及為實現(xiàn)這種機制而設(shè)計的"檢查和禁止"指令。事實上, 本發(fā)明的這種機制以及所述"檢查和禁止"指令不僅可用于處理多處理器 系統(tǒng)中事務緩沖器的溢出,而且適用于其他場合,用于實現(xiàn)原子訪問或?qū)?共享數(shù)據(jù)的保護。比如,當訪問某些全局數(shù)據(jù)時,先禁止別人訪問,再自 己訪問,就是安全的。這種做法有別于傳統(tǒng)的鎖機制,因為鎖機制中的鎖 是放在存儲器中,而本發(fā)明修改的是寄存器。這種方案可以應用在數(shù)據(jù)庫、 Web服務、多^^體的應用中。
需要指出的是,在不同的實施例中,所述"檢查和禁止"指令可能具 有不同的名稱,也可能具有更復雜的語義。但是需要強調(diào)的是l)其他指 令只要包含本文中"檢查和禁止"指令的語義,不論另外添加了多少額外 的語義,都應該包含在本發(fā)明的范圍之中。2)本文中的"檢查和禁止"指 令的語義,即使使用多條指令來完成,而不是像本文中所述那樣用一條指 令來完成,也應該是包含在本專利的范圍之中??傊?,在多處理器環(huán)境中, 只要發(fā)生了由一個處理器通過總線向其他處理器發(fā)送消息,從而修改其他處理器的狀態(tài)的行為,就應包含在本發(fā)明的范圍之內(nèi)。
盡管已參照優(yōu)選實施例具體示出和說明了本發(fā)明,但是本領(lǐng)域內(nèi)的那 些技術(shù)人員應理解,可在形式和細節(jié)上對其進行各種改變而不會背離本發(fā) 明的精神和范圍。
權(quán)利要求
1. 一種處理多處理器系統(tǒng)中事務緩沖器溢出的方法,包括以下步驟當一處理器的事務緩沖器溢出時,禁止其他處理器進入事務,并等待所述其他處理器中的任何具有當前事務的處理器完成其當前事務;重新執(zhí)行造成所述事務緩沖器溢出的事務;以及當所述事務執(zhí)行完成以后,使其他處理器能夠進入事務。
2. 根據(jù)權(quán)利要求1的方法,其中所述禁止其他處理器進入事 務的步驟包括由所述一處理器向所述其他處理器中的每一個處理器發(fā)送檢 查和禁止消息;以及當所述其他處理器中的每一個處理器接收到該檢查和禁止消 息時,檢查所述其他處理器中的每一個處理器是否有正在執(zhí)行的 事務,返回檢查結(jié)果,并禁止所述其他處理器中的每一個處理器 進入新的事務。
3. 根據(jù)權(quán)利要求2的方法,其中所述等待所述其他處理器中 的任何具有當前事務的處理器完成其當前事務的步驟包括當從所述其他處理器中的每一個處理器返回的檢查結(jié)果指示 所述其他處理器中的任何一個處理器有正在執(zhí)行的事務時,所述 一處理器再次發(fā)送所述檢查和禁止消息,直到從所述其他處理器 中的每一個處理器返回的檢查結(jié)果均指示所述其他處理器中的每 一個處理器都沒有正在執(zhí)行的事務。
4. 根據(jù)權(quán)利要求2的方法,其中所述多處理器系統(tǒng)的處理器 具有第一標志,當所述多處理器系統(tǒng)的處理器進入事務時,設(shè)置該第一標志,而當事務完成時,清除該第一標志,所述檢查所述 其他處理器中的每一個處理器是否有正在執(zhí)行的事務的步驟是通過讀取所述其他處理器中的每一個處理器中的第一標志來完成 的。
5. 根據(jù)權(quán)利要求2的方法,其中所述多處理器系統(tǒng)的處理器 具有第二標志,所述多處理器系統(tǒng)的處理器在進入事務之前檢查 該第二標志,并僅當該第二標志被設(shè)置時,才能進入該事務,所 述禁止所述其他處理器中的每一個處理器進入新的事務的步驟是 通過清除所述其他處理器中的每一個處理器中的第二標志來完成 的。
6. 根據(jù)權(quán)利要求5的方法,其中所述使其他處理器能夠進入 事務的步驟包括由所述一處理器向所述其他處理器中的每一個處理器發(fā)送一 事務使能消息;以及當所述其他處理器中的每一個處理器接收到該事務使能消息 時,設(shè)置所述其他處理器中的每一個處理器中的所述第二標志。
7. 根據(jù)權(quán)利要求1的方法,其中所述重新執(zhí)行造成所述事務 緩沖器溢出的事務的步驟是通過所述一處理器在存儲器上執(zhí)行所述事務中的操作來完成的。
8. 根據(jù)權(quán)利要求1的方法,其中所述禁止其他處理器進入事 務包括僅禁止其他處理器進入有可能引起沖突的事務。
9. 根據(jù)權(quán)利要求4或5的方法,其中所述第一標志和第二標 志位于所述多處理器系統(tǒng)的處理器的數(shù)據(jù)高速緩存中。
10. 根據(jù)權(quán)利要求4或5的方法,其中所述所述多處理器系統(tǒng) 的處理器通過總線互連,且所述檢查和禁止消息以及所述事務使 能消息是通過總線上的消息廣播傳送的。
11. 一種多處理器系統(tǒng)中的事務存儲器系統(tǒng),包括 多個處理器;所述多個處理器可訪問的存儲器;以及 每個處理器的事務緩沖器,其中,當一處理器的事務緩沖器溢出時,所述一處理器禁止 其他處理器進入事務,并等待所述其他處理器中的任何具有當前 事務的處理器完成其當前事務后重新執(zhí)行造成所述事務緩沖器溢 出的事務,并且當所述造成所述事務緩沖器溢出的事務重新執(zhí)行 完成后,使所述其他處理器能夠進入事務。
12. 根據(jù)權(quán)利要求11的系統(tǒng),其中所述一處理器通過以下方 式禁止其他處理器進入事務由所述一處理器向所述其他處理器中的每一個處理器發(fā)送檢 查和禁止消息;以及當所述其他處理器中的每一個處理器接收到該檢查和禁止消 息時,檢查所述其他處理器中的每一個處理器是否有正在執(zhí)行的 事務,返回檢查結(jié)果,并禁止所述其他處理器中的每一個處理器 進入新的事務。
13. 根據(jù)權(quán)利要求12的系統(tǒng),其中所述一處理器通過以下方 式等待所述其它處理器中的任何具有當前事務的處理器完成其當 前事務當從所述其他處理器中的每一個處理器返回的檢查結(jié)果指示 所述其他處理器中的任何一個處理器有正在執(zhí)行的事務時,所述 一處理器再次發(fā)送所述檢查和禁止消息,直到從所述其他處理器 中的每一個處理器返回的檢查結(jié)果均指示所述其他處理器中的每 一個處理器都沒有正在執(zhí)行的事務。
14. 根據(jù)權(quán)利要求12的系統(tǒng),其中所述多個處理器中的每一 個處理器都具有第一標志,當所述多個處理器中的每一個處理器 進入事務時,設(shè)置該第一標志,而當完成事務時,清除該第一標 志,且所述其他處理器中的每一個在接收到所述檢查和禁止消息 時,通過讀取其自身中的所述第一標志來檢查其自身是否有正在 執(zhí)行的事務。
15. 根據(jù)權(quán)利要求12的系統(tǒng),其中所述多處理器系統(tǒng)中的每一個處理器具有笫二標志,該處理器當進入事務之前檢查該第二 標志,并僅當該第二標志被設(shè)置時,才進入該事務,以及所述其 他處理器中的每一個在接收并執(zhí)行所述檢查和禁止消息時,通過 清除其自身中的所述第二標志來禁止其自身進入新的事務,且所 述其他處理器中的每一個在接收并執(zhí)行由所述一處理器發(fā)出的事 務使能消息時,通過設(shè)置其自身中的所述第二標志來使其自身能 夠進入事務。
16. 根據(jù)權(quán)利要求11的系統(tǒng),其中,所述一處理器重新執(zhí)行 造成所述事務緩沖器溢出的事務的操作是在存儲器上執(zhí)行的。
17. 根據(jù)權(quán)利要求14或15的系統(tǒng),其中,所述第一標志和第 二標志位于所述處理器的數(shù)據(jù)高速緩存中。
18. 根據(jù)權(quán)利要求14或15的系統(tǒng),其中,所述處理器通過總 線互連,且所述檢查和禁止消息以及所述事務使能消息是通過總 線上的消息廣播傳送的。
19. 一種在多處理器環(huán)境中由一個處理器修改其他一個或多 個處理器的狀態(tài)的方法,包括以下步驟所述一個處理器通過總線向所述其他一個或多個處理器中的 每一個發(fā)送消息;所述其他一個或多個處理器中的每一個接受所述消息,并根 據(jù)所述消息修改其寄存器;以及所述其他一個或多個處理器中的每一個返回應答。
全文摘要
根據(jù)了一種處理多處理器系統(tǒng)中事務緩沖器溢出的方法和裝置以及一種多處理器系統(tǒng)中的事務存儲器系統(tǒng),所述方法包括以下步驟當一處理器的事務緩沖器溢出時,禁止其他處理器進入事務,并等待任何具有當前事務的處理器完成其當前事務;在不使用事務緩沖器的情況下,重新執(zhí)行造成所述事務緩沖器溢出的事務;以及當所述事務執(zhí)行完成以后,使其他處理器能夠進入事務。
文檔編號G06F9/46GK101452400SQ20071019618
公開日2009年6月10日 申請日期2007年11月29日 優(yōu)先權(quán)日2007年11月29日
發(fā)明者沈曉衛(wèi), 鯤 王, 王華勇 申請人:國際商業(yè)機器公司