目录
2.tcpdump (docker,Linux内核从4.9以上)
3.Offloaded Traffic Sniffer(tcpdump,ConnectX-4以上的版本,libpcap库v1.9或更高版本)
二、抓包结果分析
目录
tcpdump (docker,Linux内核从4.9以上)
Offloaded Traffic Sniffer(tcpdump,ConnectX-4以上的版本,libpcap库v1.9或更高版本)
作者:bandaoyu,原始连接:https://blog.csdn.net/bandaoyu/article/details/115791233
一、RDMA抓包
有三种方法。(抓包:sniffer packet、Packet capture)
1.ibdump
嗅探RDMA流量(抓包RDMA)非常棘手,因为一旦两端完成了初始握手,数据便会不经过内核协议栈通过网卡(HCA)直接到达内存。除了在网络上放置专用硬件嗅探器来抓包,剩下的唯一方法就是在网卡内放置有网卡商的hook接口,然后网卡商提供使用这些接口的 软件工具。
例如:Mellanox HCA(网卡)的ibdump,This tool is also a part of Mellanox OFED package.
- 编译
Mellanox github: https://github.com/Mellanox/ibdump
编译报错:ibdump.c:890:30: 错误:‘IBV_FLOW_ATTR_SNIFFER’未声明(在此函数内第一次使用)
则在文件:vim ibdump.c 添加:
#if !defined(IBV_FLOW_ATTR_SNIFFER)
#define IBV_FLOW_ATTR_SNIFFER 3
#endif
具体含义见:https://man7.org/linux/man-pages/man3/ibv_create_flow.3.html
执行:
make WITHOUT_FW_TOOLS=yes
- 用法
启用步骤:
1.将以下内容添加到/etc/modprobe.d/mlnx.conf文件:
options mlx4_core log_num_mgm_entry_size = -1:
(实际mlnx.conf提示:
Please don't edit this file. Create a new file under
# /etc/modprobe.d/ for your configurations.
所以在/etc/modprobe.d/下创建:
mlx5.conf #根据主机上的实际ib名称创建
options mlx4_core log_num_mgm_entry_size = -1:
options mlx5_core log_num_mgm_entry_size = -1: #不确定,我又补了这一句
)
2.重新启动驱动程序。
重启网络接口ib0
ifdown ib0
ifup ib0
注意:如果将HCA的端口中有一个配置为InfiniBand,则ibdump要求IPoIB DMFS是使能的。有关更多信息,请参阅第3.1.12.1节,启用/禁用流向,第103页。有关更多信息,请参阅工具的手册页。
Mellanox 社区--https://mymellanox.force.com/mellanoxcommunity/s/article/MLNX2-117-2032kn
服务端:
ib_write_bw -d mlx5_1 #监听mlx5_1 网卡
#客户端
ib_write_bw 182.205.31.53 --report_gbits -F
抓包:
ibdump -d mlx5_1 -i 1
ibdump -d mlx5_1 -i 1 -w msg.acp #抓包并写入msg.acp
测试RDMA网卡:https://blog.csdn.net/ljlfather/article/details/102925954
2.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文件中。
3.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等现有的抓包分析工具捕获
-
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流量的示例: