羅 莉,周宏偉,周 理,潘國騰,周海亮,劉 彬
(1.國防科技大學計算機學院,湖南 長沙 410073;2.武警貴州省總隊,貴州 貴陽 550081)
隨著大數據計算、數據中心和集成電路技術的飛速發展,多核處理器支持直連接口實現共享主存的對稱多處理器SMP(Symmetric MultiProcessing)系統已經成為主流。直連接口負責實現處理器芯片間的直連,也可用于實現備份和冗余,提高系統容錯能力和性能。處理器之間直連接口設計不僅需要滿足低延遲、高帶寬,還必須滿足高可靠的服務質量QoS(Quality of Service)保障。處理器直連接口提供的QoS保障,能夠實現可靠、實時、完整和順序到達的數據傳輸。
本文提出了一種面向多核處理器的直連接口的QoS設計方案,接口采用信用機制設計避免了擁塞,利用虛通道技術、優先級的仲裁調度策略避免了死鎖、擁塞的傳輸問題,同時,滑動窗口重傳協議維護了數據傳輸的順序性和正確性。模擬結果顯示,QoS設計的正確性,為多個處理器的直接互連提供了穩定的魯棒性,移植到FPGA原型驗證平臺,順利通過了測試。目前,該芯片已成功流片。
處理器直連接口能夠實現處理器之間直接互連,國內外市場上大多數高端服務器產品都支持多個處理器以直接互連的方式構建多路服務器系統。
Intel公司[1]推出了一種高速、點到點的處理器間互連總線QPI(Quick Path Interconnect),集成于Intel的服務器處理器中。Intel Xeon E5系列和E7系列分別集成了2個和3個QPI總線接口,可實現多路處理器的直連。IBM公司[2]的p系列服務器采用IBM Power5+高性能處理器,通過處理器直連通道互連,最大支持32路處理器。AMD[3]的超傳輸HT(HyperTransport)總線,實現了一種高速、雙向、低延時、點對點的直連接口。NVIDIA的NVLink支持連接多個GPU。IBM公司[4]的Power9處理器通過NVLink可以直接與NVIDIA GPU互連,實現高性能計算(HPC)系統。
上述直連接口技術并不是通用協議,相關技術不開放,不能作為國產處理器的直連接口技術。為此,自主設計并實現芯片直連接口是不可避免的選擇,王錦涵等[5]將PCI-E的總線技術運用在國產處理器的片間直連中,可以實現自主可控的芯片直連接口,達到處理器直連的目的。周宏偉等[6]提出了一種面向多核微處理器的互連接口的設計方案,基于精簡的PCI-E 總線協議,采用高速串行數據傳輸技術,支持Cache一致性報文和大塊數據傳輸報文,能夠用于實現4 路處理器的直接互連。王云霏等[7]針對國產服務器的處理器間互連的直連接口,為了降低片間通信帶寬需求,設計了一種基于Token 協議和目錄協議的混合一致性協議,目的是在帶寬資源受限系統中具有更好的系統性能。
本文旨在研究面向多核高性能微處理器的直連接口QoS設計,能夠實現處理器直連通信可靠、實時、完整和順序到達的數據傳輸。
對稱多處理器系統SMP中所有處理器共享一個統一的地址空間,具有相同的地址空間視圖。系統的分布式內存和I/O資源為所有的處理器共享,易于構建單一映像的操作系統,并為上層應用提供統一、高效的編程接口。
通過高速處理器互連接口,多個處理器可以方便地實現SMP系統。為了達到更高的帶寬,避免對共享資源的競爭,目前主流多處理器之間的連接鏈路普遍采用點到點的直連鏈路。如圖1所示,直接互連的處理器的數目最常見的是2~4個。

Figure 1 SMP system interconnected by direct connection interface圖1 通過直連接口互連的SMP系統
設計多個直連接口支持多個處理器芯片直連,也可用于實現備份和冗余,以提高系統容錯能力和性能。3個直連接口最多支持 4路處理器直連的拓撲結構;2個處理器可以相互連接構成2路直連的多處理器系統,連接時可以使用1個直連接口,如圖1a所示的2路SMP系統,也可以把3個直連接口都連接上,以提高傳輸帶寬和容錯能力;4個處理器則可以相互連接構成 4 路多處理器系統,如圖1b所示,當部分處理器發生故障時,可以降級為 3 路或2 路多處理器系統。
在SMP互連體系結構中,處理器互連接口一般分為多個層次,但與傳統的Internet 中使用的OSI 7 層協議[8]不同。傳統的OSI 7 層協議由于協議層次多,各層協議功能重復、復雜,處理器間的互連通常采用功能精簡、結構合理的互連網絡協議,其協議主要包含了傳輸層、數據鏈路層和物理層。本文的研究目標是面向多核處理器的直連接口,協議層次如圖2所示,包含應用層(Application Layer)、傳輸層(Transport Layer)、數據鏈路層(Link Layer)和物理層(Physical Layer)。

