共享内存通信(SMC)监控说明

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

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

本文将介绍SMC运维过程中需要关注的各类指标,以判断网络健康状态。

前提条件

已安装Alibaba Cloud Linux 3提供的SMC运维工具集smc-tools

如未安装,执行以下命令安装smc-tools工具集。

sudo yum install -y smc-tools

协议栈监控

SMC协议栈在连接、流量以及共享内存等方面提供了统计指标,通过netlink方式传递到用户态。用户态工具smc-tools提供的smcr指令基于netlink接收并解析各类统计信息。

  • 查看SMC-R协议栈统计信息

    执行以下命令,查看SMC-R协议栈在当前net namespace下的各类统计信息。

    smcr stats

    输出结果示例:

    # smcr stats
    SMC-R Connections Summary
      Total connections handled          5076
      SMC connections                    5076
      Handshake errors                      0
      Avg requests per SMC conn          1977.0
      TCP fallback                          0
    
    RX Stats
      Data transmitted (Bytes)      200705600 (200.7M)
      Total requests                  5017741
      Buffer usage (Bytes)                  0 (0)
      Buffer full                           0 (0.00%)
                8KB    16KB    32KB    64KB   128KB   256KB   512KB  >512KB
      Bufs        0       0       0       0       0  5.076K       0       0
      Reqs   5.018M       0       0       0       0       0       0       0
    
    TX Stats
      Data transmitted (Bytes)     1194173445 (1.194G)
      Total requests                  5017640
      Buffer usage (Bytes)                  0 (0)
      Buffer full                           0 (0.00%)
      Buffer full (remote)                  0 (0.00%)
      Buffer too small                      0 (0.00%)
      Buffer too small (remote)             0 (0.00%)
                8KB    16KB    32KB    64KB   128KB   256KB   512KB  >512KB
      Bufs        0       0       0       0       0  5.076K       0       0
      Reqs   5.018M       0       0       0       0       0       0       0
    
    Extras
      Special socket calls                  5

    可主要关注如下参数:

    参数

    说明

    参数

    说明

    Total connections handled

    SMC-R协议栈处理的连接数量累加值,为SMC connectionsHandshake errorsTCP fallback数量之和。

    SMC connections

    成功转化为SMC-R连接的数量累加值。

    Handshake errors

    握手阶段出现错误的连接数量累加值,比如对端无响应等。

    Avg requests per SMC conn

    平均每条SMC连接接收/发送请求数量。

    TCP fallback

    回退到TCP/IP协议栈连接数量的累加值。

    Rx/Data transmitted (Bytes)

    SMC-R连接接收数据累加值(单位:字节)。

    Rx/Total requests

    SMC-R连接接收请求累加值。

    Rx/Buffer usage(Bytes)

    SMC-R连接正在使用的接收缓冲区总和(单位:字节)。

    Rx/Buffer full

    SMC-R连接接收缓冲区已满次数累加值,表示用户态程序未及时从接收缓冲区读取数据。此时需要用户态程序尽快读取数据或在此场景下增大接收缓冲区容量,否则会反压发送端,无法接收新的数据。

    Rx/Bufs

    SMC-R连接使用的接收缓冲区分布图。SMC-R在每个Link Group维度维护一个内存池,创建连接时从内存池中获取符合大小的、空闲的内存块复用。如果不存在则创建新的内存块,连接断开后将内存块还回内存池以供后续复用。此处统计值为连接从内存池中获取接收缓冲区的次数累加值与大小分布(包括缓冲区创建和复用次数),不代表实际占用内存的接收缓冲区数量。

    Rx/Reqs

    SMC-R连接接收请求实际获取数据大小的分布。

    Tx/Data transmitted (Bytes)

    SMC-R连接发送数据累加值(单位:字节)。

    Tx/Total requests

    SMC-R连接发送请求累加值。

    Tx/Buffer full

    SMC-R连接发送缓冲区已满次数累加值,表示SMC-R协议栈未及时将发送缓冲区中的数据发送到链路上。如果占比较高则考虑在此场景下增大发送缓冲区容量。

    Tx/Buffer full (remote)

    SMC-R连接的对端接收缓冲区已满次数累加值,表示因对端接收缓冲区已满而无法将数据发送到对端。若占比较高则考虑在此场景下增大对端接收缓冲区容量。

    Tx/Buffer too small

    SMC-R连接发送请求大小超过发送缓冲区大小的次数累加值,表示发送缓冲区设置过小。若占比较高则考虑在此场景下增大发送缓冲区容量。

    Tx/Buffer too small (remote)

    SMC-R连接发送请求大小超过对端接收缓冲区大小的次数累加值,表示对端接收缓冲区设置过小。若占比较高则考虑在此场景下增大对端接收缓冲区容量。

    Tx/Bufs

    SMC-R连接使用的发送缓冲区分布图。SMC-R在每个Link Group维度维护一个内存池,创建连接时从内存池中获取符合大小的、空闲的内存块复用。如果不存在则创建新的内存块,连接断开后将内存块还回内存池以供后续复用。此处统计值为连接从内存池中获取发送缓冲区的次数累加值与大小分布(包括缓冲区创建和复用次数),不代表实际占用内存的发送缓冲区数量。

    Tx/Reqs

    SMC-R连接发送请求数据大小的分布。

  • 查看SMC-R Link Group统计信息

    说明

    Link Group(LGR)默认包含一个Link,在SMC-R中用于维护一组RDMA资源集合,包括QP(Queue Pair)、PD(Protection Domain)、MR(Memory Region)等,一个Link Group承载默认32SMC-R连接的流量。

    执行以下命令,查看SMC-R Link Group(LGR)相关统计。统计维度为当前net namespace可访问的RDMA设备所关联的所有LGR。

    smcr linkgroup

    输出结果示例:

    # smcr linkgroup
    LG-ID    LG-Role  LG-Type  VLAN  #Conns  PNET-ID
    00000300 SERV     SINGLE      0       0

    可主要关注Link Group数量(意味着使用多少QP资源)以及以下参数:

    参数

    说明

    参数

    说明

    #Conns

    link group承载的SMC连接数量。

    进一步可以通过执行smcr -d linkgroup命令查看更详细信息。

    输出结果示例:

    LG-ID    : 00000500
    LG-Role  : CLNT
    LG-Type  : SINGLE
    VLAN     : 0
    PNET-ID  :
    Version  : 2
    Peer-Rel : 1
    Peer-Host:
    Peer-OS  : LINUX
    Direct   : Yes
    EID      : SMCV2-DEFAULT-UEID
    #Conns   : 32
    Sndbuf   : 8388608 B
    RMB      : 8388608 B

    可主要关注如下参数。

    参数

    说明

    参数

    说明

    Sndbuf

    LGR维持的发送缓冲池占用内存总和(单位:字节)。

    RMB

    LGR维持的接收缓冲池占用内存总和(单位:字节)。

  • 查看SMC-R设备统计信息

    执行以下命令,查看SMC-R协议栈所用RDMA设备的信息。

    smcr device

    输出结果示例:

    # smcr device
    Net-Dev         IB-Dev   IB-P  IB-State  Type          Crit  #Links  PNET-ID
    eth1            erdma_0     1    ACTIVE  0x107f          No       0  

    可主要关注如下参数:

    参数

    说明

    参数

    说明

    Net-Dev

    以太网网络设备名称。

    IB-Dev

    RDMA网络设备名称。

    IB-P

    RDMA网络设备端口。

    IB-State

    RDMA网络设备状态。

    Type

    RDMA网络设备类型,使用阿里云eRDMA网络设备时此处显示0x107f

    #Links

    RDMA网络设备所关联Link数量。

    PNET-ID

    关于RDMA网络设备PNET ID相关信息,请参见配置PNET ID参数

