對eRDMA進行監測和診斷可以協助您及時發現和解決問題,確保系統安全,並有效管理和最佳化系統資源。本文主要介紹幾種可用於eRDMA監測的工具和方法,以便您對eRDMA的運行狀態進行監控。
前提條件
待監測執行個體已安裝和部署eRDMA。具體操作,請參見ECS執行個體啟用eRDMA。
使用CloudMonitor監測eRDMA的運行狀態
您可以通過阿里雲的CloudMonitor產品來監測eRDMA的運行狀態,您也可以根據自己的監控需求對相應的監控資料進行加工、監控或者警示。詳細資料,請參見自訂監控。
查看eRDMA支援的監控指標項
在指標列表搜尋方塊中輸入eri,可以篩選出當前eRDMA支援的監控指標。
篩選結果包含以下 5 個 eRDMA 監控指標(指標類型均為 erdma,Dimensions 為 userId,instanceId,Statistics 為 Value,MinPeriods 為 60s,均支援設定警示):
eri_active_qp_num:執行個體 ERI 維度串連數,單位 countrx_eri_bw_bps:執行個體 ERI 維度流入頻寬,單位 bit/srx_eri_pkt_pps:執行個體 ERI 維度流入資料包 PPS,單位 count/stx_eri_bw_bps:執行個體 ERI 維度流出頻寬,單位 bit/stx_eri_pkt_pps:執行個體 ERI 維度流出資料包 PPS,單位 count/s
使用eadm工具進行eRDMA故障診斷和排查
eadm是eRDMA驅動程式預設自動部署的一個使用者態的管理工具,無需手動安裝,它是自研的ECS內部的診斷與即時監測工具,便於在遇到故障時快速進行定位。eadm工具的主要功能包括:
流量監控、問題輔助診斷等功能:整個裝置的即時資料流量統計功能。
配置的查詢與設定功能:包括delay ack功能的配置、擁塞控制演算法CC(Congestion Control)的配置等。
以下主要針對eadm工具常見的命令做說明,其他命令可以參考eadm工具的使用協助(通過eadm -h命令擷取協助)。
本工具僅用於診斷與調試,工具未來可能發生變化,並不保證命令在任何情況/情境下均可用。
查看
eadm命令的協助資訊eadm -h[root@xxx ~]# eadm -h Usage: eadm OBJECT { COMMAND | help } where OBJECT := { dump stat info ver conf help }即時監測eRDMA裝置的即時資料流量資訊
eRDMA裝置的驅動版本在
0.2.34及以後,均支援流量的監控統計功能。eadm stat -d <ibdev_name> -l其中
<ibdev_name>是指待查詢的eRDMA裝置名稱(通過ibv_devinfo命令查詢),您需要根據實際環境替換。如果環境中僅有一個eRDMA裝置,-d <ibdev_name>參數可省略。[root@xxx xxx ~]# ibv_devinfo hca_id: erdma_0 transport: eRDMA (1) fw_ver: 0.2.0 node_guid: 0216:3eff:fe13:1914 sys_image_guid: 0216:3eff:fe13:1914 vendor_id: 0x1ded vendor_part_id: 4223 hw_ver: 0x0 phys_port_cnt: 1 port: 1 state: PORT_ACTIVE (4) max_mtu: 4096 (5) active_mtu: 4096 (5) sm_lid: 0 port_lid: 0 port_lmc: 0x00 link_layer: Ethernet [root@xxx xxx ~]# eadm stat -d erdma_0 -l Monitoring erdma_0... (press CTRL-C to stop) 14:07:57 rx: 218.46 MiB/s 1000313 p/s tx: 218.46 MiB/s 1000315 p/s擷取eRDMA裝置的統計資訊(例如cm和verebs訊息的計數、流量計數等)
eadm stat -d <ibdev_name>其中
<ibdev_name>是指待查詢的eRDMA裝置名稱(通過ibv_devinfo命令查詢),您需要根據實際環境替換。如果環境中僅有一個eRDMA裝置,-d <ibdev_name>參數可省略。[root@ixxxxxxZ ~]# eadm stat -d erdma_0 return cnts:55 listen_create_cnt : 1 listen_ipv6_cnt : 0 listen_success_cnt : 1 listen_failed_cnt : 0 listen_destroy_cnt : 0 accept_total_cnt : 300 accept_success_cnt : 300 accept_failed_cnt : 0 reject_cnt : 0 reject_failed_cnt : 0 connect_total_cnt : 300 connect_success_cnt : 300 connect_failed_cnt : 0 connect_timeout_cnt : 0 connect_reset_cnt : 0 cmdq_submitted_cnt : 266 cmdq_comp_cnt : 266 cmdq_eq_notify_cnt : 263 cmdq_eq_event_cnt : 0擷取當前eRDMA驅動的版本資訊
eadm ver
其餘命令,例如info、dump、conf等,會有使用方面的約束限制,不建議您自行使用。
使用iproute2監控和診斷eRDMA
iproute2是一套用於配置和管理Linux網路的工具集,它提供了一系列的命令列工具(如ip、ss等),用於網路介面、路由表和流量控制等方面的管理和配置,還可以協助管理員快速定位和解決網路連接問題,其內建的rdma命令可以對RDMA子系統做一些相應的監控和診斷。
大多數Linux發行版在較新的版本中通常已預設安裝iproute2,如Alibaba Cloud Linux 3、Ubuntu20及以上等,具體情況請參閱相應作業系統官方文檔。
查詢當前eRDMA裝置的狀態資訊
rdma link[root@xxx log]# rdma link link erdma_0/1 state ACTIVE physical_state LINK_UP netdev eth0查詢eRDMA裝置當前資源使用方式(如CQ數、QP數、MR數等)
說明在RDMA網路通訊中,QP(Queue Pair)、CQ(Completion Queue)、MR(Memory Region)和verbs Opcode是幾個核心的組件,它們在RDMA通訊中扮演著重要的角色,共同確保了RDMA網路通訊的高效性和低延遲性。
詳細資料,請參見彈性RDMA的基礎能力和規格。
rdma res[root@xxx log]# rdma res 1: erdma_0: pd 12 cq 2 qp 200 cm_id 201 mr 301 ctx 2查詢eRDMA裝置的效能統計資訊(例如串連次數、串連狀態、發送/接收的資料包數量等)
rdma -p stat[root@xxx log]# rdma -p stat link erdma_0/1 link erdma_0/1 listen_create_cnt 1 listen_ipv6_cnt 0 listen_success_cnt 1 listen_failed_cnt 0 listen_destroy_cnt 0 accept_total_cnt 500 accept_success_cnt 500 accept_failed_cnt 0 reject_cnt 0 reject_failed_cnt 0 connect_total_cnt 500 connect_success_cnt 500 connect_failed_cnt 0 connect_timeout_cnt 0 connect_reset_cnt 0 cmdq_submitted_cnt 6344 cmdq_comp_cnt 6344 cmdq_eq_notify_cnt 5453 cmdq_eq_event_cnt 0 cmdq_cq_armed_cnt 5454 erdma_aeq_event_cnt 0
使用diagnose進行eRDMA的故障診斷和效能評估
diagnose診斷工具支援eRDMA基礎功能檢測、eRDMA HPC環境檢測和eRDMA基礎延遲檢測,可以協助您更好地使用eRDMA。
diagnose檢測可能存在以下幾種結果
PASS:通過當前檢測。SKIP:當前系統版本不支援該檢測,跳過該檢測。FAIL:相應偵查工具未安裝或檢測失敗,檢測命令會在fail info中列出。其他INFO資訊:eRDMA相關配置資訊,如安裝模式、驅動版本以及CC演算法等。
安裝diagnose
在已配置eRDMA的執行個體上,執行以下命令,擷取diagnose工具。
從內網地址擷取
wget http://mirrors.cloud.aliyuncs.com/erdma/tools/diagnose.py從公網地址擷取
wget https://mirrors.aliyun.com/erdma/tools/diagnose.py
eRDMA基礎功能診斷
您可以通過diagnose進行eRDMA的基礎功能診斷測試,包括驅動是否正確安裝、網路連通性是否正常、eRDMA核心驅動的安裝模式等,以確保 eRDMA 功能可以正常運行並發揮其高輸送量和低延遲的優勢。
具體操作如下所示:
遠程登入已配置eRDMA的執行個體。
具體操作,請參見使用Workbench登入Linux執行個體。
執行以下命令,擷取diagnose工具。
從內網地址擷取
wget http://mirrors.cloud.aliyuncs.com/erdma/tools/diagnose.py從公網地址擷取
wget https://mirrors.aliyun.com/erdma/tools/diagnose.py
執行以下命令,檢測eRDMA基礎功能。
python diagnose.py -d結果如下所示,可以看到本樣本中測試項結果。關於診斷項說明,請參見eRDMA基礎功能診斷項說明。
[root@jxxx ~]# python diagnose.py -d [INFO] Begin to run erdma basic diagnoses. It's better to ensure that erdma driver and related tools, e.g. eadm, ibv_devinfo, rdma, have been installed. [INFO] The diagnose results mean: [INFO] PASS: pass the test or meet the requirement. [INFO] SKIP: encounter some problems when running the diagnose. [INFO] FAIL: test failed or requirements are not met. [INFO] XXXX: the erdma-related information, e.g. erdma driver version, cc algorithm. Name Result Desc fail info ------------------------------------------------------------------------------------------------------------------------------ erdma device PASS erdma pci device is present erdma installed PASS erdma module has been installed erdma loaded PASS erdma module has been loaded ibverbs loaded PASS ib_uverbs module has been loaded erdma tools PASS eadm|rdma|ibv_devinfo tools have been installed hca detected PASS IB device exist hca active PASS status is PORT_ACTIVE erdma stats PASS no failed counter network config PASS network configuration seems ok erdma dmesg PASS no concerning error logs detected atomic support PASS atomic capacity support go-back-n support FAIL Go-back-N capacity support CHCK FAILED [eadm info -t ext_attr -d erdma_0 | grep -w attr_mask | awk '{print $2}'] erdma install mode Standard erdma installation mode kernel driver version 0.2.37 erdma kernel driver version rdma-core version 44.1-2 rdma-core version cc algorithm hpcc_rtt current cc algorithm
eRDMA HPC環境診斷
如果您需要在eRDMA的環境下運行HPC應用,您可能需要安裝一些額外的依賴和配置,diagnose工具提供eRDMA HPC環境依賴項檢測功能。
具體操作如下所示:
遠程登入已配置eRDMA的執行個體。
具體操作,請參見使用Workbench登入Linux執行個體。
執行以下命令,擷取diagnose工具。
從內網地址擷取
wget http://mirrors.cloud.aliyuncs.com/erdma/tools/diagnose.py從公網地址擷取
wget https://mirrors.aliyun.com/erdma/tools/diagnose.py
執行如下命令,檢測eRDMA HPC環境依賴項。
python diagnose.py --hpc-check正常情況下,執行上述檢測命令的輸出結果如下。關於診斷項說明,請參見eRDMA HPC環境檢測依賴項說明。
ecs-user@xxx ~$ python diagnose.py --hpc-check [INFO] Begin to run hpc related diagnoses for erdma. If the missing dependencies are not required, please ignore them. [INFO] The diagnose results mean: [INFO] PASS: pass the test or meet the requirement. [INFO] SKIP: encounter some problems when running the diagnose. [INFO] FAIL: test failed or requirements are not met. [INFO] XXXX: the erdma-related information, e.g. erdma driver version, cc algorithm. Name Result Desc fail info ---------------------------- ------------------- ------------------------------------------------------- ------------------- cc algorithm cubic current cc algorithm go-back-n support PASS Go-back-N capacity support dapl1 install FAIL dapl1 installation check CHCK FAILED [ls /etc/rdma/compat-dapl/dat.conf && ls /usr/lib64/libdaplcma.so.1.0.2] dapl2 install PASS dapl2 installation check dapl2 config PASS dapl2 erdma configuration check dapl2 test PASS dapl2 dtest result
eRDMA網路效能評估
您可以使用diagnose的perftest功能進行不同執行個體之間的網路效能測試。
前提條件
在執行檢測之前,您需要確保:
已在所有待檢測節點上正確安裝和部署eRDMA。具體操作,請參見ECS執行個體啟用eRDMA。
已配置所有待檢測節點之間可通過SSH免密串連。具體操作,請參見配置SSH免密登入。
已在所有待檢測節點上安裝Python paramiko依賴包。
說明diagnose利用paramiko實現遠端連線。
您可以參考如下命令安裝Python paramiko依賴包。如果您對Python版本沒有要求,推薦您預設使用Python3以減少配置工作量。
Alibaba Cloud Linux/Centos
# python3 sudo python3 -m pip install --upgrade pip sudo python3 -m pip install paramiko # python2 # 如果當前python2未安裝pip模組,請安裝python2-pip sudo yum -y install python2-pip sudo python2 -m pip install --upgrade pip==20.3.4 sudo python2 -m pip install paramikoUbuntu
# python3 sudo python3 -m pip install --upgrade pip sudo python3 -m pip install paramiko # python2 # 如果當前節點未安裝python2-pip sudo apt install software-properties-common sudo add-apt-repository universe sudo apt update sudo apt install python2 sudo curl https://bootstrap.pypa.io/pip/2.7/get-pip.py --output get-pip.py sudo python2 get-pip.py sudo python2 -m pip install --upgrade pip==20.3.4 sudo python2 -m pip install paramiko
樣本操作
遠程登入已配置eRDMA的執行個體。
具體操作,請參見使用Workbench登入Linux執行個體。
執行以下命令,擷取diagnose工具。
從內網地址擷取
wget http://mirrors.cloud.aliyuncs.com/erdma/tools/diagnose.py從公網地址擷取
wget https://mirrors.aliyun.com/erdma/tools/diagnose.py
執行如下命令,進行eRDMA延遲檢測。
python diagnose.py --perftest --hosts <n1> <n2> --user <username> --key-file </path/to/private_key>各參數說明如下:
--hosts <n1> <n2>:待檢測的各節點,彼此之間通過空格分隔。您需要將<n1> <n2>替換為檢測節點上的eRDMA彈性網卡對應的私人IP地址。--user <username>:SSH免密登入使用者名稱,請根據實際環境替換。--key-file </path/to/private_key>:SSH免密登入所使用的私密金鑰檔案路徑(絕對路徑),請根據實際環境替換。
檢測結果樣本如下,顯示了兩台執行個體之間的網路延遲測試。詳細資料,請參見eRDMA網路效能測試。
每個表格展示了不同操作下的延遲情況。表格中的行代表發起請求的一方,列代表響應請求的一方。每個儲存格內的數值表示平均延遲(單位為微秒),括弧內是第99.9百分位的延遲時間。
[ecs-xxx ~]$ python diagnose.py --perftest --hosts 172.17.0.87 172.17.0.86 --user ecs-user --key-file /home/ecs-user/.ssh/id_rsa /usr/local/lib/python3.6/site-packages/paramiko/transport.py:32: CryptographyDeprecationWarning: Python 3.6 is no longer supported by the Python core team. or Python 3.6. from cryptography.hazmat.backends import default_backend INFO:paramiko.transport:Connected (version 2.0, client OpenSSH_8.0) INFO:paramiko.transport:Authentication (publickey) successful! INFO:paramiko.transport:Connected (version 2.0, client OpenSSH_8.0) INFO:paramiko.transport:Authentication (publickey) successful! [INFO] Begin to run perftest, the results will be shown in table. [INFO] In each table, the line represents client while the column represents server. [INFO] Each table cell shows the average latency and p999 latency(in the bracket). [INFO] Current perftest configuration: [INFO] tests: send_lat read_lat write_lat message_size: 2 iterations: 10000 ---------------------------------------------------------------------- | ib_send_lat latency table(us) | ---------------------------------------------------------------------- | | 172.17.0.87 | 172.17.0.86 | ---------------------------------------------------------------------- | 172.17.0.87 | 14.60(87.53) | 14.29(25.25) | ---------------------------------------------------------------------- | 172.17.0.86 | 14.35(51.63) | 8.31(21.09) | ---------------------------------------------------------------------- ---------------------------------------------------------------------- | ib_read_lat latency table(us) | ---------------------------------------------------------------------- | | 172.17.0.87 | 172.17.0.86 | ---------------------------------------------------------------------- | 172.17.0.87 | 24.28(51.43) | 27.57(57.42) | ---------------------------------------------------------------------- | 172.17.0.86 | 27.43(41.14) | 13.88(49.83) | ---------------------------------------------------------------------- ---------------------------------------------------------------------- | ib_write_lat latency table(us) | ---------------------------------------------------------------------- | | 172.17.0.87 | 172.17.0.86 | ---------------------------------------------------------------------- | 172.17.0.87 | 183.71(25003.59) | 12.76(27.00) | ---------------------------------------------------------------------- | 172.17.0.86 | 12.80(26.05) | 6.41(13.75) | ----------------------------------------------------------------------