李 祎, 陳淑平, 何王全
(江南計算技術研究所, 無錫 214083)
最新公布的HPC top 500顯示, 有207臺超級計算機使用以太網作為互連網絡, 這表明TCP/IP是廣泛使用的網絡協議. 但隨著眾多學科領域對網絡性能需求的不斷提升, TCP/IP協議中頻繁數據拷貝、復雜協議處理機制和中斷上下文切換逐漸成為數據傳輸瓶頸.而IB[1](InfiniBand)相比傳統以太網具有高帶寬低延遲的通信性能優勢, 更能滿足上層應用需求. 將IB網絡與傳統以太網結合, 可以同時利用兩者優勢以滿足不同的網絡需求, 這是當今網絡融合趨勢下的一種研究方向, 其中IPoIB[2](IP over InfiniBand)和SDP實現了在IB網絡之上對TCP/IP協議的支持, iWarp和RoCE實現了在以太網上對RDMA (Remote Direct Memory Access)傳輸技術的支持. 這幾種技術和傳統的TCP/IP協議相比, 均能獲得更高的網絡性能, 且各有優勢, 使用者可以根據具體應用場景選擇合適的技術.
IB是一種高性能、低延遲的基于通道的高速互連結構標準, 支持RDMA技術, 具有零拷貝以及CPU負載卸載的特點, 能夠有效減少系統CPU和內存的開銷,提高網絡吞吐量并降低網絡延遲. IPoIB是一種在IB網絡之上構建TCP/IP的技術, 隱藏IB網絡的復雜性, 使得TCP/IP 應用程序可以不加修改地在以IB協議為基礎的網絡之上運行, 同時還能利用IB網絡特有的優勢以獲得更好的網絡傳輸性能[3]. 目前IPoIB主要應用于商用x86集群服務器中, 官方維護組織OFED不斷地從數據處理、網絡管理、服務支持等角度對IPoIB進行優化更新, 但尚未有將IPoIB應用于國產眾核服務器系統中的實例.
眾核處理器具有計算能力強、性能功耗比高等突出優點, 異構眾核架構已成為當前超級計算機體系結構的重要發展方向. 本文基于“國產異構眾核并行系統”展開, 對IPoIB進行移植, 并在已有優化方法上研究進一步提升IPoIB網絡性能的手段, 對于支持TCP/IP應用具有重要的意義.
文章的后續部分組織如下: 第1節介紹國產并行系統平臺環境, 第2節給出相關工作介紹, 第3節簡要介紹IPoIB的實現, 第4節詳細闡述IPoIB在國產并行系統上的優化手段, 第5節是實驗結果, 最后對本文進行總結.
“國產并行系統”[4]運算單元采用面向高性能計算的眾核處理器, 包括Intel的MIC、Nvidia和AMD的GPU、Godson-T、申威眾核處理器等. 申威眾核處理器包含4個Core-Groups (CGs), 每個CG包含一個MPE(Management Processing Element, 主核)、一個 8*8 的Computing Processing Element (CPE, 從核) cluster和一個Memory Controller (MC), 4個CG通過片上網絡(NoC)互連, 處理器通過System interface (SI)連接外部設備. 申威眾核處理器的主核和從核共享Memory, 從核采用輕量級的核心設計, 配備由軟件管理的高速存儲器 SPM (Scratch Pad Memory), 支持通過 DMA(Direct Memory Access)方式在Memory和SPM間批量傳輸數據.
運算系統采用申威眾核處理器構建, 通過中心交換網絡和管理網絡與存儲系統和管理系統連接, 系統的登陸界面和存儲空間采用單一映像組織, 為用戶提供統一的視圖.
數據中心網絡一般采用TCP/IP協議并基于以太網技術搭建, 近年來, 為了滿足數據中心網絡對高帶寬、低延遲、低能耗的需求, 減少TCP/IP協議處理對CPU產生的負擔, 業內研究者重點著眼于TCP/IP協議卸載技術. TOE (TCP卸載引擎)技術利用硬件分擔CPU對TCP/IP協議處理所造成的負擔, 將協議的處理放到網卡專用硬件中, 使CPU占用率大幅下降, 帶寬性能也有一定提升, 但由于網卡和主機接口的不兼容性和延遲增加的額外消耗, 其發展難以維系.
研究者又從新型高速網絡(IB、FC等)與傳統TCP/IP協議結合以提升網絡性能的角度出發, 提出iWARP、RoCE、SDP等網絡融合技術: iWARP (Internet Wide Area RDMA Protocol)[5]是一種在TCP/IP協議棧之上實現RDMA的技術, 實現了遠程數據的直接存取, 數據可以直接放入上層協議的接收緩存區, 避免了不必要的內存拷貝, 大大提升了時延和帶寬性能, 可用于廣域網間RDMA通信; RoCE (RDMA over Converged Ethernet)[6]是一種在以太網數據鏈路層之上實現RDMA的技術, 一般建立在無損以太網之上, 和iWARP相比降低了復雜性和部署難度, 簡化了管理, 且通信性能比 iWARP 略好[7], 但造價更高; SDP (Socket Direct Protocol)[8]是一種在InfiniBand可靠連接之上實現字節流傳輸的技術, 利用IB網絡中send/receive和RDMA等操作, 為應用程序提供socket套接字接口調用, 與傳統TCP/IP相比, 擁有協議卸載、旁路核心、零拷貝的特點, 與IPoIB相比, 更好地利用了IB網絡的高速通信能力, 但由于SDP需要另外搭建socket庫且難以進行網絡管理, 已逐漸被淘汰.
IPoIB作為在IB中兼容TCP/IP應用的主要技術,其性能優化一直是研究熱點, 研究人員從IPoIB的多個方面對其進行了數據處理方面的優化探索: 包括支持LRO、aRFS、RSS、TSS等CPU負載卸載技術、優化中斷處理流程、實現隧道卸載、利用多個pkeys實現VLAN等, 實現了IPoIB在多數據流多處理器下的性能提升.
上述工作都是關于網絡融合技術在商用平臺上的研究進展, 目前在國產系統上尚未有網絡融合技術的應用. 本文做了一種新的研究嘗試, 將IPoIB協議應用到國產并行系統中, 對移植后的IPoIB進行性能測試和評估, 并且使用一系列優化方法來提高IPoIB在國產并行系統中的通信性能.
IB是IBTA提出的一種基于通道的高速互連結構標準, 可提供低延遲、高帶寬的數據傳輸能力, 在HPC領域具有廣泛的應用. 它采用RDMA編程語義,為用戶提供IB verbs編程接口, 但其語義和編程方法與Socket編程語義有非常大的差異, 傳統的TCP/IP應用不能在其上直接運行. IPoIB解決了該問題, 它將HCA卡虛擬成網卡設備, 使通用的TCP/IP 應用程序不加修改地在IB網絡中運行, 拓展了IB應用領域及范圍.
圖1給出了IPoIB協議架構. IPoIB協議位于內核層, 處于TCP/IP協議棧之下、IB傳輸層之上. 用戶層應用程序調用socket套接字接口將數據送進內核層TCP/IP協議棧, IPoIB 通過注冊net_device結構以及一系列設備操作函數為上層TCP/IP協議或ARP協議提供網絡設備傳輸接口, 設備操作函數利用IB的諸多verbs: QP (Queue Pair)隊列對、CQ (Completion Queue)完成隊列以及MR (Memory Regions)地址空間注冊信息等與遠程節點交互, 通過IB的send/receive操作實現數據傳送接收及處理. 可以將IPoIB看作為以太網的數據鏈路層.

