鮑慶元,李孟春,王煥東,曾 露,王啟銀,趙 銳
BAO Qingyuan1,LI Mengchun1,WANG Huandong2,ZENG Lu2,WANG Qiyin3,ZHAO Rui3
1.太原理工大學,太原 030024
2.中國科學院 計算技術研究所,北京 100190
3.大同供電分公司,山西 大同 037008
1.Taiyuan University of Technology,Taiyuan 030024,China
2.Institute of Computing Technology,Chinese Academy of Sciences,Beijing 100190,China
3.State Grid Datong Power Supply Company,Datong,Shanxi 037008,China
縱觀當今的信息產業技術發展,各個國家都在不斷努力進行著產業轉型,尤其以日本為主的微電子技術在20世紀率先發展起來,取得了重大成就,帶動國內各相關領域的飛速進步。而自多核處理器的出現至今,并行計算機可以實現大規模科學與工程計算,高性能超級計算機也加速了人類對科學領域的量化分析和探索研究,并且代表著國家的科技發展水平。除了一般性的科研計算外,在信息服務、金融、地理、國防、生物醫藥等領域,超級計算機全天候地進行著高速并行數據處理,為各個行業提供研究和服務需求發揮重要作用。
以中科院計算技術研究所為核心的科研團隊,開發出的基于mips架構的龍芯3號系列處理器已成功應用于國內超級計算機,已處于國內計算機CPU芯片研發技術領先水平。現在,在國家核高基項目支持下,我國首臺自主設計的龍芯3B八核處理器的萬億次高性能計算機“KD-90”,通過專家組鑒定,集成了十顆龍芯3B處理器,理論計算峰值可達每秒1萬億次。
在單片處理器的性能保證上,本課題將對基于國產的龍芯3號多片互連體系結構進行規模擴展,主要工作集中在片間通信的一致性消息傳遞方面。為了使數據在讀寫時保持一致,需要通過一種機制來維護系統間數據交換時的Cache一致性。基于目錄結構的高速緩存一致性協議可以將事務請求維護起來,并且更好地實現了CC-NUMA系統擴展,也是本文研究的主要內容。
發生狀態變換的觸發事件主要有五個,本地讀RD,本地寫WR,替換REP,遠程讀rRD,遠程寫rWR。下面就圖1所示來說明一下狀態是如何進行轉換的,這里不再討論自轉移事件。

圖1 高速緩存塊狀態轉移
初始狀態為I:當處理器核發生RD操作時,系統將請求發給遠端處理器,得到響應后,本地處理器將會收到一個共享狀態的緩存備份;當處理器核發生WR操作時,系統將請求發給擁有此緩存塊的處理器,當返回響應后,本地處理器將得到一個獨占的緩存備份。
初始狀態為S:當處理器核發生REP時,處理器核將本地緩存塊換出到下一存儲層,并且將本地緩存塊無效;遠端處理器發生rWR時,系統將本地緩存塊無效,并返回響應;當處理器核發生WR操作時,在實際應用中為了降低請求處理的開銷,無法從共享狀態直接到達獨占狀態,虛線表示,必須經過無效狀態。系統會將所有擁有共享塊的處理器核無效處理(包括本地),得到響應后,本地處理器核再重復上述的由I狀態變到M狀態的轉換過程。
初始狀態為M:當處理器核發生REP時,處理器核將本地緩存塊換出到下一存儲層,并且將本地緩存塊無效;遠端處理器發生rWR時,系統將本地緩存塊無效,并返回響應;當遠端處理器發生rRD時,系統將本地緩存塊置為共享狀態,并返回響應。
基于目錄的高速緩存一致性協議,是將數據塊與其所在處理器位置相關聯實現的。在長期的對目錄協議的研究中,研究人員設計出不同的目錄組織形式,最主要的組織經常采用位向量的方式[3]。通過對目錄中位向量的查找可以實現點對點的數據響應,同時一致性問題也由目錄來進行相應維護。目錄的結構可以充分發揮出CC-NUMA系統的局部性優勢,如果當訪問失效時,在本地節點可以查找到相應數據塊,則不必通過遠程端寫回,降低了延遲開銷。但是,位向量目錄所使用的存儲器大小與系統中處理器核數n的平方成正比,所以當n過大時,目錄協議的存儲開銷也會隨之增大,并且系統的性能開銷也會受到緩存備份數量的影響。
對于目錄的組織來說,可以實現的形式分為兩種,分別是扁平目錄方案和層次目錄方案[4-5]。如圖2所示,左圖為扁平目錄組織,右圖為層次目錄組織。

