目錄
tcpdump (docker,Linux內核從4.9以上)
Offloaded Traffic Sniffer(tcpdump,ConnectX®-4以上的版本,libpcap庫v1.9或更高版本)
診斷工具--翻譯中
摘自《Mellanox_OFED_Linux_User_Manual_v4_1》
本章介紹的診斷工具提供了fabric中IB設備的連接和狀態調試方法。
| 工具 | 描述 |
| ibdump | 測試流入和流出Mellanox Technologies ConnectX系列適配器InfiniBand端口的InfiniBand通信。
請注意以下幾點:
dump出來的文件,可以通過Wireshark工具加載進行圖形流量分析。
以下描述了本地HCA(適配器)嗅探的工作流程:
注意:盡管ibdump是Linux應用程序,但是可以在任一操作系統上分析生成的.pcap文件。 [mlx4]為了使ibdump與RoCE一起使用,必須啟用Flow Steering。 啟用步驟: 1.將以下內容添加到/etc/modprobe.d/mlnx.conf文件:options mlx4_core log_num_mgm_entry_size = -1 2.重新啟動驅動程序。 注意:如果將HCA的端口中有一個配置為InfiniBand,則ibdump要求IPoIB DMFS是使能的。有關更多信息,請參閱第3.1.12.1節,啟用/禁用流向,第103頁。有關更多信息,請參閱工具的手冊頁。 |
| dump_fts | 為子網的ibnetdiscover掃描中發現的每個交換機轉儲表。dump文件格式與使用-R file -U /path/to/dump-file語法加載到OpenSM兼容。 Dumps tables for every switch found in an ibnetdiscover scan of the subnet. The dump file format is compatible with loading into OpenSM using the -R file -U /path/to/dump-file syntax. |
| ibaddr | 默認情況下,可以用來顯示指定端口或本地端口的LID和GID地址。這個實用程序可以用作簡單的地址解析器。 Can be used to show the LID and GID addresses of the specified port or the local port by default. This utility can be used as simple address resolver. |
| ib_send_bw |
測試兩台機器之間的SEND帶寬
一個充當服務器,另一個充當客戶端。服務器從客戶端接收數據包,它們都計算操作的吞吐量。該測試支持雙向功能(雙向功能可同時發送和接收),mtu大小的更改,tx大小,迭代次數,消息大小等。使用“ -a”可提供所有消息大小的結果。 Calculates the BW of SEND between a pair of machines. One acts as a server and the other as a client. The server receive packets from the client and they both calculate the throughput of the operation. The test supports features such as Bidirectional, on which they both send and receive at the same time, change of mtu size, tx size, number of iteration, message size and more. Using the "-a" provides results for all message sizes. |
RDMA抓包
ibdump
嗅探RDMA流量(抓包RDMA)非常棘手,因為一旦兩端完成了初始握手,數據便會不經過內核協議棧通過網卡(HCA)直接到達內存。除了在網絡上放置專用硬件嗅探器來抓包,剩下的唯一方法就是在網卡內放置有網卡商的hook接口,然后網卡商提供使用這些接口的 軟件工具。
例如:Mellanox HCA(網卡)的ibdump,This tool is also a part of Mellanox OFED package.
查看tcpdump和libpcap版本
[root@rdma63 dscp]# tcpdump --help
tcpdump version 4.9.2
libpcap version 1.5.3
ibdump github: https://github.com/Mellanox/ibdump
tcpdump (docker,Linux內核從4.9以上)
最新消息:Linux內核從4.9版開始就支持抓包RDMA(RoCE)流量。tcpdump發展到使用RDMA verbs接口直接 捕獲流量。請確保使用最新的Linux內核service:https://hub.docker.com/r/mellanox/tcpdump-rdma
(查看內核版本命令:uname -r、uname -a、lsb_release -a)
但是,在某些系統上很難升級tcpdump應用程序和關聯的庫以利用最新功能(特別是RDMA嗅探器)。
使用該docker容器是用戶能使用tcpdump捕獲和分析RDMA數據包的簡單,優雅且最快的方式。
使用方法:
1、拉取容器:
docker pull mellanox / tcpdump-rdma
2、啟動容器
docker run -it -v /dev/infiniband:/dev/infiniband -v /tmp/traces:/tmp/traces --net=host --privileged
現在mellanox/tcpdump-rdma bash 開始使用RDMA設備mlx5_0捕獲數據包。 (注意RDMA設備,而不是以太網設備)
3、保存捕獲結果到文件
tcpdump -i mlx5_0 -s 0 -w /tmp/traces/capture1.pcap
這會將數據包保存在容器內外/ tmp / traces目錄中的capture1.pcap文件中。
Offloaded Traffic Sniffer(tcpdump,ConnectX®-4以上的版本,libpcap庫v1.9或更高版本)
原文:https://docs.mellanox.com/display/MLNXOFEDv451010/Offloaded+Traffic+Sniffer
在ConnectX®-4和更高版本的網卡中受支持。
Offloaded 流量嗅探器 使得bypass kernel的數據傳輸方式 (如 RoCE, VMA, and DPDK)的流量可以被tcpdump等現有的抓包分析工具捕獲
使能Offloaded Traffic Sniffer:
-
Turn on the new ethtool private flags "sniffer" (off by default).
$ ethtool --set-priv-flags enp130s0f0 sniffer on -
在要監聽的以太網接口上設置
sniffer標志后,運行tcpdump捕獲該接口上的bypass kernel 流量。
注意:使能Offloaded Traffic Sniffer會降低bypass kernel數據流的速度。
有關如何使用ConnectX-4網卡自帶的tcpdump工具 dump RDMA流量的示例:
一、前提條件
設置
注意:如果您使用的是MLNX_OFED v5.1或更高版本,請確保在您的設置中安裝了libpcap庫v1.9或更高版本,以便能夠激活該功能。要下載libpcap,請訪問https://www.tcpdump.org/。
在下面的示例中,使用了兩個通過ConnectX-4適配器背對背連接的服務器。查看tcpdump和libpcap版本
[root@rdma63 dscp]# tcpdump --help
tcpdump version 4.9.2
libpcap version 1.5.3配置
- 鏈路層:以太網
- 流量:RoCE
二、執行過程
1.配置兩個適配器端口的IP地址,並確保在服務器之間運行ping。2.使用ethtool啟用嗅探器。
在此示例中,網卡名稱為ens785f0:
# ethtool --set-priv-flags ens785f0 sniffer on注意:如果您使用的是MLNX_OFED v5.1或更高版本,則此步驟無關緊要。
3.運行tcpdump等待數據包對於低於5.1的MLNX_OFED版本,請運行:
#tcpdump -i ens785f0 -s 65535 -w rdma_traffic.pcap對於MLNX_OFED v5.1及更高版本,運行:
#tcpdump -i mlx5_1 -s 65535 -w rdma_traffic.pcap
測試完成后,在wireshark中打開文件。
請參閱tcpdump主頁(https://linux.die.net/man/8/tcpdump)以查看更多示例。
4. 驗證RDMA抓包效果(Run RDMA traffic):
在一個服務器上運行
# ib_send_bw
************************************ * Waiting for client to connect... * ************************************在另外一個服務器上運行:
# ib_send_bw 192.168.5.232 --report_gbits -F
--------------------------------------------------------------------------------------- Send BW Test Dual-port : OFF Device : mlx5_1 Number of qps : 1 Transport type : IB Connection type : RC Using SRQ : OFF TX depth : 128 CQ Moderation : 100 Mtu : 4096[B] Link type : Ethernet Gid index : 0 Max inline data : 0[B] rdma_cm QPs : OFF Data ex. method : Ethernet --------------------------------------------------------------------------------------- local address: LID 0000 QPN 0x01ae PSN 0x31a206 GID: 00:00:00:00:00:00:00:00:00:00:255:255:12:12:12:06 remote address: LID 0000 QPN 0x020a PSN 0xa2824e GID: 00:00:00:00:00:00:00:00:00:00:255:255:12:12:12:05 --------------------------------------------------------------------------------------- #bytes #iterations BW peak[Gb/sec] BW average[Gb/sec] MsgRate[Mpps] 65536 1000 95.16 95.16 0.181502 ---------------------------------------------------------------------------------------
5.檢查輸出文件。
在此示例中,UDP端口4791用於RoCEv2通信。# cat ~/rdma_traffic.txt ... 14:48:23.007280 IP (tos 0x0, ttl 64, id 5066, offset 0, flags [DF], proto UDP (17), length 308) 1.1.6.2.49153 > 1.1.5.2.4791: [no cksum] UDP, length 280 0x0000: 248a 0780 5401 e41d 2df2 a45c 8100 0006 $...T...-..\.... 0x0010: 0800 4500 0134 13ca 4000 4011 18ea 0101 ..E..4..@.@..... 0x0020: 0602 0101 0502 c001 12b7 0120 0000 6440 ..............d@ 0x0030: ffff 0000 0001 0000 002a 8001 0000 0000 .........*...... 0x0040: 0001 0107 0203 0000 0000 0000 0011 7a2f ..............z/ 0x0050: ac19 0010 0000 0000 0000 19ac 2f7a 0000 ............/z.. 0x0060: 0000 0000 0000 0106 4853 e41d 2d03 00f2 ........HS..-... 0x0070: a45c 0000 0000 0000 0000 0001 a400 0000 .\.............. 0x0080: 0000 0000 00b0 28a5 38b7 ffff 37f0 ffff ......(.8...7... 0x0090: ffff 0000 0000 0000 0000 0000 ffff 0101 ................ 0x00a0: 0602 0000 0000 0000 0000 0000 ffff 0101 ................ 0x00b0: 0502 0000 0007 0040 0098 0000 0000 0000 .......@........ 0x00c0: 0000 0000 0000 0000 0000 0000 0000 0000 ................ 0x00d0: 0000 0000 0000 0000 0000 0000 0000 0000 ................ 0x00e0: 0000 0000 0000 0040 b1ee 0000 0000 0000 .......@........ 0x00f0: 0000 0000 0000 0101 0602 0000 0000 0000 ................ 0x0100: 0000 0000 0000 0101 0502 0000 0000 0000 ................ 0x0110: 0000 0000 0000 0000 0000 0000 0000 0000 ................ 0x0120: 0000 0000 0000 0000 0000 0000 0000 0000 ................ 0x0130: 0000 0000 0000 0000 0000 0000 0000 0000 ................ 0x0140: 0000 5870 f2dd ..Xp..如果您將文件保存給Wireshark,則會收到以下消息:
“請確保您使用的是最新版本的wireshark,因為舊版本可能無法很好地解析InfiniBand。”
