本文中含有需要您注意的重要提示信息,忽略该信息可能对您的业务造成影响,请务必仔细阅读。
本文将介绍SMC故障诊断和定位手段。
前提条件
已安装Alibaba Cloud Linux 3提供的SMC运维工具集smc-tools。
如未安装,执行以下命令安装smc-tools工具集。
sudo yum install -y smc-tools回退诊断
SMC协议栈在建连时会与对端自动协商是否使用SMC通信,在不满足SMC通信条件时安全回退到使用TCP通信。可通过smcss指令查看各SMC连接的回退原因。具体操作,请参见连接监控。
抓包诊断
SMC协议栈采用RDMA等内存直接访问技术进行数据传输,绕过了传统网络协议栈,因此无法直接利用传统的嗅探点进行数据包和控制包的流量捕获。
Alibaba Cloud Linux 3系统内核自ANCK 5.10.134-18版本起,提供了一种在SMC协议栈上捕获数据包和控制包的方案:
SMC内核协议栈在接收或发送连接控制消息和共享内存中数据块时,构建UDP skb指向目标数据内存,将其发送到指定的虚拟网络设备(dummy device)上。skb最终被虚拟网络设备静默地消费掉,不会真正进入到网络中。在这个过程中,skb会经过内核现存的嗅探点(图中的
dev_queue_xmit_nit()),如此一来就可以通过tcpdump和libpcap在虚拟网络设备上捕获到SMC协议栈发送或接收的数据包和控制包。而SMC握手流程中的TCP网络包仍在原本的以太网卡上抓取。
总结来说,上述两个阶段的数据包抓取方式如表所示。
数据包类型 | 流量承载设备 | 抓取设备 | 抓取报文格式 |
SMC握手协商TCP包 或fallback到TCP协议栈后的数据包 | 以太网卡(例如 | 以太网卡(例如 | TCP报文 |
SMC数据包或控制包 | RDMA网卡(例如 | 虚拟网卡(例如 | UDP报文 |
smc-tools提供了基于此方案的抓包工具smcdump-ex,它是tcpdump工具的再封装脚本,用于便捷地抓取SMC通信全流程。smcdump-ex会在当前net namespace中创建名称为smc-dummy{4字母随机字符}的虚拟网络设备,并开启SMC数据包和控制包的抓取功能,按要求在以太网设备或虚拟网络设备上使用tcpdump抓取SMC握手协商包、数据包和控制包。收到SIGINT(Ctrl + C)信号后将结束抓取、关闭抓取功能并销毁虚拟网络设备。
工具用法
执行以下命令,查看
smcdump-ex具体用法。警告smcdump-ex目前为实验性工具,使用方式在未来可能发生变化。
smcdump-ex -h usage: smcdump-ex [-h] [-m {all,smc,smcd,smcr}] [-t {all,raw,cdc}] [--param PARAM] [--filter FILTER] [--legacy] SMC Dump - SMC Traffic Capture (Experimental) optional arguments: -h, --help show this help message and exit -m {all,smc,smcd,smcr}, --mode {all,smc,smcd,smcr} Select the mode (default: smc) -t {all,raw,cdc}, --type {all,raw,cdc} Select the packet type (default: all) --param PARAM Additional parameters for tcpdump. e.g. --param '-w packets.pcap' --filter FILTER Additional filter expressions for tcpdump. e.g. --filter 'host xxx.xxx.x.x and port 8080' --legacy Use the legacy SMC dump header format使用
-m设置数据抓取模式可选抓取模式有:
all:在所有网络接口上抓包(等同于调用tcpdump -i any)。即在以太网接口抓取SMC握手协商包,在新建的虚拟网络接口抓取SMC数据包和控制包。在此模式下,建议同时使用--filter设置额外的tcpdump过滤表达式,缩小网络包抓取范围,以便精确抓取到SMC协商包,具体内容请参见--filter。smc,smcr,smcd:仅在新建的虚拟网络接口(等同于调用tcpdump -i smc-dummy{4字母随机字符})上抓取SMC/SMC-R/SMC-D的数据包和控制包。
使用
-t设置抓取的网络包类型可选待抓取网络包类型有:
all:SMC数据包和控制包。raw:仅SMC数据包。cdc:仅SMC控制包。
使用
--param设置其他tcpdump参数例如:
--param '-w smcdata.pcap',设置抓包内容转储到文件。使用
--filter设置其他tcpdump过滤规则例如:
--filter 'host <ip> and port <port>',设置欲抓取数据包的IP地址和端口,以便准确捕获SMC协商包,避免其他TCP网络包对结果分析造成的干扰。使用
--legacy解析旧smc dump header格式此参数仅为兼容
ANCK 5.10.134-17.3版本内核,对于ANCK 5.10.134-18及以上版本的内核,无需设置此参数。
使用范例
以下述情况为例:使用
smcdump-ex抓取IP地址为192.168.2.5,端口为5201的SMC连接通信过程中的全部数据包,并转储到smc.pcap文件中。执行以下命令:smcdump-ex -m all -t all --param '-w smc.pcap' --filter 'host 192.168.2.5 and port 5201'使用
--param '-w <pcap file>'存储到.pcap文件的抓包结果可通过Wireshark工具配合Lua插件进一步分析:下载并安装Wireshark。
通过Wireshark配合Lua插件进一步分析存储到
.pcap文件的抓包结果。下载Lua插件:https://os-smc-new.oss-cn-hangzhou.aliyuncs.com/smc_dump.lua。
说明使用该Lua插件需确保Wireshark中Lua解释器版本大于等于5.3。
查看
Wireshark Lua script的安装路径,将Lua脚本放入此路径中。在macOS系统中查看
Wireshark Lua script的安装路径。运行Wireshark。
在菜单栏中单击


在Windows系统中查看
Wireshark Lua script的安装路径。运行Wireshark。
在Wireshark的主界面中,单击。

重启Wireshark或Reload Lua Plugins使脚本生效。之后所有负载中含有SMC dump header的UDP包将被解析为SMC协议,如下图所示。

性能诊断
在性能对比测试中,如果遇到SMC性能回退等问题。可通过基础性能测试工具来初步界定问题。
SMC可使用
sockperf、qperf、iperf3以及netperf等网络基础性能测试工具进行带宽和时延的基准测试。eRDMA可使用
perftest基础性能测试工具进行带宽和时延的基准测试。具体操作,请参见eRDMA网络性能测试。
如果在基准测试中SMC或者eRDMA就出现了性能回退,则需要提交工单进一步处理。如果基准测试正常,则需要参照共享内存通信(SMC)使能和配置说明检查SMC配置。