石 偉,龔 銳,劉 威,王 蕾,馮權(quán)友,張劍鋒
(國防科技大學(xué)計(jì)算機(jī)學(xué)院,湖南 長沙 410073)
隨著摩爾定律[1]的發(fā)展,單芯片上計(jì)算資源不斷增加,I/O帶寬與速率相對(duì)于高性能芯片計(jì)算性能的差距不斷增大。如何提升處理器的I/O性能一直是高性能處理器設(shè)計(jì)及高性能計(jì)算機(jī)系統(tǒng)面臨的重要問題[2]。隨著云計(jì)算、AI、大數(shù)據(jù)和數(shù)據(jù)密集型計(jì)算的發(fā)展,I/O的性能問題更加突出[3,4]。
從功能角度,處理器的高性能I/O接口可以分為存儲(chǔ)、通信和加速接口等幾類。針對(duì)數(shù)據(jù)密集型的科學(xué)計(jì)算,應(yīng)用程序在運(yùn)行過程中需要讀寫的數(shù)據(jù)量達(dá)到TB甚至PB級(jí)[4],這些數(shù)據(jù)需要通過I/O接口存入外部大容量磁盤等存儲(chǔ)設(shè)備。針對(duì)超級(jí)計(jì)算機(jī)系統(tǒng),各計(jì)算結(jié)點(diǎn)之間通常通過InfiniBand、以太網(wǎng)和OPA(Omni-Path Architecture)等接口進(jìn)行互連[5]。隨著加速器技術(shù)的發(fā)展,AI和GPGPU等加速模塊通過PCIe[6]、CXL[7]和NVlink[8]等接口連接到處理器上。此外,對(duì)于高性能服務(wù)器,服務(wù)器芯片通過直連接口進(jìn)行通信,比如CCIX[9]和UPI(Ultra Path Interconnect)[10]等。實(shí)際上,很多高性能處理器都實(shí)現(xiàn)了上述幾種類型I/O高速接口,比如IBM的POWER9[11]、華為鯤鵬920和Intel 至強(qiáng)處理器[10]。
針對(duì)I/O的瓶頸問題,主要存在2類解決方法:第1類是從系統(tǒng)級(jí)進(jìn)行優(yōu)化。文獻(xiàn)[12,13]通過優(yōu)化系統(tǒng)軟件或并行I/O庫的方法提升I/O接口的使用效率,提升性能。文獻(xiàn)[3,14]從應(yīng)用的角度分析I/O行為及I/O效率低下的原因,進(jìn)而進(jìn)行有針對(duì)性的優(yōu)化。第2類方法是對(duì)處理器接口直接進(jìn)行優(yōu)化設(shè)計(jì),如提升接口的傳輸速率,實(shí)現(xiàn)更多的通道數(shù)或優(yōu)化控制器的傳輸延遲。以PCIe協(xié)議為例,隨著協(xié)議不斷進(jìn)化,目前主流的PCIe 3.0傳輸速率達(dá)到了8 Gbps,具有16 Gbps傳輸速率的PCIe 4.0已經(jīng)成功應(yīng)用于一些高性能處理器中[11,15]。PCIe 5.0速率達(dá)到了32 Gbps,IBM最新發(fā)布的POWER10處理器采用了該協(xié)議[16]。為了提升帶寬,高性能處理器通常設(shè)計(jì)實(shí)現(xiàn)32~80個(gè)PCIe通道,最高帶寬達(dá)到了320 GB/s。此外,高性能服務(wù)器芯片通常還可能同時(shí)實(shí)現(xiàn)CCIX、以太網(wǎng)、USB和SATA等高速接口。
對(duì)一個(gè)高性能處理器來說,通過提升I/O接口的帶寬與速率能夠直接提升I/O的性能,但是處理器設(shè)計(jì)是一個(gè)系統(tǒng)級(jí)的工程,并不是簡(jiǎn)單的集成。集成數(shù)量眾多且?guī)挸叩腎/O接口對(duì)處理器的片上網(wǎng)絡(luò)NoC(Network on Chip)設(shè)計(jì)提出了巨大挑戰(zhàn)。本文對(duì)處理器內(nèi)的片上網(wǎng)絡(luò)進(jìn)行優(yōu)化設(shè)計(jì),以匹配高帶寬I/O接口。由于I/O接口與片上網(wǎng)絡(luò)協(xié)議的差異性與復(fù)雜性,往往會(huì)導(dǎo)致死鎖現(xiàn)象的產(chǎn)生,從而增加系統(tǒng)設(shè)計(jì)難度,甚至對(duì)系統(tǒng)性能產(chǎn)生負(fù)面影響。本文針對(duì)死鎖問題,提出一種高效解決方法。該方法無需通過增加各種約束條件來防止死鎖的產(chǎn)生,而是在死鎖產(chǎn)生后,通過死鎖檢測(cè)、死鎖撤銷及事務(wù)恢復(fù)的方法重新激活網(wǎng)絡(luò)中的事務(wù)。
圖1為微處理器結(jié)構(gòu)示意,其中處理器簇、PCIe接口、直連接口和DMA設(shè)備等通過Cache一致性網(wǎng)絡(luò)進(jìn)行互連,通過監(jiān)聽等手段保證各主設(shè)備看到相同的數(shù)據(jù)視圖。Cache一致性網(wǎng)絡(luò)同時(shí)還負(fù)責(zé)地址譯碼與報(bào)文路由的功能,將請(qǐng)求轉(zhuǎn)發(fā)到內(nèi)存空間或I/O空間。I/O網(wǎng)絡(luò)則負(fù)責(zé)將I/O請(qǐng)求進(jìn)一步轉(zhuǎn)發(fā)到不同外設(shè)。DMA設(shè)備可以是一些專門加速模塊,比如密碼引擎等。網(wǎng)絡(luò)接口可以直接設(shè)計(jì)在處理器內(nèi)部,也可以通過PCIe接口進(jìn)行協(xié)議轉(zhuǎn)換。加速器接口根據(jù)加速器的接口協(xié)議,可以采用不同的實(shí)現(xiàn)方式,在處理器內(nèi)部實(shí)現(xiàn)專用加速接口,或直接連接在PCIe上,或復(fù)用PCIe部分邏輯來實(shí)現(xiàn)。
Figure 1 Interconnection network in processors圖1 處理器互連網(wǎng)絡(luò)結(jié)構(gòu)示意
圖1給出了處理器上各設(shè)備進(jìn)行數(shù)據(jù)交換的基本結(jié)構(gòu),但是具體如何進(jìn)行數(shù)據(jù)交換還需要網(wǎng)絡(luò)協(xié)議支持。傳統(tǒng)的互連協(xié)議有IBM公司的CoreConnect、ARM公司的AMBA(Advanced Microcontroller Bus Architecture)、Silicore公司的Wishbone和OCP-IP (Open Core Protocol International Partnership)設(shè)計(jì)的OCP協(xié)議等。隨著處理器復(fù)雜度的不斷增加,互連由傳統(tǒng)的總線向片上網(wǎng)絡(luò)演變,片上通信由片上報(bào)文完成[17]。不同的網(wǎng)絡(luò)協(xié)議在具體實(shí)現(xiàn)方面差別較大,可以從事務(wù)類型、并發(fā)度、物理及邏輯通道對(duì)應(yīng)關(guān)系、維序方式和死鎖防護(hù)等方面對(duì)網(wǎng)絡(luò)協(xié)議進(jìn)行比較分析。
Figure 2 Three kinds of write operation processes圖2 3種寫操作流程示意
事務(wù)類型是一個(gè)網(wǎng)絡(luò)協(xié)議的基礎(chǔ),一般包括Cache一致性事務(wù)、DMA事務(wù)和I/O事務(wù)等。PCIe等外設(shè)采用的DMA操作主要包括DMA讀與DMA寫。DMA寫將數(shù)據(jù)寫入內(nèi)存,DMA讀從內(nèi)存中讀出數(shù)據(jù)并傳輸給外設(shè)。DMA讀寫通常會(huì)涉及Cache一致性處理,但本文主要側(cè)重讀寫性能優(yōu)化,因此不對(duì)Cache一致性處理進(jìn)行描述。在不同處理器或架構(gòu)中,事務(wù)的具體實(shí)現(xiàn)方式也不盡相同。圖2給出了3種寫事務(wù)的具體實(shí)現(xiàn)流程。在圖2a中,發(fā)送方首先向接收方發(fā)出請(qǐng)求報(bào)文;接收方如果可以接收寫數(shù)據(jù),會(huì)向發(fā)送方發(fā)送報(bào)文可接收的通知;發(fā)送方接收到通知后,則向接收方發(fā)出數(shù)據(jù);最后接收方通知發(fā)送方寫操作完成。ARM公司的CHI(Coherent Hub Interface)協(xié)議與圖2a類似[18]。在圖2b中,數(shù)據(jù)跟隨請(qǐng)求直接發(fā)出,如ARM公司的AXI(Advanced eXtensible Interface)協(xié)議[19]。在圖2c中,請(qǐng)求與數(shù)據(jù)通過一個(gè)報(bào)文發(fā)送,如UltraSPARC T2的報(bào)文傳輸方式[20]。
并發(fā)度與協(xié)議的性能直接相關(guān)。并發(fā)度高的協(xié)議可以以流水方式發(fā)出請(qǐng)求,然后以流水方式接收響應(yīng),比如ARM公司的AXI協(xié)議。而并發(fā)度低的協(xié)議,事務(wù)是串行完成的,比如APB(Advanced Peripheral Bus)協(xié)議。在延遲大的網(wǎng)絡(luò)中,只有以流水方式處理多個(gè)事務(wù),才能達(dá)到較高性能。
一個(gè)事務(wù)通常由幾個(gè)不同功能的報(bào)文組成,這些報(bào)文可以獨(dú)占一個(gè)物理通道或者共享一個(gè)物理通道。AXI協(xié)議的讀請(qǐng)求與寫請(qǐng)求分別獨(dú)占一個(gè)通道,而CHI協(xié)議的讀請(qǐng)求與寫請(qǐng)求則共享一個(gè)請(qǐng)求通道。
在處理器中,很多事務(wù)之間是存在順序性要求的。比如PCIe協(xié)議要求不同事務(wù)之間必須保證一定的順序,否則無法保證協(xié)議正確性[6]。AXI協(xié)議通過事務(wù)編號(hào)來保證事務(wù)順序完成,而CHI協(xié)議通過報(bào)文域來指定順序性,并且通過特定的硬件實(shí)現(xiàn)來保證順序。在進(jìn)行協(xié)議轉(zhuǎn)換的時(shí)候,需要保證事務(wù)之間的順序性被正確轉(zhuǎn)換。
死鎖也是協(xié)議經(jīng)常需要面對(duì)的問題,每一種協(xié)議都需要設(shè)置一定的規(guī)則來避免產(chǎn)生死鎖。對(duì)于很多復(fù)雜網(wǎng)絡(luò)協(xié)議,必須保證網(wǎng)絡(luò)通路不被堵死。一般情況下,可以通過重發(fā)與信用機(jī)制來保證網(wǎng)絡(luò)不被堵死。當(dāng)接收方收到發(fā)送方的報(bào)文時(shí),如果接收方不能處理,則可以通過重發(fā)機(jī)制通知發(fā)送方進(jìn)行重發(fā),而不是一直將其堵在接收方的入口,進(jìn)而阻塞其他報(bào)文的接收。信用機(jī)制則是發(fā)送方在知道接收方肯定能夠接收?qǐng)?bào)文的情況下將報(bào)文發(fā)送出去。接收方如果能夠繼續(xù)接收?qǐng)?bào)文,則通過信用釋放的方式通知發(fā)送方。
Figure 3 Interconnection between PCIe and DDR圖3 PCIe與DDR交互示意
以PCIe與DDR(Double Data Rate)存儲(chǔ)器為例,兩者之間通常需要進(jìn)行多種協(xié)議轉(zhuǎn)換、時(shí)鐘域轉(zhuǎn)換和位寬轉(zhuǎn)換等,如圖3所示。如果PCIe與DDR采用通用IP(Intellectual Property),則其接口一般會(huì)采用標(biāo)準(zhǔn)的AXI協(xié)議。PCIe控制器與DDR控制器需要分別將PCIe協(xié)議、DDR協(xié)議與AXI協(xié)議進(jìn)行轉(zhuǎn)換。在不同架構(gòu)中,NoC網(wǎng)絡(luò)通常也有自己的特定協(xié)議,因此需要將AXI協(xié)議與網(wǎng)絡(luò)協(xié)議進(jìn)行轉(zhuǎn)換。圖3中DCU(Directory Control Unit)為目錄控制單元,負(fù)責(zé)Cache一致性管理。
以16 通道PCIe 4.0為例,其讀寫峰值帶寬需求分別為32 GB/s。在圖3所示的整個(gè)通路上,需要以峰值帶寬為設(shè)計(jì)目標(biāo),確保各部分的帶寬不存在瓶頸。在Cache一致性網(wǎng)絡(luò)中,每次讀寫的報(bào)文最大粒度是固定的,稱為Cache行,其大小為Bcacheline。讀寫帶寬的計(jì)算方式如式(1)所示,與讀寫并發(fā)個(gè)數(shù)Ot和源結(jié)點(diǎn)到目的結(jié)點(diǎn)的網(wǎng)絡(luò)延遲t有關(guān)。在時(shí)間t內(nèi)完成的并發(fā)讀寫數(shù)目越多,讀寫總帶寬越大。
(1)
雖然通過提升讀寫并發(fā)數(shù)能夠提升帶寬,但是能夠設(shè)計(jì)實(shí)現(xiàn)的讀寫并發(fā)數(shù)是有限制的,如式(2)所示:
(2)
其中,Ntransfer表示傳輸每個(gè)Cache行數(shù)據(jù)報(bào)文所需的時(shí)鐘周期數(shù),Omax表示實(shí)現(xiàn)的最大并發(fā)數(shù),f表示電路時(shí)鐘頻率。當(dāng)電路中設(shè)計(jì)實(shí)現(xiàn)的實(shí)際并發(fā)數(shù)超過Omax以后,將有部分讀寫操作無法流水執(zhí)行。如果非要提升系統(tǒng)的Omax,可以通過降低Cache行傳輸時(shí)鐘周期來實(shí)現(xiàn)。另外,通過減小網(wǎng)絡(luò)傳輸延時(shí)t,可以在使用更小并發(fā)數(shù)的同時(shí)獲得相同的網(wǎng)絡(luò)帶寬,從而節(jié)省邏輯資源。
在圖3中,PCIe控制器距離內(nèi)存最遠(yuǎn),因此讀寫并發(fā)數(shù)要求最大。而DDR控制器距離內(nèi)存最近,設(shè)計(jì)較小的并發(fā)數(shù)就能獲得同等的傳輸帶寬。對(duì)于低頻率的電路,可以通過提高數(shù)據(jù)位寬來獲得與高頻率電路相等的帶寬。
在互連網(wǎng)絡(luò)中,死鎖是一個(gè)必須解決的問題。死鎖是指2個(gè)或2個(gè)以上的網(wǎng)絡(luò)結(jié)點(diǎn)在事務(wù)執(zhí)行過程中,由于資源競(jìng)爭(zhēng)導(dǎo)致多個(gè)事務(wù)相互依賴,無法完成,網(wǎng)絡(luò)處于永久阻塞狀態(tài)。為防止死鎖,設(shè)計(jì)人員提出了各種死鎖避免機(jī)制,比如采用信用、重發(fā)機(jī)制、防死鎖路由等技術(shù)確保網(wǎng)絡(luò)暢通,然而這些機(jī)制只是初級(jí)的死鎖避免策略。在很多情況下,死鎖與通信結(jié)點(diǎn)的特點(diǎn)、微結(jié)構(gòu)設(shè)計(jì)還存在較大相關(guān)性。在進(jìn)行微結(jié)構(gòu)設(shè)計(jì)的時(shí)候,需要充分考慮通信結(jié)點(diǎn)的特點(diǎn),優(yōu)化設(shè)計(jì),避免死鎖。
PCIe協(xié)議的posted類型的寫事務(wù)具有強(qiáng)序要求[6],所有的posted類型的寫必須順序完成,即處理器看到這些數(shù)據(jù)的次序必須與PCIe寫入的次序相同。最簡(jiǎn)單的實(shí)現(xiàn)方式是串行實(shí)現(xiàn),但是實(shí)現(xiàn)效率低,事務(wù)不能流水執(zhí)行。AXI協(xié)議通過采用相同的編號(hào)來實(shí)現(xiàn)維序[19],CHI協(xié)議通過順序發(fā)送Compack來進(jìn)行維序[18]。
在具體實(shí)現(xiàn)時(shí),不同的微結(jié)構(gòu)往往會(huì)導(dǎo)致不同的死鎖場(chǎng)景出現(xiàn)。圖4給出了一種死鎖場(chǎng)景,實(shí)現(xiàn)了AXI協(xié)議與NoC報(bào)文協(xié)議的轉(zhuǎn)換。AXI發(fā)出3個(gè)DMA寫請(qǐng)求,其中前面2個(gè)寫請(qǐng)求被重發(fā),第3個(gè)寫地址C的請(qǐng)求先進(jìn)入DCU流水線,并且對(duì)地址C的讀請(qǐng)求先于重發(fā)的請(qǐng)求進(jìn)入FIFO(First Input First Output)。此時(shí)死鎖依賴關(guān)系形成,WriteC依賴于 WriteA與WriteB,WriteA與WriteB依賴于ReadC,而ReadC因?yàn)榈刂窙_突依賴于WriteC。對(duì)于這種死鎖,可以通過修改微架構(gòu)來解鎖,比如分開處理讀事務(wù)與寫事務(wù),或者保證寫請(qǐng)求順序進(jìn)入DCU流水線。
Figure 4 An implementation related deadlock scenario圖4 一種基于特定實(shí)現(xiàn)的死鎖場(chǎng)景示意
除了上述可以通過修改微架構(gòu)避免的死鎖,微處理器系統(tǒng)中還可能存在一些無法避免的死鎖,如圖5所示。多個(gè)PCIe結(jié)點(diǎn)向多個(gè)DCU結(jié)點(diǎn)發(fā)送寫請(qǐng)求,地址分別為A與B。PCIe0先發(fā)出寫A地址的請(qǐng)求,后發(fā)出寫B(tài)地址的請(qǐng)求,且要求寫A地址先于寫B(tài)地址完成。PCIe1的行為則正好相反。A地址在DCU0中處理,B地址在DCU1中處理。在DCU0中,PCIe1的請(qǐng)求先處理,PCIe0的請(qǐng)求由于地址沖突,處于等待狀態(tài)。在DCU1中,PCIe0的請(qǐng)求先處理,PCIe1的請(qǐng)求由于地址沖突,處于等待狀態(tài)。經(jīng)過分析,可以看到形成一個(gè)如圖5所示的首尾相連的依賴圖,出現(xiàn)了死鎖。對(duì)于這種死鎖,無法通過修改微結(jié)構(gòu)來避免,但是可以通過修改事務(wù)處理機(jī)制來解決死鎖,使后續(xù)操作能夠恢復(fù)執(zhí)行。
Figure 5 Deadlock dependency between PCIe and DCU圖5 PCIe與DCU的死鎖依賴關(guān)系
鑒于第4節(jié)所述的死鎖無法避免的情況,本節(jié)首先設(shè)計(jì)實(shí)現(xiàn)一種高性能協(xié)議轉(zhuǎn)換模塊,負(fù)責(zé)將PCIe-AXI協(xié)議轉(zhuǎn)換為NoC網(wǎng)絡(luò)協(xié)議,如圖6所示;然后重點(diǎn)闡述死鎖檢測(cè)及死鎖撤銷機(jī)制的設(shè)計(jì)與實(shí)現(xiàn)。
Figure 6 Conversion module of PCIe and NoC protocol圖6 PCIe與NoC協(xié)議轉(zhuǎn)換模塊
轉(zhuǎn)換模塊分為讀處理模塊與寫處理模塊,讀處理模塊與寫處理模塊相對(duì)獨(dú)立,但是共享NoC通道。DCU模塊需要進(jìn)行配合設(shè)計(jì),防止死鎖產(chǎn)生。讀請(qǐng)求通道與寫請(qǐng)求通道都支持重發(fā)功能,報(bào)文存儲(chǔ)在內(nèi)部的重發(fā)緩沖中,事務(wù)完成后才被撤銷。讀寫請(qǐng)求分別支持128與64個(gè)并發(fā)請(qǐng)求,以獲得與16通道PCIe 4.0相匹配的帶寬。
對(duì)于不可避免的死鎖,首先檢測(cè)其發(fā)生;然后通過特殊方法打破死鎖依賴關(guān)系,將死鎖事務(wù)撤銷;最后將撤銷的事務(wù)重新恢復(fù)并執(zhí)行。圖7給出了死鎖處理狀態(tài)機(jī)。在工作/檢測(cè)模式狀態(tài)下,檢測(cè)邏輯一直監(jiān)聽模塊的接口與內(nèi)部狀態(tài)。如果模塊中有未完成的事務(wù),且接口及內(nèi)部狀態(tài)在一段時(shí)間內(nèi)處于不變狀態(tài),即可認(rèn)為可能發(fā)生了死鎖。本文通過一個(gè)16位寄存器表示最大檢測(cè)時(shí)間,且軟件可配置。當(dāng)檢測(cè)計(jì)數(shù)器達(dá)到最大檢測(cè)時(shí)間時(shí),觸發(fā)進(jìn)入撤銷模式。死鎖撤銷保存現(xiàn)場(chǎng),以特殊方式完成目前未完成的事務(wù),同時(shí)保證特殊完成的事務(wù)不影響系統(tǒng)狀態(tài),效果上是將目前的事務(wù)撤銷。在死鎖解除以后,死鎖處理狀態(tài)機(jī)進(jìn)入恢復(fù)模式,將之前撤銷的請(qǐng)求恢復(fù)進(jìn)入流水線,繼續(xù)執(zhí)行。
Figure 7 Deadlock handling state machine圖7 死鎖處理狀態(tài)機(jī)
在通常情況下,寫操作發(fā)出寫請(qǐng)求給DCU模塊,DCU如果可以接收數(shù)據(jù),則向I/O模塊返回?cái)?shù)據(jù)可接收標(biāo)志,然后I/O模塊將數(shù)據(jù)發(fā)送給DCU模塊。為了能夠?qū)?shù)據(jù)進(jìn)行撤銷,數(shù)據(jù)的發(fā)送需要依照請(qǐng)求發(fā)送次序進(jìn)行,否則可能導(dǎo)致后續(xù)數(shù)據(jù)先于前面數(shù)據(jù)寫入,導(dǎo)致前面數(shù)據(jù)無法進(jìn)行撤銷。
圖8為死鎖撤銷處理示意圖。請(qǐng)求發(fā)出以后,進(jìn)入寫數(shù)據(jù)Index FIFO,等待數(shù)據(jù)接收通知。如果FIFO頭部的請(qǐng)求接收到寫數(shù)據(jù)可接收的通知,則發(fā)出該請(qǐng)求對(duì)應(yīng)的數(shù)據(jù)。正常情況下,請(qǐng)求的Index按照先進(jìn)先出方式處理,后面的請(qǐng)求不能超越前面的請(qǐng)求,這也是死鎖依賴關(guān)系中的一環(huán)。進(jìn)入死鎖撤銷階段,寫數(shù)據(jù)Index FIFO自動(dòng)移位,接收到數(shù)據(jù)接收通知的請(qǐng)求移到FIFO頭部,并發(fā)送空數(shù)據(jù)給DCU模塊,DCU接收到空數(shù)據(jù)操作后,不會(huì)將數(shù)據(jù)寫入內(nèi)存,相當(dāng)于將當(dāng)前的寫操作撤銷。FIFO中其他請(qǐng)求在接收到數(shù)據(jù)接收通知后都進(jìn)行寫空數(shù)據(jù)操作。
Figure 8 Process of deadlock release圖8 死鎖撤銷處理示意圖
由于是2個(gè)PCIe模塊的請(qǐng)求產(chǎn)生死鎖,可以在一個(gè)轉(zhuǎn)換模塊中進(jìn)行報(bào)文撤銷,從而將死鎖依賴環(huán)中的一個(gè)依賴關(guān)系打破,進(jìn)而解除死鎖。
在寫操作被撤銷以后,這些請(qǐng)求必須重新恢復(fù)并重新執(zhí)行,圖9為報(bào)文恢復(fù)示意圖。由于存在重發(fā)機(jī)制,請(qǐng)求結(jié)點(diǎn)中的重發(fā)緩沖將所有未完成的請(qǐng)求信息都記錄下來,只需要增加一個(gè)取消報(bào)文Index FIFO。一個(gè)請(qǐng)求進(jìn)入轉(zhuǎn)換模塊以后,會(huì)同時(shí)進(jìn)入取消報(bào)文Index FIFO,當(dāng)請(qǐng)求完成以后,將對(duì)應(yīng)請(qǐng)求的Index從Index FIFO彈出。因此,取消報(bào)文Index FIFO中的請(qǐng)求實(shí)際上是當(dāng)前未完成的請(qǐng)求,也是撤銷階段被撤銷的報(bào)文。進(jìn)入報(bào)文恢復(fù)階段,將取消報(bào)文Index FIFO中的數(shù)據(jù)寫入請(qǐng)求報(bào)文Index FIFO;同時(shí)再次寫入取消報(bào)文Index FIFO,防止這些請(qǐng)求再次產(chǎn)生死鎖。
Figure 9 Process of message recovery圖9 報(bào)文恢復(fù)處理示意圖
為驗(yàn)證本文設(shè)計(jì)方法的有效性,在服務(wù)器芯片中對(duì)上述方法進(jìn)行了實(shí)現(xiàn),主要功能包括報(bào)文切分與協(xié)議轉(zhuǎn)換。報(bào)文切分模塊將PCIe發(fā)出的AXI報(bào)文切割成Cache行大小的報(bào)文,協(xié)議轉(zhuǎn)換將基于Cache行的AXI報(bào)文轉(zhuǎn)換成基于NoC的網(wǎng)絡(luò)報(bào)文。本文共實(shí)現(xiàn)了3個(gè)版本,版本1的讀寫并發(fā)個(gè)數(shù)分別為64與32,版本2的讀寫并發(fā)個(gè)數(shù)分別為128和64,版本3在版本2的基礎(chǔ)上增加了死鎖檢測(cè)與撤銷的功能。3個(gè)版本設(shè)計(jì)的頻率均能達(dá)到2.5 GHz以上,面積比較如表1所示。實(shí)驗(yàn)結(jié)果表明,面積增加主要是由讀寫并發(fā)數(shù)增加導(dǎo)致的,而死鎖檢測(cè)及撤銷對(duì)面積影響不大。
表1 3種版本面積比較(單元數(shù))Table 1 Area comparison(Cell counts)
基于版本3對(duì)死鎖檢測(cè)與死鎖撤銷功能進(jìn)行測(cè)試,如圖10所示。圖10中共出現(xiàn)了4次死鎖及死鎖處理。死鎖產(chǎn)生以后,死鎖檢測(cè)計(jì)數(shù)器計(jì)數(shù)到最大值,然后進(jìn)入死鎖撤銷狀態(tài)。死鎖撤銷過程中,轉(zhuǎn)換模塊與DCU之間進(jìn)行交互,寫入無效數(shù)據(jù)。死鎖撤銷以后,死鎖恢復(fù)操作將取消的請(qǐng)求恢復(fù)到流水線繼續(xù)執(zhí)行。
Figure 10 Flow of message processing圖10 報(bào)文處理流程圖
本節(jié)對(duì)版本1與版本3的性能進(jìn)行了測(cè)試。版本1的讀寫帶寬均達(dá)到17 GB/s左右,而版本3的讀寫帶寬均達(dá)到30 GB/s左右。圖11給出了版本3 DMA讀帶寬示意圖,可以看出DMA讀數(shù)據(jù)基本處于滿負(fù)荷狀態(tài)傳輸。對(duì)性能進(jìn)一步分析,在相同的環(huán)境下,讀寫并發(fā)個(gè)數(shù)與網(wǎng)絡(luò)帶寬成正比;此外,版本3的128個(gè)讀并發(fā)數(shù)與64個(gè)寫并發(fā)數(shù)存在稍微過剩的問題。但是在實(shí)際系統(tǒng)中,由于訪存延遲的不確定性與訪存沖突的存在,DMA延遲可能增大,讀寫并發(fā)數(shù)目稍大一些有利于DMA性能的穩(wěn)定性。
Figure 11 DMA read bandwidth without address conflict圖11 無地址沖突情況下DMA讀帶寬示意
對(duì)2個(gè)PCIe同時(shí)進(jìn)行DMA讀寫測(cè)試,在地址無沖突請(qǐng)求下,每個(gè)16通道 PCIe 4.0的DMA讀寫帶寬基本達(dá)到28 GB/s~29 GB/s,滿足設(shè)計(jì)需求,同時(shí)表明整個(gè)DMA通路上不存在系統(tǒng)瓶頸。如果PCIe讀寫之間、PCIe與PCIe之間、PCIe與CPU之間訪問相同地址,系統(tǒng)沖突增加,DMA帶寬將受到一定的影響。圖12給出一種存在沖突情況下的DMA讀寫帶寬示意,總體帶寬約為21 GB/s。從圖12中可以看出,在數(shù)據(jù)沖突較多的情況下,數(shù)據(jù)通道的利用率較低,帶寬也有所降低;在數(shù)據(jù)沖突較少的情況下,數(shù)據(jù)通道的利用率逐漸增大,帶寬能夠提升至30 GB/s。
Figure 12 DMA read and write bandwidth with address conflict圖12 地址沖突情況下DMA讀寫帶寬示意
本文針對(duì)高性能處理器I/O帶寬受限問題,研究了片上網(wǎng)絡(luò)優(yōu)化技術(shù),給出了一種高帶寬片上網(wǎng)絡(luò)設(shè)計(jì)指導(dǎo)方法,以更好地匹配不斷增加的I/O種類及I/O帶寬。針對(duì)復(fù)雜網(wǎng)絡(luò)存在死鎖的問題,提出一種死鎖檢測(cè)及死鎖解除的方法,有效提升了系統(tǒng)的魯棒性。采用死鎖解除的方法能夠最大限度地減少網(wǎng)絡(luò)設(shè)計(jì)及運(yùn)行時(shí)的約束,提升I/O性能。最后,基于高性能處理器對(duì)提出的方法進(jìn)行驗(yàn)證,實(shí)驗(yàn)結(jié)果表明,本文提出的網(wǎng)絡(luò)優(yōu)化方法能夠有效地提升I/O性能。本文的研究成果能夠應(yīng)用到更復(fù)雜或I/O性能要求更高的其他高性能處理器中,具有較為廣泛的應(yīng)用前景。