圖2 目錄組織形式
扁平目錄組織是將一個塊的目錄信息存放在一個固定位置。圖2中的P是處理節點,每當發生讀失效時,處理節點會直接訪問統一的宿主節點進行查詢,因為訪問的路徑和延遲不同,所以圖中會有不同長短的連線。這樣的結構方案比較簡單,所有的一致性事務全都會到一個地方來處理,但是也帶來了問題,所有的處理節點無論路徑大小都會去訪問同一節點,對于路徑遠的處理節點經常訪問時就會增大開銷。并且,對于向大規模CC-NUMA系統擴展的情況來說就會出現更差的性能,如果將宿主節點放在片內的話,隨著處理器核數的增加會增大芯片面積的成本開銷。
層次式的目錄可以有效地解決這些問題。在大規模的系統中,訪問可以選擇最短路徑,有效地利用了局部性的優勢。對于目錄開銷問題,層次化的目錄存儲開銷可以分攤到其他的硬件當中,減輕了片內因存儲器而耗費面積。但是,在層次式的目錄方案中,與扁平目錄方案發生失效的一致性事務情況不同,層次結構的一致性事務可能會遍歷整個目錄級,每一次的訪問都會去查詢目錄節點上的目錄信息,造成一定的訪存延遲。但是,當系統擴展到一定規模時,對于那些局部性較好的程序來說,這種目錄方案將會體現出好的一面來。
降水中的穩定同位素D與18O在補給過程中,將大氣D與18O的信號傳遞給地下水,地下水在滲透的過程中使得水中同位素的含量發生變化,這些變化為地下水來源調查提供了基礎[15]。地下水的δD與δ18O含量在垂向上具有明顯的分層特點,整體表現為隨著地下水的埋藏深度的增加,地下水的δD與δ18O值逐漸偏負,指示著地下水不同含水層段上水力聯系微弱[16]。
龍芯3A處理器由4顆處理器核組成[6],在片內通過二級緩存統一維護多核處理器的一致性問題,內部構成CC-NUMA系統。而處理器間的一致性問題就不能單靠二級緩存來維護整個系統的一致性了。隨著系統規模的擴大,數據訪存的Cache一致性請求也會不斷增加,導致目錄訪問沖突、延遲增加等問題,這都是需要在構建更大規模的CC-NUMA系統中考慮的因素。因此,在互連系統間利用橋片來處理跨區域訪存的一致性事務。并且,通過在橋片中加入遠程Cache模塊,可以降低訪存延遲,使大規模的CC-NUMA系統開銷能夠得到降低。
Origin2000/3000是一種典型的CC-NUMA系統,采用與龍芯處理器構架相同的MIPS R10000。具有良好可編程性的分布式共享結構DSM,在很大的范圍內實現了系統的可擴展性,256節點內,系統都具有線性擴展能力。Origin系統經典的4立方體結構[7],通過中間路由,使同位置的處理節點相互連接起來,然后每個節點會根據地址信息在內部路由給需要訪問的處理節點。最近到最遠路徑訪問的延遲比約為1∶4。在并行程序中,保持局部范圍的訪問可以發揮出這種體系結構的極大優勢來。由于Origin系列構架還是過于復雜,128處理器的系統已將近達到了性能的峰值。而當今的處理器多為多核處理器,龍芯3號系列的處理器集成了多處理器核,在芯片內部已完全構成了小規模的CC-NUMA系統結構,而通過橋片,可以經過簡單化的外部擴展,構成大規模的CC-NUMA服務器系統。
整個系統將分成兩級目錄形式將所有的處理器核的一致性問題進行硬件的維護,一級目錄由64位位向量組成,用來維護處理器的片內和本系統的一致性問題,統一由二級緩存來保存處理器核的緩存塊狀態。龍芯3A處理器最多支持8芯片直連,而當系統規模超過8片時,就需要通過橋片來進行跨系統訪問和一致性維護。二級目錄在橋片中維護,目錄記錄的將不再是處理器核的私有一級緩存塊狀態,而是本互連系統中芯片的塊狀態。通過粗向量的方式,以更大的粒度來解決大規模系統多核處理器的數據一致性問題,從而可以降低目錄方面的開銷。像二級緩存維護處理器核的一致性一樣,橋片中粗向量會維護多片系統的一致性問題。此時,橋片的Cache目錄將會記錄一組塊的位向量,當系統需要查找時,粗向量會指向某個處理節點,然后再通過上一級目錄查找到具體所要訪問的核。
4顆龍芯3A8處理器(第8版龍芯3A芯片)可以構成一個CC-NUMA互連系統。3A8可以通過HT接口實現兩兩互連,再通過橋片構成一個完整的互連系統。每個橋片可以通過PCIe總線連接其他的橋片,利用4個PCIe接口可以組建多種Mesh網絡,簡單的二維Mesh網絡可以通過X-Y的路由方式,即首先向X方向路由再向Y方向路由的方法到達目標橋片,構成Mesh網絡。也可以構建更大規模的CC-NUMA系統,最多可以使64個橋片進行互連,形成三維的立方體Mesh網絡。但實際應用中,只考慮擴展到16片互連的情況,避免因路徑太長而產生極大的延遲開銷問題。如圖3給出兩個互連系統的結構圖。

