全部產品
Search
文件中心

Alibaba Cloud Linux:共用記憶體通訊(SMC)監控說明

更新時間:Mar 25, 2025

本文將介紹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承載預設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的原子指令(如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 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