呂俊杰,武 杰
(1.中國科學(xué)技術(shù)大學(xué) 近代物理系,安徽 合肥 230026; 2.中國科學(xué)技術(shù)大學(xué) 核探測技術(shù)與核電子學(xué)國家重點實驗室,安徽 合肥 230026)
大規(guī)模數(shù)據(jù)采集系統(tǒng)中數(shù)據(jù)中心是數(shù)據(jù)匯集的重要節(jié)點,由于需要進行大量的數(shù)據(jù)存儲和分析工作,一般使用高性能計算機作為數(shù)據(jù)中心[1]。
基于硬件的可靠傳輸協(xié)議HRDTP(Hardware Reliable Data Transmission Protocol)由FPGA(Field Programmable GateArray)實現(xiàn),在數(shù)據(jù)采集系統(tǒng)中廣泛應(yīng)用[2-3],該協(xié)議包括ACK(Acknowledgement)回應(yīng)與超時重發(fā)機制,命令、回應(yīng)、確認機制等,具有針對性強、結(jié)構(gòu)簡單、適應(yīng)底層硬件等特點,相比傳統(tǒng)的通信協(xié)議更適用于數(shù)據(jù)采集系統(tǒng),效率更高?;谟布目煽總鬏攨f(xié)議與計算機通用的可靠數(shù)據(jù)傳輸協(xié)議(TCP/IP協(xié)議等)無法直接通信。在數(shù)據(jù)采集系統(tǒng)中數(shù)據(jù)節(jié)點間通信使用基于硬件的可靠傳輸協(xié)議時,為了使數(shù)據(jù)中心和數(shù)據(jù)節(jié)點通信,需要一特定外設(shè),即數(shù)據(jù)中心接口單元。
數(shù)據(jù)中心接口單元像是一塊外置網(wǎng)卡,實現(xiàn)了基于硬件的可靠傳輸協(xié)議到標(biāo)準(zhǔn)的TCP/IP協(xié)議的通信。目前常見的數(shù)據(jù)中心接口實現(xiàn)方法有:(1)基于PCI-E接口的插卡式設(shè)計[3],使用該設(shè)計數(shù)據(jù)中心必須選用臺式機,便攜性很差,在很多數(shù)據(jù)采集的實際環(huán)境中無法使用;(2)應(yīng)用在LHAASO WCDA中,基于FPGA嵌入式系統(tǒng)的設(shè)計,該數(shù)據(jù)接口缺乏對短數(shù)據(jù)幀合并打包的處理,經(jīng)測試達到237 Mb/s的數(shù)據(jù)率[4]。本文基于FPGA和ARM處理器,設(shè)計了一種數(shù)據(jù)中心接口單元。該接口單元相比第一種設(shè)計在便攜性和通用性上有了極大的提升,因為其使用標(biāo)準(zhǔn)的千兆以太網(wǎng)接口,可以配合各種計算機(包括筆記本電腦)使用,且體積小便于攜帶,功耗低便于供電;相比第二種設(shè)計,由于增加了數(shù)據(jù)幀合并打包功能,數(shù)據(jù)率達到了330 Mb/s,有39%的提升。
數(shù)據(jù)中心接口單元作為連接上層管理軟件和下層數(shù)據(jù)傳輸系統(tǒng)的中間橋梁,需要考慮與數(shù)據(jù)節(jié)點接口和上方與數(shù)據(jù)中心接口兩方面的接口選擇。數(shù)據(jù)中心一般距離數(shù)據(jù)節(jié)點較遠,同時需要滿足百兆量級的數(shù)據(jù)率要求,所以數(shù)據(jù)中心接口單元與數(shù)據(jù)節(jié)點的高速鏈路選擇千兆以太網(wǎng)。數(shù)據(jù)中心通常選用高性能的計算機,結(jié)合數(shù)據(jù)率的要求,數(shù)據(jù)中心接口單元與數(shù)據(jù)中心的通信接口也為千兆以太網(wǎng)。
Xilinx ZYNQ-7000系列全可編程SoC(System on Chip)系列芯片的硬件部分包括一個主頻高達667 MHz的雙核ARM Cortex-A9處理器子系統(tǒng)PS(Processing System)和一個豐富的內(nèi)存、配置和互聯(lián)接口,在FPGA邏輯部分PL(Progarmmable Logic)保留其他傳統(tǒng)FPGA所具備的優(yōu)勢。FPGA通過多口高性能接口接到PS端,實現(xiàn)了PL與PS間的高帶寬通信[5]。
數(shù)據(jù)中心接口單元的PL端拓展了一塊千兆以太網(wǎng)PHY(Physical Layer)芯片,以實現(xiàn)與數(shù)據(jù)節(jié)點之間的數(shù)據(jù)傳輸,數(shù)據(jù)的可靠性通過HRDTP來保證。數(shù)據(jù)中心接口單元與數(shù)據(jù)中心之間的通信通過千兆以太網(wǎng)[6]實現(xiàn),數(shù)據(jù)的可靠性通過TCP/IP協(xié)議來保證。數(shù)據(jù)中心接口單元的結(jié)構(gòu)如圖1所示。
圖1 數(shù)據(jù)中心接口單元結(jié)構(gòu)
系統(tǒng)的FPGA固件包含了MAC控制器及硬件回應(yīng)模塊、數(shù)據(jù)高速緩沖模塊及DMA控制器,其結(jié)構(gòu)如圖2所示。
圖2 數(shù)據(jù)中心接口單元FPGA結(jié)構(gòu)
MAC控制器負責(zé)與千兆以太網(wǎng)PHY間的通信;硬件回應(yīng)模塊按照基于硬件的可靠協(xié)議完成了對幀類型的分揀、錯誤幀的處理、數(shù)據(jù)幀的排序及回應(yīng)ACK;數(shù)據(jù)高速緩沖模塊為DMA控制器提供數(shù)據(jù)緩沖,并將n個短數(shù)據(jù)幀合并成長數(shù)據(jù)幀;DMA控制器負責(zé)DMA數(shù)據(jù)傳輸,可以有兩種模式選擇,由驅(qū)動進行配置和啟動。
數(shù)據(jù)中心接口單元的軟件設(shè)計如圖3所示。PS部分的ARM雙核運行Linux3.15.0操作系統(tǒng)。驅(qū)動運行在內(nèi)核態(tài),應(yīng)用程序運行在用戶態(tài)。
圖3 數(shù)據(jù)中心接口單元軟件設(shè)計
驅(qū)動是連接數(shù)據(jù)中心接口模塊(FPGA)和上層軟件的橋梁,驅(qū)動為用戶程序提供了對數(shù)據(jù)中心接口模塊基本的讀(Read)、寫(Write)和I/O操作(I/O Control)。驅(qū)動代碼在操作系統(tǒng)的內(nèi)核態(tài)執(zhí)行。驅(qū)動中對設(shè)備的讀寫與數(shù)據(jù)中心接口模塊的DMA過程對應(yīng)。為滿足上行較高的數(shù)據(jù)率,驅(qū)動的讀操作對應(yīng)DMA的Scatter/Gather模式,而寫操作則對應(yīng)Simple DMA模式。
讀操作采用了阻塞I/O的方式,一次DMA完成后驅(qū)動會收到來自數(shù)據(jù)中心接口模塊的中斷信號,在中斷處理函數(shù)中會喚醒Read函數(shù)中的休眠,Read函數(shù)把數(shù)據(jù)由內(nèi)核空間拷貝到用戶空間,如果沒有數(shù)據(jù)可以拷貝,Read函數(shù)將會進入休眠模式。在中斷處理函數(shù)清空中斷信號后,準(zhǔn)備接受下一次中斷的到來。
寫操作首先將用戶空間傳遞來的數(shù)據(jù)拷貝至內(nèi)核空間對應(yīng)的寫DMA緩沖區(qū),然后將寫緩沖區(qū)對應(yīng)的物理地址和長度信息寫入DMA控制器對應(yīng)的I/O地址,數(shù)據(jù)中心接口模塊開始接收DMA操作。
應(yīng)用程序用TCP/IP協(xié)議與PC進行數(shù)據(jù)交互,利用驅(qū)動提供的讀、寫和I/O操作的接口與數(shù)據(jù)中心接口單元的PL部分進行交互,具有數(shù)據(jù)傳輸、幀解析、命令幀下發(fā)等功能。
數(shù)據(jù)幀的合并打包通過驅(qū)動和FPGA協(xié)同完成。
驅(qū)動部分:申請大小為LB的DMA緩沖區(qū),其中L為基于硬件可靠傳輸協(xié)議中定長數(shù)據(jù)幀長度的n倍(n的值可以在一定范圍控制),為用戶空間TCP/IP協(xié)議要處理的數(shù)據(jù)包的長度;將申請到DMA緩沖區(qū)的地址和長度L寫入指定寄存器。
FPGA部分:當(dāng)接收到數(shù)據(jù)節(jié)點傳來的數(shù)據(jù)幀時,根據(jù)指定寄存器中驅(qū)動寫入的DMA緩沖區(qū)地址和長度將n個定長數(shù)據(jù)幀按解析后幀頭的幀序號順序?qū)懭隓MA緩沖區(qū),并發(fā)送一次中斷,驅(qū)動收到中斷,將合并打包后長度為L的長數(shù)據(jù)幀發(fā)送到用戶空間。
大塊的DMA緩沖區(qū)起到以下作用:(1)將短數(shù)據(jù)幀打包合并,減少上層TCP協(xié)議棧處理大量短數(shù)據(jù)幀對CPU的損耗;(2)數(shù)據(jù)幀按幀序號進行排序;(3)大大減少DMA中斷次數(shù)。
千兆以太網(wǎng)數(shù)據(jù)源使用思博倫公司生產(chǎn)的網(wǎng)絡(luò)數(shù)據(jù)分析儀Spirent TestCenter C1[7],該網(wǎng)絡(luò)分析儀有 4個10/100/1 000 BASE-T端口和精度極高的內(nèi)部硬件時戳。配合Windows端軟件Spirent TestCenter Application可以生成512個發(fā)送和511個可追蹤接收流,且?guī)L度60~16 004 B內(nèi)可變,發(fā)送速率每3.43 s一個包到101%線速率間可變,接收端可以統(tǒng)計幀CRC、嵌入式CRC和PRBS位錯誤。
數(shù)據(jù)中心選用Think Pad E450筆記本,搭載Intel酷睿i5處理器,Windows 7操作系統(tǒng)。數(shù)據(jù)中心接口模塊與數(shù)據(jù)源、數(shù)據(jù)中心之間都通過長3 m的CAT-5e超五類網(wǎng)線連接。
千兆以太網(wǎng)上的實際數(shù)據(jù)傳輸速率根據(jù)以太網(wǎng)標(biāo)準(zhǔn),除去前導(dǎo)符與幀間隙,使用基于硬件的可靠傳輸協(xié)議的定長數(shù)據(jù)幀進行測試。其中定長數(shù)據(jù)幀有效長度為796 B,冗余信息包括8 B前導(dǎo)符和12 B幀間隔,共計20 B。
設(shè)實際數(shù)據(jù)率為Rreal,有效數(shù)據(jù)率為Rvalid,有效數(shù)據(jù)長度為lvalid,故:
(1)
所以千兆以太網(wǎng)有效數(shù)據(jù)率最高為:
(2)
幀速率為:
975.49 Mb/s÷(796×8 bit)=153 186 f/s
(3)
即在FPGA不對數(shù)據(jù)幀進行打包的情況下驅(qū)動要響應(yīng)每秒15萬多次的中斷。
(1)測試數(shù)據(jù)中心接口單元和數(shù)據(jù)節(jié)點之間基于硬件可靠傳輸協(xié)議的數(shù)據(jù)傳輸。數(shù)據(jù)源在測試中模擬數(shù)據(jù)節(jié)點。測試數(shù)據(jù)率可以使用網(wǎng)絡(luò)數(shù)據(jù)源發(fā)幀并統(tǒng)計丟幀數(shù)。數(shù)據(jù)中心接口單元性能測試連接圖如圖4所示。
圖4 數(shù)據(jù)中心接口單元性能測試連接圖
在1 000 Mb/s的線速率下(有效數(shù)據(jù)率為975.49 Mb/s),數(shù)據(jù)源發(fā)送了54 273 312個幀,F(xiàn)PGA和驅(qū)動也接收到同樣數(shù)目的幀。由以上測試數(shù)據(jù)可以得出,數(shù)據(jù)中心接口單元可以在基于硬件的可靠傳輸協(xié)議下接收975.49 Mb/s數(shù)據(jù)率的數(shù)據(jù),并通過驅(qū)動將數(shù)據(jù)可靠地送達系統(tǒng)上層用戶空間。
(2)測試數(shù)據(jù)中心接口單元和數(shù)據(jù)中心間基于TCP/IP協(xié)議的數(shù)據(jù)傳輸,可以通過網(wǎng)絡(luò)性能測試工具IPERF測試不同幀長度下的數(shù)據(jù)率。
如圖5所示,數(shù)據(jù)中心接口單元到數(shù)據(jù)中心之間的TCP/IP數(shù)據(jù)傳輸速率最高可達534 Mb/s,沒有完全利用千兆以太網(wǎng)帶寬,這是由于處理器的性能有限,TCP/IP協(xié)議對報文的處理占用了大量的CPU資源。
圖5 數(shù)據(jù)中心接口單元到數(shù)據(jù)中心的有效數(shù)據(jù)率
(3)測試數(shù)據(jù)節(jié)點發(fā)送數(shù)據(jù)幀經(jīng)由數(shù)據(jù)中心接口單元傳輸?shù)綌?shù)據(jù)中心的可靠數(shù)據(jù)率。測試中數(shù)據(jù)源模擬數(shù)據(jù)節(jié)點;數(shù)據(jù)中心運行數(shù)據(jù)中心主控程序,統(tǒng)計并存儲數(shù)據(jù)幀;數(shù)據(jù)中心接口單元可以調(diào)整對定長數(shù)據(jù)幀的打包(將n個定長數(shù)據(jù)幀合并成長數(shù)據(jù)幀,調(diào)整n的值),從而控制和數(shù)據(jù)中心之間基于TCP/IP協(xié)議傳輸數(shù)據(jù)幀的長度。
如圖6所示,數(shù)據(jù)中心接口單元在實際數(shù)據(jù)傳輸中可達330 Mb/s的可靠數(shù)據(jù)率。由圖5和圖6可以明顯看出數(shù)據(jù)傳輸速率與幀長度有著較大的關(guān)系。由于協(xié)議棧需要對每個報文進行處理,處理時間與報文長度無關(guān),在同樣的數(shù)據(jù)量下,當(dāng)傳輸報文長度變低時,協(xié)議棧報文處理頻率會相應(yīng)增加,數(shù)據(jù)率相較長報文時明顯下降[8]。所以為了提高數(shù)據(jù)傳輸速率,對數(shù)據(jù)幀進行合并打包是非常必要的。
圖6 數(shù)據(jù)源經(jīng)由數(shù)據(jù)中心接口單元到數(shù)據(jù)中心的有效數(shù)據(jù)率
測試結(jié)果表明,單獨測試數(shù)據(jù)中心接口單元兩端千兆以太網(wǎng)接口的數(shù)據(jù)率分別達到975.49 Mb/s和534 Mb/s,然而最終數(shù)據(jù)幀由數(shù)據(jù)源經(jīng)過兩個千兆以太網(wǎng)接口可靠地傳輸?shù)綌?shù)據(jù)中心的數(shù)據(jù)率最高只達到330 Mb/s,較較低的534 Mb/s仍有差距。經(jīng)過分析,這部分?jǐn)?shù)據(jù)率的下降是由于:(1)DMA傳輸?shù)倪^程要涉及高速緩存一致性(cache coherence)的問題,要保持高速緩存和內(nèi)存的一致性需要一些操作,在數(shù)據(jù)傳輸過程中會消耗一部分時間,導(dǎo)致數(shù)據(jù)率的下降;(2)數(shù)據(jù)由內(nèi)核態(tài)到用戶態(tài)的拷貝消耗一部分時間,導(dǎo)致數(shù)據(jù)率的下降。
本文基于Xilinx ZYNQ芯片,通過軟硬件協(xié)同設(shè)計,實現(xiàn)了用于大規(guī)模數(shù)據(jù)采集系統(tǒng)的可靠數(shù)據(jù)中心接口模塊。在大規(guī)模數(shù)據(jù)采集系統(tǒng)中,數(shù)據(jù)節(jié)點之間數(shù)據(jù)可靠性是通過基于硬件的可靠傳輸協(xié)議實現(xiàn)的,該數(shù)據(jù)中心接口模塊是基于硬件的可靠傳輸協(xié)議和傳統(tǒng)TCP/IP協(xié)議之間的橋梁,可以使數(shù)據(jù)中心(PC)能夠用傳統(tǒng)的TCP/IP協(xié)議接收數(shù)據(jù)節(jié)點傳來的采集數(shù)據(jù),而且保證了數(shù)據(jù)在高數(shù)據(jù)率下的可靠性。該數(shù)據(jù)中心接口模塊各項參數(shù)測試達標(biāo)后,在實際的數(shù)據(jù)采集項目中進行了應(yīng)用,穩(wěn)定地完成了三次野外數(shù)據(jù)采集試驗。
數(shù)據(jù)中心接口模塊和數(shù)據(jù)節(jié)點之間的千兆以太網(wǎng)帶寬占用率幾乎達到了理想的100%,然而數(shù)據(jù)中心接口模塊和數(shù)據(jù)中心之間的千兆以太網(wǎng)帶寬占用率還有提升的空間,未來可通過提升PS部分硬件性能或者優(yōu)化軟件和協(xié)議棧來提升。