圖1 IPoIB協議架構圖
IPoIB分別利用兩種IB服務進行數據傳輸, 其中RC (reliable connected)是面向連接的可靠傳輸服務, 最大可發送2 GB大小的數據; UD (Unreliable Datagram)是不可靠的數據報服務, 一次最多發送4 KB數據.
IPoIB主要實現下列功能: (1)地址解析: 將IB地址信息編碼進MAC地址, 通過ARP獲取目的方MAC 地址, 進而獲得 QPN (Queue Pair Number)、LID等IB地址信息; (2)報文封裝: IPoIB為IP報文添加4字節的鏈路層包頭, 并封裝成一條IB消息, 通過IB網絡發送給遠程節點, 完整的IPoIB 數據包如圖2所示; (3)多播支持: IB多播在IPoIB中起關鍵作用, ARP協議必須通過IB多播實現. IPoIB定義了多播GID和對應的多播組, 并啟動多播組任務處理組播列表的變化、響應多播請求, 使節點自由加入多播組或從多播組中刪除.
圖3為IPoIB數據包在協議棧中的處理流程[9], 包括數據發送和接收過程.
發送過程: 應用程序通過sys_socketcall系統調用進入socket內核層, socket層再通過sock_sendmsg函數調用進入inet_sendmsg函數, 然后調用TCP層發送函數tcp_sendmsg, 該函數在準備好sk_buff結構后調用skb_do_copy_data_nocache將用戶數據拷貝到內核層, 然后數據包依次通過IP層、設備驅動層, 最后利用IPoIB驅動中的ipoib_hard_header函數為ip報文添加 4 字節報文頭, 然后調用 ipoib_start_xmit函數, 將數據內存地址進行DMA映射, 并通過IB的send操作將數據發送出去.
接收過程: 應用進程調用sys_socketcall系統調用進入內核層, 再通過socket層的接收函數sock_recvmsg進入到TCP層, TCP調用tcp_recvmsg函數接收數據,當沒有數據包到來時, 用戶接收進程會休眠. IPoIB驅動程序通過NAPI輪詢函數ipoib_poll檢查是否有數據到達, 并對數據包進行正確性檢驗, 去掉IPoIB層鏈路頭, 然后通過netif_receive_skb函數將數據依次移交給IP層、TCP層處理. TCP層再通過skb_copy_datagram_iovec將內核層的數據拷貝到用戶層緩沖區.

