本文将介绍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。
在菜单栏中单击
在 Folders 标签页的列表中,找到 Global Lua Plugins 行,其 Location 列显示 Lua 脚本的安装路径(如
/Applications/Wireshark.app/Contents/PlugIns/wireshark)。
在Windows系统中查看
Wireshark Lua script的安装路径。运行Wireshark。
在Wireshark的主界面中,单击。
名称 位置 典型文件 Global Extcap path C:\Program Files\Wireshark\extcap external capture (extcap) plugins MIB/PIB 路径 SMI MIB/PIB 搜索路径 MaxMind DB 路径 C:\ProgramData\GeoIP MaxMind DB 数据库搜索路径 MaxMind DB 路径 C:\GeoIP MaxMind DB 数据库搜索路径 Personal Extcap path C:\Users\xxx\App...oaming\Wireshark\extcap external capture (extcap) plugins "文件"对话框 C:\Users\xxx\Documents 捕获文件 个人 Lua 插件 C:\Users\xxx\App...aming\Wireshark\plugins Lua scripts 个人插件 C:\Users\xxx\App...g\Wireshark\plugins\4.2 二进制插件 个人配置 C:\Users\xxx\AppData\Roaming\Wireshark dfilters, preferences, ethers, ... 临时 C:\Users\xxx\AppData\Local\Temp 无标题捕获文件 全局 Lua 插件 C:\Program Files\Wireshark\plugins Lua scripts ← 将脚本放入此目录 全局插件 C:\Program Files\Wireshark\plugins\4.2 二进制插件 全局配置 C:\Program Files\Wireshark dfilters, preferences, manuf, ... 程序 C:\Program Files\Wireshark 程序文件 系统 C:\Program Files\Wireshark ethers, ipxnets
重启Wireshark或Reload Lua Plugins使脚本生效。之后所有负载中含有SMC dump header的UDP包将被解析为SMC协议,如下所示。
Wireshark 过滤条件为
tcp.port==36508 or udp.port==36508,抓包结果展示了 SMC-R 协议通信的完整过程。TCP 协议的包(编号 20-22、24、26、30、49、61、62)为握手协商包,SMC/SMCv2 协议的包(编号 23、25、27-29、31-33、37-42、45-48、60)为经内核转化成 UDP 包抓取的 RDMA 数据包和控制包。tcp.port==36508 or udp.port==36508 No. Time Source Destination Protocol Length Info 20 0.000722 xxx xxx TCP 84 36508 → 5201 [SYN] Seq=0 Win=59220 Len=0 MSS=8460 SACK_PERM TSval=2524508823 TSecr=0 WS=128 ExID=E2D4 21 0.000834 xxx xxx TCP 84 5201 → 36508 [SYN, ACK] Seq=0 Ack=1 Win=59136 Len=0 MSS=8460 SACK_PERM TSval=4260635458 TSecr=2524508823 WS=128 ExID=E2D4 22 0.000838 xxx xxx TCP 68 36508 → 5201 [ACK] Seq=1 Ack=1 Win=59264 Len=0 TSval=2524508823 TSecr=4260635458 23 0.000842 xxx xxx SMCv2 224 [SMC-Rv2-Proposal],36508 → 5201 [PSH, ACK] Seq=1 Ack=1 Win=59264 Len=156 TSval=2524508823 TSecr=4260635458 24 0.000904 xxx xxx TCP 68 5201 → 36508 [ACK] Seq=1 Ack=157 Win=59008 Len=0 TSval=4260635458 TSecr=2524508823 25 0.000947 xxx xxx SMCv2 176 [SMC-Rv2-Accept],5201 → 36508 [PSH, ACK] Seq=1 Ack=157 Win=59008 Len=108 TSval=4260635458 TSecr=2524508823 OP=0x000aa5 26 0.000948 xxx xxx TCP 68 36508 → 5201 [ACK] Seq=157 Ack=109 Win=59264 Len=0 TSval=2524508823 TSecr=4260635458 27 0.000991 xxx xxx SMCv2 176 [SMC-Rv2-Confirm],36508 → 5201 [PSH, ACK] Seq=157 Ack=109 Win=59264 Len=108 TSval=2524508823 TSecr=4260635458 OP=0x0011fc 28 0.000993 xxx xxx SMC 93 [Raw Data], 36508 → 5201 size=37 29 0.000993 xxx xxx SMC 104 [CDC messages], 36508 → 5201 Prod=0:37 Cons=0:0 30 0.001050 xxx xxx TCP 68 5201 → 36508 [ACK] Seq=109 Ack=265 Win=59008 Len=0 TSval=4260635458 TSecr=2524508823 31 0.001156 xxx xxx SMC 65551 [Raw Data], 36508 → 5201 size=65495 32 0.001336 xxx xxx SMC 65551 [Raw Data], 36508 → 5201 size=65495 33 0.001543 xxx xxx SMC 65551 [Raw Data], 36508 → 5201 size=65495 37 0.001548 xxx xxx SMC 138 [Raw Data], 36508 → 5201 size=82 38 0.001549 xxx xxx SMC 104 [CDC messages], 36508 → 5201 Prod=0:131109 Cons=0:0 39 0.001560 xxx xxx SMC 65551 [Raw Data], 36508 → 5201 size=65495 40 0.001566 xxx xxx SMC 65551 [Raw Data], 36508 → 5201 size=65495 41 0.001574 xxx xxx SMC 101 [Raw Data], 36508 → 5201 size=45 42 0.001574 xxx xxx SMC 104 [CDC messages], 36508 → 5201 Prod=1:0 Cons=0:0 45 0.001609 xxx xxx SMC 104 [CDC messages], 5201 → 36508 Prod=0:0 Cons=0:131109 46 0.001610 xxx xxx SMC 93 [Raw Data], 36508 → 5201 size=37 47 0.001611 xxx xxx SMC 104 [CDC messages], 36508 → 5201 Prod=1:37 Cons=0:0 48 0.001649 xxx xxx SMC 104 [CDC messages], 36508 → 5201 Prod=0:0 Cons=0:131109 49 0.001673 xxx xxx TCP 68 5201 → 36508 [FIN, ACK] Seq=109 Ack=265 Win=59008 Len=0 TSval=4260635459 TSecr=2524508823 60 0.001835 xxx xxx SMC 104 [CDC messages], 36508 → 5201 Prod=1:37 Cons=0:0 61 0.001838 xxx xxx TCP 68 36508 → 5201 [FIN, ACK] Seq=265 Ack=110 Win=59264 Len=0 TSval=2524508824 TSecr=4260635459 62 0.001904 xxx xxx TCP 68 5201 → 36508 [ACK] Seq=110 Ack=266 Win=59008 Len=0 TSval=4260635459 TSecr=2524508824
性能诊断
在性能对比测试中,如果遇到SMC性能回退等问题。可通过基础性能测试工具来初步界定问题。
SMC可使用
sockperf、qperf、iperf3以及netperf等网络基础性能测试工具进行带宽和时延的基准测试。eRDMA可使用
perftest基础性能测试工具进行带宽和时延的基准测试。具体操作,请参见eRDMA网络性能测试。
如果在基准测试中SMC或者eRDMA就出现了性能回退,则需要提交工单进一步处理。如果基准测试正常,则需要参照共享内存通信(SMC)使能和配置说明检查SMC配置。