摘要:龍騰R2微處理器是西北工業大學航空微電子中心設計的采用PowerPC體系結構,具有自主知識產權的RISC微處理器。為了擴展其多處理器的功能,采用總線偵聽的方法來維護多處理器環境下的cache一致性。首先介紹了共享總線偵聽技術以及偵聽協議,然后詳細介紹了龍騰R2微處理器的總線偵聽部件的實現方案,對幾類cache一致性的實現方案以及性能進行了評析。FPGA實驗結果表明,總線偵聽部件能高效而準確地保證多處理器系統的cache一致性。
關鍵詞:總線偵聽;多處理器;一致性; 寫回
中圖分類號:TP303
文獻標志碼:A
文章編號:1001-3695(2008)06-1890-04
隨著硅工藝越來越接近它的物理極限,處理器主頻的提升變得越來越難。多處理器技術是目前提高計算機系統性能普遍采用的技術。多處理器系統在處理能力、可擴展性、容錯性等方面有著單處理器無法比擬的優勢。然而,隨著多個高速緩存(cache)的出現,cache一致性的問題越來越引人注意。目前,維護cache一致性的方法主要有四種:a)共享總線的偵聽技術;b)基于目錄的一致性協議;c)把所有共享的數據塊標志成cache不可緩存;d)基于軟件方法的一致性處理。
以上每種處理策略必須與相應的體系結構相結合,才能發揮其優勢。其中,前兩種方法從硬件設計上來維護cache一致性,而后兩種方法用軟件提供的相關信息來維護一致性。
在筆者參與設計的龍騰R2微處理器中,總線時鐘頻率為66 MHz,系統時鐘頻率為233 MHz。該處理器在指令集上兼容PowerPC750[1]處理器。為了擴充龍騰R2微處理器的多處理器功能,筆者深入研究了PowerPC體系結構和60X總線協議對多處理器系統的支持,最后完成了基于共享總線的多處理器偵聽模塊的設計。
1總線偵聽的技術背景
1.1MEI偵聽協議
龍騰R2微處理器采用MEI協議[2]來維護cache一致性。M(modified修改態)、E(exclusive獨占態)、I(invalid無效態)的定義如下:
a) M態。被尋址的cache塊在cache中,但cache塊與內存中該塊相比已被修改。
b) E態。被尋址的cache塊在cache中,并且該cache塊是被尋址的cache獨占的。
c) I態。被尋址的cache塊沒有包含有效的數據或不在cache中。
圖1描述了MEI狀態之間的轉移。其轉移條件分兩類:
a)讀寫命中和讀寫缺失。它們從訪存操作執行者的角度來維護MEI狀態。比如,當處理器的寫操作對應的cache塊處于無效狀態時,處理器將數據寫到對應的cache塊,同時將該cache的MEI狀態由I態改為E態。以上操作均在處理器的內部時鐘域完成。
b)轉移條件是偵聽命中。它以訪存操作偵聽者的角度來維護MEI狀態。在本地處理器偵聽遠程處理器的訪存操作時,若偵聽地址對應的數據在本地處理器的cache中存在,且為M態或E態,此時便發生所謂的偵聽命中。如果偵聽命中的cache塊為E態,本地處理器只需將其改為I態;如果偵聽命中的cache塊為M態,本地處理器將發起總線信號通知遠程處理器重新執行此次操作,同時,本地處理器將此修改過的數據塊寫回內存,并把cache塊的狀態修改為E態。另外,圖中還對遠程處理器的cache可否讀寫進行分開處理。這是因為,當遠程處理器的cache不可讀寫時,本地處理器偵聽命中的cache塊可保持在E態,而并不會出現多個同一地址的cache塊為E態的矛盾情況。
1.2共享總線偵聽技術
在基于共享總線的多處理器系統中,各個處理器均是對等的。任何一個處理器發起的一次訪存操作,都將被總線上的其他處理器所偵聽[3]。總線偵聽邏輯采樣總線上傳輸的操作屬性,并進行過濾分析,將滿足偵聽條件的偵聽地址與本地cache的地址tag進行比較。一旦偵聽命中,總線偵聽邏輯將按照圖1對tag的相應位進行讀寫。若命中了修改態的cache塊,偵聽邏輯發送信號給處理器內部邏輯,將該cache塊進行copy-back。同時,為了避免遠程處理器錯誤地讀取了共享內存中的數據,偵聽邏輯將發送地址重傳信號中止此次操作。
因為基于共享總線的多處理器系統(圖2)共享同一塊內存,故內存中的軟件代碼和數據結構對各個處理器只存在一個鏡像。這樣,在多處理器環境下的編程模型更易于理解,而且使單處理器上的程序更易于移植到多處理器系統中。所以,這種共享總線的多處理器系統越來越得到軟硬件設計人員的青睞。本文以下部分將著重闡述龍騰R2微處理器偵聽邏輯的設計和實現。
2龍騰R2的偵聽模塊設計
2.1偵聽模塊的總體設計
偵聽模塊的總體設計如圖3所示。偵聽模塊主要包括:
a)偵聽仲裁邏輯以及當前狀態寄存器。
b)雙端口tag RAM。
c)一系列FIFO緩存。
d)保留位偵聽邏輯。
e)偵聽命中邏輯以及MEI狀態控制邏輯。
FIFO緩存又分為以下幾類:輸入FIFO緩存,用于緩存偵聽信息;copy-back輸出FIFO緩存;偵聽命中輸出FIFO緩存。偵聽模塊的主體框架如圖3所示。
2.2偵聽仲裁邏輯及當前狀態寄存器
偵聽仲裁邏輯用來判定總線操作是否需要被偵聽。如果滿足偵聽條件,則將偵聽地址、地址操作屬性等偵聽信息打包,存入偵聽信息輸入FIFO。當地址總線傳輸開始時(TS_有效),若以下兩個條件之一滿足,則偵聽操作啟動:a)Gbl_全局信號有效;b)保留位標志有效,而且此時的總線操作為寫操作。
為了盡量減少無效偵聽的次數,降低系統的功耗,龍騰R2微處理器在設計時作了以下兩個方面的優化。首先,因為指令cache是不用被偵聽的,而且cache缺失引起的取指請求又非常頻繁,所以必須采取措施讓偵聽邏輯識別取指請求。龍騰R2微處理器在發送取指請求時,將寫透(write through)使能信號保持有效。正是利用這樣一種看似矛盾的處理方法,偵聽仲裁邏輯可以簡單地根據寫透使能信號和訪存類型來剔除取指請求帶來的無效偵聽。其次,偵聽仲裁邏輯加入了當前狀態寄存器[4],用來存放本地CPU正在執行訪存操作的數據地址。如果偵聽條件有效,偵聽仲裁邏輯將偵聽地址與當前狀態寄存器進行比較,若兩者同處于一個cache行,那么偵聽操作不予啟動。若兩者不處于一個cache行,那么偵聽地址存入偵聽信息輸入FIFO,進行后續的偵聽命中判定。
2.3偵聽模塊中的FIFO緩存
偵聽模塊中包含以下三類FIFO緩存:
a)偵聽信息輸入FIFO。當偵聽命中時,在某些情況下,tag RAM中的MEI狀態信息需要被修改。因為存在一個讀后寫修改的問題,所以偵聽命中邏輯將多耗費一個總線時鐘周期。為了更好地支持總線流水,不遺漏偵聽請求,偵聽邏輯設立了偵聽信息輸入FIFO來緩存偵聽信息。偵聽信息包括偵聽地址、操作類型以及是否突發操作的標志。
b) Copy-back輸出FIFO。當cache中的某塊被修改過的數據要被替換時,處理器就會引發一次copy-back操作,將數據寫回主存。Copy-back輸出FIFO用來緩存所有沒有真正寫回主存的copy-back操作。為了避免偵聽地址命中這個輸出FIFO,偵聽邏輯將跟蹤所有的copy-back操作,直到數據已被寫入主存。當滿足偵聽條件時,偵聽命中邏輯將此FIFO中訪存沒有完成的數據地址和偵聽地址進行命中判定。
c)偵聽命中輸出FIFO。當偵聽命中被修改過的cache數據時,偵聽邏輯通知總線接口部件將相應的數據寫回主存。同時,將該數據的地址放入偵聽命中輸出FIFO。該FIFO的功能和處理過程與上述的第二個FIFO相似。由于偵聽命中后的數據copy-back的優先級比普通的訪存請求優先級高。偵聽邏輯用不同的FIFO來緩存兩類訪存操作。
2.4Tag RAM的偵聽命中判定以及MEI狀態維護
Tag RAM存儲著對應數據的高20位地址信息和2位MEI狀態信息。MEI狀態為00表示的數據為invalid,01表示exclusive,10表示modified。龍騰R2微處理器中的tag RAM和對應的數據RAM的關系如圖4所示。這樣,tag RAM的容量為22 bit×8×127 = 22 352 bit。由于處理器內部總線和偵聽模塊均要對tag RAM進行讀寫,筆者采用雙端口RAM來實現tag RAM。
在對tag RAM進行偵聽命中判定時,首先利用偵聽地址的20~26 bit從127組tag RAM中選出一組;然后,將這八路tag標志中的地址標志與偵聽地址的0~19 bit進行比較。如果命中的數據為E態,則直接將E態改為I態;如果命中的數據為M態,要分兩種情況處理;如果被偵聽的操作為突發操作,表明該數據要被緩存到該處理器的cache中,此時要將M態改為I態;如果被偵聽的操作為單拍操作,表明數據不會被緩存到cache中,此時只需將M態改成E態,維持本地處理器對該數據的獨占狀態。在偵聽命中M態后,偵聽命中邏輯將該數據的地址送往偵聽命中FIFO,同時通知總線接口部件將該M態的數據寫回主存。圖5描述了偵聽命中cache中M態數據的處理邏輯。
2.5輸出FIFO的偵聽命中判定
輸出FIFO的作用在2.3節已經作了詳細的描述。Copy-back輸出FIFO的偵聽命中判定和偵聽命中輸出FIFO的判定邏輯相似。筆者在這里以前者為例進行說明。在這部分邏輯中,8個27 bit的寄存器堆用來存儲沒有完成copy-back操作的數據地址。同時,另外一個8 bit長度的掩碼寄存器維護這組寄存器的順序。掩碼寄存器中某位置上的數據為1,表示對應位置上的copy-back操作還沒有完成。具體邏輯見圖6。當滿足偵聽條件時,命中判定邏輯將掩碼寄存器中為1的對應copy-back地址取出,與偵聽地址進行比較,進行偵聽命中判定。
2.6保留位偵聽邏輯
在龍騰R2微處理器的指令集中,lwarx/stwcx這對指令用來產生豐富的多處理器同步原語,如test and set、test and swap等原子操作。Lwarx指令給對應的地址賦予保留位標記。當處理器執行到stwcx指令時,處理器控制邏輯將檢查標志位是否還有效,如果有效則指令執行完成;如果無效則執行失敗。在lwarx與stwcx之間的任何對保留位地址的store操作均將破壞保留位標志。保留位偵聽邏輯的功能就是維護處理器的保留位標志。當偵聽到總線寫操作時,該邏輯將保留位地址與偵聽地址進行比較,若相等則清除保留位標志。
2.7地址重傳邏輯
當偵聽地址命中cache中修改過的數據,或者命中copy-back輸出FIFO或偵聽命中輸出FIFO時,地址重傳邏輯將產生地址重傳信號,通知遠程處理器放棄總線操作[5]。為了確保遠程處理器正確采樣地址重傳信號,本地處理器要讓此信號一直有效,直到地址傳輸完成的下一個總線周期。當遠程處理器采樣到地址重傳信號,它將立即停止當前的地址傳輸,并掛起訪存請求。同時,多處理器系統中的其他處理器采樣到地址重傳信號后,也將掛起訪存請求。這樣,偵聽命中的處理器就可以獲得地址總線的使用權,順利地完成因偵聽命中引發的copy-back操作。圖7描述了偵聽操作命中的時序。其中:trans_start表示地址傳輸開始信號;trans_end表示地址傳輸結束信號;retry表示地址重傳信號;snoop_hit表示偵聽命中信號。
3總線偵聽部件的性能分析
筆者設計的總線偵聽部件從純硬件的角度闡述了多處理器環境下cache一致性的實現。設計中使用了雙端口RAM,芯片的功耗將大大提高。但是,因為處理器的總線偵聽邏輯可以并行地對tag RAM進行讀寫,快速地完成偵聽命中判定。這樣,設計將極大地節省總線操作的傳輸延遲。另一種硬件密集的處理的思路是,利用單端口RAM來實現tag RAM,并且只允許內部時鐘域的邏輯對tag RAM進行讀寫。這樣,偵聽命中的邏輯就在內部時鐘域實現。雖然這種實現能減少tag RAM的面積和功耗,但是隨之而來的是造成跨時鐘域的問題以及內部時鐘關鍵路徑的惡化。而且,由于地址重傳信號不能及時有效,總線操作將產生很大的延遲。
為了減少處理器的無效偵聽的次數,A. Moshovos等人[6]提出了用軟件的方法來優化偵聽邏輯。編譯器在編譯共享數據段時,同時產生額外的供操作系統參考的信息。操作系統加載程序時,將這些共享段的頁表項做上標志。如果load/store操作的數據在cache中缺失,那么處理器就引發一次訪存操作。此時,偵聽邏輯就可根據上述的頁表標志,識別訪存地址所在的頁是否在共享段中。若訪存地址落在共享段中,偵聽邏輯標志此頁為共享頁。這樣,此后的總線操作地址若落在此共享頁中,處理器將不對其進行偵聽。軟件處理方法極大地減少了無效的偵聽操作次數。但是,這種方法也給頁表構造以及編譯器和編程人員帶來不小的挑戰。
最近,有些專家[7]提出一種串行的偵聽策略,即多處理器系統中的各個處理器節點按順序來進行偵聽。后一個節點只有在前一個節點偵聽不命中的情況下才啟動偵聽操作。可想而知,這種處理方法可以大大降低偵聽操作引起的功耗。但是,如果前面的節點偵聽一直沒有命中,由此引起的總線傳輸延遲將會極大提高。
通過上述分析可知,本文所采用的方法簡潔高效,能迅速產生地址重傳信號,避免了不必要的總線傳輸延遲。同時,本設計不需要軟件的過多支持,減輕了軟件人員設計多處理器程序的負擔。
4結束語
筆者設計的基于共享總線的偵聽模塊已基本完成,并在Vera驗證語言搭建的VCS仿真平臺下通過了仿真驗證。最后,用design compiler對偵聽模塊進行了綜合,并用primetime進行了靜態時序分析。時序報告表明,該設計滿足PowerPC750微處理器總線時鐘66 MHz的要求。目前,集成了總線偵聽模塊的龍騰R2微處理器已在FPGA板上初步通過驗證。實驗證明這種設計解決了多處理器環境下數據一致性的問題,并具有較高的效率。更深層的系統級驗證正在進行。
參考文獻:
[1]MPC750 RISC microprocessor family user’s mannual rev1[K]. 2001.
[2]HENNESSY J L, PATTERSON D A. 計算機系統結構——量化研究方法[M].鄭緯民,等譯. 3版. 北京:電子工業出版社,2004.
[3]ALBONESI D H. Selective cache ways: on-demand cache resource allocation[C] //Proc of the 32nd International Symposium on Microarchitecture. 1999:248-259.
[4]TSKAHASHI M. Performance evaluation of a processing element for an on-chip multiprocessor[J]. IEICE Trans Electron, 1994,1(7):1092-1100.
[5]STENSTORM P. A cache consistency protocol for multiprocessors with multista-ge networks[C] //Proc of the 16th Annual International Symposium on Computer Architecture. 1989:407-415.
[6]MOSHOVOS A, MEMIK G, FALSAFI B. JETTY:Filtering snoops for reduced energy consumption in SMP servers[C] //Proc of HPCA. 2001:85-96.
[7]JERRAYA A. Multiprocessor systems-on-chips[M]. [s.l.]: Else-vier Science, 2005.
注:本文中所涉及到的圖表、注解、公式等內容請以PDF格式閱讀原文