(北京郵電大學 計算機學院體系結構中心,北京 100876)
1 引言
互聯(lián)網已成為人們低成本高效率獲取信息的平臺,隨著各站點訪問量和信息交流量的迅猛增長,網絡接入邊緣的瓶頸阻塞日益嚴重。因此,必須提高網絡中核心設備的性能,以滿足網絡流量日益增長的需要。常見的通信網由電路交換系統(tǒng)和基于分組的交換系統(tǒng)構成,整個網絡由一系列小網絡、傳輸和終端設備組成,網絡間互通性差、可管理性不強,網絡業(yè)務不靈活。隨著電子商務、多媒體業(yè)務和VoIP等對帶寬的要求較高的業(yè)務的出現(xiàn),設計并實現(xiàn)高性能的網絡設備" title="網絡設備">網絡設備更加重要。為了滿足越來越多的網絡業(yè)務對網絡帶寬的需求,有研究機構和企業(yè)提出采用X86+FPGA/ASIC的系統(tǒng)架構,這種架構帶有明顯的數(shù)據平面和控制平面相分離的特征,因此能夠實現(xiàn)高性能目標。但由于FPGA或ASIC技術需要很大的研發(fā)投入,且進行功能擴展的性能較差,產品更新?lián)Q代的速度很慢。因此,這里提出在網絡設備中應用多核" title="多核">多核多線程處理器,繼續(xù)分離數(shù)據平面和控制平面,滿足用戶對網絡業(yè)務豐富和性能增長同步發(fā)展的需求。
2 框架設計及實現(xiàn)
RMI公司的XLR系列是基于RMI增強型MIPS64" title="MIPS64">MIPS64內核,可同時支持32個線程的獨特構架的處理器,工作頻率達1.5 GHz,同時支持高度集成的獨立硬件安全引擎和網絡應用加速器。XLR系列處理器采用多核多線程技術,具有很高的數(shù)據處理能力,可以在復雜的網絡環(huán)境中承擔網絡設備高速轉發(fā)任務。為了平衡高速的數(shù)據轉發(fā)和復雜的業(yè)務處理之間的矛盾,本系統(tǒng)在XLR系列器件的32個線程上運行Linux和VxWorks兩種操作系統(tǒng),并使用VxWorks完成高速的數(shù)據轉發(fā),使用Linux進行復雜的業(yè)務處理。
如果Linux和VxWorks兩種操作系統(tǒng)運行在不同的CORE上,則兩種操作系統(tǒng)不會競爭中斷和BUCKET等硬件資源,但卻對業(yè)務部署帶來很大麻煩,導致業(yè)務的劃分粒度也很粗獷。因此,本文提出Linux和VxWorks共CORE,通過共享內存區(qū)快速通信的方案,細化業(yè)務劃分粒度,并優(yōu)化XLR器件驅動程序框架,充分發(fā)揮軟硬件資源優(yōu)勢,提升網絡核心設備性能。
從硬件配置、網絡驅動、軟件結構3個層次構建網絡中核心設備框架,其中硬件配置用于配置XLR器件硬件資源分布,包括每個CORE相應站內的桶的深度以及GMAC/SPl4與CORE通過FMN總線通信所需的credits,以支持上層業(yè)務需要;網絡驅動的主要作用是屏蔽操作系統(tǒng)對底層硬件資源的競爭,正確區(qū)分控制業(yè)務報文和轉發(fā)數(shù)據報文,每個網口的網絡加速引擎將報文地址和長度信息封裝成FMN消息并提交給相應模塊進行處理;軟件層的主要作用是更好地利用不同操作系統(tǒng)的優(yōu)點,分離控制平面和數(shù)據平面,實現(xiàn)兩種操作系統(tǒng)間的通信,以實現(xiàn)復雜的業(yè)務控制和高速的數(shù)據轉發(fā)。圖1為該網絡核心設備系統(tǒng)架構。
2.1硬件配置
XLR系列處理器通過快速消息網絡FMN(Fast MessageNetwork)將系統(tǒng)的CPU CORE、報文處理單元PDE、加密單元Cypto引擎、多處理器互聯(lián)的HT接口(HyperTransport)、PCI-X等互聯(lián)。默認情況下,F(xiàn)MN總線上每個站內包含8個桶,每個桶的深度為32。每個桶都有其固定的ID,系統(tǒng)中共有128個桶,其中CORE使用前64個桶(0~63號桶)。
為了區(qū)分控制報文信息和數(shù)據報文信息,并結合網絡驅動程序將報文送至正確目的地,使能每個CORE內的0,3,4,7號桶,禁用1,2,5,6號桶。每個桶內含有64個entry。其中0號桶用于存放目的地是Linux的數(shù)據報文,而3號桶用于存放目的地是VxWorks的數(shù)據報文。4號桶用于存放Linux操作系統(tǒng)發(fā)送消息后產生的freeback消息,7號桶用于存放VxWorks操作系統(tǒng)發(fā)送消息后產生的freeback消息。為了實現(xiàn)GMAC/SP14和CORE能夠通過FMN總線通信,必須在每個站維護一定的credits數(shù),表1列出系統(tǒng)credits分布情況。
2.2 網絡驅動
根據不同的網絡環(huán)境,可設計不同的網絡驅動類型。如果網絡環(huán)境中流量較小,使用網絡處理器中的一個或幾個硬件線程即可滿足網絡帶寬要求,則可設計集中式網絡驅動程序。在集中式網絡驅動程序中,一個或少數(shù)幾個VCPU作為數(shù)據轉發(fā)的代理,大部分數(shù)據報文由這組代理VCPU接收、處理并轉發(fā);如果這組代理VCPU收到控制報文,則判斷報文目的地,并通過IPI中斷將控制報文轉發(fā)給相應VCPU處理。這種驅動程序設計徹底分離數(shù)據平面和控制平面,但其缺點是代理VCPU的壓力很大,如果網絡流量變大,則很可能因為數(shù)據報文擁塞而導致代理VCPU癱瘓,這時整個系統(tǒng)就必須重啟。為了能夠適應更大的網絡流量,這里設計分布式網絡驅動。分布式網絡驅動中,所有VCPU都會接收數(shù)據報文和控制報文,并進行相應的處理和轉發(fā)。分布式網絡驅動程序的優(yōu)點是所有VCPU平均分擔網絡流量,不會因為某幾個VCPU癱瘓而導致系統(tǒng)重啟。而分布式驅動程序使數(shù)據平面和控制平面的隔離不夠徹底,一定程度上影響數(shù)據轉發(fā)性能。
這里的應用場景為網絡中的核心設備,因此網絡流量非常大,可以采用分布式驅動程序設計。GMAC或SPI4接口收到數(shù)據后,數(shù)據通過NA的DMA直接存入內存區(qū),而NA將收到報文的信息封裝成FMN消息格式送到CORE0的0號桶。在分布式驅動程序設計中,所有VCPU都要相應中斷,中斷掩碼為0xffffffff。每個站內的桶接收到消息會隨機發(fā)送中斷信號到4個VCPU中的一個,收到中斷信號的VCPU響應中斷到桶內收消息,收到消息后,判斷消息是否需其本身處理,如果無需自己處理,就發(fā)送IPI中斷到目的VCPU,通知目的VCPU處理該消息。圖2為分布式驅動程序框架。
由于每個硬件線程都運行獨立的操作系統(tǒng),而且由于操作系統(tǒng)的差異性,操作系統(tǒng)會競爭資源,因此必須提出一種方案,使資源競爭對Linux和VxWorks操作系統(tǒng)透明。因為中斷信號的響應單位是CORE,并且CORE內4個硬件線程響應此中斷是隨機的,所以硬件線程對中斷的競爭是不可避免的。為此,提出通過下列方案實現(xiàn)消息發(fā)送到指定的目的地,也即保證Linux不會取走目的地是VxWorks的數(shù)據報文。
方案如下:①用某個GMAC網口接收控制消息,用其余GMAC和SP14接口處理數(shù)據報文;②每個CORE內8個桶,使能4個,禁用4個。分別使能0號桶,3號桶,4號桶,7號桶,禁用1,2,5,6號桶。每個桶內含有64個entry。其中0號桶用于存放目的地是Linux的數(shù)據報文,而3號桶用于存放目的地是VxWorks的數(shù)據報文。4號桶用于存放Linux操作系統(tǒng)發(fā)送消息后產生的freeback消息,7號桶用于存放VxWorks操作系統(tǒng)發(fā)送消息后產生的freeback消息;配置GMAC口NA中的pdeclass寄存器,將所有報文發(fā)送到CORE內的0號桶。配置其余GMAC口和SPI4接口NA的pdeclass寄存器,將所有報文發(fā)送到CORE內的3號桶。分別修改GMAC和SPl4發(fā)送函數(shù),將FREEBACK消息目的地設定為CORE內的4號桶和7號桶。該方案通過優(yōu)化數(shù)據接收流程,使資源的競爭對操作系統(tǒng)透明,每個操作系統(tǒng)以為自己獨享全部資源。
由于本文的應用環(huán)境網絡流量很大,其中數(shù)據流量占到90%左右,而控制信息只占約10%,所以在第1個CORE上,系統(tǒng)在VCPUO上運行Linux操作系統(tǒng),負責處理控制消息;而其余3個VCPU運行VxWorks,負責數(shù)據報文的轉發(fā)。
2.3 軟件結構
網絡核心設備系統(tǒng)架構軟件層完成操作系統(tǒng)部署方案。XLR系列器件有8個CORE,每個CORE內有4個硬件線程,4個硬件線程共享一級高速緩存、桶、中斷等資源。如果以CORE為單位部署操作系統(tǒng),那么CORE內4個硬件線程是SMP結構,不會競爭上述資源。但按CORE部署操作系統(tǒng)是一種粗粒度的劃分,是資源利用和系統(tǒng)性能的瓶頸。所以本文提出操作系統(tǒng)的部署以VCPU為單位,同一個CORE內既可有Linux也可有VxWorks。
Linux和VxWorks的優(yōu)缺點比較:Linux的優(yōu)點有,模塊化設計,可劃分細粒度業(yè)務;無版權,免費獲??;功能豐富,可擴展性強;用戶進程地址空間獨立;網絡資源豐富;系統(tǒng)穩(wěn)定性很高。其缺點為自旋鎖等機制導致實時性下降;可能導致中斷丟失;Linux系統(tǒng)管理復雜,培訓需要較長時間。而Vx-Works的優(yōu)點有:實時性好;內存碎片少;系統(tǒng)簡單,調試容易,有Tomado開發(fā)環(huán)境;商用操作實時系統(tǒng),提供的資源非常適合嵌入式應用:BSP開發(fā)非常規(guī)范。其缺點為內核保留的信息很少,導致很難開發(fā)復雜業(yè)務流程;網絡資源很少,技術支持只有WindRiver;系統(tǒng)穩(wěn)定性取決于開發(fā)者能力;內核采用實存儲管理方式。
為了更好的結合Linux和VxWorks兩種操作系統(tǒng)的優(yōu)點,這里使用Linux操作系統(tǒng)控制平面的業(yè)務處理,使用Vx-Works負責數(shù)據平面的轉發(fā)任務。
除了資源競爭帶來的問題外,還必須實現(xiàn)兩種操作系統(tǒng)之間的通信。由于兩種操作系統(tǒng)存在差異性,使兩者之間的交互不能通過簡單進程間通信方式FIFO,PIPE等實現(xiàn)。為了解決兩者間的通信問題,本文提出通過共享內存實現(xiàn)兩種操作系統(tǒng)之間通信的方案。首先,Linux和VxWorks將需要交互的數(shù)據放人共享內存區(qū),然后發(fā)送IPI中斷到目標操作系統(tǒng),通知目標操作系統(tǒng)去共享內存區(qū)取數(shù)據并進行處理。實現(xiàn)步驟:①VxWorks通過TLB映射共享內存區(qū)到虛擬地址。共享內存區(qū)經TLB映射后,VxWorks操作系統(tǒng)就可讀寫該區(qū)域。②Linux修改link腳本,在進程運行前預留共享內存區(qū)。③注冊一個字符設備,用于管理共享內存區(qū)。修改該設備的mmap函數(shù),該mmap函數(shù)實現(xiàn)共享內存區(qū)物理地址到虛擬地址的映射。④如果Linux用戶態(tài)進程運行,首先打開該字符設備,調用mmap函數(shù)映射共享內存區(qū)。這樣該用戶態(tài)進程就可以操作該共享內存區(qū)。⑤如果Linux內核態(tài)進程運行,調用iormap調用映射共享內存區(qū)物理地址到虛擬地址,這樣內核態(tài)進程就可以操作該共享內存。通過以上5個步驟,建立Linux和VxWorks兩種操作系統(tǒng)之間的共享內存區(qū)。
3 性能分析
這里性能測試的目的是測試目標網絡設備的網絡吞吐量,即在不丟包的前提下,該設備所能提供的最大傳輸速率。本次測試使用兩塊XLR系列器件級聯(lián)測試此系統(tǒng)性能,測試用兩塊器件均啟動一個VCPU,也即VCPU0,其上運行Linux操作系統(tǒng),安裝netperf網絡性能測試工具。其中,第1塊器件的VCPU0使用netperf發(fā)送數(shù)據報文,另一塊的VCPU0接收并處理數(shù)據。表2為測試得到的轉發(fā)速率。
在數(shù)據轉發(fā)過程中,查看得到每個VCPU的CPU占用率為60%左右,通過優(yōu)化netperf工具,可進一步提高轉發(fā)性能。
4 結束語
本文基于多核多線程的處理器,從硬件配置、網絡驅動程序、軟件結構3個層次構建一套網絡核心設備的系統(tǒng)架構。該架構對復雜的業(yè)務處理和高速的網絡流量轉發(fā)都做了優(yōu)化處理。給出3個層次的設計框架,并對關鍵問題提出解決方案。根據本文得到的實驗數(shù)據,得出利用多核多線程處理器并優(yōu)化硬件配置,在軟件層次優(yōu)化網絡流量處理流程,細粒度化業(yè)務模型,分離數(shù)據平面和控制平面,可以在完成復雜業(yè)務處理流程的前提下,大大提高網絡流量轉發(fā)速率。