圖2 IPoIB數據包格式圖

圖3 IPoIB數據包協議處理流程圖
IPoIB數據包在TCP/IP協議棧處理過程中會占用較多的CPU時間和內存資源, 主要包括數據拷貝、協議處理機制、延遲應答等3個方面. 數據拷貝包括數據包在網卡和內核空間以及內核空間與用戶空間之間的拷貝; 協議處理機制包括復雜的擁塞控制[10]、超時重發機制[11]、TCP協議完整性校驗、數據包分發和整合等; 延遲應答可以推遲TCP ACK的發送, 以便使ACK與數據包一起發送. 本章針對國產并行系統上IPoIB的性能瓶頸點, 對這三個方面的處理流程進行了優化.
非確定性路由中數據包沿不同的路徑到達接收端以及數據包在發送單元中調度順序與到達順序不一致等因素都會導致接收端產生亂序數據包[12]. 在高速網絡中, 發送端的發送窗口很大, 頻繁的亂序數據會導致重發大量的數據包, 致使性能大幅下降. 針對亂序數據包對網絡性能產生的影響, 提出一種重排序的解決方案: 每對連接發送的數據包都攜帶一個16位的序列號msg_id, 接收端按照序列號進行重排序, 如果數據包是順序的, 則直接將該數據包交上層協議棧處理; 如果是亂序的, 則進行緩存. 這種方案的缺點在于若網絡中亂序情況嚴重, 順序的數據包遲遲不到達, 接收端長時間緩存亂序數據包引起超時, 進而導致上層TCP重傳數據, 反而致使性能下降更嚴重, 得不償失, 且緩存大量亂序包會消耗過多的系統內存. 為了防止上述現象出現, 采用“盡可能”保序的手段, 規定接收端對數據包進行重排序的窗口長度大小限制在W, 對不在窗口內的數據包不進行亂序處理, 預期序列號next_id始終指向窗口左邊界的位置. 具體見如圖4所示的亂序處理方法.
窗口長度W的大小設置原則以在一次網卡硬件收包中斷發生時, NAPI設備輪詢函數所能處理的報文數量上限NAPI_POLL_WEIGHT為參考, 一般為32或64. 這種設置原則是有依據的, 在一些中斷處理速度較慢的網卡設備中, 若是窗口長度W超過了一次輪詢報文數量上限, 亂序較重情況下, 亂序數據包很可能被緩存較長時間, 直到下一次中斷觸發處理新到來的數據包, 從而造成網絡性能下降.

圖4 亂序處理示意圖
詳細算法描述如算法1.