Figure 2 Hierarchy of direct connection interface圖2 直連部件的層次結構
應用層在本文的處理器芯片中是片上網絡NoC(Network on Chip)接口,負責向直連部件發送NoC待傳輸的報文,報文類型劃分為請求(REQ)、響應(RSP)、監聽(SNP)和應答(ACK)4類,并接收直連部件輸出的報文。
傳輸層接收應用層的報文(Message),按照鏈路層需要的格式,將其轉換成鏈路層需要的數據序列(Data Sequence),并根據接收方和數據鏈路層的狀態,將轉換好的數據序列發送給數據鏈路層。同時傳輸層接收數據鏈路層的數據序列,并將其轉換成應用層需要的報文格式,緩沖后發送給應用層。傳輸層結構主要包括報文緩沖(Message Buffer)、四選一仲裁(Arbitration)、數據序列格式轉換(Data Sequence Format Convert)和信用控制(Credit Control)。
鏈路層接收傳輸層的數據序列,將其轉換成適合鏈路傳輸的微包(Packet)格式,并根據鏈路管理(Link Management)狀態,將微包發送到物理層。鏈路層同時接收物理層的微包,并將其轉換成傳輸層需要的數據序列。鏈路層還具有微包的CRC校驗和出錯重傳等功能。鏈路層結構主要包括微包打包(Packing Packet)、微包解包(Unpacking Packet)、微包管理(Packet Management)、鏈路管理(Link Management)、重傳緩沖(Retry Buffer)和二選一開關(MUX)。
物理層將微包轉換成串行的碼流,通過SERDES(串行/解串)發送和接收。SERDES技術因其傳輸速率高、抗干擾能力強等優點已成為主流的高速接口物理層規范。
通過高速處理器互連接口實現SMP系統,用于未來的高性能計算機和數據中心,直連接口必須提供處理器之間低延遲、高帶寬和高可靠的QoS保障。
所謂服務質量(QoS)是指網絡在傳輸數據流時要滿足的一系列服務請求,如Internet僅提供盡力而為(Best Effort Service)的傳輸服務,盡力發送的機制對報文傳輸時的可靠性、實時性、完整性、到達的順序性,以及傳輸的時延無法提供任何保證。盡力而為不能達到直連接口的QoS要求,處理器之間建立的直連傳輸鏈路,不僅需要提高數據的吞吐率,還必須提供保障服務,避免死鎖和擁塞,保障數據的完整性和到達的順序性。
為解決互連傳輸擁塞,本文采用了基于信用的流控機制。相比傳統的空、滿溢出流控方式,采用基于信用的流控能精確判斷流量,同時利于后端實現。
處理器互連接口的輸出都是點到點傳輸,分時共享鏈路傳輸的獨占資源。為了避免事務之間相互依賴而導致的死鎖,本文設計了基于事務類型的4個虛通道、固定優先級的仲裁調度,同時采用等待時間控制“饑餓”狀態,有效提供了QoS保障。
鏈路層通信的QoS要求傳輸具有可靠性和完整性,本文利用滑動窗口重傳協議實現無差錯的鏈路層通信;利用CRC校驗技術檢測錯誤,自動地對丟失的微包、錯誤微包請求重發。
解決網絡擁塞的辦法通常是采用流量許可控制,當接收一個新的數據流時許可承諾是有效的,如果一個新的數據流所請求的網絡資源超出可用網絡資源,許可承諾會被置為無效。
為確保直連部件協議層次間發送/接收報文的順利進行,需要確保發送方在發送報文時接收方有足夠的空間接收報文,發送方和接收方必須有一個有效的流控機制,以協調報文的發送和接收。
本文在協議層次輸入端口和輸出端口上均設計了報文緩沖區,為保證緩沖區不發生上溢和下溢,必須對進入緩沖區的報文進行流控。 傳統的緩沖區流控策略是使用緩沖區的空信號和滿信號來判斷緩沖區是否發生上溢和下溢,本文采用基于信用的流控,精確控制流量,較好地避免了擁塞。
圖3所示是直連部件支持的通用接口信用機制。圖3中Sender是發送方,Receiver是接收方,在數據的源端維護一個信用計數器,初始值設置為緩沖區深度,當數據源發出一個微報信號Send,信用減1;當緩沖區中消耗 1 個微包時,釋放 1 個信用,當信用釋放信號Release到達數據源端時,信用計數器加 1。Sender在發送報文時,每個時鐘周期都可以將Packet傳輸給接收方,接收方有一個輸入緩沖區,這個緩沖區能夠緩沖N個Packet,只要接收緩沖區有足夠的空間,發送方就直接發送新的Packet給接收方,發送方通過一個信用計數器(Credit Counter)來確認是否可以發送Packet給接收方。

