共享内存通信(SMC)诊断说明

更新时间:2025-03-24 09:56
重要

本文中含有需要您注意的重要提示信息,忽略该信息可能对您的业务造成影响,请务必仔细阅读。

本文将介绍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()),如此一来就可以通过tcpdumplibpcap在虚拟网络设备上捕获到SMC协议栈发送或接收的数据包和控制包。

    image
  • 而SMC握手流程中的TCP网络包仍在原本的以太网卡上抓取。

总结来说,上述两个阶段的数据包抓取方式如表所示。

数据包类型

流量承载设备

抓取设备

抓取报文格式

数据包类型

流量承载设备

抓取设备

抓取报文格式

SMC握手协商TCP包

或fallback到TCP协议栈后的数据包

以太网卡(例如eth0

以太网卡(例如eth0

TCP报文

SMC数据包或控制包

RDMA网卡(例如erdma_0

虚拟网卡(例如dummy0

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

      • smcsmcrsmcd:仅在新建的虚拟网络接口(等同于调用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插件进一步分析:

    1. 下载并安装Wireshark

    2. 通过Wireshark配合Lua插件进一步分析存储到.pcap文件的抓包结果。

      1. 下载Lua插件:https://os-smc-new.oss-cn-hangzhou.aliyuncs.com/smc_dump.lua

        说明

        使用该Lua插件需确保Wireshark中Lua解释器版本大于等于5.3。

      2. 查看Wireshark Lua script的安装路径,将Lua脚本放入此路径中。

        • 在macOS系统中查看Wireshark Lua script的安装路径。

          1. 运行Wireshark。

          2. 在菜单栏中单击Wireshark > About Wireshark > Folders

            image

            image

        • 在Windows系统中查看Wireshark Lua script的安装路径。

          1. 运行Wireshark。

          2. 在Wireshark的主界面中,单击帮助 > 文件夹

            image

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

      image

性能诊断

在性能对比测试中,如果遇到SMC性能回退等问题。可通过基础性能测试工具来初步界定问题。

  • SMC可使用sockperfqperfiperf3以及netperf等网络基础性能测试工具进行带宽和时延的基准测试。

  • eRDMA可使用perftest基础性能测试工具进行带宽和时延的基准测试。具体操作,请参见eRDMA网络性能测试

如果在基准测试中SMC或者eRDMA就出现了性能回退,则需要提交工单进一步处理。如果基准测试正常,则需要参照共享内存通信(SMC)使能和配置说明检查SMC配置。

  • 本页导读 (1)
  • 前提条件
  • 回退诊断
  • 抓包诊断
  • 性能诊断
文档反馈