陳小龍
(銳捷網(wǎng)絡(luò)股份有限公司,福建 福州 350000)
隨著Web2.0 時(shí)代的到來,基于互聯(lián)網(wǎng)的網(wǎng)上交易應(yīng)用迅猛發(fā)展,尤其出現(xiàn)類似每年的“雙十一”等可以說是購(gòu)物的狂歡節(jié),隨之而來的就是網(wǎng)絡(luò)數(shù)據(jù)量的爆炸式增長(zhǎng),為了保障數(shù)據(jù)服務(wù)的穩(wěn)定運(yùn)行,在實(shí)現(xiàn)云數(shù)據(jù)中心運(yùn)營(yíng)平臺(tái)產(chǎn)品上線前的能模擬百億級(jí)別訪問量的情景再現(xiàn),設(shè)計(jì)基于RDMA 技術(shù)的云數(shù)據(jù)中心網(wǎng)絡(luò)多用戶多業(yè)務(wù)算法,模擬多用戶多條業(yè)務(wù)流,實(shí)現(xiàn)仿真多用戶多條業(yè)務(wù)流測(cè)目的,本文通過基于RDMA 技術(shù)的云數(shù)據(jù)中心網(wǎng)絡(luò)進(jìn)行數(shù)據(jù)建模,設(shè)計(jì)Parallel Matrix Multiplication 算法實(shí)現(xiàn)RDMA Ib_write 源端口變化,解決了當(dāng)前無法仿真多用戶多條業(yè)務(wù)流測(cè)試瓶頸,為應(yīng)對(duì)百億級(jí)數(shù)量訪問量的數(shù)據(jù)中心的穩(wěn)定運(yùn)行提供運(yùn)營(yíng)前的測(cè)試保障。
基于云的數(shù)據(jù)中心計(jì)算網(wǎng)絡(luò)集群常見有兩類架構(gòu)。傳統(tǒng)情況下云計(jì)算網(wǎng)絡(luò)架構(gòu)會(huì)分為三層:接入層、匯聚層和核心層。如圖1。
圖1
另外一種比較常見的云計(jì)算網(wǎng)絡(luò)集群架構(gòu),在Spine 節(jié)點(diǎn)和Leaf 節(jié)點(diǎn)之間可能會(huì)存在三層連接,而Spine 節(jié)點(diǎn)和Core 節(jié)點(diǎn)之間也可能會(huì)存在三層連接,這種網(wǎng)絡(luò)架構(gòu)相比于前面提到的架構(gòu)而言,其擴(kuò)展粒度要更細(xì),可以細(xì)化到一組或者多組進(jìn)行接入(圖2)。
無論選用那種數(shù)據(jù)中心網(wǎng)絡(luò)集群架構(gòu),海量的業(yè)務(wù)流數(shù)據(jù)在傳輸中往往會(huì)出現(xiàn)延遲、丟包等現(xiàn)象,但單用戶性能測(cè)試無法實(shí)現(xiàn)多用戶多業(yè)務(wù)流并發(fā)性的檢測(cè),為了能實(shí)時(shí)了解數(shù)據(jù)中心網(wǎng)絡(luò)多用戶多業(yè)務(wù)并發(fā)性數(shù)據(jù)的傳輸過程,發(fā)現(xiàn)數(shù)據(jù)傳輸過程中影響帶寬、產(chǎn)生延遲、丟包現(xiàn)象的形成因素,解決了當(dāng)前無法仿真多用戶多條業(yè)務(wù)流測(cè)試瓶頸,解決不需增設(shè)服務(wù)器的情況下多用戶并發(fā)性問題。
當(dāng)今時(shí)代存在數(shù)據(jù)大爆炸的特征。信息的高速增長(zhǎng)要求領(lǐng)域技術(shù)和軟件工具處理大量的數(shù)據(jù)。為了應(yīng)對(duì)云數(shù)據(jù)中心的多業(yè)務(wù)大數(shù)據(jù)挑戰(zhàn),一些分布式內(nèi)存的并行執(zhí)行模型已經(jīng)被提出:MapReduce, 迭代MapReduce,圖處理和數(shù)據(jù)流圖處理并行執(zhí)行模型。MapReduce 編程模型已經(jīng)應(yīng)用到很大范圍的計(jì)算應(yīng)用,因?yàn)樗芴峁┖?jiǎn)單的使用和處理大規(guī)模數(shù)據(jù)時(shí)的效率。但是MapReduce 有其局限性。比如MapReduce 處理多個(gè)相關(guān)的異構(gòu)數(shù)據(jù)集合時(shí)的效率不高。MPI 是一個(gè)開放的通訊協(xié)議,用于編寫并行程序。MPI 的目標(biāo)是高性能、大規(guī)模及可移植性。
mpirun 是MPI 程序的啟動(dòng)腳本程序,它提供簡(jiǎn)化了并行程序的啟動(dòng),隱藏了底層的實(shí)現(xiàn)細(xì)節(jié),為用戶提供了一個(gè)通用的MPI 處理機(jī)。Mpirun 在執(zhí)行并行程序時(shí),參數(shù)-np 指明了需要并行運(yùn)行的進(jìn)程個(gè)數(shù)。mpirun 首先在本地機(jī)器上啟動(dòng)一個(gè)進(jìn)程,然后根據(jù)machines 文件中所列出的主機(jī),為每個(gè)主機(jī)啟動(dòng)一個(gè)進(jìn)程。一般會(huì)給每個(gè)節(jié)點(diǎn)分一個(gè)固定的標(biāo)號(hào),類似于身份ID,在消息通信中會(huì)用到。
我們選擇并行矩陣乘法程序來評(píng)估多用戶多任務(wù)算法的性能,因?yàn)椴⑿芯仃嚦朔ㄓ兄己玫耐ㄐ藕陀?jì)算開銷模式。
矩陣乘矩陣的性能模型已經(jīng)被研究了好幾十年。并行矩陣乘法的計(jì)算復(fù)雜度以N 的立方增長(zhǎng),而它的內(nèi)存開銷以N 的平方增長(zhǎng)。并行矩陣乘法的工作量已經(jīng)被分為許多同構(gòu)的子任務(wù)并且被并行執(zhí)行。并行矩陣乘法良好的計(jì)算和通信模式使它成為研究多任務(wù)多用戶算法程序的良好應(yīng)用。我們提出了一個(gè)精確的分析模型來分析MPI 并行矩陣乘法。我們的多用戶多任務(wù)的并行矩陣乘法的算法開銷為:
MPI 并行矩陣乘法算法代碼如下:int main(int argc, char* argv[]) {
我們實(shí)現(xiàn)了支持多用戶用任務(wù)的MPI 并行矩陣乘法算法程序。使用分析模型精確的分析了這一算法程序的通信開銷和計(jì)算開銷。該分析模型使我們能夠?qū)崟r(shí)了解數(shù)據(jù)中心網(wǎng)絡(luò)多用戶多業(yè)務(wù)并發(fā)性數(shù)據(jù)的傳輸過程,發(fā)現(xiàn)數(shù)據(jù)傳輸過程中影響帶寬、產(chǎn)生延遲、丟包現(xiàn)象的形成因素。
5.2.1 軟件工具
軟件方面,OEM 廠商Dell 將Mellanox 網(wǎng)卡固件程序升級(jí)至最新版本:Network_Firmware_TPTR3_LN_14.20.18.20_01.BIN;以確保支持RDMA 源端口變化等高級(jí)特性。此外MPI 驅(qū)動(dòng)程序采用 的 是 Mellanox 原 廠 驅(qū) 動(dòng) :MLNX_MPI_LINUX-4.2-1.0.0.0-rhel7.4-x86_64。
(1)確認(rèn)系統(tǒng)裝有網(wǎng)絡(luò)適配器(HCA/NIC),采用下面的命令可以顯示Mellanox HCA 的安裝信息:
5.2.2 硬件工具
測(cè)試使用的RDMA 和RoCE 協(xié)議中,以太網(wǎng)交換機(jī)需要支持PFC, ECN, ETS 功能;網(wǎng)卡需要支持RoCE 協(xié)議。網(wǎng)卡主要使用了Mellanox ConnectX-4 LX 系列雙25Gpbs 網(wǎng)口網(wǎng)卡。在測(cè)試中,主要測(cè)試了銳捷S6500-4C 交換機(jī),在部分測(cè)試中也有使用到S6510 交換機(jī)。
5.2.3 測(cè)試過程
(1)以root 權(quán)限登陸到系統(tǒng)。
(2)運(yùn)行安裝腳本 #./mlnxMPIinstall;運(yùn)行前如果安裝過程中需要升級(jí)網(wǎng)絡(luò)適配器固件ConnectX-3/ConnectX-3 Pro - 重啟 驅(qū) 動(dòng)、ConnectX-4/ConnectX-4 Lx - 重 啟 系 統(tǒng) 、ConnectX-5/ConnectX-5 Ex - 重啟系統(tǒng);否則重啟驅(qū)動(dòng)#/etc/init.d/openibd restart。
(3)運(yùn)行hca_self_test.MPI 實(shí)用程序來驗(yàn)證InfiniBand 鏈接是否up。該實(shí)用程序還檢查和顯示額外的信息,例如:HCA 固件版本、內(nèi)核體系結(jié)構(gòu)、驅(qū)動(dòng)程序版本、與它們的狀態(tài)一起活動(dòng)的HCA 端口的數(shù)量、節(jié)點(diǎn)GUID 等信息。如需了解有關(guān)hca_self_test. MPI 的 更 多 細(xì) 節(jié) , 查 看 文 件 :docs/readme_and_user_manual/hca_self_test. readme。
(4)安裝完成后,運(yùn)行命令/ etc/infiniband/ info 來獲取關(guān)于安裝的Mellanox 的信息,例如前綴、內(nèi)核版本和安裝參數(shù),在啟動(dòng)后自動(dòng)加載的模塊列表可以在/ etc/infiniband/ openib. conf文件中找到。
(5)端口設(shè)置
創(chuàng)建一個(gè)包含信息(源端口、目的端口、源IP、目的IP、協(xié)議)的五元組,利用Parallel Matrix Multiplication 算法實(shí)現(xiàn)RDMA Ib_write 源端口變化,實(shí)現(xiàn)多用戶、多業(yè)務(wù)端口變化的目的,達(dá)成億級(jí)的用戶量和數(shù)據(jù)量。設(shè)置過程如下:
Step1:五元組信息(源端口、目的端口、源IP、目的IP、協(xié)議)初始化。
(1)源mac 無變化(24:8a:07:9a:28:83)目的mac 無變化(58:69:6c:14:ca:01)。
(2)源ip 無變化(10.10.10.177)目的ip 無變化(30.0.0.182)。
(3)源端口變化隨機(jī),目的端口隨機(jī)。
(4)協(xié)議:RoCE。
(5)報(bào)文長(zhǎng)度:1082。
Step 2:利用Parallel Matrix Multiplication 算法實(shí)現(xiàn)RDMA MPI 源端口變化,根據(jù)用戶五元組中的源端口的變化,確定業(yè)務(wù)服務(wù)數(shù)量;當(dāng)業(yè)務(wù)服務(wù)數(shù)量小于預(yù)設(shè)閾值3000 時(shí),不進(jìn)行任何處理,當(dāng)業(yè)務(wù)服務(wù)數(shù)量大于預(yù)設(shè)閾值3000 時(shí),轉(zhuǎn)到Step 3 執(zhí)行。從而實(shí)現(xiàn)多用戶、多業(yè)務(wù)端口變化的目的,達(dá)成億級(jí)的用戶量和數(shù)據(jù)量。
Step 3:在MPI 業(yè)務(wù)下,從接收的用戶多類業(yè)務(wù)請(qǐng)求中獲取MPI 矩陣乘法鏈路帶寬等參數(shù)信息,根據(jù)這些信息給鏈路分配帶寬,實(shí)現(xiàn)鏈路負(fù)載均衡。當(dāng)矩陣的行和列較大時(shí),如行,列都大于1024,此時(shí)矩陣直接相乘會(huì)導(dǎo)致內(nèi)存空間不夠,并出現(xiàn)多次讀取的問題。把整個(gè)矩陣乘法的動(dòng)作,切割成很多局部小矩陣的乘法,這樣就可以把兩個(gè)小矩陣加載到共享內(nèi)存中,小矩陣本身的乘法就不需要再加載其它數(shù)據(jù)到內(nèi)存了。把大的整體矩陣A、B 分成小的局部矩陣時(shí),矩陣C=A*B,A、B、C 分別為M*K、K*N、M*N 的矩陣,其中,M = wp,N =hq,K =kr。具體分割是將某些連續(xù)行和某些連續(xù)列的交叉部分劃分為一塊。確保每個(gè)元素都在唯一一個(gè)局部矩陣?yán)铩⒕仃嘇 和B 分割成A 和B的子矩陣。從而達(dá)到優(yōu)化程序,節(jié)約緩存的目的。具體為:
(1)定義MPI 矩陣行和列的數(shù)據(jù)結(jié)構(gòu),分別是MPI_Comm row_comm 和MPI_Comm col_comm;The BLAS matrix*matrix multiply 算法,當(dāng)M>1024,N>1024 情況下,啟動(dòng)Parallel Matrix Multiplication 算法(并行矩陣),并開啟多線程調(diào)用。
(2)從接收的用戶業(yè)務(wù)請(qǐng)求中獲取MPI 矩陣乘法的參數(shù)信息,將矩陣分成局部小矩陣,并給局部要相乘的矩陣分配內(nèi)存,分配具體方法如下:
1 首先將矩陣分塊,將矩陣C 分解為p × q 的分塊矩陣Cij,每個(gè)Cij=(A × B)ij是一個(gè)w × h 的小矩陣,A 分解成為p × k 個(gè)分塊矩陣Aij,每個(gè)Aij是一個(gè)w × r 的局部矩陣,B 分解成為k × q 的分塊矩陣Bij,每個(gè)Bij是一個(gè)r × h 的局部矩陣。則分塊矩陣乘法的定義為:
2 mpi_bcast 行塊,本地矩陣塊乘法。
3 mpi_send_receive 列塊,mpi_bcast, mpi_send_receive, 使用mpi rdma ucx 通信庫(kù),實(shí)現(xiàn)源端口變化發(fā)送和接受行和塊數(shù)據(jù)。
Step 4:根據(jù)矩陣BMR(broadcast-multiply-roll algorithm)算法結(jié)果,計(jì)算出運(yùn)行時(shí)間,最終輸出用戶數(shù)量,線程數(shù)量,計(jì)算出網(wǎng)絡(luò)延遲和帶寬。
根據(jù)上文中所述的方案及實(shí)驗(yàn)過程,經(jīng)測(cè)試得到如下的實(shí)驗(yàn)結(jié)果。圖4 是MPI 矩陣乘法并行開銷。MPI 矩陣乘法的并行開銷定義如下:
圖4 MPI 矩陣乘法并行開銷
本論文設(shè)計(jì)了云數(shù)據(jù)中心網(wǎng)絡(luò)多用戶多業(yè)務(wù)并發(fā)性算法,并行矩陣乘法的加速比呈線性增長(zhǎng)模式,解決了當(dāng)前無法仿真多用戶多條業(yè)務(wù)流測(cè)試瓶頸,同時(shí)通過矩陣乘法解決業(yè)務(wù)性能仿真無法實(shí)現(xiàn)問題。