对eRDMA进行监测和诊断可以帮助您及时发现和解决问题,确保系统安全,并有效管理和优化系统资源。本文主要介绍几种可用于eRDMA监测的工具和方法,以便您对eRDMA的运行状态进行监控。
前提条件
待监测实例已安装和部署eRDMA。具体操作,请参见ECS实例启用eRDMA。
使用云监控监测eRDMA的运行状态
您可以通过阿里云的云监控产品来监测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) | ----------------------------------------------------------------------