作者簡介
Explorer,專注于高性能網(wǎng)絡(luò)、虛擬化網(wǎng)絡(luò)及網(wǎng)卡的測試方案研究。熟悉dpdk,rdma,sdn等技術(shù)的應(yīng)用與解決方案。
01深入了解RDMA技術(shù)
背景概述
隨著互聯(lián)網(wǎng)的普及和數(shù)字化轉(zhuǎn)型的加速,大量數(shù)據(jù)被生成和傳輸。在AI訓(xùn)練和推理、大數(shù)據(jù)分析以及存儲應(yīng)用中,處理這些海量數(shù)據(jù)變得至關(guān)重要。因此,高性能網(wǎng)絡(luò)對于快速而可靠的數(shù)據(jù)傳輸至關(guān)重要。
RDMA(Remote Direct Memory Access,遠程直接內(nèi)存訪問)是一種高效的數(shù)據(jù)傳輸技術(shù),它使得兩臺計算機之間可以直接從對方的內(nèi)存中讀取或?qū)懭霐?shù)據(jù),而不需要CPU的介入。通過RDMA,計算機之間的數(shù)據(jù)傳輸速度更快,延遲更低,傳輸效率更高,而且可以減少CPU的負載。
應(yīng)用場景
RDMA技術(shù)在各個領(lǐng)域都有廣泛的應(yīng)用,其高性能和低延遲的特點使其成為許多應(yīng)用的關(guān)鍵組成部分,以下是當前RDMA技術(shù)的一些應(yīng)用場景介紹:
高性能計算(HPC)
RDMA技術(shù)在HPC領(lǐng)域得到廣泛應(yīng)用,用于大規(guī)??茖W(xué)計算、氣象模擬、分子建模等任務(wù)。RDMA可以實現(xiàn)節(jié)點之間的快速數(shù)據(jù)共享,從而加速復(fù)雜計算任務(wù)的完成,降低了整體計算時間。
云計算和虛擬化
公有云和私有云服務(wù)提供商采用RDMA技術(shù)來改善虛擬機之間的通信性能。這在云環(huán)境中特別重要,因為它可以提高虛擬機之間的網(wǎng)絡(luò)吞吐量,從而提高了云計算資源的利用率。
存儲系統(tǒng)
RDMA技術(shù)在高性能存儲系統(tǒng)中發(fā)揮重要作用,如分布式文件系統(tǒng)、SAN存儲、塊存儲等。它提供了低延遲、高帶寬的數(shù)據(jù)傳輸,有助于加速數(shù)據(jù)讀寫操作,提高存儲性能。
金融交易
在金融領(lǐng)域,時間和性能至關(guān)重要。RDMA技術(shù)用于構(gòu)建低延遲的交易系統(tǒng),確保交易數(shù)據(jù)能夠?qū)崟r傳輸和處理,從而降低了交易風(fēng)險。
訓(xùn)練深度學(xué)習(xí)模型需要大量數(shù)據(jù)傳輸和計算資源。RDMA技術(shù)可用于加速大規(guī)模深度學(xué)習(xí)任務(wù),減少模型訓(xùn)練時間。
實時數(shù)據(jù)分析
對于需要實時數(shù)據(jù)分析的應(yīng)用,如廣告投放、市場分析和網(wǎng)絡(luò)安全監(jiān)控,RDMA技術(shù)可以確保數(shù)據(jù)能夠?qū)崟r傳輸和分析,提供即時決策支持。
遠程備份和復(fù)制
在數(shù)據(jù)備份和復(fù)制中,RDMA技術(shù)可以加速數(shù)據(jù)傳輸,降低備份時間,同時提供數(shù)據(jù)完整性和可靠性。
高性能數(shù)據(jù)庫
RDMA技術(shù)可用于構(gòu)建高性能數(shù)據(jù)庫系統(tǒng),實現(xiàn)快速數(shù)據(jù)訪問和查詢操作,從而加速數(shù)據(jù)處理。
RDMA技術(shù)在各種領(lǐng)域中都有重要應(yīng)用,特別是在需要高性能、低延遲和大規(guī)模數(shù)據(jù)傳輸?shù)膱鼍爸小K鼮檫@些應(yīng)用提供了關(guān)鍵的網(wǎng)絡(luò)通信支持,加速了各種計算和數(shù)據(jù)處理任務(wù),有助于提高系統(tǒng)性能和效率。隨著技術(shù)的不斷發(fā)展,RDMA技術(shù)的應(yīng)用前景將繼續(xù)擴展。
技術(shù)特點
內(nèi)核 Bypass:RDMA允許數(shù)據(jù)直接在內(nèi)存之間傳輸,而不需要通過操作系統(tǒng)內(nèi)核。傳統(tǒng)的Socket通信在數(shù)據(jù)傳輸時需要將數(shù)據(jù)從用戶空間復(fù)制到內(nèi)核空間,然后再從內(nèi)核空間復(fù)制到另一個用戶空間。而RDMA通過繞過內(nèi)核,使數(shù)據(jù)可以直接在用戶空間之間傳輸,從而減少了數(shù)據(jù)復(fù)制的開銷,提高了數(shù)據(jù)傳輸效率。
零拷貝:RDMA支持零拷貝操作,意味著數(shù)據(jù)可以直接在應(yīng)用程序的內(nèi)存空間中傳輸,而無需中間的數(shù)據(jù)拷貝操作。這減少了CPU的負擔和數(shù)據(jù)傳輸?shù)难舆t,提高了系統(tǒng)性能。
協(xié)議卸載:RDMA技術(shù)允許網(wǎng)絡(luò)適配器卸載協(xié)議的處理任務(wù),將網(wǎng)絡(luò)協(xié)議的處理從主機CPU轉(zhuǎn)移到網(wǎng)絡(luò)適配器上。這樣可以減輕主機CPU的負擔,提高系統(tǒng)整體性能。
低延遲和高吞吐量:RDMA的直接內(nèi)存訪問和零拷貝特性導(dǎo)致了低延遲和高吞吐量。數(shù)據(jù)可以直接在內(nèi)存之間傳輸,而不需要中間的數(shù)據(jù)復(fù)制,從而減少了通信的延遲并提高了數(shù)據(jù)傳輸?shù)乃俾省?/p>
支持遠程直接內(nèi)存訪問:RDMA允許應(yīng)用程序直接訪問遠程主機的內(nèi)存,而無需通過中間服務(wù)器進行數(shù)據(jù)傳輸。這使得在分布式系統(tǒng)中進行高效的數(shù)據(jù)共享成為可能,同時減少了通信的開銷。
支持協(xié)議
RDMA技術(shù)支持三類協(xié)議,分別為InfiniBand(IB),RDMA over Converged Ethernet(RoCE)和internet Wide Area RDMA Protocol(iWARP),三類協(xié)議使用相同的RDMA標準。
>InfiniBand
InfiniBand是一種基于InfiniBand架構(gòu)的RDMA技術(shù),它提供了一種基于通道的點對點消息隊列轉(zhuǎn)發(fā)模型,每個應(yīng)用都可通過創(chuàng)建的虛擬通道直接獲取本應(yīng)用的數(shù)據(jù)消息,無需其他操作系統(tǒng)及協(xié)議棧的介入。InfiniBand架構(gòu)的應(yīng)用層采用了RDMA技術(shù),可以提供遠程節(jié)點間RDMA讀寫訪問,完全卸載CPU工作負載;網(wǎng)絡(luò)傳輸采用了高帶寬的傳輸;鏈路層設(shè)置特定的重傳機制保證服務(wù)質(zhì)量,不需要數(shù)據(jù)緩沖。
InfiniBand必須運行在InfiniBand網(wǎng)絡(luò)環(huán)境下,必須使用IB交換機及IB網(wǎng)卡才可實現(xiàn)。
>RoCE
RoCE技術(shù)支持在以太網(wǎng)上承載IB協(xié)議,實現(xiàn)RDMA over Ethernet。RoCE與InfiniBand技術(shù)有相同的軟件應(yīng)用層及傳輸控制層,僅網(wǎng)絡(luò)層及以太網(wǎng)鏈路層存在差異。
RoCE v1協(xié)議:基于以太網(wǎng)承載RDMA,只能部署于二層網(wǎng)絡(luò),它的報文結(jié)構(gòu)是在原有的IB架構(gòu)的報文上增加二層以太網(wǎng)的報文頭,通過Ethertype 0x8915標識RoCE報文。
RoCE v2協(xié)議:基于UDP/IP協(xié)議承載RDMA,可部署于三層網(wǎng)絡(luò),它的報文結(jié)構(gòu)是在原有的IB架構(gòu)的報文上增加UDP頭、IP頭和二層以太網(wǎng)報文頭,通過UDP目的端口號4791標識RoCE報文。RoCE v2支持基于源端口號hash,采用ECMP實現(xiàn)負載分擔,提高了網(wǎng)絡(luò)的利用率。
下圖為RoCE的協(xié)議棧:
| RoCE協(xié)議棧
>iWARP
iWARP協(xié)議是IETF基于TCP提出的,因為TCP是面向連接的可靠協(xié)議,這使得iWARP在面對有損網(wǎng)絡(luò)場景(可以理解為網(wǎng)絡(luò)環(huán)境中可能經(jīng)常出現(xiàn)丟包)時相比于RoCE v2和IB具有更好的可靠性,在大規(guī)模組網(wǎng)時也有明顯的優(yōu)勢。但是大量的TCP連接會耗費很多的內(nèi)存資源,另外TCP復(fù)雜的流控等機制會導(dǎo)致性能問題,所以從性能上看iWARP要比UDP的RoCE v2和IB差。
>網(wǎng)絡(luò)設(shè)備
在實際的生產(chǎn)環(huán)境中,無論是何種協(xié)議支持的RDMA技術(shù),都需要硬件的支撐。
支持iWARP和RoCEv2的Intel E810系列網(wǎng)卡:https://www.intel.cn/content/www/cn/zh/products/sku/192558/intel-ethernet-network-adapter-e810cqda2/specifications.html
支持InfiniBand的Mellanox CX-7系列網(wǎng)卡:https://nvdam.widen.net/s/csf8rmnqwl/infiniband-ethernet-datasheet-connectx-7-ds-nv-us-2544471
支持InfiniBand的NVIDIA Quantum-2 InfiniBand系列交換機:
https://nvdam.widen.net/s/k8sqcr6gzb/infiniband-quantum-2-qm9700-series-datasheet-us-nvidia-1751454-r8-web
02構(gòu)建RDMA環(huán)境
使用2張Mellanox CX-4對接測試RoCEv2功能及性能
Mellanox官網(wǎng)下載CX-4的OFED驅(qū)動
下載基礎(chǔ)軟件包
yum install libusbx lsof tcl gcc-gfortran fuse-libs tcsh tk perl pcituiles
解壓驅(qū)動后安裝
./mlnxofedinstall
安裝完成后,載入新驅(qū)動
[root@localhost MLNX_OFED_LINUX-5.8-2.0.3.0-rhel7.9-x86_64]# /etc/init.d/openibd restart
Unloading HCA driver: [ OK ]
Loading HCA driver and Access Layer: [ OK ]
查看節(jié)點上RDMA設(shè)備,node GUID對應(yīng)的是網(wǎng)卡的mac地址
[root@localhost ~]# ibv_devices
device node GUID
------ ----------------
mlx5_0 b8cef60300ed9572
mlx5_1 b8cef60300ed9573
查看device mlx5_0的port狀態(tài),這里rate為25Gb/sec
[root@localhost ~]# ibstatus mlx5_0
Infiniband device 'mlx5_0' port 1 status:
default gid: fe800000bacefeed:9572
base lid: 0x0
sm lid: 0x0
state: 4: ACTIVE
phys state: 5: LinkUp
rate: 25 Gb/sec (1X EDR)
link_layer: Ethernet
到這里,最簡單的RDMA環(huán)境搭建完成,如果需要測試高階功能,例如PFC,ECN或者ECMP則需要更復(fù)雜的組網(wǎng),也需要引入相應(yīng)的交換機來支持功能的驗證。
03RDMA測試實驗
CM建鏈測試
實驗?zāi)康模篊ommunication Management Protocol,通信管理協(xié)議。指的是一種建立于Infiniband/RoCE協(xié)議基礎(chǔ)之上的建鏈方式。以下實驗通過抓取CM建鏈過程中數(shù)據(jù)包交互的過程,來驗證是否符合IB協(xié)議所定義的建鏈流程。
以RC建鏈過程測試為例:
服務(wù)端啟動# ib_send_bw -F -d mlx5_0 -s 100 -n 5 -R
客戶端啟動#ib_send_bw -F -d mlx5_0 -s 100 -n 5 192.168.100.9 -R
通過抓包分析RC CM建鏈的過程:
| CM RC建鏈過程
client和server端交互的數(shù)據(jù)報文如下:
RC CM建鏈的過程一共有3個數(shù)據(jù)包,分別是ConnectRequest,ConnectReply和ReadToUse。建鏈完成后,就開始按照交換好的QP信息進行數(shù)據(jù)發(fā)送。
REQ用于啟動CM建鏈,client端發(fā)送請求,提供端口地址(GID/LID),以及本端的QPN信息。
REP用于server端在接收到REQ后,驗證了serviceid,primary以及private data里面的數(shù)據(jù)后,接收了client端的連接請求,并且發(fā)送了REP消息,攜帶了本端的QPN,起始PSN等信息。
RTU消息則表示client端接收到REP后,根據(jù)雙方約定好后的QP進行數(shù)據(jù)交互。
回過頭來查看perftest執(zhí)行后的結(jié)果,本端的QP 190(0x00be)和對端的QP187 (0x00bb)建立連接并發(fā)送數(shù)據(jù)。
[root@localhost ~]# ib_send_bw -F -d mlx5_0 -s 100 -n 5 -R 192.168.100.9
---------------------------------------------------------------------------------------
Send BW Test
Dual-port : OFF Device : mlx5_0
Number of qps : 1 Transport type : IB
Connection type : RC Using SRQ : OFF
PCIe relax order: ON
ibv_wr* API : ON
TX depth : 5
CQ Moderation : 5
Mtu : 1024[B]
Link type : Ethernet
GID index : 3
Max inline data : 0[B]
rdma_cm QPs : ON
Data ex. method : rdma_cm
---------------------------------------------------------------------------------------
local address: LID 0000 QPN 0x00be PSN 0x524880
GID: 0000000000255192100:08
remote address: LID 0000 QPN 0x00bb PSN 0x429476
GID: 0000000000255192100:09
---------------------------------------------------------------------------------------
#bytes #iterations BW peak[MB/sec] BW average[MB/sec] MsgRate[Mpps]
100 5 49.75 49.74 0.521597
---------------------------------------------------------------------------------------
也可以通過后續(xù)交換的數(shù)據(jù)包來查看QP信息,發(fā)給遠端QPN 187(0x00bb)的send數(shù)據(jù):
在CM建鏈測試的最后,我們需要關(guān)注在建鏈的過程中,client端和server端其實是通過send ud消息來交互建鏈過程,這個過程中所使用的QP為QP1。
這里順便提一句,在RDMA中,有幾個QP是預(yù)留的,QP0用于處理子網(wǎng)管理消息,QP1用于處理 SA(Subnet Administrator)或 GS(Generic Services)的消息。
RC(Reliable Connection)測試
實驗?zāi)康模涸赗C服務(wù)類型中,通信的兩端建立了一個可靠的連接。這種連接模型提供了類似于TCP的可靠性,確保數(shù)據(jù)的按序傳遞和可靠傳輸。在RDMA的RC模型中,數(shù)據(jù)傳輸?shù)捻樞蚴怯斜U系模彝ㄐ诺膬啥丝梢赃M行錯誤檢測和重傳。以下實驗驗證client端和server端是否可以建立正常的RC連接,并進行數(shù)據(jù)包的傳輸。
RC的測試通常使用write或者read類型的消息來進行驗證,通過設(shè)置數(shù)據(jù)包長度與pmtu的組合來驗證各類消息報文。
服務(wù)端測試指令
[root@localhost ~]# ib_write_bw -F -d mlx5_0 -s 64 -p 1024 -n 100 -c RC
客戶端測試指令
[root@localhost ~]# ib_write_bw -F -d mlx5_0 -s 64 -p 1024 -n 100 -c RC 192.168.100.9
---------------------------------------------------------------------------------------
RDMA_Write BW Test
Dual-port : OFF Device : mlx5_0
Number of qps : 1 Transport type : IB
Connection type : RC Using SRQ : OFF
PCIe relax order: ON
ibv_wr* API : ON
TX depth : 100
CQ Moderation : 100
Mtu : 1024[B]
Link type : Ethernet
GID index : 3
Max inline data : 0[B]
rdma_cm QPs : OFF
Data ex. method : Ethernet
---------------------------------------------------------------------------------------
local address: LID 0000 QPN 0x00eb PSN 0x76710c RKey 0x1fcffc VAddr 0x000000021a2000
GID: 0000000000255192100:08
remote address: LID 0000 QPN 0x00e8 PSN 0xcc230d RKey 0x1fcef8 VAddr 0x00000000f68000
GID: 0000000000255192100:09
---------------------------------------------------------------------------------------
#bytes #iterations BW peak[MB/sec] BW average[MB/sec] MsgRate[Mpps]
64 100 243.35 190.55 3.121944
---------------------------------------------------------------------------------------
這里指定了數(shù)據(jù)包長度為64,pmtu長度為1024。當數(shù)據(jù)包長度小于pmtu時,則write的消息都為“write only"。
修改數(shù)據(jù)包長度進行再次測試,當數(shù)據(jù)包長度大于pmtu,且小于2*pmtu時,則wirte的消息為“write first”和“write last”。
修改數(shù)據(jù)包長度進行再次測試,當數(shù)據(jù)包長度大于2*pmtu時,則write的消息為write first”,“write middle”和“write last”。
當然測試的時候也可以修改pmtu進行驗證,pmtu有嚴格的長度要求,例如256,512,1024等。如下圖雖然MTU為1500,但是實際的RDMA PMTU為1024。
[root@localhost /]# ibv_devinfo
hca_id: mlx5_0
transport: InfiniBand (0)
fw_ver: 14.32.1010
node_guid: b8ce00ed:9572
sys_image_guid: b8ce00ed:9572
vendor_id: 0x02c9
vendor_part_id: 4117
hw_ver: 0x0
board_id: MT_2420110034
phys_port_cnt: 1
port: 1
state: PORT_ACTIVE (4)
max_mtu: 4096 (5)
active_mtu: 1024 (3)
sm_lid: 0
port_lid: 0
port_lmc: 0x00
link_layer: Ethernet
UD(Unreliable Datagram)測試
實驗?zāi)康模篣D 連接更注重性能,適用于那些對數(shù)據(jù)傳輸?shù)目煽啃砸笙鄬^低的場景。以下實驗驗證client端與server端是否可以建立正常的UD連接,并進行數(shù)據(jù)包的傳輸。
在RDMA的消息類型中,UD測試只支持send消息類型,不支持write和read,這里使用send消息進行測試。
客戶端測試指令
[root@localhost ~]# ib_send_bw -F -d mlx5_0 -s 64 -p 1024 -n 100 -c UD
服務(wù)端測試指令
[root@localhost ~]# ib_send_bw -F -d mlx5_0 -n 100 -s 64 -p 1024 -c UD 192.168.100.9
---------------------------------------------------------------------------------------
Send BW Test
Dual-port : OFF Device : mlx5_0
Number of qps : 1 Transport type : IB
Connection type : UD Using SRQ : OFF
PCIe relax order: ON
ibv_wr* API : ON
TX depth : 100
CQ Moderation : 100
Mtu : 1024[B]
Link type : Ethernet
GID index : 3
Max inline data : 0[B]
rdma_cm QPs : OFF
Data ex. method : Ethernet
---------------------------------------------------------------------------------------
local address: LID 0000 QPN 0x1146 PSN 0x3def86
GID: 0000000000255192100:08
remote address: LID 0000 QPN 0x1152 PSN 0x3c2738
GID: 0000000000255192100:09
---------------------------------------------------------------------------------------
#bytes #iterations BW peak[MB/sec] BW average[MB/sec] MsgRate[Mpps]
64 100 152.03 98.70 1.617092
---------------------------------------------------------------------------------------
同RC測試一樣,修改數(shù)據(jù)包長度與pmtu,可以驗證不同的send消息報文,這不分測試不再贅述。
性能測試
RDMA 技術(shù)的設(shè)計目標之一是提供高性能、低延遲的遠程數(shù)據(jù)訪問,所以在RDMA的實驗中,關(guān)于性能的實驗尤為重要。性能測試項指標,一般關(guān)注各類型消息的帶寬和延時。
ib_send_lat latency test with send transactions
ib_send_bw bandwidth test with send transactions
ib_write_lat latency test with RDMA write transactions
ib_write_bw bandwidth test with RDMA write transactions
ib_read_lat latency test with RDMA read transactions
ib_read_bw bandwidth test with RDMA read transactions
ib_atomic_lat latency test with atomic transactions
ib_atomic_bw bandwidth test with atomic transactions
>bw測試
這里帶寬測試使用write消息來進行
write 服務(wù)端測試指令
[root@localhost ~]# ib_write_bw -F -d mlx5_0 -s 4096 -n 10000 --report_gbits -t 128 -q 4
write客戶端測試指令
[root@localhost ~]# ib_write_bw -F -d mlx5_0 -s 4096 -n 10000 192.168.100.9 --report_gbits -t 128 -q 4
---------------------------------------------------------------------------------------
RDMA_Write BW Test
Dual-port : OFF Device : mlx5_0
Number of qps : 4 Transport type : IB
Connection type : RC Using SRQ : OFF
PCIe relax order: ON
ibv_wr* API : ON
TX depth : 128
CQ Moderation : 100
Mtu : 1024[B]
Link type : Ethernet
GID index : 3
Max inline data : 0[B]
rdma_cm QPs : OFF
Data ex. method : Ethernet
---------------------------------------------------------------------------------------
local address: LID 0000 QPN 0x00df PSN 0x5a67fc RKey 0x1fcff3 VAddr 0x00000000d54000
GID: 0000000000255192100:08
local address: LID 0000 QPN 0x00e0 PSN 0x788b6d RKey 0x1fcff3 VAddr 0x00000000d55000
GID: 0000000000255192100:08
local address: LID 0000 QPN 0x00e1 PSN 0xe597d RKey 0x1fcff3 VAddr 0x00000000d56000
GID: 0000000000255192100:08
local address: LID 0000 QPN 0x00e2 PSN 0x6e9451 RKey 0x1fcff3 VAddr 0x00000000d57000
GID: 0000000000255192100:08
remote address: LID 0000 QPN 0x00dc PSN 0xfe4945 RKey 0x1fceef VAddr 0x00000000a13000
GID: 0000000000255192100:09
remote address: LID 0000 QPN 0x00dd PSN 0xf30d82 RKey 0x1fceef VAddr 0x00000000a14000
GID: 0000000000255192100:09
remote address: LID 0000 QPN 0x00de PSN 0x729a6e RKey 0x1fceef VAddr 0x00000000a15000
GID: 0000000000255192100:09
remote address: LID 0000 QPN 0x00df PSN 0xa2c0ee RKey 0x1fceef VAddr 0x00000000a16000
GID: 0000000000255192100:09
---------------------------------------------------------------------------------------
#bytes #iterations BW peak[Gb/sec] BW average[Gb/sec] MsgRate[Mpps]
4096 40000 23.05 23.05 0.703393
---------------------------------------------------------------------------------------
這里介紹一下幾個性能相關(guān)參數(shù):
s 4096:使用長度為4096字節(jié)的數(shù)據(jù)包進行測試,大包的性能會優(yōu)于小包。
n 10000:測試數(shù)據(jù)包數(shù),數(shù)量過小的話測試性能會有偏差。
t 128:tx隊列深度。
q 4:使用qp數(shù)。
最后帶寬結(jié)果為23.05Gb/sec,上文有描述本次測試使用的網(wǎng)卡帶寬規(guī)格為25Gb/sec,這里RoCE的性能已經(jīng)快要跑滿網(wǎng)卡。
>lat測試
這里進行read消息的延時測試
read 服務(wù)端測試指令
[root@localhost ~]# ib_read_lat -F -d mlx5_0 -s 4096 -n 10000
read 客戶端測試指令
測試延時的話是不能使用多QP的,只能使用1個QP進行測試
[root@localhost ~]# ib_read_lat -F -d mlx5_0 -s 4096 -n 10000 192.168.100.9 -t 128
---------------------------------------------------------------------------------------
RDMA_Read Latency Test
Dual-port : OFF Device : mlx5_0
Number of qps : 1 Transport type : IB
Connection type : RC Using SRQ : OFF
PCIe relax order: ON
ibv_wr* API : ON
TX depth : 128
Mtu : 1024[B]
Link type : Ethernet
GID index : 3
Outstand reads : 16
rdma_cm QPs : OFF
Data ex. method : Ethernet
---------------------------------------------------------------------------------------
local address: LID 0000 QPN 0x00e9 PSN 0xf265e5 OUT 0x10 RKey 0x1fcffa VAddr 0x00000002090000
GID: 0000000000255192100:08
remote address: LID 0000 QPN 0x00e6 PSN 0x396d2b OUT 0x10 RKey 0x1fcef6 VAddr 0x000000013f0000
GID: 0000000000255192100:09
---------------------------------------------------------------------------------------
#bytes #iterations t_min[usec] t_max[usec] t_typical[usec] t_avg[usec] t_stdev[usec] 99% percentile[usec] 99.9% percentile[usec]
4096 10000 4.89 23.00 5.15 5.27 0.84 6.75 19.88
---------------------------------------------------------------------------------------
觀察最后的延時結(jié)果,其中99.9%的延時實驗數(shù)據(jù)為19.88usec。
04RDMA的抓包方式
抓取RDMA數(shù)據(jù)包流量的方式有多種,交換機配置端口鏡像后,RDMA數(shù)據(jù)包通過鏡像口抓取比較常見。
這里介紹一種通過容器中的tcpdump捕獲Mellanox RDMA數(shù)據(jù)包的方式。
1)首先拉取tcpdump-rdma的鏡像:
[root@localhost ~]# docker pull mellanox/tcpdump-rdma
Using default tag: latest
latest: Pulling from mellanox/tcpdump-rdma
74f0853ba93b: Pull complete
1f89d668986d: Pull complete
2d176f9a99da: Pull complete
Digest: sha256:3b7b1aa52cf8f9fe0e55845463fb4c4a4147eae1f6bddf5d82b8b08cf954b66c
Status: Downloaded newer image for mellanox/tcpdump-rdma:latest
docker.io/mellanox/tcpdump-rdma:latest
2)啟動tcpdump-rdma容器,通過把主機上的/dev/infiniband設(shè)備映射到容器中,同時把主機上的/tmp/rdma目錄也映射到容器中去:
[root@localhost ~]#docker run -it -v /dev/infiniband:/dev/infiniband -v /tmp/rdma:/tmp/rdma --net=host --privileged mellanox/tcpdump-rdma bash
3)進入容器后進行抓包,最后把pcap數(shù)據(jù)包導(dǎo)入到wireshark后就可以查看RoCE數(shù)據(jù)了:
[root@localhost /]# tcpdump -i mlx5_1 -s 0 -w /tmp/rdma/rdma_data1.pcap
4)打開wireshark查看數(shù)據(jù)包。
審核編輯:湯梓紅
-
數(shù)據(jù)傳輸
+關(guān)注
關(guān)注
9文章
1836瀏覽量
64475 -
網(wǎng)卡
+關(guān)注
關(guān)注
3文章
303瀏覽量
27336 -
AI
+關(guān)注
關(guān)注
87文章
30106瀏覽量
268399 -
RDMA
+關(guān)注
關(guān)注
0文章
76瀏覽量
8925
原文標題:RDMA測試雜談
文章出處:【微信號:SDNLAB,微信公眾號:SDNLAB】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論