圖3 兩個互連系統通過橋片實現系統級互連
在橋片內部主要包括三種控制模塊:遠程緩存控制器(RMC),本地目錄控制器和I/O接口控制器。遠程緩存控制器主要的功能是將本系統要訪問的遠程地址請求轉發給遠程系統,當遠程系統收到請求時,經過各個存儲層數據的取回,再通過遠程系統的同等橋片,將數據響應給請求端。在收到來自遠程系統的數據響應后,控制器不會立即將數據發送給請求的處理器核,會先把數據緩存起來,并且記錄下緩存塊狀態和位向量后再將數據發送給請求處理器核,緩存的數據以便本地其他處理器核請求相同地址的訪存時可以迅速返回數據而不需要再跨系統進行訪問。
3A處理器是通過HT總線實現片間互連的,包括處理器-處理器,處理器-橋片。在圖4簡化的結構圖中可以看到4路HT總線代表連接4片龍芯處理器,通過協議轉換模塊,由AXI片內總線協議實現內部的消息傳遞[8]。由于CC-NUMA是主要利用局部性原理來實現系統的高效性,所以不會發生高頻的外部地址訪問。RMC模塊只需連接容量為1 MB的高速緩存模塊用來存儲遠程系統地址的數據并且記錄下本地擁有該數據塊的芯片的位向量。在遠程控制模塊的下游會將上游的請求路由到指定的I/O設備(遠程橋片),發往其他系統橋片的本地控制器。

圖4 橋片局部模塊RMC結構
在仿真環境中,主要針對驗證RMC模塊功能進行搭建,如圖5所示。首先,環境會模擬芯片內4個master(龍芯3A處理器)發出AXI的讀寫請求,這里可以先使用一個簡單的MUX模塊實現仲裁,將請求串行發給RMC。利用交叉開關直接將請求發送給slave(這里放置一個可以處理AXI一致性請求的二級緩存),二級緩存下游連接DDR3內存模塊,這樣就可以先利用具有相似結構和一致性功能的二級緩存來實現對RMC的驗證。

圖5 仿真環境方案
通過verilog、SV(Systemverilog)來編寫環境,并使用Synopsys公司提供的VCS進行編譯和前仿。手工編寫特定向量的仿真環境可以初步驗證模塊功能的正確性。在外加特定激勵的情況下,觀察響應數據及一致性事務等是否達到預期的結果。圖6為仿真抓取的波形。

圖6 RMC仿真波形
可以看到,仿真開始時會讓4個master同時對同一外部地址發起讀請求(G1),請求會逐一去訪問RMC,第一次訪問時會發生失效,RMC會將請求下發給二級緩存,再給到內存最終查找到數據。數據會沿路返回給RMC(G2),當RMC接受到數據后會響應第一個發起請求的處理器。然后其他三個處理器的請求會依次被RMC處理。在接下來的不同處理器的同地址訪問會在RMC模塊中全部命中,所以數據會在很短的周期內將返回給3個處理器。當另一端某個處理器再次發起同地址的寫請求時(G3),本地4個處理器都會收到無效請求,并且返回4個無效確認(G4)。在二級緩存收到來自所有擁有共享緩存塊返回的確認時,才會將數據塊發送給發起寫請求的處理器(G5)。
從上述的處理過程中,可以分析出同地址不同情況的訪存延遲,如表1所示。當第一個處理器發出讀請求時,訪存延遲沒有變化。但是,當其他處理器第二次訪問相同外部地址的數據時,請求會發送給之前預存的Cache塊,數據直接返回給請求端,由于還需要處理一致性事務,所以會額外增加幾拍延遲,可是看到第二次的訪存延遲也只有前一次的1/4。而第三次以后,由于數據塊已經是共享狀態,不需要再有一致性事務處理產生的延遲,所以訪存會進一步加快。而遠程系統在首次寫請求時,需要經過橋片到橋片的訪問和一致性事務處理過程,產生相當于從內存取回數據的延遲開銷。

