李雪彤,陳 曉,宋 磊
(1.中國科學(xué)院聲學(xué)研究所國家網(wǎng)絡(luò)新媒體工程技術(shù)研究中心,北京 100190;2.中國科學(xué)院大學(xué),北京 100049)
隨著Web 服務(wù)的普及以及連接到互聯(lián)網(wǎng)上的設(shè)備數(shù)量不斷增加,互聯(lián)網(wǎng)用戶的需求從主機之間的通信演進為主機到網(wǎng)絡(luò)的信息重復(fù)訪問。信息中心網(wǎng)絡(luò)(Information-Centric Networking, ICN)實現(xiàn)了從傳統(tǒng)主機為中心的網(wǎng)絡(luò)到信息為中心的網(wǎng)絡(luò)架構(gòu)的轉(zhuǎn)變[1]。名字解析系統(tǒng)在尋址-路由分離的ICN 架構(gòu)中,負責(zé)建立、維護信息標(biāo)識與信息的實際物理地址之間的映射關(guān)系,是ICN 網(wǎng)絡(luò)獲取信息內(nèi)容的關(guān)鍵[2]。因此,名字解析服務(wù)的查詢延時等性能指標(biāo)極大影響了用戶體驗。
當(dāng)前的名字解析系統(tǒng)大多從路由方法和系統(tǒng)節(jié)點負載均衡方法的角度降低解析時延,文獻[3]討論了提供分布式本地的名字解析系統(tǒng),保證用戶可以就近獲得服務(wù),降低解析時延。但現(xiàn)有的名字解析系統(tǒng)受限于傳統(tǒng)軟件網(wǎng)絡(luò)協(xié)議棧的固有性能瓶頸,無法滿足高性能的需求?,F(xiàn)場可編程門陣列(Field Programmable Gate Array,FPGA)因其低功耗、高性能以及可編程的特點廣泛應(yīng)用于高性能服務(wù)器設(shè)備中,將軟件實現(xiàn)的功能卸載到FPGA 中,實現(xiàn)對網(wǎng)絡(luò)功能的加速。例如,文獻[4]基于FPGA對DNS權(quán)威服務(wù)器的功能進行卸載加速;文獻[5]利用FPGA 的并行計算能力對國產(chǎn)數(shù)據(jù)庫加速;文獻[6]基于FPGA 實現(xiàn)了一種大容量、高性能的路由查找算法;文獻[7]在FPGA上使用哈希算法實現(xiàn)了高性能鍵值存儲。
為降低名字解析系統(tǒng)的負載,減少名字解析服務(wù)的查詢時延,本文提出一種基于FPGA 的ICN 名字解析緩存加速系統(tǒng),在網(wǎng)絡(luò)節(jié)點上存儲標(biāo)識到網(wǎng)絡(luò)地址的映射關(guān)系,處理需要獲取網(wǎng)絡(luò)地址的轉(zhuǎn)發(fā)數(shù)據(jù)包,減少數(shù)據(jù)包對名字解析系統(tǒng)的請求訪問。同時,采用盡力解析的方式與主機CPU 協(xié)同工作,實現(xiàn)對名字解析服務(wù)的透明加速。
根據(jù)內(nèi)容尋址和轉(zhuǎn)發(fā)的方式,ICN 架構(gòu)主要可以分為直接基于名字路由的轉(zhuǎn)發(fā)方式和尋址-路由分離的轉(zhuǎn)發(fā)方式兩類。在尋址-路由分離的ICN 架構(gòu)中[8-10],內(nèi)容標(biāo)識符通常采用扁平化的命名方式,標(biāo)識符和定位符被分別定義到兩個不同的命名空間。用戶首先在網(wǎng)絡(luò)中獲得與標(biāo)識符相對應(yīng)的定位符,然后根據(jù)定位符對數(shù)據(jù)進行路由。名字解析服務(wù)就是根據(jù)標(biāo)識符在網(wǎng)絡(luò)中獲得相對應(yīng)的定位符。軟件定義網(wǎng)絡(luò)(Software-Defined Networking, SDN)將網(wǎng)絡(luò)設(shè)備的數(shù)據(jù)平面和控制平面分離,控制平面負責(zé)邏輯決策,通過下發(fā)流表項的方式告知數(shù)據(jù)平面如何進行操作,實現(xiàn)靈活性。
在SDN 與ICN 相結(jié)合的網(wǎng)絡(luò)架構(gòu)中,網(wǎng)絡(luò)數(shù)據(jù)包為了獲取一個唯一標(biāo)識對應(yīng)的實際物理地址信息,數(shù)據(jù)面將網(wǎng)絡(luò)數(shù)據(jù)包上送至控制面,控制面將網(wǎng)絡(luò)數(shù)據(jù)包轉(zhuǎn)換成解析請求,并通過解析系統(tǒng)交互接口與名字解析系統(tǒng)交互獲取實際物理地址信息,返回到數(shù)據(jù)面;數(shù)據(jù)面根據(jù)返回的地址信息對報文中的地址字段進行處理,形成新報文,并通過基于地址的轉(zhuǎn)發(fā)機制進行轉(zhuǎn)發(fā)。如上所述,網(wǎng)絡(luò)數(shù)據(jù)包請求名字解析服務(wù)的處理流程長,造成網(wǎng)絡(luò)延遲和性能下降。
本文利用FPGA 技術(shù)在網(wǎng)絡(luò)節(jié)點的數(shù)據(jù)面上維護大規(guī)模的標(biāo)識到網(wǎng)絡(luò)地址的映射關(guān)系。該方法允許網(wǎng)絡(luò)數(shù)據(jù)包直接在數(shù)據(jù)面查詢對應(yīng)的物理地址信息,從而顯著減少了數(shù)據(jù)包與網(wǎng)絡(luò)控制面的交互次數(shù)。同時,F(xiàn)PGA 具備并行化和低功耗的特點,能夠快速響應(yīng)需要獲取實際物理地址的網(wǎng)絡(luò)數(shù)據(jù)包。
系統(tǒng)整體架構(gòu)包括網(wǎng)絡(luò)設(shè)備的控制面和數(shù)據(jù)面以及名字解析系統(tǒng),如圖1 所示。其中,數(shù)據(jù)面的功能利用FPGA 網(wǎng)卡實現(xiàn),網(wǎng)卡通過PCI-E 接口掛載在服務(wù)器主板上,與CPU 通過總線通信。同時,使用萬兆光纖接口與網(wǎng)絡(luò)通信,用于收發(fā)網(wǎng)絡(luò)數(shù)據(jù)包。
圖1 系統(tǒng)整體架構(gòu)
名字解析緩存加速器在FPGA 網(wǎng)卡上實現(xiàn),主要的工作流程為:
1)解析接收到的網(wǎng)絡(luò)數(shù)據(jù)包,判斷是否需要查詢網(wǎng)絡(luò)地址,若需要,則提取查詢的標(biāo)識ID;
2)根據(jù)網(wǎng)絡(luò)數(shù)據(jù)包中提取的標(biāo)識信息,在映射表中查找對應(yīng)的表項;
3)如果查找到相應(yīng)的表項,修改網(wǎng)絡(luò)數(shù)據(jù)包的目的地址字段并發(fā)送,否則,將該數(shù)據(jù)包上送至控制面,與名字解析系統(tǒng)交互獲取實際的物理地址。
除此之外,若名字解析緩存加速器處于滿載狀態(tài),難以及時處理新的請求,該系統(tǒng)架構(gòu)將超出處理能力的網(wǎng)絡(luò)數(shù)據(jù)包上送至控制面處理。網(wǎng)絡(luò)數(shù)據(jù)包的處理流程如圖2 所示。
圖2 網(wǎng)絡(luò)數(shù)據(jù)包的處理流程
本文設(shè)計的架構(gòu)通過在FPGA 網(wǎng)卡上實現(xiàn)名字解析緩存加速器,采用盡力解析的方式與主機CPU 協(xié)同工作,確保對請求數(shù)據(jù)包的響應(yīng),實現(xiàn)對名字解析服務(wù)的透明加速。當(dāng)網(wǎng)絡(luò)數(shù)據(jù)包被上送至控制面時,除返回對應(yīng)的地址信息外,還返回表項信息,保證名字解析緩存加速器的存儲表項更新;另外,名字解析緩存加速器獨立于FPGA 網(wǎng)卡的其他功能,僅需實現(xiàn)名字解析應(yīng)用處理的功能,功能更新不需要修改其他系統(tǒng)組件,部署簡便。
圖3 是本文設(shè)計的基于FPGA 的名字解析緩存加速器整體結(jié)構(gòu),該加速器的設(shè)計是在開源Corundum[11]網(wǎng)卡工程的基礎(chǔ)上進行的,其優(yōu)勢在于無需卸載網(wǎng)卡的所有功能,只需要專注于所加速的服務(wù)。
硬件系統(tǒng)設(shè)計成流水線的處理模式,主要包括包解析模塊、匹配查詢模塊、包封裝模塊以及輸出引擎模塊等部分。其中,匹配查詢模塊主要由五部分構(gòu)成:鍵提取模塊、仲裁模塊、哈希計算模塊、命令處理模塊以及動作執(zhí)行模塊。為了最大程度地在網(wǎng)絡(luò)節(jié)點的數(shù)據(jù)面上處理需要獲取網(wǎng)絡(luò)地址的轉(zhuǎn)發(fā)數(shù)據(jù)包,減少數(shù)據(jù)包與控制面的交互,降低網(wǎng)絡(luò)時延,對名字解析緩存加速器的存儲規(guī)模提出了特定要求。該系統(tǒng)設(shè)計將標(biāo)識與網(wǎng)絡(luò)地址的鍵值對存儲在DDR3 內(nèi)存中,以實現(xiàn)高效且大規(guī)模的解析操作。
網(wǎng)卡接收到以太網(wǎng)數(shù)據(jù)幀后進行跨時鐘域轉(zhuǎn)換,完成后將完整數(shù)據(jù)包傳輸?shù)桨馕瞿K進行分類處理。包解析模塊在名字解析緩存加速器處于未滿載狀態(tài)時,對輸入數(shù)據(jù)包進行判斷,如果是非查詢的其他報文則直接送往CPU 處理;如果是查詢網(wǎng)絡(luò)地址的數(shù)據(jù)包則對報文進行解析,提取相關(guān)信息(標(biāo)識ID、目的地址的偏移OFFSET 等)送至匹配查詢模塊。包解析模塊在名字解析緩存加速器處于滿載狀態(tài)時,直接將所有數(shù)據(jù)包上送至CPU 處理。這樣處理的優(yōu)勢在于確保對請求數(shù)據(jù)包的響應(yīng),實現(xiàn)透明加速。
匹配查詢模塊提取字段信息中的標(biāo)識ID 作為匹配查詢的鍵,計算哈希值并根據(jù)哈希值索引表項,并返回查詢結(jié)果到包封裝模塊。包封裝模塊負責(zé)對數(shù)據(jù)包進行編輯修改。輸出引擎模塊則將查詢成功的數(shù)據(jù)包轉(zhuǎn)發(fā)至網(wǎng)絡(luò),查詢失敗的數(shù)據(jù)包上送至控制面匹配查詢。
首先判斷當(dāng)前名字解析緩存加速系統(tǒng)是否處于滿載狀態(tài)。在非滿載狀態(tài)下,包解析模塊對到達系統(tǒng)的數(shù)據(jù)包按照協(xié)議格式逐層進行解析,獲取關(guān)鍵字段;若處于滿載狀態(tài),直接將數(shù)據(jù)包上送至CPU 處理。該模塊主要實現(xiàn)網(wǎng)絡(luò)數(shù)據(jù)包的協(xié)議解析處理,提取標(biāo)識ID,計算目的IP 地址偏移,過濾無關(guān)報文。其中,名字解析緩存加速系統(tǒng)是否處于滿載狀態(tài)根據(jù)數(shù)據(jù)FIFO 當(dāng)前的占用情況和名字解析緩存加速系統(tǒng)的處理能力綜合設(shè)定。
鑒于FPGA 硬件結(jié)構(gòu)的特殊性,該模塊的設(shè)計采用流水線的處理方式,時序如圖4 所示。在數(shù)據(jù)包間隙設(shè)置為1 個時鐘周期時,可以進行正常解析處理,說明在200 MHz 時鐘處理頻率、數(shù)據(jù)位寬為128 bit 的情況下,可完全滿足線速解析處理的要求。
圖4 包解析模塊線速處理時序圖
本文利用哈希表來實現(xiàn)標(biāo)識ID 的匹配查詢,為實現(xiàn)大規(guī)模的標(biāo)識ID 到網(wǎng)絡(luò)地址的映射,哈希表采用DDR3進行存儲。其中,標(biāo)識ID 作為匹配查詢的關(guān)鍵字,為160 bit;網(wǎng)絡(luò)地址作為與之對應(yīng)的值,為128 bit。由于2的整數(shù)次冪非常適合在DDR中進行哈希表的快速尋址與表項讀寫操作??紤]到這一點,本文設(shè)計key-value對的大小為512 bit。為了緩解哈希沖突,哈希表的單個地址采用多槽位(slot)結(jié)構(gòu),能夠存儲4個key-value對,如圖5所示。在該配置下,8 GB的DDR3內(nèi)存能夠支持3 200萬條表項存儲。
圖5 哈希表表項結(jié)構(gòu)
考慮到本系統(tǒng)中表項的更新信息(插入/刪除)和查詢請求的接口不同,設(shè)計仲裁模塊。該模塊的主要功能是將更新表項的插入/刪除請求與來自前序鍵提取模塊的查詢請求進行合并。仲裁模塊將表項的更新請求以及查詢請求分別緩存在兩個FIFO 隊列中,當(dāng)后續(xù)模塊返回ready 信號有效,并且至少有一個FIFO 非空時,仲裁模塊才會根據(jù)當(dāng)前的有限狀態(tài)機狀態(tài)從兩個FIFO 中提取相應(yīng)的請求。在這個過程中,插入和刪除請求具有高于查詢請求的優(yōu)先級。
哈希計算模塊具備H3哈希計算功能,前序仲裁模塊輸入關(guān)鍵字key,該模塊輸出對應(yīng)的地址值index。H3哈希函數(shù)[12]已經(jīng)被證明可以有效地在散列表條目中均勻分配密鑰,這種均勻分布本身顯著降低了哈希沖突。其次,H3哈希函數(shù)僅需要簡單的逐位AND 和XOR 運算,也非常適用于高吞吐量的硬件實現(xiàn)。該模塊輸出的哈希計算結(jié)果會經(jīng)由寄存器配置有效的哈希值位寬范圍,對哈希計算結(jié)果進行取低位操作以適配不同大小的內(nèi)存外設(shè)。
命令處理模塊完成對DDR3 的讀寫以及表項的對比處理,其硬件實現(xiàn)結(jié)構(gòu)如圖6 所示。在Xilinx 平臺中通過MIG IP 核對DDR3 進行讀寫操作,在實際讀寫過程中使用AXI4 總線。由于MIG IP 核提供的時鐘與用戶時鐘頻率存在差異,因此在使用該總線時利用異步FIFO 處理跨時鐘域問題。
圖6 命令處理模塊的硬件實現(xiàn)結(jié)構(gòu)
DDR 讀模塊通過與前置FIFO 與后置FIFO 的配合,實現(xiàn)DDR 讀功能。前置FIFO 中存儲著index 值,即讀地址。當(dāng)前置FIFO 非空時,DDR 讀模塊取出讀地址并完成讀任務(wù);當(dāng)后置FIFO 未滿時,將讀結(jié)果放入后置FIFO 中,隨后繼續(xù)探測前置FIFO 是否為空,以進行下一次讀任務(wù)。DDR 讀模塊每次讀內(nèi)容的大小由表項大小決定。DDR 寫模塊通過與其前置FIFO 配合,實現(xiàn)DDR 寫功能。其中,前置FIFO 存儲待寫入的完整表項內(nèi)容。
比較器模塊將待處理請求的原key 值與讀取的表項結(jié)果進行比較,4 個槽位的對比是并行執(zhí)行的,將存在以下情況:
1)查詢請求。對于查詢請求,該模塊將請求中的關(guān)鍵值key 與讀取表項中4 個槽位的關(guān)鍵值并行對比,如果找到匹配的關(guān)鍵值,則輸出查詢結(jié)果;如果沒有匹配項,則返回查詢失敗的信息。
2)插入請求。在處理插入請求時,如果讀取的表項中存在空槽位,或者雖然沒有空槽位但存在與請求中關(guān)鍵值相同的項,則會通過DDR 寫模塊更新表項,并返回插入成功的信息;如果兩種情況均不滿足,則視為發(fā)生了碰撞,此時將丟棄待插入的表項,并返回插入失敗的信息。
3)刪除請求。在處理刪除請求時,如果讀取的表項不為空且關(guān)鍵值與請求中的相同,則通過DDR 寫模塊刪除該表項,并返回刪除成功的信息;如果讀取的表項為空或關(guān)鍵值不一致,則返回刪除失敗的信息。
在常規(guī)設(shè)計中,數(shù)據(jù)包封裝模塊通過重構(gòu)數(shù)據(jù)包包頭的方式來構(gòu)建響應(yīng)數(shù)據(jù)包,這通常需要占用大量的設(shè)計資源。本文提出的數(shù)據(jù)包封裝模塊采用更為高效的方法,它根據(jù)數(shù)據(jù)包解析模塊計算得出的目的IP 地址的偏移信息以及動作執(zhí)行模塊輸出的查詢結(jié)果,直接對原始請求包進行編輯修改。這種方法不僅減少了資源消耗,還提高了封裝過程的效率。
為進一步驗證本文設(shè)計的ICN 名字解析緩存加速系統(tǒng)在真實情況下的性能,故設(shè)計板級測試實驗。設(shè)計的架構(gòu)在Xilinx XC7K32-5TFFG900-2 的FPGA 板卡上實現(xiàn);測試平臺選用DellR730 商用服務(wù)器,該服務(wù)器配備兩個6核Intel Xeon E5-2609 v3 1.9 GHz CPU以及8 GB DDR3 內(nèi)存,操作系統(tǒng)為CentOS 7.9;測試設(shè)計的架構(gòu)時,選用Spirent 公司的SPT N4U 作為網(wǎng)絡(luò)測試儀,測試儀運行的軟件采用Spirent TestCenter Application 4.82版本,設(shè)備間使用光纖互聯(lián)。
為了測試本文提出的基于FPGA 的ICN 名字解析緩存加速系統(tǒng)的吞吐量及延遲指標(biāo),實驗使用思博倫測試儀生成數(shù)據(jù)包長度為128~1 500 B 的10 Gb/s 測試流量,經(jīng)過FPGA處理后,測試流量被轉(zhuǎn)發(fā)回思博倫測試儀。
圖7 展示了系統(tǒng)的吞吐量指標(biāo),硬件實現(xiàn)的ICN 名字解析緩存加速系統(tǒng)能夠以10 Gb/s 的線速處理256 B以上的解析請求數(shù)據(jù)包。此外,本文提出的加速系統(tǒng)架構(gòu)采用盡力解析的方式,對于256 B 以下的請求包,將超出能力范圍的數(shù)據(jù)包交由控制面處理。該架構(gòu)在保持解析服務(wù)能力的同時,有效地加速了解析過程。
圖7 名字解析緩存加速系統(tǒng)的吞吐量
如圖8 所示為名字解析緩存加速系統(tǒng)對不同包長的數(shù)據(jù)包的轉(zhuǎn)發(fā)率,該系統(tǒng)對256 B 小包的轉(zhuǎn)發(fā)率達到4.5 Mpps,支持每秒四百萬次請求,而軟件實現(xiàn)的名字解析系統(tǒng)僅支持每秒十萬次請求,性能大大提升。
圖8 名字解析緩存加速系統(tǒng)的數(shù)據(jù)包轉(zhuǎn)發(fā)率
本文系統(tǒng)對解析請求包的處理時延如圖9 所示,結(jié)果顯示基于FPGA 的名字解析緩存加速器處理256 B請求包的時延僅為1.5 μs,遠低于軟件的處理時延。文獻[13]中提出,利用傳統(tǒng)套接字實現(xiàn)的鍵值存儲系統(tǒng)的處理時延在41.40 μs,基于DPDK 實現(xiàn)的鍵值存儲系統(tǒng)的處理時延在6.29 μs。數(shù)據(jù)表明,硬件實現(xiàn)的鍵值存儲系統(tǒng)相較于傳統(tǒng)軟件實現(xiàn)的鍵值存儲系統(tǒng)處理速度提高了27 倍,與使用DPDK 內(nèi)核旁路進行優(yōu)化的軟件相比處理速度提高了4 倍。
圖9 名字解析緩存加速系統(tǒng)的處理時延
本文工程基于Xilinx FPGA 的XC7K32-5TFFG900-2設(shè)計實現(xiàn),運行頻率為200 MHz,其資源消耗如表1 所示,包括查找表(LUT)、觸發(fā)器(FF)和存儲器資源(BRAM)。由于表項存儲在片外DDR上,節(jié)省片上資源。
表1 FPGA 工程資源消耗情況
為解決ICN 網(wǎng)絡(luò)中名字解析服務(wù)流程長以及名字解析系統(tǒng)負載高的問題,本文提出一種基于FPGA 的ICN 名字解析緩存加速系統(tǒng)。該架構(gòu)在網(wǎng)絡(luò)節(jié)點的數(shù)據(jù)面卸載名字解析功能,處理需要獲取網(wǎng)絡(luò)地址的轉(zhuǎn)發(fā)數(shù)據(jù)包,有效縮短處理流程。同時,采用盡力解析的方式與主機CPU 協(xié)作,滿載時將數(shù)據(jù)包上送至控制面處理,在不影響服務(wù)能力的前提下加速了整個過程。
系統(tǒng)測試驗證顯示:基于FPGA 實現(xiàn)的鍵值存儲處理性能相較于傳統(tǒng)軟件以及基于DPDK 實現(xiàn)的鍵值存儲處理性能均明顯提升;其次,名字解析緩存加速器與網(wǎng)卡其他功能分離的形式極大簡化了系統(tǒng)設(shè)計難度。
注:本文通訊作者為宋磊。