Figure 3 Universal credit mechanism for direct connection interface圖3 直連部件的通用接口信用機制
初始時,信用計數器的值等于接收方緩沖器的深度,發送方在發送Packet前必須檢查信用計數器的值,只要信用計數器的值大于0,發送方就可以發送Packet,每發送一個Packet,發送方就將信用計數器的值減1。接收方會將收到的Packet緩存在接收緩沖區中,同時接收方的內部處理邏輯也會不斷消耗處理緩沖區中的數據,接收方每消耗掉緩沖區的一個Packet,就會通過Release信號向發送方發送一個脈沖信號,發送方收到Release脈沖,就將信用計數器的值加1。
這種信用機制應用于直連部件的每個層次接口,如應用層與傳輸層接口、傳輸層與數據鏈路層接口、數據鏈路層與物理層的接口。
相比傳統的緩沖區空滿的流控策略,信用流控可以不必考慮數據源端和緩沖區端之間的距離,二者之間可以任意增加中繼,非常有利于芯片物理實現的后端設計。
傳輸層將接收的應用層報文,按照鏈路層需要的格式,轉換成鏈路層需要的數據序列,并根據接收方和數據鏈路層的狀態,將轉換后的數據序列發送給數據鏈路層。傳輸層還接收數據鏈路層的數據序列,并將其轉換成應用層需要的報文格式,緩沖后發送給應用層。
應用層的報文與片上網絡的報文格式一致。多核處理器Cache一致性協議和片上互連結構采用了緊耦合設計,片上互連網絡連接了主存、Cache、核和I/O設備等,Cache一致性消息通過片上網絡報文進行傳輸,片上網絡的報文可劃分為請求、監聽請求、監聽應答和讀寫響應4種類型。
進入鏈路層的各類事務必須分時共享鏈路傳輸的獨占資源,因此不可避免地會將各類事務統一排隊處理。為了避免死鎖,傳輸層與應用層之間采用虛通道方式,虛通道是一種避免網絡死鎖的常用技術。
傳輸層與應用層的傳輸數據根據傳輸的報文類型,定義4個虛通道:請求(REQ)通道、響應(RSP)通道、監聽(SNP)通道和應答(ACK)通道。虛通道設計避免了不同類型的事務混合在一起互相等待,若一個虛通道被阻塞,則其他的虛通道還能繼續通向輸出端口,最大限度地減少了由于事務之間相互依賴而導致的死鎖。
分時共享鏈路傳輸的獨占資源,為了避免因為事務之間相互依賴而導致的死鎖,本文設計了固定優先級的仲裁調度,根據優先級選擇調度哪一個虛通道占用鏈路層傳輸。一個Cache事務的生命周期通常是{請求,響應}、{請求,監聽請求,監聽響應,響應}、{請求,監聽請求,監聽請求,…,監聽請求,監聽響應,…,監聽響應,響應}的事務序列,優先級最高的是響應通道,其次是監聽響應、監聽請求和請求通道。基于優先級調度的仲裁方式保障了響應事務、監聽響應事務及時得到處理。
當出現連續不斷的、穩定的監聽響應、響應傳輸時,可能會導致監聽請求或者請求通道得不到仲裁調度,從而出現 “饑餓”現象。傳輸層的仲裁選擇調度采用固定優先級設置,通道的“饑餓”現象同樣存在,為了避免這種情況,監聽通道請求和請求通道都設置等待計時器,若監聽請求通道或者請求通道的報文等待時間大于門限設置時間,優先級調整為最高,仲裁調度器會選中該通道報文輸入鏈路層。
傳輸層采用虛通道技術、基于優先級的仲裁調度策略避免了死鎖,同時利用等待時間控制饑餓狀態,有效提供了QoS的保障。
鏈路層將接收的傳輸層數據序列轉換成適合鏈路傳輸的微包(Packet)格式,并根據鏈路管理(Link Management)狀態,將微包發送到物理層。同時將接收的物理層微包轉換格式后輸入到傳輸層。
鏈路層傳輸的信息單位是微包,是芯片間鏈路傳輸層的信息傳輸、校驗、重傳、流控的最小單位,微包的類型分為報文微包和管理微包,管理微包有鏈路初始化微包、鏈路初始化響應微包和空微包。空微包是鏈路空閑時發出的微包,攜帶了滑窗的序列號。鏈路層通信的QoS要求每個微包傳輸具有可靠性和完整性,本文利用滑動窗口重傳協議實現無差錯的鏈路層通信;采用CRC校驗技術檢測錯誤,自動地對錯誤微包請求重發。
鏈路層通信遇到數據傳輸或者接收錯誤時,需要進行重傳,重傳協議為滑動窗口重傳協議(Sliding Window Retry Protocol),滑動窗口機制在重傳協議中維護了發送和接收2個窗口。發送窗口實際上是維護重傳緩沖區的讀寫控制和發送方序列號,而接收窗口實際上是維護接收方的序列號。