连接监控

类似ss,SMCsmc-tools中提供了监控SMC socket的用户态工具smcss,通过netlink获取socket信息,包括协商后使用SMC或是协商后回退到TCPsocket信息。

  • 查看SMC socket基础统计

    执行以下命令,查看正在建连、正在断连、完成建连等状态的,运行于SMC协议栈或是回退到TCP协议栈的SMC socket基础信息。统计维度为当前net namespace

    smcss

    输出结果示例:

    # smcss
    State          UID   Inode   Local Address           Peer Address            Intf Mode
    ACTIVE         00994 2954337 xxx.xxx.x.xx:80         xxx.xxx.x.xx:36000      0000 SMCR
    ACTIVE         00994 2953297 xxx.xxx.x.xx:80         xxx.xxx.x.xx:35948      0000 TCP 0x03010000

    可主要关注如下参数:

    参数

    说明

    参数

    说明

    State

    • INIT:初始化中。

    • CLOSED:已关闭。

    • LISTEN:监听中。

    • ACTIVE:已建立连接。

    • PEERCLW1:不再向对端发送数据。

    • PEERCLW2:不再向对端发送或从对端接收数据。

    • APPLCLW1:不再从对端接收数据。

    • APPLCLW2:不再从对端接收或向对端发送数据。

    • APPLFINCLW:对端已关闭。

    • PEERFINCLW:本端已关闭。

    • PEERABORTW:本端异常关闭。

    • PROCESSABORT:对端异常关闭。

    Local Address

    本地IPv4IPv4-mapped IPv6地址与端口,目前SMC仅支持IPv4协议。

    Peer Address

    对端IPv4IPv4-mapped IPv6地址与端口,目前SMC仅支持IPv4协议。

    Mode

    通信模式。

    • SMCR:使用SMC-R协议栈通信。

    • TCP <fallback reason>:回退使用TCP/IP协议栈通信数字代码表示回退原因。关于数字代码的具体含义,请参见启用SMC后回退无法使用RDMA加速

  • 查看监听状态的SMC socket统计

    执行以下指令,查看处在监听状态(LISTEN)的SMC socket。统计维度为当前net namespace

    smcss -l

    输出参数与smcss的输出参数相同。

  • 查看运行在SMC-R协议栈的SMC socket统计

    执行以下指令,查看运行在SMC-R协议栈的SMCsocket。统计维度为当前net namespace

    smcss -R

    输出结果示例:

    # smcss -R
    State          UID   Inode   Local Address           Peer Address            Intf Mode Role IB-device       Port Linkid GID                                      Peer-GID
    ACTIVE         00000 1833669 xxx.xxx.x.xx:33618      xxx.xxx.x.xx:80         0000 SMCR CLNT erdma_0         01   01     0000:0000:0000:0000:0000:xxxx:xxxx:xxxx  0000:0000:0000:0000:0000:xxxx:xxxx:xxxx

    除前述smcss提到的基础字段外,可额外关注如下字段:

    参数

    说明

    参数

    说明

    IB-device

    连接所用RDMA设备名称。

    Port

    连接所用RDMA设备端口。

    GID

    连接所用RDMA设备GID(Global ID)。

    Peer-GID

    对端所用RDMA设备GID。

  • 查看所有SMC socket统计

    执行以下指令,查看所有SMC socket。统计维度为当前net namespace

    smcss -a

    输出参数与smcss的输出参数相同。

