張碩琳,羅洪斌
(北京交通大學下一代互聯網互聯設備國家工程實驗室 北京 100044)
隨著用戶規模和應用數量的不斷增加,現有互聯網逐漸暴露出許多原始設計的不足。例如,現有互聯網的體系結構采用的host to host通信模式,難以適應當前用戶對內容獲取和分發的多樣化需求。當同一個子網的兩個用戶要獲取同一個內容時,都要向遠端的服務器獲取,從而導致資源浪費。為了解決傳統互聯網的上述不足,以內容為中心的下一代互聯網體系結構應運而生。
在以內容為中心的下一代互聯網體系結構中,存儲數據分組將作為網絡節點的功能之一。當數據分組流經網絡節點時,網絡節點應該能夠根據控制信息的要求,存儲相應的服務內容。當相同的服務再次被請求時,網絡節點可以從自己的存儲區域中提取相應的數據,就近為用戶提供服務,從而提高網絡資源利用率。
目前對于網絡節點存儲功能的研究大多停留在仿真階段,并沒有實際的硬件實現。本文基于NetFPGA10G硬件平臺,設計具有存儲功能的網絡組件。之所以選擇NetFPGA10G作為開發平臺,是因為NetFPGA平臺能夠很好地支持模塊化設計,使得復雜的硬件設計可以通過各個模塊的組合來完成。而且,NetFPGA是一個基于Linux的開放性平臺,所有對它感興趣的人都可以利用平臺上現有的資源,在前人開發的基礎上搭建自己的系統;而自己開發的系統也可以被其他人所用,從而不需要重復地搭建外圍模塊、開發驅動和GUI等,只要添加自己的模塊和修改現有的系統即可。NetFPGA平臺的模塊化和開放性,大大簡化了網絡研究的任務量。
傳統網絡中的路由器用于連接多個邏輯上分開,同時具有控制和轉發功能的網絡節點。而在下一代互聯網體系結構的研究中,大多數研究人員認為,網絡組件需要引入控制層面與數據層面的分離機制,將控制功能從網絡組件中剝離出去,交給控制器完成,而網絡組件只負責根據控制器下發的控制信息,轉發相應的數據分組,從而實現網絡組件最基本的功能。而在以內容為中心的網絡體系結構下,網絡組件必須具有存儲功能。首先,本文基于NetFPGA10G的網絡組件,在NetFPGA10G板卡上搭建OpenFlow交換機,上層控制器可以通過數據通路,根據OpenFlow協議,向NetFPGA10G板卡下發流表信息,當數據分組到來時,NetFPGA10G查詢流表,根據查詢結果完成相應的轉發動作,從而實現網絡組件的轉發功能。然后,本文重構了NetFPGA10G萬兆光纖網卡驅動,使之在與NetFPGA10G通過PCIE連接的主機的內存空間中利用內存分配技術,分配2 GB的存儲空間,并用STL提供的list_head對存儲空間進行管理。當接到存儲分組請求時,進行查詢匹配,然后根據請求分組中的路由信息進行分組轉發。基于NetFPGA10G的具有存儲功能的網絡組件如圖1所示。
基于NetFPGA10G的具有存儲功能的網絡組件主要由兩個重要部分組成:基于NetFPGA10G的OpenFlow交換機以及萬兆光纖網卡驅動。OpenFlow交換機用于接收上層控制器下發的控制信息,配置流表,查詢流表,完成相應的轉發、丟棄等動作。當不需要存儲的分組到達NetFPGA10G板卡時,首先查詢精確匹配表和通配符匹配表,如果有對應的流表項,則執行action域所規定的動作;如果沒有對應的流表項,則向控制器發出請求信息,等待控制器下發控制信息之后再轉發。當需要存儲的分組到達板卡時,NetFPGA10G會將分組通過AXI-lite總線發送給PCI/DMA模塊,之后通過萬兆光纖網卡驅動進行存儲。當存儲空間有空閑時,數據分組將直接存儲下來;當存儲空間為滿時,執行替換算法,對存儲的內容進行更新替換。當查詢分組到達時,驅動將根據內容名字,查找存儲空間是否有相應的請求內容,如果有就返回內容到查詢分組進入的端口,如果沒有就返回相應的提示信息。這就構成了基于NetFPGA10G的具有存儲功能的網絡組件。
在NetFPGA10G平臺上搭建OpenFlow交換機,具體設計框架如圖2所示。
數據分組可以通過4個光纖網口進入交換機進行處理,其主要模塊分為以下4個部分:分組預處理模塊、流表控制模塊、行為處理模塊以及主機接口模塊。
(1)分組預處理模塊
數據分組進入該模塊之后,該模塊負責解析提取分組頭部分的信息,將信息組裝成OpenFlow協議規定的12元組,該信息稱為流表項。之后,分組預處理模塊會將流表項發送給流表控制模塊,并且將原始數據分組發送到行為處理模塊等待。