Figure 4 Calibration mechanism of frequency skew圖4 頻率偏斜校準機制
接收窗口的大小設計為1,可以順序接收發送方發出的報文,任何序列號不等于接收窗口所對應序列號的報文都會被丟棄。接收窗口保障了接收報文的順序正確性和無重復的報文序列。
CRC循環冗余校驗碼簡稱循環冗余碼,是一種檢錯概率高且易于硬件實現的檢錯碼。為了保證報文傳輸過程的正確性,發送方在將要發送的微包上附加一個CRC校驗碼,接收方則根據CRC校錯碼對微包進行差錯檢測,若發現錯誤,就返回請求重發的應答,發送方收到請求重發的應答后,便重新傳輸該微包。本文使用滑動窗口機制,高效地實現了重傳協議中的重傳緩沖區和收發序列號管理。
數據鏈路層實現的滑動窗口重傳協議解決了數據傳輸的出錯、丟失、亂序和重復問題,CRC校驗檢查傳輸數據的正確性,如果出錯自動發起重傳,保障了鏈路層每個微包傳輸的可靠性和完整性。
物理層包括物理編碼子層PCS(Physical Coding Sublayer)和物理媒介適配層PMA(Physical Media Attachment)。其中PCS為數字電路,PMA也可以被稱為串并轉換電路(SERDES)。PCS基于64 B/66 B編碼技術、擾碼傳輸技術和頻率偏斜校準機制,物理層傳輸速度可以達到 25 Gbps。
圖4所示是PCS子層頻率偏斜校準機制,是頻率補償與延遲修正合二為一的校準機制。PCS子層的每個通道(Lane)有一套獨立的數據棧(Stack)。數據棧具有彈性緩沖的功能,用于調節每個Lane從PMA層恢復出來的時鐘(pma_rcvr_clk_in_lane[i])和PCS子層的時鐘clk_ref之間的時鐘頻率偏差;數據棧也可作為糾正Lane與Lane之間傳輸延遲偏斜的緩沖器使用。將彈性緩沖和延遲糾正緩沖合二為一,能夠降低PCS層的物理資源需求,減小物理層的面積。
直連接口的設計包括應用層、傳輸層、數據鏈路層和物理層的PCS子層,本文利用S2C公司的VU440開發板,實現了FPGA原型驗證平臺,限于篇幅,在此不做詳述。
針對本文研發的面向多核處理器的直連接口,功能驗證平臺開發了測試單部件回環、雙部件互連的軟模擬驗證環境,通過功能點測試,保障了QoS設計的正確性。功能驗證平臺是基于UVM(Universal Verification Methodology)[9]方法學實現的驗證平臺,UVM是一個通用的驗證方法學,UVM的一個關鍵特性就是開發了一系列可重用的驗證組件UVC(UVM Verification Components)。UVM以systemVerilog語言為基礎,已經成為業界標準,目前3大EDA廠商的工具都支持UVM。
單部件回環驗證環境結構如圖5所示,該環境重點測試了錯誤注入、模擬通路傳輸錯誤和通路延遲,激發鏈路層重傳相關操作。DUT(Device Under Test)是本文研發的面向多核處理器的直連接口部件,phy_monitor是用于檢查物理層接口協議的檢查器。

