李 祎, 陳淑平, 何王全
(江南計(jì)算技術(shù)研究所, 無錫 214083)
最新公布的HPC top 500顯示, 有207臺(tái)超級(jí)計(jì)算機(jī)使用以太網(wǎng)作為互連網(wǎng)絡(luò), 這表明TCP/IP是廣泛使用的網(wǎng)絡(luò)協(xié)議. 但隨著眾多學(xué)科領(lǐng)域?qū)W(wǎng)絡(luò)性能需求的不斷提升, TCP/IP協(xié)議中頻繁數(shù)據(jù)拷貝、復(fù)雜協(xié)議處理機(jī)制和中斷上下文切換逐漸成為數(shù)據(jù)傳輸瓶頸.而IB[1](InfiniBand)相比傳統(tǒng)以太網(wǎng)具有高帶寬低延遲的通信性能優(yōu)勢(shì), 更能滿足上層應(yīng)用需求. 將IB網(wǎng)絡(luò)與傳統(tǒng)以太網(wǎng)結(jié)合, 可以同時(shí)利用兩者優(yōu)勢(shì)以滿足不同的網(wǎng)絡(luò)需求, 這是當(dāng)今網(wǎng)絡(luò)融合趨勢(shì)下的一種研究方向, 其中IPoIB[2](IP over InfiniBand)和SDP實(shí)現(xiàn)了在IB網(wǎng)絡(luò)之上對(duì)TCP/IP協(xié)議的支持, iWarp和RoCE實(shí)現(xiàn)了在以太網(wǎng)上對(duì)RDMA (Remote Direct Memory Access)傳輸技術(shù)的支持. 這幾種技術(shù)和傳統(tǒng)的TCP/IP協(xié)議相比, 均能獲得更高的網(wǎng)絡(luò)性能, 且各有優(yōu)勢(shì), 使用者可以根據(jù)具體應(yīng)用場(chǎng)景選擇合適的技術(shù).
IB是一種高性能、低延遲的基于通道的高速互連結(jié)構(gòu)標(biāo)準(zhǔn), 支持RDMA技術(shù), 具有零拷貝以及CPU負(fù)載卸載的特點(diǎn), 能夠有效減少系統(tǒng)CPU和內(nèi)存的開銷,提高網(wǎng)絡(luò)吞吐量并降低網(wǎng)絡(luò)延遲. IPoIB是一種在IB網(wǎng)絡(luò)之上構(gòu)建TCP/IP的技術(shù), 隱藏IB網(wǎng)絡(luò)的復(fù)雜性, 使得TCP/IP 應(yīng)用程序可以不加修改地在以IB協(xié)議為基礎(chǔ)的網(wǎng)絡(luò)之上運(yùn)行, 同時(shí)還能利用IB網(wǎng)絡(luò)特有的優(yōu)勢(shì)以獲得更好的網(wǎng)絡(luò)傳輸性能[3]. 目前IPoIB主要應(yīng)用于商用x86集群服務(wù)器中, 官方維護(hù)組織OFED不斷地從數(shù)據(jù)處理、網(wǎng)絡(luò)管理、服務(wù)支持等角度對(duì)IPoIB進(jìn)行優(yōu)化更新, 但尚未有將IPoIB應(yīng)用于國產(chǎn)眾核服務(wù)器系統(tǒng)中的實(shí)例.
眾核處理器具有計(jì)算能力強(qiáng)、性能功耗比高等突出優(yōu)點(diǎn), 異構(gòu)眾核架構(gòu)已成為當(dāng)前超級(jí)計(jì)算機(jī)體系結(jié)構(gòu)的重要發(fā)展方向. 本文基于“國產(chǎn)異構(gòu)眾核并行系統(tǒng)”展開, 對(duì)IPoIB進(jìn)行移植, 并在已有優(yōu)化方法上研究進(jìn)一步提升IPoIB網(wǎng)絡(luò)性能的手段, 對(duì)于支持TCP/IP應(yīng)用具有重要的意義.
文章的后續(xù)部分組織如下: 第1節(jié)介紹國產(chǎn)并行系統(tǒng)平臺(tái)環(huán)境, 第2節(jié)給出相關(guān)工作介紹, 第3節(jié)簡(jiǎn)要介紹IPoIB的實(shí)現(xiàn), 第4節(jié)詳細(xì)闡述IPoIB在國產(chǎn)并行系統(tǒng)上的優(yōu)化手段, 第5節(jié)是實(shí)驗(yàn)結(jié)果, 最后對(duì)本文進(jìn)行總結(jié).
“國產(chǎn)并行系統(tǒng)”[4]運(yùn)算單元采用面向高性能計(jì)算的眾核處理器, 包括Intel的MIC、Nvidia和AMD的GPU、Godson-T、申威眾核處理器等. 申威眾核處理器包含4個(gè)Core-Groups (CGs), 每個(gè)CG包含一個(gè)MPE(Management Processing Element, 主核)、一個(gè) 8*8 的Computing Processing Element (CPE, 從核) cluster和一個(gè)Memory Controller (MC), 4個(gè)CG通過片上網(wǎng)絡(luò)(NoC)互連, 處理器通過System interface (SI)連接外部設(shè)備. 申威眾核處理器的主核和從核共享Memory, 從核采用輕量級(jí)的核心設(shè)計(jì), 配備由軟件管理的高速存儲(chǔ)器 SPM (Scratch Pad Memory), 支持通過 DMA(Direct Memory Access)方式在Memory和SPM間批量傳輸數(shù)據(jù).
運(yùn)算系統(tǒng)采用申威眾核處理器構(gòu)建, 通過中心交換網(wǎng)絡(luò)和管理網(wǎng)絡(luò)與存儲(chǔ)系統(tǒng)和管理系統(tǒng)連接, 系統(tǒng)的登陸界面和存儲(chǔ)空間采用單一映像組織, 為用戶提供統(tǒng)一的視圖.
數(shù)據(jù)中心網(wǎng)絡(luò)一般采用TCP/IP協(xié)議并基于以太網(wǎng)技術(shù)搭建, 近年來, 為了滿足數(shù)據(jù)中心網(wǎng)絡(luò)對(duì)高帶寬、低延遲、低能耗的需求, 減少TCP/IP協(xié)議處理對(duì)CPU產(chǎn)生的負(fù)擔(dān), 業(yè)內(nèi)研究者重點(diǎn)著眼于TCP/IP協(xié)議卸載技術(shù). TOE (TCP卸載引擎)技術(shù)利用硬件分擔(dān)CPU對(duì)TCP/IP協(xié)議處理所造成的負(fù)擔(dān), 將協(xié)議的處理放到網(wǎng)卡專用硬件中, 使CPU占用率大幅下降, 帶寬性能也有一定提升, 但由于網(wǎng)卡和主機(jī)接口的不兼容性和延遲增加的額外消耗, 其發(fā)展難以維系.
研究者又從新型高速網(wǎng)絡(luò)(IB、FC等)與傳統(tǒng)TCP/IP協(xié)議結(jié)合以提升網(wǎng)絡(luò)性能的角度出發(fā), 提出iWARP、RoCE、SDP等網(wǎng)絡(luò)融合技術(shù): iWARP (Internet Wide Area RDMA Protocol)[5]是一種在TCP/IP協(xié)議棧之上實(shí)現(xiàn)RDMA的技術(shù), 實(shí)現(xiàn)了遠(yuǎn)程數(shù)據(jù)的直接存取, 數(shù)據(jù)可以直接放入上層協(xié)議的接收緩存區(qū), 避免了不必要的內(nèi)存拷貝, 大大提升了時(shí)延和帶寬性能, 可用于廣域網(wǎng)間RDMA通信; RoCE (RDMA over Converged Ethernet)[6]是一種在以太網(wǎng)數(shù)據(jù)鏈路層之上實(shí)現(xiàn)RDMA的技術(shù), 一般建立在無損以太網(wǎng)之上, 和iWARP相比降低了復(fù)雜性和部署難度, 簡(jiǎn)化了管理, 且通信性能比 iWARP 略好[7], 但造價(jià)更高; SDP (Socket Direct Protocol)[8]是一種在InfiniBand可靠連接之上實(shí)現(xiàn)字節(jié)流傳輸?shù)募夹g(shù), 利用IB網(wǎng)絡(luò)中send/receive和RDMA等操作, 為應(yīng)用程序提供socket套接字接口調(diào)用, 與傳統(tǒng)TCP/IP相比, 擁有協(xié)議卸載、旁路核心、零拷貝的特點(diǎn), 與IPoIB相比, 更好地利用了IB網(wǎng)絡(luò)的高速通信能力, 但由于SDP需要另外搭建socket庫且難以進(jìn)行網(wǎng)絡(luò)管理, 已逐漸被淘汰.
IPoIB作為在IB中兼容TCP/IP應(yīng)用的主要技術(shù),其性能優(yōu)化一直是研究熱點(diǎn), 研究人員從IPoIB的多個(gè)方面對(duì)其進(jìn)行了數(shù)據(jù)處理方面的優(yōu)化探索: 包括支持LRO、aRFS、RSS、TSS等CPU負(fù)載卸載技術(shù)、優(yōu)化中斷處理流程、實(shí)現(xiàn)隧道卸載、利用多個(gè)pkeys實(shí)現(xiàn)VLAN等, 實(shí)現(xiàn)了IPoIB在多數(shù)據(jù)流多處理器下的性能提升.
上述工作都是關(guān)于網(wǎng)絡(luò)融合技術(shù)在商用平臺(tái)上的研究進(jìn)展, 目前在國產(chǎn)系統(tǒng)上尚未有網(wǎng)絡(luò)融合技術(shù)的應(yīng)用. 本文做了一種新的研究嘗試, 將IPoIB協(xié)議應(yīng)用到國產(chǎn)并行系統(tǒng)中, 對(duì)移植后的IPoIB進(jìn)行性能測(cè)試和評(píng)估, 并且使用一系列優(yōu)化方法來提高IPoIB在國產(chǎn)并行系統(tǒng)中的通信性能.
IB是IBTA提出的一種基于通道的高速互連結(jié)構(gòu)標(biāo)準(zhǔn), 可提供低延遲、高帶寬的數(shù)據(jù)傳輸能力, 在HPC領(lǐng)域具有廣泛的應(yīng)用. 它采用RDMA編程語義,為用戶提供IB verbs編程接口, 但其語義和編程方法與Socket編程語義有非常大的差異, 傳統(tǒng)的TCP/IP應(yīng)用不能在其上直接運(yùn)行. IPoIB解決了該問題, 它將HCA卡虛擬成網(wǎng)卡設(shè)備, 使通用的TCP/IP 應(yīng)用程序不加修改地在IB網(wǎng)絡(luò)中運(yùn)行, 拓展了IB應(yīng)用領(lǐng)域及范圍.
圖1給出了IPoIB協(xié)議架構(gòu). IPoIB協(xié)議位于內(nèi)核層, 處于TCP/IP協(xié)議棧之下、IB傳輸層之上. 用戶層應(yīng)用程序調(diào)用socket套接字接口將數(shù)據(jù)送進(jìn)內(nèi)核層TCP/IP協(xié)議棧, IPoIB 通過注冊(cè)net_device結(jié)構(gòu)以及一系列設(shè)備操作函數(shù)為上層TCP/IP協(xié)議或ARP協(xié)議提供網(wǎng)絡(luò)設(shè)備傳輸接口, 設(shè)備操作函數(shù)利用IB的諸多verbs: QP (Queue Pair)隊(duì)列對(duì)、CQ (Completion Queue)完成隊(duì)列以及MR (Memory Regions)地址空間注冊(cè)信息等與遠(yuǎn)程節(jié)點(diǎn)交互, 通過IB的send/receive操作實(shí)現(xiàn)數(shù)據(jù)傳送接收及處理. 可以將IPoIB看作為以太網(wǎng)的數(shù)據(jù)鏈路層.
圖1 IPoIB協(xié)議架構(gòu)圖
IPoIB分別利用兩種IB服務(wù)進(jìn)行數(shù)據(jù)傳輸, 其中RC (reliable connected)是面向連接的可靠傳輸服務(wù), 最大可發(fā)送2 GB大小的數(shù)據(jù); UD (Unreliable Datagram)是不可靠的數(shù)據(jù)報(bào)服務(wù), 一次最多發(fā)送4 KB數(shù)據(jù).
IPoIB主要實(shí)現(xiàn)下列功能: (1)地址解析: 將IB地址信息編碼進(jìn)MAC地址, 通過ARP獲取目的方MAC 地址, 進(jìn)而獲得 QPN (Queue Pair Number)、LID等IB地址信息; (2)報(bào)文封裝: IPoIB為IP報(bào)文添加4字節(jié)的鏈路層包頭, 并封裝成一條IB消息, 通過IB網(wǎng)絡(luò)發(fā)送給遠(yuǎn)程節(jié)點(diǎn), 完整的IPoIB 數(shù)據(jù)包如圖2所示; (3)多播支持: IB多播在IPoIB中起關(guān)鍵作用, ARP協(xié)議必須通過IB多播實(shí)現(xiàn). IPoIB定義了多播GID和對(duì)應(yīng)的多播組, 并啟動(dòng)多播組任務(wù)處理組播列表的變化、響應(yīng)多播請(qǐng)求, 使節(jié)點(diǎn)自由加入多播組或從多播組中刪除.
圖3為IPoIB數(shù)據(jù)包在協(xié)議棧中的處理流程[9], 包括數(shù)據(jù)發(fā)送和接收過程.
發(fā)送過程: 應(yīng)用程序通過sys_socketcall系統(tǒng)調(diào)用進(jìn)入socket內(nèi)核層, socket層再通過sock_sendmsg函數(shù)調(diào)用進(jìn)入inet_sendmsg函數(shù), 然后調(diào)用TCP層發(fā)送函數(shù)tcp_sendmsg, 該函數(shù)在準(zhǔn)備好sk_buff結(jié)構(gòu)后調(diào)用skb_do_copy_data_nocache將用戶數(shù)據(jù)拷貝到內(nèi)核層, 然后數(shù)據(jù)包依次通過IP層、設(shè)備驅(qū)動(dòng)層, 最后利用IPoIB驅(qū)動(dòng)中的ipoib_hard_header函數(shù)為ip報(bào)文添加 4 字節(jié)報(bào)文頭, 然后調(diào)用 ipoib_start_xmit函數(shù), 將數(shù)據(jù)內(nèi)存地址進(jìn)行DMA映射, 并通過IB的send操作將數(shù)據(jù)發(fā)送出去.
接收過程: 應(yīng)用進(jìn)程調(diào)用sys_socketcall系統(tǒng)調(diào)用進(jìn)入內(nèi)核層, 再通過socket層的接收函數(shù)sock_recvmsg進(jìn)入到TCP層, TCP調(diào)用tcp_recvmsg函數(shù)接收數(shù)據(jù),當(dāng)沒有數(shù)據(jù)包到來時(shí), 用戶接收進(jìn)程會(huì)休眠. IPoIB驅(qū)動(dòng)程序通過NAPI輪詢函數(shù)ipoib_poll檢查是否有數(shù)據(jù)到達(dá), 并對(duì)數(shù)據(jù)包進(jìn)行正確性檢驗(yàn), 去掉IPoIB層鏈路頭, 然后通過netif_receive_skb函數(shù)將數(shù)據(jù)依次移交給IP層、TCP層處理. TCP層再通過skb_copy_datagram_iovec將內(nèi)核層的數(shù)據(jù)拷貝到用戶層緩沖區(qū).
圖2 IPoIB數(shù)據(jù)包格式圖
圖3 IPoIB數(shù)據(jù)包協(xié)議處理流程圖
IPoIB數(shù)據(jù)包在TCP/IP協(xié)議棧處理過程中會(huì)占用較多的CPU時(shí)間和內(nèi)存資源, 主要包括數(shù)據(jù)拷貝、協(xié)議處理機(jī)制、延遲應(yīng)答等3個(gè)方面. 數(shù)據(jù)拷貝包括數(shù)據(jù)包在網(wǎng)卡和內(nèi)核空間以及內(nèi)核空間與用戶空間之間的拷貝; 協(xié)議處理機(jī)制包括復(fù)雜的擁塞控制[10]、超時(shí)重發(fā)機(jī)制[11]、TCP協(xié)議完整性校驗(yàn)、數(shù)據(jù)包分發(fā)和整合等; 延遲應(yīng)答可以推遲TCP ACK的發(fā)送, 以便使ACK與數(shù)據(jù)包一起發(fā)送. 本章針對(duì)國產(chǎn)并行系統(tǒng)上IPoIB的性能瓶頸點(diǎn), 對(duì)這三個(gè)方面的處理流程進(jìn)行了優(yōu)化.
非確定性路由中數(shù)據(jù)包沿不同的路徑到達(dá)接收端以及數(shù)據(jù)包在發(fā)送單元中調(diào)度順序與到達(dá)順序不一致等因素都會(huì)導(dǎo)致接收端產(chǎn)生亂序數(shù)據(jù)包[12]. 在高速網(wǎng)絡(luò)中, 發(fā)送端的發(fā)送窗口很大, 頻繁的亂序數(shù)據(jù)會(huì)導(dǎo)致重發(fā)大量的數(shù)據(jù)包, 致使性能大幅下降. 針對(duì)亂序數(shù)據(jù)包對(duì)網(wǎng)絡(luò)性能產(chǎn)生的影響, 提出一種重排序的解決方案: 每對(duì)連接發(fā)送的數(shù)據(jù)包都攜帶一個(gè)16位的序列號(hào)msg_id, 接收端按照序列號(hào)進(jìn)行重排序, 如果數(shù)據(jù)包是順序的, 則直接將該數(shù)據(jù)包交上層協(xié)議棧處理; 如果是亂序的, 則進(jìn)行緩存. 這種方案的缺點(diǎn)在于若網(wǎng)絡(luò)中亂序情況嚴(yán)重, 順序的數(shù)據(jù)包遲遲不到達(dá), 接收端長時(shí)間緩存亂序數(shù)據(jù)包引起超時(shí), 進(jìn)而導(dǎo)致上層TCP重傳數(shù)據(jù), 反而致使性能下降更嚴(yán)重, 得不償失, 且緩存大量亂序包會(huì)消耗過多的系統(tǒng)內(nèi)存. 為了防止上述現(xiàn)象出現(xiàn), 采用“盡可能”保序的手段, 規(guī)定接收端對(duì)數(shù)據(jù)包進(jìn)行重排序的窗口長度大小限制在W, 對(duì)不在窗口內(nèi)的數(shù)據(jù)包不進(jìn)行亂序處理, 預(yù)期序列號(hào)next_id始終指向窗口左邊界的位置. 具體見如圖4所示的亂序處理方法.
窗口長度W的大小設(shè)置原則以在一次網(wǎng)卡硬件收包中斷發(fā)生時(shí), NAPI設(shè)備輪詢函數(shù)所能處理的報(bào)文數(shù)量上限NAPI_POLL_WEIGHT為參考, 一般為32或64. 這種設(shè)置原則是有依據(jù)的, 在一些中斷處理速度較慢的網(wǎng)卡設(shè)備中, 若是窗口長度W超過了一次輪詢報(bào)文數(shù)量上限, 亂序較重情況下, 亂序數(shù)據(jù)包很可能被緩存較長時(shí)間, 直到下一次中斷觸發(fā)處理新到來的數(shù)據(jù)包, 從而造成網(wǎng)絡(luò)性能下降.
圖4 亂序處理示意圖
詳細(xì)算法描述如算法1.
算法1. 亂序處理算法INPUT:到達(dá)接收端的數(shù)據(jù)包序號(hào)msg_id預(yù)期序列號(hào)next_id←0 BEGIN IF(msg_id=next_id)BEGIN DO{將數(shù)據(jù)包轉(zhuǎn)交給上層;next_id← next_id+1;}WHILE(next_id位置已緩存數(shù)據(jù)包)END ELSE IF(msg_id<next_id)將數(shù)據(jù)包轉(zhuǎn)交給上層;ELSE IF(next_id<msg_id≤next_id+W)暫時(shí)緩存數(shù)據(jù)包;ELSE IF(msg_id>next_id+W)DO{IF(next_id位置已緩存數(shù)據(jù)包)BEGIN將該數(shù)據(jù)包轉(zhuǎn)交給上層;END next_id← next_id+1;}WHILE(msg_id>next_id+W)END
優(yōu)化內(nèi)存拷貝是提高IPoIB性能的重要手段. 在圖3的IPoIB數(shù)據(jù)包處理流程走向圖的指導(dǎo)下, 逐一查看每個(gè)功能模塊函數(shù)調(diào)用的局部時(shí)間, 發(fā)現(xiàn)RC模式下用戶層到內(nèi)核層數(shù)據(jù)拷貝速率較慢. 分析發(fā)現(xiàn)TCP協(xié)議在skb_do_copy_data_nocache函數(shù)將用戶層數(shù)據(jù)拷貝進(jìn)內(nèi)核層時(shí), 需要對(duì)數(shù)據(jù)進(jìn)行正確性校驗(yàn),這會(huì)對(duì)網(wǎng)絡(luò)性能造成損耗. 而不計(jì)算數(shù)據(jù)校驗(yàn)和時(shí),內(nèi)存拷貝速率明顯提高. 一般來講服務(wù)器均已實(shí)現(xiàn)拷貝內(nèi)存的“糾單錯(cuò)、報(bào)雙錯(cuò)”機(jī)制, 同時(shí)IB也實(shí)現(xiàn)了對(duì)數(shù)據(jù)進(jìn)行校驗(yàn)的功能, 因此本文將RC模式下計(jì)算數(shù)據(jù)校驗(yàn)和的工作由TCP協(xié)議轉(zhuǎn)交給IB網(wǎng)卡硬件完成, 從而減少TCP協(xié)議計(jì)算檢驗(yàn)和的工作, 減輕CPU負(fù)擔(dān), 實(shí)現(xiàn)了IPoIB用戶層數(shù)據(jù)到內(nèi)核層拷貝的優(yōu)化.
網(wǎng)絡(luò)參數(shù)調(diào)優(yōu)是提高IPoIB性能的手段之一, 通過調(diào)整內(nèi)核參數(shù)達(dá)到提升IPoIB性能的目的.
圖5給出了網(wǎng)絡(luò)參數(shù)優(yōu)化模型. 網(wǎng)絡(luò)參數(shù)按照功能分為以下幾類: (1)資源分配: 諸如信道分配、隊(duì)列大小、緩沖區(qū)空間等, 科學(xué)合理配置資源可以提高網(wǎng)絡(luò)的利用率, 有助于IPoIB運(yùn)行時(shí)吞吐量的顯著提升;(2)任務(wù)調(diào)度: 包括中斷緩和、傳輸隊(duì)列輪詢等, 網(wǎng)絡(luò)任務(wù)調(diào)度直接影響網(wǎng)絡(luò)系統(tǒng)的負(fù)載均衡, 對(duì)IPoIB的平均時(shí)延有一定影響; (3)協(xié)議運(yùn)行時(shí)設(shè)置: ACK應(yīng)答機(jī)制、延時(shí)機(jī)制、時(shí)間戳等, 優(yōu)化IPoIB的多種協(xié)議運(yùn)行機(jī)制, 可以不同程度上提高網(wǎng)絡(luò)帶寬以及網(wǎng)絡(luò)系統(tǒng)整體性能.
網(wǎng)絡(luò)參數(shù)調(diào)優(yōu)對(duì)內(nèi)核環(huán)境影響較小, 但是網(wǎng)絡(luò)性能提升效果卻較為明顯. 需要注意的是, 內(nèi)核參數(shù)多種多樣, 參數(shù)的設(shè)置受具體的服務(wù)器系統(tǒng)環(huán)境影響, 需要根據(jù)實(shí)際網(wǎng)絡(luò)應(yīng)用負(fù)載對(duì)參數(shù)進(jìn)行適應(yīng)性調(diào)整, 在尋找最優(yōu)參數(shù)中必須分清主次, 突出改善主要參數(shù), 使網(wǎng)絡(luò)盡可能得到有效利用. 針對(duì)具體的輸入數(shù)據(jù)流, 本文利用sysctl命令設(shè)置網(wǎng)絡(luò)參數(shù), 試驗(yàn)了網(wǎng)絡(luò)參數(shù)優(yōu)化模型中不同的參數(shù)變量值和不同的參數(shù)組合, 找出能為IPoIB帶來性能提升的參數(shù)組合及其數(shù)值. 根據(jù)試驗(yàn)結(jié)果, 給出令I(lǐng)PoIB通信性能最優(yōu)的配置策略: (1)啟用tcp_low_latency, 要求TCP/IP棧在高吞吐量的情況下盡量保持低延時(shí); (2) 將rmem_max和wmem_max設(shè)為16 MB, 增大TCP連接在發(fā)送和接收ACK期間所能處理的最大數(shù)據(jù)包, 從而減少傳輸?shù)攘繑?shù)據(jù)過程中處理ACK所用時(shí)間; (3) 將tcp_rmem和tcp_wmem中的max值設(shè)為16 MB. 目的在于增大socket發(fā)送和接收緩沖區(qū)內(nèi)存空間, 使一塊內(nèi)存空間存放盡量多的數(shù)據(jù), 減少為數(shù)據(jù)分配多個(gè)內(nèi)存塊的管理開銷, 優(yōu)化數(shù)據(jù)傳輸流.
圖5 網(wǎng)絡(luò)參數(shù)優(yōu)化模型圖
TCP采用應(yīng)答延遲機(jī)制時(shí), 如果當(dāng)前時(shí)間與最近一次接收數(shù)據(jù)包的時(shí)間間隔小于延遲應(yīng)答超時(shí)時(shí)間,則會(huì)推遲ACK應(yīng)答的發(fā)送, 積攢多個(gè)應(yīng)答并將它們結(jié)合成一個(gè)響應(yīng)包, 與需要沿該方向發(fā)送的數(shù)據(jù)一起發(fā)送, 從而減少協(xié)議開銷. 然而, 在應(yīng)用程序進(jìn)行交互處理時(shí), 延遲ACK應(yīng)答時(shí)間過長可能會(huì)降低應(yīng)用程序的效率. TCP協(xié)議中利用宏定義TCP_DELACK_MIN控制最小延遲確認(rèn)時(shí)間, 一般默認(rèn)值為(HZ/25), 也就是40 ms. 本文在不改變其它參數(shù)的情況下, 逐一試驗(yàn)在1 ms~40 ms范圍內(nèi)不同的 TCP_DELACK_MIN 值, 并測(cè)試網(wǎng)絡(luò)最大帶寬, 發(fā)現(xiàn)最小延遲應(yīng)答時(shí)間設(shè)為5 ms左右時(shí), 網(wǎng)絡(luò)帶寬可以達(dá)到最大, 既能維持較低協(xié)議開銷, 又可以減少TCP傳輸中ACK的等待時(shí)間, 使得網(wǎng)絡(luò)帶寬最大化, 提升內(nèi)存的利用率. 最佳的延遲應(yīng)答時(shí)間受服務(wù)器系統(tǒng)環(huán)境和網(wǎng)絡(luò)應(yīng)用場(chǎng)景的影響, 本文所得結(jié)果在其它集群系統(tǒng)中可能不是最優(yōu), 但其試驗(yàn)方法具有普適性.
本文在國產(chǎn)異構(gòu)眾核系統(tǒng)上對(duì)IPoIB進(jìn)行測(cè)試,配備32 GB內(nèi)存, 節(jié)點(diǎn)間采用40 GB/s的Infiniband EDR網(wǎng)絡(luò)連接. 網(wǎng)絡(luò)性能測(cè)試工具選用Netperf-2.4.5和Iperf-2.0.2. Netperf主要用于記錄兩對(duì)聯(lián)節(jié)點(diǎn)間TCP單連接帶寬、延遲、CPU利用率、內(nèi)存等資源的占用情況, Iperf用于記錄兩對(duì)聯(lián)節(jié)點(diǎn)之間TCP多連接帶寬.
5.1.1 不同消息大小帶寬對(duì)比
利用Netperf工具測(cè)試兩對(duì)聯(lián)節(jié)點(diǎn)間單個(gè)TCP連接優(yōu)化前后不同消息大小帶來的帶寬變化, 結(jié)果如圖6所示.
圖6 不同消息大小帶寬對(duì)比圖
從圖6可以看出, IPoIB通信性能優(yōu)化效果良好,優(yōu)化后的IPoIB網(wǎng)絡(luò)帶寬明顯高于優(yōu)化前. 由測(cè)試數(shù)據(jù)可知, 優(yōu)化后的峰值帶寬達(dá)到1340 MB/s, 對(duì)比優(yōu)化前的227 MB/s提升近6倍. 可見針對(duì)IPoIB的優(yōu)化對(duì)帶寬具有較好提升效果, 使得系統(tǒng)的IB網(wǎng)絡(luò)資源得到盡可能的使用, 提升了IPoIB在國產(chǎn)異構(gòu)并行系統(tǒng)上的運(yùn)行效果, 證明優(yōu)化方法足夠有效.
5.1.2 多連接帶寬對(duì)比
使用Iperf測(cè)試兩節(jié)點(diǎn)間多個(gè)TCP連接的網(wǎng)絡(luò)最大帶寬, 從2個(gè)連接測(cè)到10個(gè)連接, 如圖7所示.
圖7 不同連接數(shù)帶寬對(duì)比圖
測(cè)試數(shù)據(jù)表明, 連接數(shù)為6或7時(shí), 網(wǎng)絡(luò)帶寬達(dá)到最大. 優(yōu)化后的網(wǎng)絡(luò)帶寬可以達(dá)到1800 MB/s, 相比單連接最大帶寬1340 MB/s提升1.34倍, 相比優(yōu)化前多連接的網(wǎng)絡(luò)最大帶寬 615 MB/s, 提高近 3 倍. 可以看出, 在多個(gè)進(jìn)程下網(wǎng)絡(luò)帶寬能有較大提升, 主要原因是: (1)并行系統(tǒng)的CPU多核組得到了有效利用; (2)通過在傳輸過程中對(duì)數(shù)據(jù)包進(jìn)行抓取, 發(fā)現(xiàn)在其中某個(gè)TCP連接等待ACK不發(fā)送數(shù)據(jù)包時(shí), 另一個(gè)TCP連接不用等待ACK, 繼續(xù)發(fā)包, 從而使得鏈路帶寬得到有效利用.
5.1.3 CPU利用率對(duì)比
在高速網(wǎng)絡(luò)環(huán)境下, CPU的處理能力很大程度上影響網(wǎng)絡(luò)的性能. 通過測(cè)試發(fā)現(xiàn), 優(yōu)化前IPoIB CPU利用率為33%, 優(yōu)化后的IPoIB CPU利用率在24%左右,優(yōu)化后的CPU利用率明顯低于優(yōu)化前. 在最好的情況下, IPoIB優(yōu)化后的CPU利用率可以降低約30%.
利用Netperf測(cè)試優(yōu)化后的IPoIB在國產(chǎn)并行系統(tǒng)上兩節(jié)點(diǎn)間通信的帶寬和延遲, 并與萬兆以太網(wǎng)對(duì)比.萬兆以太網(wǎng)卡型號(hào) T520, 10 GB/s, 理論帶寬為 1250 MB/s,萬兆網(wǎng)卡測(cè)試環(huán)境采用國產(chǎn)中標(biāo)麒麟服務(wù)器, 處理器型號(hào)為申威1621. 測(cè)試結(jié)果如表1所示.
表1 IPoIB與萬兆以太網(wǎng)性能對(duì)比
從表1可以看出萬兆以太網(wǎng)的穩(wěn)定帶寬在1024 MB/s左右, 而IPoIB優(yōu)化后的帶寬達(dá)1340 MB/s,是萬兆以太網(wǎng)持續(xù)帶寬的1.31倍; 萬兆以太網(wǎng)延遲平均約為 30 μs, IPoIB 延遲平均 39 μs, 相比萬兆以太網(wǎng)延遲高9 μs. 基礎(chǔ)性能對(duì)比結(jié)果表明, IPoIB在國產(chǎn)異構(gòu)眾核并行系統(tǒng)上的通信性能相比基于10 GbE的萬兆以太網(wǎng)通信性能要略顯優(yōu)勢(shì), 持續(xù)帶寬優(yōu)于萬兆以太網(wǎng), 延遲雖然比萬兆以太網(wǎng)略大, 但實(shí)際應(yīng)用中聚合帶寬是主要考慮因素, 因此IPoIB相比10 GbE是更好的選擇.
利用Iperf測(cè)試國產(chǎn)并行系統(tǒng)上兩節(jié)點(diǎn)間通信處于不同流量負(fù)載時(shí)的亂序情況, 亂序處理窗口長度W設(shè)為32, 為消除偶然因素影響, 每個(gè)負(fù)載下運(yùn)行10次取平均值. 表2顯示了在不同流量負(fù)載下亂序處理前后每秒發(fā)生的亂序次數(shù)并統(tǒng)計(jì)亂序減少比例. 可以看出, 亂序處理對(duì)于減少亂序數(shù)據(jù)包的作用效果十分明顯: 網(wǎng)絡(luò)流量較高時(shí)亂序情況比較嚴(yán)重, 而經(jīng)過亂序處理后亂序次數(shù)明顯減少, 亂序減少比例可達(dá)95%以上;當(dāng)網(wǎng)絡(luò)負(fù)載較輕時(shí), 經(jīng)過亂序處理后網(wǎng)絡(luò)不再有亂序包.
表2 不同流量負(fù)載下亂序處理效果
為了驗(yàn)證亂序較重時(shí)窗口長度W設(shè)置過大對(duì)性能造成的不利影響, 每隔一段時(shí)間讓發(fā)送方故意丟棄一次數(shù)據(jù)包以模擬亂序較重的情況, 利用Iperf測(cè)試窗口長度分別為32和80的最大網(wǎng)絡(luò)帶寬, 結(jié)果如表3所示. 從表3可以看出, 亂序較重時(shí),W為32的最大帶寬為1782 MB/s, 亂序程度減少95.8%;W為80的最大帶寬為1624 MB/s, 即便亂序減少效果更好, 但帶寬下降明顯. 實(shí)驗(yàn)結(jié)果證明窗口長度不宜設(shè)置過大, 過大反而會(huì)造成帶寬性能下降.
表3 不同窗口長度的網(wǎng)絡(luò)性能對(duì)比
本文將IPoIB移植到國產(chǎn)異構(gòu)眾核并行系統(tǒng)上,并進(jìn)行了亂序處理、拷貝優(yōu)化、網(wǎng)絡(luò)參數(shù)調(diào)優(yōu)以及應(yīng)答延遲避免等一系列優(yōu)化措施. 測(cè)試結(jié)果顯示, 優(yōu)化后IPoIB基礎(chǔ)帶寬峰值性能為1340 MB/s, 比優(yōu)化前IPoIB帶寬提升近6倍, 也高于10 GB萬兆以太網(wǎng); 多連接下帶寬達(dá)到1800 MB/s, 相比單連接提升1.34倍;CPU利用率也有了顯著降低; 亂序處理機(jī)制作用效果明顯.
IPoIB基于IB的send/receive異步消息機(jī)制實(shí)現(xiàn),而沒有利用具有零拷貝、CPU負(fù)載卸載優(yōu)勢(shì)的RDMA機(jī)制, 考慮到在一些特定的應(yīng)用場(chǎng)景下利用RDMA實(shí)現(xiàn)IPoIB的通信效果可能會(huì)更好, 后續(xù)將制定以RDMA為底層通信機(jī)制的IPoIB實(shí)現(xiàn)策略, 以期進(jìn)一步提高IPoIB通信性能.