算法1. 亂序處理算法INPUT:到達接收端的數據包序號msg_id預期序列號next_id←0 BEGIN IF(msg_id=next_id)BEGIN DO{將數據包轉交給上層;next_id← next_id+1;}WHILE(next_id位置已緩存數據包)END ELSE IF(msg_id<next_id)將數據包轉交給上層;ELSE IF(next_id<msg_id≤next_id+W)暫時緩存數據包;ELSE IF(msg_id>next_id+W)DO{IF(next_id位置已緩存數據包)BEGIN將該數據包轉交給上層;END next_id← next_id+1;}WHILE(msg_id>next_id+W)END
優化內存拷貝是提高IPoIB性能的重要手段. 在圖3的IPoIB數據包處理流程走向圖的指導下, 逐一查看每個功能模塊函數調用的局部時間, 發現RC模式下用戶層到內核層數據拷貝速率較慢. 分析發現TCP協議在skb_do_copy_data_nocache函數將用戶層數據拷貝進內核層時, 需要對數據進行正確性校驗,這會對網絡性能造成損耗. 而不計算數據校驗和時,內存拷貝速率明顯提高. 一般來講服務器均已實現拷貝內存的“糾單錯、報雙錯”機制, 同時IB也實現了對數據進行校驗的功能, 因此本文將RC模式下計算數據校驗和的工作由TCP協議轉交給IB網卡硬件完成, 從而減少TCP協議計算檢驗和的工作, 減輕CPU負擔, 實現了IPoIB用戶層數據到內核層拷貝的優化.
網絡參數調優是提高IPoIB性能的手段之一, 通過調整內核參數達到提升IPoIB性能的目的.
圖5給出了網絡參數優化模型. 網絡參數按照功能分為以下幾類: (1)資源分配: 諸如信道分配、隊列大小、緩沖區空間等, 科學合理配置資源可以提高網絡的利用率, 有助于IPoIB運行時吞吐量的顯著提升;(2)任務調度: 包括中斷緩和、傳輸隊列輪詢等, 網絡任務調度直接影響網絡系統的負載均衡, 對IPoIB的平均時延有一定影響; (3)協議運行時設置: ACK應答機制、延時機制、時間戳等, 優化IPoIB的多種協議運行機制, 可以不同程度上提高網絡帶寬以及網絡系統整體性能.
網絡參數調優對內核環境影響較小, 但是網絡性能提升效果卻較為明顯. 需要注意的是, 內核參數多種多樣, 參數的設置受具體的服務器系統環境影響, 需要根據實際網絡應用負載對參數進行適應性調整, 在尋找最優參數中必須分清主次, 突出改善主要參數, 使網絡盡可能得到有效利用. 針對具體的輸入數據流, 本文利用sysctl命令設置網絡參數, 試驗了網絡參數優化模型中不同的參數變量值和不同的參數組合, 找出能為IPoIB帶來性能提升的參數組合及其數值. 根據試驗結果, 給出令IPoIB通信性能最優的配置策略: (1)啟用tcp_low_latency, 要求TCP/IP棧在高吞吐量的情況下盡量保持低延時; (2) 將rmem_max和wmem_max設為16 MB, 增大TCP連接在發送和接收ACK期間所能處理的最大數據包, 從而減少傳輸等量數據過程中處理ACK所用時間; (3) 將tcp_rmem和tcp_wmem中的max值設為16 MB. 目的在于增大socket發送和接收緩沖區內存空間, 使一塊內存空間存放盡量多的數據, 減少為數據分配多個內存塊的管理開銷, 優化數據傳輸流.

圖5 網絡參數優化模型圖
TCP采用應答延遲機制時, 如果當前時間與最近一次接收數據包的時間間隔小于延遲應答超時時間,則會推遲ACK應答的發送, 積攢多個應答并將它們結合成一個響應包, 與需要沿該方向發送的數據一起發送, 從而減少協議開銷. 然而, 在應用程序進行交互處理時, 延遲ACK應答時間過長可能會降低應用程序的效率. TCP協議中利用宏定義TCP_DELACK_MIN控制最小延遲確認時間, 一般默認值為(HZ/25), 也就是40 ms. 本文在不改變其它參數的情況下, 逐一試驗在1 ms~40 ms范圍內不同的 TCP_DELACK_MIN 值, 并測試網絡最大帶寬, 發現最小延遲應答時間設為5 ms左右時, 網絡帶寬可以達到最大, 既能維持較低協議開銷, 又可以減少TCP傳輸中ACK的等待時間, 使得網絡帶寬最大化, 提升內存的利用率. 最佳的延遲應答時間受服務器系統環境和網絡應用場景的影響, 本文所得結果在其它集群系統中可能不是最優, 但其試驗方法具有普適性.
本文在國產異構眾核系統上對IPoIB進行測試,配備32 GB內存, 節點間采用40 GB/s的Infiniband EDR網絡連接. 網絡性能測試工具選用Netperf-2.4.5和Iperf-2.0.2. Netperf主要用于記錄兩對聯節點間TCP單連接帶寬、延遲、CPU利用率、內存等資源的占用情況, Iperf用于記錄兩對聯節點之間TCP多連接帶寬.
5.1.1 不同消息大小帶寬對比
利用Netperf工具測試兩對聯節點間單個TCP連接優化前后不同消息大小帶來的帶寬變化, 結果如圖6所示.

圖6 不同消息大小帶寬對比圖
從圖6可以看出, IPoIB通信性能優化效果良好,優化后的IPoIB網絡帶寬明顯高于優化前. 由測試數據可知, 優化后的峰值帶寬達到1340 MB/s, 對比優化前的227 MB/s提升近6倍. 可見針對IPoIB的優化對帶寬具有較好提升效果, 使得系統的IB網絡資源得到盡可能的使用, 提升了IPoIB在國產異構并行系統上的運行效果, 證明優化方法足夠有效.
5.1.2 多連接帶寬對比
使用Iperf測試兩節點間多個TCP連接的網絡最大帶寬, 從2個連接測到10個連接, 如圖7所示.

