本文中含有需要您注意的重要提示信息,忽略该信息可能对您的业务造成影响,请务必仔细阅读。
本文将介绍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 connections、- Handshake errors、- TCP 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承载默认32个SMC-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,SMC在smc-tools中提供了监控SMC socket的用户态工具smcss,通过netlink获取socket信息,包括协商后使用SMC或是协商后回退到TCP的socket信息。
- 查看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- 本地IPv4或IPv4-mapped IPv6地址与端口,目前SMC仅支持IPv4协议。 - Peer Address- 对端IPv4或IPv4-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的原子指令(如smcr,smcss等)采集统计数据。
- 工具用法 - 执行以下命令,查看 - 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 namespace中SMC流量速率和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 namespace的SMC-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 namespace中SMC连接所用环形缓冲区总和。- # 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 namespace中SMC-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