表1 訪存一致性延遲開銷
同時,在對同地址的一致性請求事務的處理過程中,系統會嚴格遵守一個序關系,只有當一件事務完全結束后,才會去處理下一個請求。而在不同地址的訪問過程中則不需要嚴格保持序關系,這樣可以提高訪存效率。
隨機測試技術是大規模集成電路仿真驗證中重要的環節之一,在處理器的行為級功能驗證方面,它具有重要地位。人工編寫定向測試會花費大量的時間成本,并且也很難做到覆蓋所有要驗證的各個角落,可重用性較差。所以用隨機測試向量為DUT提供大量的隨機數據流,可以有效地提高驗證效率并具有靈活性和可移植性。
基于此環境之上,還需要進行隨機發送大量請求來了解該模塊的性能。激勵方面仍然采用帶有一致性的AXI請求,隨機選擇讀和寫兩種情況,并在預先設定的地址域內發送。在圖6中可以看到,冷失效的情況是必然出現的,但是在大量的隨機請求中,冷失效、沖突失效和維護Cache一致性引起的失效所占比重較小,而影響最大的是容量失效。所以有必要對Cache的不同容量和失效率之間的關系進行分析。從圖7的統計結果中發現,當塊大小是64 B的緩存時,可以明顯看出失效率隨著緩存容量的增加而降低,在芯片面積允許的情況下,采用大容量的Cache可以有效提高橋片的命中率。同時,使用8way(相聯度)的Cache也可以降低失效率,但是相比于4way,8way的硬件條件更高,訪存延遲也會增加,對提高性能而換來的好處不明顯。

圖7 Cache容量與失效率關系
由于Cache模塊中會以一種隊列的機制來維護大量請求集中到來的狀況,所以在同地址(順序)和不同地址(亂序)的訪存操作中不會導致沖突現象發生。
本文從具體的龍芯處理器配套橋片設計側面闡述了CC-NUMA系統向大規模擴展的思想,并且分析在大規模系統中如何來維護好全局一致性問題。通過針對龍芯處理器特性的了解,在配套的橋片中加入了緩存的結構設計,這樣橋片就不僅僅作為跨系統訪問的橋梁,同時兼有多級緩存的功能,提高訪存效率。在當今訪存優化競爭的年代,每降低一點訪存延遲都會給計算機性能提高一大塊。同時,龍芯處理器內部將沿用基于目錄的高速緩存一致性協議,設計也會將這種一致性方法應用到橋片中,這樣可以保持處理器和橋片在一致性問題上的高度統一。在程序設計方面,具有良好的局部性的并行程序將會更加高效地運行在多核,多處理器,多系統的CC-NUMA體系當中。橋片也為Linux更加穩定地應用在大規模系統提供保障。本文實現了橋片預期的功能,并且搭建了針對模塊所需的驗證環境,在環境中,對橋片的部分功能給出了正確的驗證結果。但是在完整可靠的設計和驗證工作中還有大量的問題有待解決,為了最終可以實現成功流片,還需繼續努力做好此后的工作。
[1]景濤.多核環境下基于L2 cache的目錄一致性協議的研究[D].哈爾濱:哈爾濱工程大學,2010.
[2]夏宏,任捷.基于WishBone總線Cache數據一致性方案[J].計算機工程與應用,2006,42(9):93-95.
[3]王煥東,高翔.龍芯3號互聯系統的設計與實現[J].計算機研究與發展,2008,45(12):2001-2010.
[4]Culler D,Singh J,Gupta A.Parallel computer architecture:a hardware/software approach[M].[S.l.]:Morgan Kaufmann Pub,1999.
[5]潘國騰,竇強,謝倫國.基于目錄的Cache一致性協議的可擴展性研究[J].計算機工程與科學,2008,30(6):131-133.
[6]Bryant R E,O’Hallaron D R.Computer systems:a programmer’s perspective[M].[S.l.]:Addison-Wesley Educational Publishers Inc,2010.
[7]Laudon J,Lenoski D.The SGI origin:a CC-NUMA highly scalable server[C]//ACM SIGARCH Computer Architecture New,1997.
[8]ARM,AMBA3.0,AXI protocol specification[S].2004.
[9]Almaless G,Wajsburt F.On the scalability of image and signal processing parallel applications on emerging CC-NUMA many-cores[C]//Design and Architectures for Signal and Image Processing(DASIP),2012.
[10]Gao Yuhui,Zhu Mingfa,Huo Jiantong.Design and implementation of BIOS for Godson-3A interconnections[C]//Computer and Management(CAMAN),2011.
[11]Wang Ruibo,Lu Kai.Using transactional memory on CCNUMA systems[C]//Networked Computing(INC),2010.
[12]楊鵬飛.多核環境Cache一致性協議研究[D].哈爾濱:哈爾濱工程大學,2011.
[13]陳杰,章軍.一種集成“龍芯1號”IP核的SoC的體系結構[J].計算機工程與應用,2007,43(19):111-114.
[14]屈文新,樊曉婭.“龍騰”2微處理器Cache單元的設計與實現[J].計算機工程與應用,2006,42(17):22-25.