Figure 5 Loop back verification environment for one DUT component圖5 單部件回環驗證環境
testcase是測試用例集,DVB_config、NoC_config和phy_config定義了約束化的隨機方式。env是UVM驗證方法學中引入的一個容器類,當調用 run_test 函數時,可以傳遞參數給env容器類,使得 UVM 能夠自動地創建組件實例,大大減少了代碼的冗余。env主要包含sequence、driver、monitor和scoreboard等組件,sequence組件的主要功能是用于產生各種激勵;sequencer組件主要是將sequence產生的激勵和各種transaction類傳遞給驅動器driver。驗證平臺實現了基于env實例化的NoC_ENV、REG_ENV和PHY_ENV,是模擬NoC行為、寄存器配置和物理層接口的功能。
NoC_ENV.driver模擬NoC的BFM(Bus Function Model)行為,是時鐘精確的NoC模型,實現了NoC片上網絡4類報文數據的隨機發送。
REG_ENV.driver模擬了寄存器配置的BFM行為,例如配置重傳超時計數器上限值、最大連續重傳次數上限值和達到max_retry_counter后鏈路是否復位等。
PHY_ENV.driver模擬了物理層接口的BFM行為。
scoreboard負責對仿真運行結果進行自動比對,對比對結果進行分類匯總,提供完整的錯誤信息并控制仿真器在出錯時的運行狀態,即停頓等待、關閉終止還是繼續運行。
monitor檢查寄存器配置的正確性,Tx_monitor和Rx_monitor除了監控DUT的輸入輸出,還完成了覆蓋率統計收集,phy_monitor是物理層協議的檢查器。
當有多個sequence需要按一定次序發送transaction給對應的sequencer時,使用Virtual Sequencer來進行調度。
圖6所示是2個直連部件連接的驗證環境,重點測試微包正確打包、解包功能、鏈路管理功能和重傳協議功能。
直連部件的驗證功能點如表1所示,測試寄存器配置、NoC報文傳輸、NoC報文壓力、注錯、鏈路管理、物理層接口檢查的功能正確性。本文采用受約束隨機產生激勵和定向激勵的驗證策略,發現了設計中較多缺陷,其中敏化了多個高質量的滑動窗口重傳協議的設計缺陷。NoC報文壓力測試和注錯測試重點驗證直連部件的QoS設計,測試1 000萬個NoC報文傳輸,擁塞和餓死場景沒有發生。注錯測試是在鏈路傳輸數據中注入錯誤,例如微包初始化錯誤、微包序號錯誤、空報文錯誤、微包的凈荷數據植入一位錯,都能引起正確重傳。

Table 1 Verification function points of direct connection interface

Figure 6 Verification environment for two DUT components圖6 2個直連部件連接的驗證環境
直連部件的延遲性能如圖7所示,直連部件主頻設計為1.5 GHz,在傳輸層和數據鏈路層信用都有效情況下,傳輸層和數據鏈路層的延遲為7.5 ns;在傳輸層和數據鏈路層信用無效的情況下,延遲為15 ns;當鏈路傳輸數據中注入錯誤產生了重傳時,延遲為21 ns。物理層PCS子層時鐘相位偏移45°、90°、180°時,直連部件都可以正常工作;物理層PCS子層輸出的的各個通道(Lane)之間偏移延遲(skew)允許最多5個PCS子層時鐘周期,直連部件可以正常工作。直連部件通過軟模擬功能驗證后,移植到FPGA原型驗證平臺測試,達到了預期目標。目前,該芯片已成功流片。

Figure 7 Latency performance of direct interface圖7 直連部件延遲性能
本文主要研究高性能處理器直連接口的QoS設計,通過直連接口實現跨芯片的一致性報文有效、可靠傳輸。本文詳細闡述了直連接口各個協議層QoS設計的關鍵技術,基于UVM方法學構建了單部件和雙部件驗證平臺,模擬驗證了QoS設計的正確性,移植到FPGA原型驗證平臺,順利通過了測試。實現處理器芯片直連,是提升高性能多路服務器的主流方向,具有良好的應用和研究前景。