圖1 具有存儲功能的網絡組件
(2)流表控制模塊
流表控制模塊通過一個通往通配符流表和精確流表的單一管道來訪問交換機的流表,該管道可以被所有的端口共享,所以該模塊響應各端口對其發起的所有請求。在接收查找流表項請求后,流表控制器將同時查找精確匹配流表與通配符流表,若在流表中找到了匹配表項,流表控制器就從內存中抓取相應的行為列表并把它發給對應端口的行為處理器,同時更新其統計數據。若流表控制器在精確匹配流表和通配符流表中都匹配成功,則使用精確匹配流表中的轉發行為。
(3)主機接口模塊
該模塊是硬件交換機與上位控制器之間溝通的橋梁,控制器可以通過它來訪問交換機中的寄存器,并對流表進行修改、添加和刪除等操作。因為主機向交換機寫入流表是以字為單位的,首先在主機接口模塊中緩存所有信息,一旦主機的一個寫操作完成,主機接口觸發通信,通過使用分組預處理模塊與流表控制模塊通信時一樣的握手協議和流表控制器進行通信。
(4)行為處理模塊
行為處理模塊根據流表控制模塊發送的轉發行為列表轉發數據,更新其分組頭域與數據分組長度。之后將重新封裝好的數據分組發送到輸出隊列排隊等待處理。
以上4個模塊構成了基于NetFPGA10G的OpenFlow交換機核心功能,完成了解析分組、組裝流表項、查詢流表項、重構流表、封裝分組、執行轉發行為等一系列分組處理過程,實現了實際硬件網絡組件的基本轉發功能。
網絡組件存儲功能的實現,是在網絡組件交換功能的基礎上,增加一個行為(action),當需要查詢數據分組或存儲數據分組到達時,硬件將該數據分組的行為定義為cache,轉發端口定義為PCI/DMA端口(5號端口),所以該數據分組將通過PCI通道進入與NetFPGA10G相連的主機中進行查詢和存儲。具體分組處理流程如圖3所示。
在上述查詢分組和存儲分組的處理流程中,關鍵技術部分是:存儲空間的分配與管理。其主要分為以下幾個步驟實現。
(1)創建存儲環型空間
物理地址被分成離散的單元,稱為頁。系統內部許多對內存的操作都是基于單個頁的,目前大多數系統都使用每頁4 096 byte。在本設計中,存儲的單個數據分組最大為1 533 byte,本文選擇每頁存儲兩個數據分組,即存儲空間單元是2 KB。同時,本設計總共分配了2 GB的內存作為網絡組件存儲空間,并用get_free_pages進行內存申請。其中存儲單元類型為store_node_list,并定義其結構體如下:

圖2 OpenFlow交換機硬件設計

圖3 查詢分組/存儲分組處理流程

其中,port為存儲輸入端口號;tstamp為每個分組更新的最新時間戳,每一次數據分組被請求時,時間戳都會更新;list是查詢和維護存儲空間的數據結構,后面將有具體說明。
(2)存儲空間的維護
由get_free_pages獲得的內存是不連續的,需要數據結構進行管理和維護。利用Linux內核中的雙向鏈表list_head將多個存儲單元連接起來。list_head結構具備雙鏈表功能,通常它都組織成雙循環鏈表。與普通鏈表不同的是,list_head沒有數據域,list_head具體定義如下:

在Linux內核鏈表中,不是在鏈表結構中包含數據,而是在數據結構中包含鏈表節點,正如store_node_list結構體中的定義,包含list_head結構成員。在遍歷鏈表時,由于存儲空間鏈表中僅保存了數據項結構中list_head成員變量的地址,Linux為此提供了一個 list_entry(ptr,type,member)宏,可以根據list_head的地址獲得數據存儲地址,從而對相應的存儲單元進行操作。
(3)存儲數據分組
當需要存儲的數據分組到達時,如果有空閑的存儲空間,數據分組就順序存儲在空閑的單元中,并且為該數據分組打時間戳;如果沒有空閑的存儲單元,將遍歷存儲空間,選擇時間戳最大的單元(即熱度最小的存儲分組)進行替換。
對本文所設計的基于NetFPGA10G的具有存儲功能的網絡組件進行功能測試。測試的硬件環境為:CPU為Intel Core i5-2400S CPU@2.50 GHz,內存為 4 GB,數據分組存儲空間為2 GB,網卡為萬兆光纖網卡;軟件配置為:Linux操作系統,內核版本為2.6.39,利用TCPdump查看本設計模塊功能測試結果,如圖4所示。
圖4中標號為0的是查詢分組,標號為4的是數據分組,本文設計模塊成功實現了數據分組的存儲和查詢功能。

圖4 測試結果

圖5 1 Gbit/s存儲速率下查詢分組返回時延
關于本文設計模塊的性能測試見表1。

表1 性能測試結果
可以看出,在不同的存儲速率下,本文設計的模塊功能實現相對穩定,由于本文設計中,對于存儲空間的維護和管理使用的是鏈表方式,當所查詢的數據分組在存儲空間的不同位置時,所花費的查詢返回時延是不定的,本文選擇在1 Gbit/s存儲速率下,查詢分組返回時延數據的詳細說明,具體時延分布如圖5所示。
由于查詢分組查詢的內容在存儲空間中是隨機分布的,查詢方式根據索引值進行遍歷,可以看出,查詢返回時延分布在3~11 000 ns,平均返回時延為6.9 ns。
本文對下一代互聯網體系結構中的熱點問題進行了研究,創新性地對具有內容存儲功能的網絡組件設計給出了實現方案,提高了網絡資源的利用率,對下一代互聯網研究有著非常積極的作用。
1 Arianfar S,Nikander P,Ott J.On content-centric router design and implications.Proceedings of the 6rd International Conference on Emerging Networking Experiments and Technologies(CoNEXT),Philadelphia,USA,2010
2 Luo H B,Chen Z,Cui J B,et al.ColoR:an information-centric internet architecture for innovation.IEEE Network Magazine,2014(2)
3 OpenFlow implementation on NetFPGA 10G design document.http://www.OpenFlowswitch.org
4 劉靖龍,劉穎,張思東.基于RTL8169網卡的零拷貝技術研究與實現.計算機技術與發展,2011,21(8)
5 Min S H,Choi Y C,Kim N,et al.Implementation of a programmable service composition network using NetFPGA-based OpenFlow switches. Proceedings of 1st ASIA NetFPGA Developer’s Workshop,Korea,2010
6 Corbet J,Rubini A.Linux設備驅動程序.魏永譯.北京:中國電力出版社,2006