摘要:針對NIC芯片資源和面積受限的特點,設計了一種資源占用少的多VP共享緩沖區(qū)的描述符提交機制DAMQ-PD,設計了地址隊列記錄每個數據的存儲地址,結合每個VP的頭尾指針,將各VP分散存儲于共享緩沖區(qū)的數據鏈接起來,實現了寫、讀數據的流水操作.設計了啟發(fā)式信用管理機制HCM,按需動態(tài)給各VP分配信用,自動在PIO和DMA這兩種描述符提交方式間切換,避免無信用可分配時可能造成對用戶進程的阻塞.分析和模擬結果表明,DAMQ-PD資源占用少、緩沖區(qū)利用率高、讀寫流水、消息發(fā)射率高,滿足了用戶進程提交描述符對低延遲和大容量的性能要求.
關鍵詞:描述符;DAMQ;信用管理;PIO;DMA;消息發(fā)射率;低延遲
中圖分類號:TP338 文獻標識碼:A
An Unblocking Descriptor Injection Method
Based on Multi-VP Shared Buffer
LIU Lu, ZHANG He-ying, ZHANG Lei, CAO Ji-jun, DAI Yi
(College of Computer, National Univ of Defense Technology, Changsha, Hunan 410073, China)
Abstract: This paper proposed a novel multi-VP shared buffer named DAMQ-PD with mixed PIO and DMA for descriptor injection on NIC chip to decrease the memory and area requirement of statically allocating buffer among multiple virtual ports (VP). An address queue was used to record the address of every data in the shared buffer. Combining each VP's head pointer and tail pointer, each VP's data can be linked in the shared buffer according to input sequence. By doing so, pipelining reading and writing of the shared buffer can be implemented. A heuristic credit management method was also proposed to distribute credits according to the need of each VP, which can automatically switch descriptor injection method from PIO to DMA or vice versa, thus avoiding block execution of user process when no credit is available. Analyses and simulations show that DAMQ-PD achieves high buffer utilization, pipelining write and read, high message issue rate, thus satisfying the low latency and large capacity performance requirement of descriptor injection on NIC.
Key words: descriptor; DAMQ; credit management; PIO; DMA; message issue rate; low latency
處理器時鐘頻率達到4 GHz后,再依賴減小尺寸提升主頻來提高處理器性能的做法變得越來越困難,業(yè)界轉而利用在單處理器芯片上集成多個核,通過提高并行執(zhí)行度來提升處理器的性能.VLSI工藝的進步支持這種技術路線的演進.依靠核數的堆疊,處理器的性能一直在持續(xù)攀升,并將繼續(xù)按摩爾定律發(fā)展.
隨著單個處理器及單個計算結點的計算性能不斷提高,集成了成千上萬個計算結點的HPC(High Performance Computer)的峰值性能也不斷提高,但是由于技術和成本等原因,HPC的訪存性能、I/O性能和互連網絡性能的提升速度卻遠低于計算性能提升的速度,導致強大的計算能力與較低的訪存能力、I/O能力和結點間通信能力之間的不匹配,實際運行的大型并行應用程序的并行效率一般不超過HPC峰值性能的20%[1],大量的計算能力和功耗白白浪費了,這就是目前制約HPC發(fā)展的“存儲墻”“I/O墻”和“通信墻”問題.
近期的HPC系統(tǒng)中[2-6],連接結點的互連網絡的點點帶寬約為10 GB/s,延遲約為700 ns,遠不能滿足通信密集型并行應用程序的通信開銷和同步開銷對通信性能的要求.對比近期HPC計算結點訪存帶寬約為50 GB/s,訪存延時約為幾ns,結點的“通信/計算比”遠小于結點的“訪存/計算比”,互連網絡成了限制HPC并行性能發(fā)揮的瓶頸.為了應對互連網絡面臨的嚴峻挑戰(zhàn),人們對互連網絡進行了大量深入研究,使互連網絡成為HPC領域的研究熱點.
互連網絡的通信性能直接影響并行計算的加速比和效率.帶寬、延遲和消息發(fā)射率是評價互連網絡性能的主要指標,其中延遲和消息發(fā)射率指標直接影響小粒度消息和結點間同步通信的性能.消息的通信延遲可用下式表示:Tcomm=Ts+Tt+Tr.式中,Tcomm是消息的通信延遲,Ts是啟動開銷,Tt是傳輸延遲,Tr是接收開銷.Tt為消息長度除以帶寬并加上傳輸線路的延時,Ts和Tr >> Tt,取決于通信機制及其實現.從上式可看出,為了降低互連網絡的通信延遲,努力減小消息傳輸的啟動開銷是極其關鍵的.
1 兩種描述符提交機制的比較
用戶進程通常向網絡接口卡(NIC,Network Interface Card)提交描述符啟動一個消息的傳輸.一個描述符由消息傳輸的類型、長度、源地址、目的地址和控制信息等組成,描述符本身是變長的,一般大于16字節(jié),不超過128字節(jié).傳統(tǒng)的通信機制[7-8]采用DMA方式將描述符提交到NIC,如圖1所示.
從圖1可以看出,采用DMA方式提交描述符發(fā)送一個消息需要9個步驟:①在主存中準備好數據;②在主存中準備好描述符;③執(zhí)行PIO寫向NIC置門鈴標志;④轉入描述符預取邏輯;⑤NIC啟動DMA讀描述符;⑥描述符傳回NIC;⑦NIC啟動DMA讀消息數據;⑧數據傳回NIC;⑨NIC發(fā)送數據.這種復雜的描述符提交過程明顯增加了消息傳輸的啟動開銷,尤其不利于長度只有幾到幾十字節(jié)的小粒度消息的傳輸延遲性能.
DMA方式提交描述符需要執(zhí)行1次PIO寫+1次DMA讀才能把描述符提交給NIC.跨越I/O總線的DMA讀的延遲很大, PCIE2.0總線約費時600 ns,HT2.0總線約費時500 ns,占據了啟動開銷的大部分.經過研究,人們提出了改進方法,采用PIO方式提交描述符,以期減小啟動開銷,如圖2所示.
從圖2可以看出,采用PIO方式提交描述符發(fā)送一個消息的處理過程減少為6個步驟:①在主存中準備好數據;②執(zhí)行數次PIO寫,把描述符寫入NIC;③轉入描述符處理邏輯;④NIC啟動DMA讀消息數據;⑤數據傳回NIC;⑥NIC發(fā)送數據.對比DMA方式提交描述符,PIO方式提交描述符多執(zhí)行了幾次PIO寫,但減少了1次DMA讀操作.幾次PIO寫可以利用處理器提供的寫合并機制[9]進行合并,只比1次PIO寫增加了少許時延,遠小于1次DMA讀的費時,采用PIO方式提交描述符無疑是啟動開銷最小的描述符提交方式.在圖2中,進程直接把描述符寫入NIC,NIC消費描述符的速度一般慢于進程注入描述符的速度,NIC需要配置一定容量的緩沖區(qū)用于緩存不能及時處理的描述符,進程與NIC間基于信用對描述符的提交進行流控.
對比DMA和PIO這兩種描述符提交方式,雖然DMA方式的消息啟動開銷大,但DMA方式有一個優(yōu)勢,它的描述符發(fā)送隊列設置在計算結點的主存中,可根據需要把容量設置得很大,有能力容納用戶進程突發(fā)性提交大量的描述符,不會阻塞進程的執(zhí)行.使用PIO方式時,由于硬件資源的限制,NIC上設置的描述符緩沖區(qū)的容量是有限的,遠小于DMA方式描述符發(fā)送隊列的容量,很容易就被寫滿了,當NIC上描述符緩沖區(qū)已滿而用戶進程仍有描述符要提交時,就會阻塞用戶進程的執(zhí)行,并且用戶進程會循環(huán)地執(zhí)行PIO讀查詢NIC的描述符緩沖區(qū)是否非滿以決定能否提交描述符,而這種操作將會擠占I/O總線的帶寬,削弱消息數據的傳輸能力.因此有必要設計一種新的描述符提交機制,能綜合DMA和PIO兩種描述符提交方式的優(yōu)點,既能得到最小的描述符提交延遲,又能滿足用戶進程對描述符緩沖區(qū)的大容量需求.
用戶級通信使用虛端口(Virtual Port,以下簡稱VP)機制虛擬化NIC硬件通信資源,用戶進程直接訪問與之映射的VP與NIC進行交互,旁路操作系統(tǒng),減少通信操作的軟件層開銷.每個VP要占用一定的硬件資源,NIC支持的VP數不是越多越好,但一般應大于計算結點所包含的全部處理器的核數之和.當NIC支持的VP數較少時,可為每個VP設置獨立的、相互隔離的描述符緩沖區(qū),或者將一個緩沖區(qū)靜態(tài)分割為獨立的區(qū)域,為每個VP分配固定的區(qū)域.這種靜態(tài)分配多隊列SAMQ (Statically Allocated Multiple-queue)結構的優(yōu)點是實現簡單,有利于緩沖區(qū)讀寫控制、描述符消費公平仲裁調度及VP信用管理的硬件邏輯實現.缺點是緩沖區(qū)利用率不高,尤其在VP之間描述符注入流量不均衡的情況下,注入描述符少的VP即使有空閑的緩沖區(qū)也不能被注入描述符多的VP使用.
隨著HPC峰值性能的快速提高,需要提高系統(tǒng)組裝密度以避免系統(tǒng)中機柜數的爆炸式增長,單個計算結點內集成的處理器個數越來越多,從以前的2個增加到4~8個,處理器的核數也越來越多,目前正從8~10核向更多發(fā)展,這勢必要求NIC支持更多的VP數.在這種情況下,為VP靜態(tài)分配獨占的描述符緩沖區(qū),將會占用大量的芯片存儲資源和面積資源,增加芯片的功耗.為了減少資源占用,提高緩沖區(qū)利用率,有必要考慮實現多VP共享描述符緩沖區(qū).
文獻[10]介紹了一種應用于互連網絡中交換機或路由器的多VC(Virtual Channel)動態(tài)共享緩沖區(qū)機制DAMQ-PF,所有VC的flit數據被隨機緩存在共享緩沖區(qū)中,并額外設置了與共享緩沖區(qū)相同深度的地址緩沖區(qū)和空閑地址緩沖區(qū),用于記錄各VC下一個flit的存放地址,提供新flit將寫入的地址.每個VC都維護了一個地址鏈表,可把隨機存放在共享緩沖區(qū)的該VC的flit數據順序讀出.DAMQ-PF機制資源占用少、緩沖區(qū)利用率高、讀寫延遲低、吞吐率高,可滿足基于flit交換的片上網絡的性能要求.本文對DAMQ-PF機制加以改進,提出了一種混合PIO和DMA多VP共享緩沖區(qū)的描述符提交機制DAMQ-PD(DAMQ with PIO DMA),可實現對多VP共享的描述符緩沖區(qū)的連續(xù)寫、連續(xù)讀,具有低延遲高吞吐率的特征.信用管理模塊負責總發(fā)送信用的動態(tài)計算和實時分配,對描述符的PIO提交進行流控.各VP在主存中設置獨占的描述符發(fā)送隊列,當PIO方式耗盡發(fā)送信用時,進程轉而使用DMA方式提交描述符,將描述符寫入主存描述符發(fā)送隊列,再由NIC使用DMA方式把描述符讀回NIC,克服了單純使用PIO提交描述符可能產生的進程阻塞問題.
本文其余部分的組織結構如下:第2節(jié)詳細介紹DAMQ-PD機制各部分的實現,第3節(jié)介紹該機制的性能分析與模擬結果;第4節(jié)給出結論.
2 DAMQ-PD機制的原理及實現
以4個VP為例,介紹DAMQ-PD的結構和原理.結構框圖如圖3所示,主要包括下列功能模塊:1)共享緩沖區(qū),存儲描述符數據;2)地址隊列,存放下一個數據的存儲地址;3)空閑地址隊列,存放未使用的共享緩沖區(qū)單元地址;4)共享緩沖區(qū)的寫管理;5)共享緩沖區(qū)的讀仲裁;6)信用管理;7)描述符預取邏輯;8)預取緩沖區(qū),存放預取回的描述符數據.
通常將硬件邏輯中每個時鐘周期傳輸和存儲的寬度固定的一幀數據稱為一個flit.每個描述符可以是變長的,一般由多個flit組成.為簡化設計,本文中假定描述符是定長的,由4個flit組成,每個flit有256 bit.DAMQ-PD的存儲單位是flit.
用戶進程使用PIO方式提交描述符時,組成描述符的4個flit在用戶進程中是連續(xù)且順序執(zhí)行PIO寫操作的,但并不能保證4個flit到達NIC時是順序寫入的.CPU的仲裁邏輯對多個核并發(fā)執(zhí)行的多個PIO寫的串行化處理、進程的上下文切換都可能導致寫入NIC共享緩沖區(qū)的描述符flit在時間和空間上的不連續(xù)性.
NIC從共享緩沖區(qū)讀出描述符時,則必須連續(xù)讀出同一VP的4個flit,組成一個完整的描述符,再進行后續(xù)處理.各VP間按round-robin法則管理共享緩沖區(qū)描述符數據的讀出.
2.1 共享緩沖區(qū)和地址隊列
圖3 中的共享緩沖區(qū)用來存儲外部輸入的flit數據,地址隊列用于存放屬于同一VP的下一個flit在共享緩沖區(qū)中的存放地址.共享緩沖區(qū)和地址隊列的關系見圖4.
圖4中,flit_ij表示VPi 的第j個flit,addr_i(j+1) 表示VPi 的第j+1個flit的存放地址.共享緩沖區(qū)和地址隊列采用相同的讀寫指針,寫某個地址時,把flit寫入這個地址指向的共享緩沖區(qū)中,同時把這個地址值寫入該VP上一個flit的存放地址指向的地址隊列中.當讀某個地址時,不僅讀出了這個地址存放的flit,同時還讀出了同一VP下一個flit的存放地址,這樣,同一VP的flit被按照FIFO的順序鏈接起來,而flit在共享緩沖區(qū)中的存儲位置是離散的.
共享緩沖區(qū)用SRAM-R存儲器(輸出寄存)實現.常用的SRAM-R存儲器具有一個寫端口和一個讀端口,這兩個端口采用相同的時鐘.主要信號包括:寫地址,寫數據,寫使能,讀地址,讀數據,讀使能等.目前SRAM-R的工作頻率高達800 MHz~1 GHz,其讀數據的時序見圖5(a),讀使能和讀出的數據之間有一個時鐘周期的間隔.
地址隊列用寄存器組實現,其讀數據的時序見圖5(b),讀地址有效的當拍讀出的數據有效.從地址隊列讀出的地址數據經過一級寄存器輸出,共享緩沖區(qū)可以在讀操作的下一拍得到新的讀地址,能夠實現對共享緩沖區(qū)中同一VP數據的連續(xù)讀操作,見圖5(c).共享緩沖區(qū)和地址隊列容量大,工作頻率高,讀寫控制邏輯的輸入時間余量很小,而讀寫控制信號在送入共享緩沖區(qū)和地址隊列前要經過多級復雜的組合邏輯,如帶優(yōu)先級的多選一操作,ECC等.為了確保DAMQ-PD在物理上能夠實現,讀寫控制信號都經過一級寄存器輸出到共享緩沖區(qū)和地址隊列.
共享緩沖區(qū)和地址隊列的寫入邏輯的結構框圖如圖6所示.圖中尾指針的含義見2.2節(jié).
2.2 頭尾指針和flit計數器
為每個VP設置了一個頭指針和尾指針,一個flit計數器.頭指針指向共享緩沖區(qū)中屬于該VP的第一個flit的地址,尾指針指向共享緩沖區(qū)中屬于該VP的最后一個flit的地址,flit計數器記錄共享緩沖區(qū)中屬于該VP的flit的個數.尾指針指向的地址隊列單元保存的該VP的下一個flit的存放地址,在下一個flit未寫入前是無效的,要等到下一個flit寫入時才被更新.例如,某VP有4個flit存放在共享緩沖區(qū)中時,頭尾指針與flit計數器的取值見圖7.
初始化時,頭指針和尾指針都是無效值,flit計數器為0.flit計數器依賴共享緩沖區(qū)的寫使能和讀使能及對應的VP號來更新其計數值.當flit寫入共享緩沖區(qū)時,寫地址等于空閑地址隊列當前輸出的空閑地址值,寫使能有效時,用空閑地址值更新尾指針(用VP號選擇),并將空閑地址值寫入尾指針指向的地址隊列中,需要特別說明的是,當flit計數器等于零時,尾指針是無效值,這時空閑地址值不能寫入尾指針指向的地址隊列.實際上當flit計數器等于1且同時讀使能有效時,空閑地址值也不用寫入,但寫了也不會發(fā)生錯誤.頭指針的更新比較復雜,有兩個來源,一是寫入該VP的第一個flit時要用空閑地址值更新頭指針,這里包含曾經寫入過但已全部讀走后又寫入第一個flit的情況;二是讀邏輯讀完了一個描述符所包含的4個flit后,用第4個flit對應的地址隊列的值更新頭指針.要注意的是,如果共享緩沖區(qū)中已沒有該VP的flit,則第4個flit對應的地址隊列的值是無效值,如果正好在這個時刻有一個該VP的flit被寫入,必須用空閑地址值更新頭指針.
2.3 空閑地址隊列
空閑地址隊列用于存放共享緩沖區(qū)的空閑單元地址,采用寄存器陣列實現,組織為FIFO的形式.
空閑隊列需要進行初始化,在復位結束后,共享緩沖區(qū)的所有地址均為空閑區(qū)域,需要寫入到空閑隊列中.當有數據寫入到共享緩沖區(qū)時,需要讀空閑隊列,獲得一個空閑地址,用于存放寫入的數據;當數據從共享緩沖區(qū)讀出時,需要將該數據占用的地址釋放,保存到空閑隊列中.
空閑地址隊列具有一個寫端口和一個讀端口,這兩個端口采用相同的時鐘.主要接口信號包括:寫使能,寫數據,讀使能,讀輸出數據等.空閑地址隊列是順序讀寫的,內部實現了讀地址寄存器和寫地址寄存器,分別依賴讀寫使能信號遞增加1,這種實現方式保證了只要空閑地址隊列非空,總有一個合法的空閑地址輸出,當有flit寫入到共享緩沖區(qū)時,總可以當拍得到一個空閑地址,保證了flit寫入共享緩沖區(qū)的零延遲和流水操作.空閑地址隊列的讀使能信號(也就是共享緩沖區(qū)的寫使能信號)的作用只是將讀地址寄存器加1,讓空閑地址隊列下一拍輸出一個新的空閑地址.
2.4 共享緩沖區(qū)的讀仲裁
仲裁器需要實現的功能是,各VP的flit計數器≥4時發(fā)出讀共享緩沖區(qū)的請求,仲裁器采用帶優(yōu)先級的round-robin方式進行調度,每次僅允許一個VP訪問共享緩沖區(qū),每次連續(xù)讀出該VP的4個flit.具體仲裁方式是:
1)根據當前仲裁結果,決定4個VP的優(yōu)先級.在當前仲裁中勝出時,正在讀SRAM的VP優(yōu)先級變?yōu)樽畹?例如當前仲裁結果是VP0,則下次仲裁時VP1,VP2,VP3的優(yōu)先級都高于VP0,而且優(yōu)先級從高到低依次為:VP1>VP2>VP3>VP0.
2)根據當前VP的讀請求,以及各VP的優(yōu)先級計算仲裁結果.若高優(yōu)先級的VP無請求,則調度優(yōu)先級次之的VP,以此類推.
3)返回1),重復.
最終結果是只要有VP發(fā)出讀共享緩沖區(qū)的請求,仲裁器必然會允許某個VP的讀請求.如果有一個VP發(fā)出讀請求,該VP被允許;如果有多個VP發(fā)出讀請求,其中優(yōu)先級最高的VP被允許.可以在讀當前VP的flit的同時,仲裁下一個要讀的VP,這樣可以流水地讀出共享緩沖區(qū)的flit.
2.5 信用管理與PIO/DMA方式的切換
基于信用的流控是一種常用的流控方式,基本工作原理是:數據的發(fā)送方有發(fā)送信用才可以發(fā)送數據,每發(fā)送一個數據,發(fā)送方的信用減1;當數據從緩沖區(qū)中讀走時,反饋給發(fā)送方增加信用的信息,發(fā)送方收到反饋信息之后,將信用加1.信用管理機制決定如何在共享同一緩沖區(qū)的VP之間分配緩沖區(qū)空間.
本文所述的DAMQ-PD機制中,數據發(fā)送方是用戶進程,與NIC間隔著I/O總線,訪問延遲大,軟硬間交互復雜,難于實時把釋放的信用主動反饋到用戶進程.可行的做法是NIC上設置一個總的信用池,負責共享緩沖區(qū)信用的初始化、分配和回收.用戶進程初始化VP時,以及VP的發(fā)送信用耗盡時,執(zhí)行PIO讀,向NIC申請信用,NIC根據一定的算法,從信用池中分配給VP可用的信用,作為PIO讀響應返回用戶進程.如果沒有信用可分配,就返回零值.
當有發(fā)送信用時,用戶進程使用PIO方式提交描述符.當信用耗盡時,用戶進程執(zhí)行PIO讀向NIC重新申請信用,若返回了非零信用值,則用戶進程繼續(xù)使用PIO方式提交描述符;若返回零值,則用戶進程轉而使用DMA方式提交描述符.
我們提出了一種啟發(fā)式信用管理機制(Heuristic Credit Management,簡稱HCM),其基本的信用分配原則是先申請先得,在相對公平的同時,將信用較多地分配給那些提交較多描述符的VP.
HCM設置了VP計數器VPCnt,用來記錄當前活躍的VP數.VPCnt由軟件配置,可在使用過程中修改,1≤VPCnt≤N,N=總VP數.HCM設置信用計數器CrCnt表示共享緩沖區(qū)信用池當前未分配的信用值,設置單次最小分配閾值CrMin表示每次分配給某個VP的信用值應盡量大于CrMin.基本的信用管理算法如下:
一旦轉入DMA方式,不管信用池是否有信用,對各VP的信用申請一律返回0值.這時,信用池回收的信用值用于把預取回的描述符flit從預取緩沖區(qū)轉移到共享緩沖區(qū).這在某種程度上提供了一種公平性,讓描述符大致按提交的先后順序進入共享緩沖區(qū).DMA方式時,共享緩沖區(qū)中已累積了大量的描述符,預取描述符的過程與共享緩沖區(qū)中描述符的處理過程重疊,不會額外增加消息的延遲.有下列3種情形之一的,HCM即判斷正在使用DMA方式:1)任一DQ_Numn非零;2)預取緩沖區(qū)非空;3)有掛起的預取描述符請求,即已發(fā)出了讀描述符的請求,而讀響應還未返回.HCM把所有DMA方式提交的描述符都預取回NIC并全部轉移到共享緩沖區(qū)后,就從DMA方式轉換回PIO方式,又可以向各VP的信用申請返回信用了.PIO方式與DMA方式間的狀態(tài)轉換如圖8所示.
使用PIO方式時,活躍VP數VPCnt由軟件動態(tài)配置,HCM把當前信用值CrCnt按活躍VP數VPCnt均分,返回給當前的信用請求,當均分的信用值小于最小分配閾值CrMin時,將所有剩余信用值全部返回給當前申請信用的VP.這種依據活躍VP數動態(tài)分配信用的方法即稱為啟發(fā)式信用管理機制.
HCM的接收方是共享緩沖區(qū),操作比較簡單.當接收到數據時,在共享緩沖區(qū)中分配位置,保存數據;當數據被讀出時,釋放的信用都被信用池CrCnt回收.
2.6 預取緩沖區(qū)
NIC設置了一個預取緩沖區(qū),用來存放預取回的描述符flit.NIC的每次預取操作讀回一個完整的描述符,即4個flit,先存入預取緩沖區(qū),等待有信用時,再寫入共享緩沖區(qū).向共享緩沖區(qū)寫入預取回來的描述符flit要消耗信用池的信用.
為防止PCIE數據通道死鎖,預取回的flit必須無阻塞寫入預取緩沖區(qū),HCM設置了掛起請求計數器PindingCnt(以描述符為單位),用于記錄已發(fā)出預取指令,還沒有收到響應的請求的個數,設當前預取緩沖區(qū)的空閑空間為IdleCnt(以flit為單位),HCM只有在預取緩沖區(qū)有空閑空間,即IdleCnt-PindingCnt * 4≥4時才能啟動新的DMA預取請求.
當有的VP轉入DMA方式時,可能有的VP還有信用,仍然使用PIO方式提交描述符,把描述符flit從預取緩沖區(qū)讀出再寫入共享緩沖區(qū)時,必須保證PIO通道和預取緩沖區(qū)通道對共享緩沖區(qū)的寫訪問是互斥的,HCM使用仲裁器來調度PIO通道和預取緩沖區(qū)通道對共享緩沖區(qū)的交替寫訪問.
2.7 描述符預取
DMA方式提交的描述符保存在主存的描述符發(fā)送隊列中.描述符發(fā)送隊列是每個VP獨享的存儲空間,按FIFO組織,大小可變,其上界地址和下界地址NIC可見, NIC上設置了描述符個數計數器DQ_Numn(n=1,2,…,N),N=總VP數,用于記錄每個VP在描述符發(fā)送隊列中存放的描述符個數;設置了讀指針DQ_RdPtrn (n=1,2,…,N),用于記錄NIC下一次使用DMA方式讀描述符的地址.用戶進程每次向描述符發(fā)送隊列寫入一個描述符后,緊接著執(zhí)行PIO寫,通知NIC將對應的DQ_Num加1(即圖1的第③步置門鈴標志),而NIC每次從描述符發(fā)送隊列讀回一個描述符,就將相應的DQ_Num減1,只要DQ_Num非零,NIC就知道對應的VP有描述符需要預取.
DAMQ-PD也使用round-robin方式調度各VP間的描述符預取.
3 性能分析和模擬結果
我們用verilog實現了DAMQ-PD機制,分析了DAMQ-PD緩沖區(qū)的利用率、資源占用等性能,并與SAMQ進行對比.給出了讀寫速度等時序圖,分析和模擬結果表明DAMQ-PD的讀寫具有全流水、高吞吐率的特點.
假設有N個VP共享緩沖區(qū),SAMQ為每個VP分配的緩沖區(qū)深度為M,DAMQ-PD分配的共享緩沖區(qū)深度為P,每個VP的主存描述符發(fā)送隊列深度為Q.在NIC中,SAMQ需要的存儲單元數目為N*M,DAMQ-PD需要的存儲單元數目為P.SAMQ中每個VP能夠發(fā)送的最大flit數目為M+Q,DAMQ-PD中每個VP能夠發(fā)送的最大flit數目為P+Q.
3.1 緩沖區(qū)占用的資源
當緩沖區(qū)的存儲單元數目相同時,假設為N*M個,即N*M=P.若N>1,則M
3.2 緩沖區(qū)利用率
假設某個時段內有n個VP需要發(fā)送數據,n 上述性能基本上都是DAMQ-PD的信用管理機制決定的,在DAMQ-PD的實現中,為最大限度使用共享緩沖區(qū),信用分配采取按需分配,先申請先得的原則,沒有按通常的做法為每個VP預留私有信用,某個VP如果沒有信用了,就自動從PIO方式轉入DMA方式提交描述符,不會因等待信用而阻塞描述符的提交或“餓死”某個VP. 3.3 讀寫性能 本節(jié)將測試多個VP提交描述符時DAMQ-PD的輸入速率和輸出速率.各VP同時開始提交描述符,每個時鐘周期在[0,3]之間產生一個隨機數k,相應地,VPk將數據k寫入NIC.在共享緩沖區(qū)的輸出端,如果某個VP在共享緩沖區(qū)中有不少于4個數據,將被讀出,每次連續(xù)讀出某個VP的4個數據. 如圖9所示,模擬結果表明,只有在起始的十幾拍周期內,由于要保證輸出描述符的原子性,各VP的flit數達到4才能參與輸出仲裁,出現了少許的輸出空白期,在之后的周期,只要輸出速率等于輸入速率,那么DAMQ-PD的數據寫入和數據讀出都是流水的. 3.4 消息發(fā)射率 消息發(fā)射率定義為NIC在單位時間內能處理消息的最大數目,反映了NIC對小粒度消息的支持能力.配置NIC內部時鐘頻率為500 MHz,數據寬度256位,共享緩沖區(qū)深度為1 024,以16lane PCIE3.0總線連接HOST,工作頻率8 GHz,總的單向帶寬為16 GB/s.如果軟件執(zhí)行PIO寫能達到PCIE3.0的最大帶寬,折算到NIC中,大致相當于每4拍向共享緩沖區(qū)中寫入1個描述符.假設NIC最快每4拍可以處理一個描述符,則理論上消息發(fā)射率最大為125 M/s.使用不同VP數模擬得到的消息發(fā)射率如表1所示.可以看出,只要VP數大于等于2,DAMQ-PD的消息發(fā)射率都基本接近理論上限值125 M/s.VP數=1時,消息發(fā)射率只有96 M/s,這是因為用戶進程要等信用值耗盡才向NIC申請新的信用,而一次PIO讀需耗時600 ns,在這個時間段用戶進程不能發(fā)送描述符,降低了消息發(fā)射率.而使用多VP時,單個VP申請信用的過程可以與其他VP提交描述符的過程重疊,不會降低總的消息發(fā)射率. 將DAMQ-PD的模擬結果與Cray最新的XC系列互連網絡的Aries NIC芯片的消息發(fā)射率進行比較.Aries NIC采用PCIE 3.0總線與HOST連接.表1中Aries NIC的消息發(fā)射率數據取自文獻[4].可以看出,當只有一個進程向Aries NIC注入消息時,其消息發(fā)射率僅能達到7.5 M/s;有4個進程同時注入消息時,能達到25 M/s;當活躍進程數為21時,才能達到最大的消息發(fā)射率120 M/s.對比可知,DAMQ-PD與Aries NIC的最大消息發(fā)射率相當,但DAMQ-PD僅在使用少數VP時就能達到最大消息發(fā)射率,性能優(yōu)于Aries NIC. 4 結 論 面向片上網絡應用設計了一種讀寫全流水高吞吐率的多VP共享緩沖區(qū)機制DAMQ-PD,綜合了PIO和DMA兩種描述符提交方式的優(yōu)點.分析和測試結果表明,DAMQ-PD在資源占用、緩沖區(qū)利用率、讀寫效率等方面具有良好的性能.對基于通用I/O總線與主機連接的NIC,在不同的VP使用數、不同的流量模式下,均能獲得最小的描述符注入開銷,且不會阻塞用戶進程的執(zhí)行.DAMQ-PD物理實現簡單,能較方便地擴展到更多VP數的應用中.目前,DAMQ-PD已經被應用于自研的新一代高性能互連網絡接口芯片中,滿足了多VP提交描述符對低延遲和大容量的性能要求. 參考文獻 [1] 袁偉,張云泉,孫家昶,等.國產萬億次機群系統(tǒng)NPB性能測試分析[J].計算機研究與發(fā)展,2005,42(6):1079-1084. YUAN Wei, ZHANG Yun-quan, SUN Jia-chang, et al. Performance analysis of NPB benchmark on domestic tera-scale cluster systems[J]. Journal of Computer Research and Development, 2005, 42(6): 1079-1084.(In Chinese) [2] BARIGHTWELL R, PEDRETTI K T, UNDERWOOD K D. Seastar interconnect: balanced bandwidth for scalable performance[J]. IEEE MICRO, 2006, 26(3): 41-57. [3] ALVERSON R, ROWETH D, KAPLAN L. The gemini system interconnect[C]//Proceedings of IEEE 18th IEEE Annual Symposium on High Performance Interconnects. New York: IEEE, 2010: 83-87. [4] ALVERSON R, FROESE E, KAPLAN L, et al. Cray XC Series Network[EB/OL].[2012]http://www.cray.com.Seattle: Cray Inc, 2012. [5] YUICHIRO A, YUZO T, TOMOHIRO I, et al. The tofu interconnect[C]//Proceedings of 2011 IEEE 19th Annual Symposium on High Performance Interconnects. New York: IEEE, 2011:87-94. [6] CHEN D, EISLEY N A, HEIDELBERGER P, et al. The IBM Blue Gene/Q interconnection network and message unit[C]//Proceedings of 2011 International Conference for High Performance Computing, Networking, Storage and Analysis. New York: ACM, 2011: 1-10. [7] 肖立權,張民選.虛擬接口結構分析與研究[J].計算機工程與科學,2001,23(6):77-80. XIAO Li-quan, ZHANG Min-xuan. Analysis and research of the virtual interface architecture[J]. Computer Engineering Science, 2001,23(6): 77-80.(In Chinese) [8] 戴斌,孫志剛,盧澤新.基于DMA引擎的高速網卡的性能分析[J].微電子學與計算機,2006, 23(S1): 53-55. DAI Bin, SUN Zhi-gang, LU Ze-xin. Analysis on the performance of high speed NIC based on DMA engine[J]. Microelectronics Computer, 2006, 23(S1): 53-55.(In Chinese) [9] Intel 64 and IA-32 architectures software developer’s manual [EB/OL][2010]. http://www.intel.com. Order number: 253668–034 US, vol.3: 521- 532. [10]ZHANG He-ying, WANG Ke-fei, DAI Yi, et al. A multi-VC dynamically shared buffer with prefetch for network on chip[C]//Proceedings of IEEE 17th International Conference on Networking, Architecture, and Storage. New York: IEEE, 2012: 320-327.