设备监控

SMC-R使用阿里云eRDMA作为底层RDMA设备。eRDMA提供了多种用户态工具,用于采集RDMA资源和设备相关的统计信息。具体操作,请参见监控和诊断eRDMA

集成监控工具

smc_monitor_ex是由smc-tools提供的一个集成SMC流量统计、连接统计以及内存使用统计的监控工具脚本。该脚本内部调用了smc-tools的原子指令(如smcrsmcss等)采集统计数据。

  • 工具用法

    执行以下命令,查看smc_monitor_ex具体用法。

    警告

    smc_monitor_ex目前为实验性工具,使用方式在未来可能发生变化。

    # smc_monitor_ex -h
    usage: smc_monitor_ex [-h] {speed,s,connection,c,memory,m,base,b} ...
    
    SMC Monitor Tool (Experimental)
    
    positional arguments:
      {speed,s,connection,c,memory,m,base,b}
                            commands
        speed (s)           View transfer rates
        connection (c)      View connection counts
        memory (m)          View memory usages
        base (b)            View transfer rates, connection counts, and memory
                            usages
    
    optional arguments:
      -h, --help            show this help message and exit
  • 流量统计

    smc_monitor_ex中的speed子命令用于查看当前net namespaceSMC流量速率和RPS。

    # smc_monitor_ex speed -h
    usage: smc_monitor_ex speed [-h] [-i INTERVAL] [-r] [-m {smcr,smcd,smc}]
    
    optional arguments:
      -h, --help            show this help message and exit
      -i INTERVAL, --interval INTERVAL
                            Interval in seconds to display transfer rates.
      -r, --raw             Display rates in B/s without converting units.
      -m {smcr,smcd,smc}, --mode {smcr,smcd,smc}
                            Mode to check, either 'smc', 'smcr' or 'smcd', default
                            is 'smc'

    例如,每隔1秒打印当前net namespaceSMC-R流量:

    # smc_monitor_ex speed -m smcr -i 1
    Date                  Mode            Rx Rate            Rx Rps           Tx Rate            Tx Rps
    2025-02-21 14:01:48   smcr            0.0 B/s            0.0 /s           0.0 B/s            0.0 /s
    Date                  Mode            Rx Rate            Rx Rps           Tx Rate            Tx Rps
    2025-02-21 14:01:49   smcr            0.0 B/s            0.0 /s           0.0 B/s            0.0 /s
    Date                  Mode            Rx Rate            Rx Rps           Tx Rate            Tx Rps
    2025-02-21 14:01:50   smcr            0.0 B/s            0.0 /s           0.0 B/s            0.0 /s
  • 连接统计

    smc_monitor_ex中的connection子命令用于查看当前net namespace中成功使用 SMC 或回退到TCP协议的连接数量。

    # smc_monitor_ex connection -h
    usage: smc_monitor_ex connection [-h] [-i INTERVAL]
                                     [-m {smc,smcr,smcd,fallback,all}]
    
    optional arguments:
      -h, --help            show this help message and exit
      -i INTERVAL, --interval INTERVAL
                            Interval in seconds to display connections.
      -m {smc,smcr,smcd,fallback,all}, --mode {smc,smcr,smcd,fallback,all}
                            Mode to check, either 'all', 'smc', 'smcr', 'smcd' or
                            'fallback', default is 'all'

    例如,每隔1秒打印当前net namespace中成功使用SMC-R通信的连接数量:

    # smc_monitor_ex connection -m smcr -i 1
    Date                  Mode                 #Conn
    2025-02-21 14:06:47   smcr                     0
    Date                  Mode                 #Conn
    2025-02-21 14:06:48   smcr                     0
    Date                  Mode                 #Conn
    2025-02-21 14:06:49   smcr                     0
  • 内存统计

    smc_monitor_ex中的memory子命令用于查看当前net namespaceSMC连接所用环形缓冲区总和。

    # smc_monitor_ex memory -h
    usage: smc_monitor_ex memory [-h] [-i INTERVAL] [-r] [-m {smcr,smcd,smc}]
    
    optional arguments:
      -h, --help            show this help message and exit
      -i INTERVAL, --interval INTERVAL
                            Interval in seconds to display ringbuf usages.
      -r, --raw             Display memory usages in bytes without converting
                            units.
      -m {smcr,smcd,smc}, --mode {smcr,smcd,smc}
                            Mode to check, either 'smcr', 'smcd' or 'smc', default
                            is 'smc'

    例如,每隔1秒打印当前net namespaceSMC-R连接所用环形缓冲区总和:

    # smc_monitor_ex memory -m smcr -i 1
    Date                  Mode            Rx Bufs           Tx Bufs
    2025-01-06 15:14:20   smcr          512.00 KB         512.00 KB
    Date                  Mode            Rx Bufs           Tx Bufs
    2025-01-06 15:14:21   smcr          512.00 KB         512.00 KB
  • 全量统计

    smc_monitor_ex中的base子命令用于查看当前net namespace中上述所有SMC相关统计。

    例如,每隔1秒打印当前net namespaceSMC-R所有相关信息:

    # smc_monitor_ex base -m smcr -i 1
    Date                  Mode             Rx Rate      Rx Rps        Tx Rate      Tx Rps     #Conn     Rx Bufs     Tx Bufs
    2025-01-06 15:17:23   smcr           1.81 GB/s   21.66 K/s          0 B/s        0 /s         2   512.00 KB   512.00 KB
    Date                  Mode             Rx Rate      Rx Rps        Tx Rate      Tx Rps     #Conn     Rx Bufs     Tx Bufs
    2025-01-06 15:17:24   smcr           1.82 GB/s   21.81 K/s          0 B/s        0 /s         2   512.00 KB   512.00 KB
  • 本页导读 (1)
  • 前提条件
  • 协议栈监控
  • 连接监控
  • 设备监控
  • 集成监控工具
AI助理

点击开启售前

在线咨询服务

你好,我是AI助理

可以解答问题、推荐解决方案等