圖7 不同連接數帶寬對比圖
測試數據表明, 連接數為6或7時, 網絡帶寬達到最大. 優化后的網絡帶寬可以達到1800 MB/s, 相比單連接最大帶寬1340 MB/s提升1.34倍, 相比優化前多連接的網絡最大帶寬 615 MB/s, 提高近 3 倍. 可以看出, 在多個進程下網絡帶寬能有較大提升, 主要原因是: (1)并行系統的CPU多核組得到了有效利用; (2)通過在傳輸過程中對數據包進行抓取, 發現在其中某個TCP連接等待ACK不發送數據包時, 另一個TCP連接不用等待ACK, 繼續發包, 從而使得鏈路帶寬得到有效利用.
5.1.3 CPU利用率對比
在高速網絡環境下, CPU的處理能力很大程度上影響網絡的性能. 通過測試發現, 優化前IPoIB CPU利用率為33%, 優化后的IPoIB CPU利用率在24%左右,優化后的CPU利用率明顯低于優化前. 在最好的情況下, IPoIB優化后的CPU利用率可以降低約30%.
利用Netperf測試優化后的IPoIB在國產并行系統上兩節點間通信的帶寬和延遲, 并與萬兆以太網對比.萬兆以太網卡型號 T520, 10 GB/s, 理論帶寬為 1250 MB/s,萬兆網卡測試環境采用國產中標麒麟服務器, 處理器型號為申威1621. 測試結果如表1所示.

表1 IPoIB與萬兆以太網性能對比
從表1可以看出萬兆以太網的穩定帶寬在1024 MB/s左右, 而IPoIB優化后的帶寬達1340 MB/s,是萬兆以太網持續帶寬的1.31倍; 萬兆以太網延遲平均約為 30 μs, IPoIB 延遲平均 39 μs, 相比萬兆以太網延遲高9 μs. 基礎性能對比結果表明, IPoIB在國產異構眾核并行系統上的通信性能相比基于10 GbE的萬兆以太網通信性能要略顯優勢, 持續帶寬優于萬兆以太網, 延遲雖然比萬兆以太網略大, 但實際應用中聚合帶寬是主要考慮因素, 因此IPoIB相比10 GbE是更好的選擇.
利用Iperf測試國產并行系統上兩節點間通信處于不同流量負載時的亂序情況, 亂序處理窗口長度W設為32, 為消除偶然因素影響, 每個負載下運行10次取平均值. 表2顯示了在不同流量負載下亂序處理前后每秒發生的亂序次數并統計亂序減少比例. 可以看出, 亂序處理對于減少亂序數據包的作用效果十分明顯: 網絡流量較高時亂序情況比較嚴重, 而經過亂序處理后亂序次數明顯減少, 亂序減少比例可達95%以上;當網絡負載較輕時, 經過亂序處理后網絡不再有亂序包.

表2 不同流量負載下亂序處理效果
為了驗證亂序較重時窗口長度W設置過大對性能造成的不利影響, 每隔一段時間讓發送方故意丟棄一次數據包以模擬亂序較重的情況, 利用Iperf測試窗口長度分別為32和80的最大網絡帶寬, 結果如表3所示. 從表3可以看出, 亂序較重時,W為32的最大帶寬為1782 MB/s, 亂序程度減少95.8%;W為80的最大帶寬為1624 MB/s, 即便亂序減少效果更好, 但帶寬下降明顯. 實驗結果證明窗口長度不宜設置過大, 過大反而會造成帶寬性能下降.

表3 不同窗口長度的網絡性能對比
本文將IPoIB移植到國產異構眾核并行系統上,并進行了亂序處理、拷貝優化、網絡參數調優以及應答延遲避免等一系列優化措施. 測試結果顯示, 優化后IPoIB基礎帶寬峰值性能為1340 MB/s, 比優化前IPoIB帶寬提升近6倍, 也高于10 GB萬兆以太網; 多連接下帶寬達到1800 MB/s, 相比單連接提升1.34倍;CPU利用率也有了顯著降低; 亂序處理機制作用效果明顯.
IPoIB基于IB的send/receive異步消息機制實現,而沒有利用具有零拷貝、CPU負載卸載優勢的RDMA機制, 考慮到在一些特定的應用場景下利用RDMA實現IPoIB的通信效果可能會更好, 后續將制定以RDMA為底層通信機制的IPoIB實現策略, 以期進一步提高IPoIB通信性能.