对eRDMA进行监测和诊断可以帮助您及时发现和解决问题,确保系统安全,并有效管理和优化系统资源。本文主要介绍几种可用于eRDMA监测的工具和方法,以便您对eRDMA的运行状态进行监控。
前提条件
待监测实例已安装和部署eRDMA。具体操作,请参见在企业级实例上配置eRDMA。
使用云监控监测eRDMA
您可以通过阿里云的云监控产品来监测eRDMA的运行状态。eRDMA支持的监控指标项可以通过如下步骤查询:
使用eadm监测eRDMA
eadm是eRDMA驱动程序默认自动部署的一个用户态的管理工具,无需手动安装,它是自研的ECS内部的诊断与实时监测工具,便于在遇到故障时快速进行定位。eadm工具的主要功能包括:
流量监控、问题辅助诊断等功能:整个设备的实时流量统计功能。
配置的查询与设置功能:包括debug功能的开启、拥塞控制算法CC(Congestion Control)的配置等。
以下主要针对eadm工具常见的命令做说明,其他命令可以参考eadm工具的使用帮助(通过eadm -h
命令获取帮助)。
本工具仅用于诊断与调试,工具未来可能发生变化,并不保证命令在任何情况/场景下均可用。
获取当前支持的主命令字
eadm -h
获取eRDMA设备的实时流量信息
eadm stat -d <ibdev_name> -l
其中
<ibdev_name>
是指待查询的eRDMA设备名称(通过ibv_devinfo
命令查询),您需要根据实际环境替换。如果环境中仅有一个eRDMA设备,-d <ibdev_name>
参数可省略。获取eRDMA设备的统计信息(例如cm和verebs消息的计数、流量计数等)
eadm stat -d <ibdev_name>
其中
<ibdev_name>
是指待查询的eRDMA设备名称(通过ibv_devinfo
命令查询),您需要根据实际环境替换。如果环境中仅有一个eRDMA设备,-d <ibdev_name>
参数可省略。获取当前eRDMA驱动的版本信息
eadm ver
其余命令,例如info
、dump
、conf等,
会有使用方面的约束限制,不建议您自行使用。
使用iproute2监测eRDMA
iproute2是Linux中管理控制TCP/IP网络和流量控制的新一代工具包,eRDMA的高版本已默认安装iproute2,iproute2自带的rdma命令也可以对RDMA子系统做一些相应的监控和诊断。
iproute2工具用完整而有机制的简单命令替代了ifconfig、arp、route、netstat等命令的功能,可用于管理网络接口、路由表和流量控制,帮助管理员快速定位和解决网络连接问题。
查询eRDMA设备的统计信息(例如cm和verebs消息的计数、流量计数等)
rdma -p stat
查询eRDMA设备当前的资源使用情况
rdma res
查询当前的eRDMA设备的状态信息
rdma link
使用diagnose工具检测eRDMA
diagnose诊断工具支持eRDMA基础功能检测、eRDMA HPC环境检测和eRDMA基础时延检测,可以帮助您更好地使用eRDMA。
运行如下命令,获取diagnose工具。
wget https://mirrors.aliyun.com/erdma/tools/diagnose.py # 查看diagnose工具使用方法 python diagnose.py -h
检测eRDMA。
基础功能检测
运行如下任意一条命令,检测eRDMA基础功能。
python diagnose.py -d
或者
python diagnose.py --diagnose
当前检测项存在如下四种不同的检测结果,含义如下:
PASS
:通过当前检测。SKIP
:当前系统版本不支持该检测,跳过该检测。FAIL
:相应检测工具未安装或检测失败,检测命令会在fail info
中列出。其他INFO信息:eRDMA相关配置信息,如安装模式、驱动版本以及CC算法等。
正常情况下执行diagnose工具的效果如下,表示所有检测均通过。
当前eRDMA基础功能检测包含如下16个检测项,如果某一项出错,请按照如下方式解决:
检测项
说明
期望输出
异常输出及解决方案
erdma device
eRDMA设备是否存在
PASS
FAIL
:可能是您在购买实例时,没有选中eRDMA功能或者没有添加带有eRDMA功能的辅助网卡。如何购买或者使能eRDMA,请参见在企业级实例上配置eRDMA。erdma installed
是否正确安装eRDMA驱动
PASS
FAIL
:未正确安装驱动。请确认您在配置eRDMA过程中的驱动安装步骤是否正确,或者尝试重新安装驱动。具体操作,请参见在企业级实例上配置eRDMA。erdma loaded
是否正确加载eRDMA驱动
PASS
FAIL
:未正确加载驱动,可能发生在安装完驱动但是尚未重启主机的阶段。请尝试通过modprobe erdma
命令解决该问题。ibverbs loaded
是否正确加载ib_verbs驱动
PASS
FAIL
:请尝试通过modprobe ib_uverbs
命令解决该问题。erdma tools
检测eRDMA相关工具是否安装
PASS
FAIL
:通过eadm|rdma|ibv_devinfo
命令判断哪些工具缺失,这些工具通常会随eRDMA驱动一同安装,请确认您在配置eRDMA过程中的驱动安装步骤是否正确,或者尝试重新安装驱动。具体操作,请参见在企业级实例上配置eRDMA。hca detected
用户态驱动是否正确检测eRDMA设备
PASS
FAIL
:该问题是由于erdma device
、erdma installed
、erdma loaded
、ibverbs loaded
检测项未满足导致,请确认eRDMA驱动已安装并正确加载。hca active
是否使能当前设备
PASS
FAIL
:该问题是由于eRDMA设备对应的ENI设备没有变为running
状态。这种情况可能出现在某些较旧版本的内核中,需要先通过dhclient -v ethx
命令将对应的eth设备使能后,再检查eRDMA设备是否处于ACTIVE
状态。erdma stats
eRDMA设备是否存在错误计数
PASS
SKIP
:可能是因为操作系统不支持rdma stat
命令。FAIL
:可能是出现了某些错误的计数。在寻求技术支持时,建议带上rdma -p stat
命令的输出结果。
network config
网络连通性是否正常
PASS
FAIL
:一般是由于当前有多个网卡的IP地址在同一个子网内,会导致某些场景下eRDMA功能异常。erdma dmesg
是否存在eRDMA相关内核告警
PASS
FAIL
:内核出现eRDMA相关告警。您可以检查相关的告警错误,并尝试重新加载驱动解决。atomic support
eRDMA设备是否支持RDMA ATOMIC操作
PASS
FAIL
:当前eRDMA设备不支持RDMA ATOMIC操作。如您不需要使用RDMA ATOMIC操作,请忽略该报错。说明ATOMIC操作指的是一种对内存进行原子级别操作的功能,它可以保证操作的完整性和一致性,仅适用于部分应用场景。如果您不需要使用,请忽略相关报错。
go-back-n support
eRDMA设备是否支持Go-back-N功能
PASS
SKIP
:可能是当前eRDMA设备不支持查询Go-back-N配置信息。FAIL
:可能是未正确安装eadm工具或当前eRDMA设备不支持Go-back-N功能。
说明Go-back-N为eRDMA扩展功能,仅适用于部分应用场景。如果您不需要使用,请忽略相关报错。
erdma install mode
eRDMA内核驱动安装模式
Standard
:表示标准模式,仅支持RDMA_CM建链。Compat
:兼容模式,支持RDMA_CM和OOB建链,但是会额外占用0x7790-0x779F范围内的TCP端口。
FAIL
:未查询到eRDMA内核驱动安装模式,该问题可能是由于前述erdma loaded
检测项未满足导致,请尝试重新安装eRDMA驱动。具体操作,请参见在企业级实例上配置eRDMA。kernel driver version
eRDMA内核驱动版本
eRDMA当前的内核驱动版本,例如
0.2.38
。FAIL
:未查询到eRDMA内核态驱动版本。可能是由于erdma loaded
或erdma tools
检测项未满足导致,请确认eRDMA驱动已安装并正确加载。具体操作,请参见在企业级实例上配置eRDMA。rdma-core version
eRDMA用户态驱动版本
eRDMA用户态驱动版本,例如
44.3-1
。FAIL
:未查询到eRDMA用户态驱动版本。可能是未正确安装eRDMA用户态驱动,请尝试重新安装eRDMA驱动。具体操作,请参见在企业级实例上配置eRDMA。cc algorithm
eRDMA当前使用的CC算法
eRDMA CC算法,例如
cubic
。FAIL
:未查询到当前eRDMA CC算法。可能是由于erdma loaded
或erdma tools
检测项未满足导致,请确认eRDMA驱动已安装并正确加载。HPC环境检测
如果您需要在eRDMA的环境下运行HPC应用,您可能需要安装一些额外的依赖和配置,diagnose工具提供eRDMA HPC环境依赖项检测功能。如果您不是HPC场景用户,可以忽略本小节内容。
运行如下命令,检测eRDMA HPC环境依赖项。
python diagnose.py --hpc-check
正常情况下,执行上述检测命令的输出结果如下。
当前eRDMA HPC环境依赖项检测主要包括当前eRDMA使用的CC算法、是否开启Go-back-N、DAPL 1.0和DAPL 2.0相关检测。如您不需要使用相关依赖项,请忽略相关报错,比如您只需要使用DAPL 2.0,那么请忽略DAPL 1.0相关报错。
检测项
说明
期望输出
异常输出及解决方式
cc algorithm
eRDMA当前使用的CC算法
eRDMA CC算法,例如cubic
FAIL
:未查询到当前eRDMA CC算法,可能是未正确安装eadm工具或当前eadm工具不支持查询eRDMA CC算法。go-back-n support
eRDMA设备是否支持Go-back-N功能
PASS
SKIP
:可能是当前eRDMA设备不支持查询Go-back-N配置信息。FAIL
:可能是未正确安装eadm工具或当前eRDMA设备不支持Go-back-N功能。
该特性缺失可能会对HPC类型应用产生影响。如您不需要,请忽略该报错。
dapl1 install
是否正确安装dapl1
PASS
FAIL
:dapl1相关共享库或配置文件不存在,请检查当前dapl1是否正确安装。如果您不需要dapl1,请忽略该报错。dapl1 config
是否在dapl1配置文件中配置eRDMA
PASS
FAIL
:未在dapl1配置文件中检测到eRDMA相关配置,请检查当前dapl1配置文件并加入eRDMA相关配置。如果您不需要dapl1,请忽略该报错。dapl2 install
是否正确安装dapl2
PASS
FAIL
:dapl2相关共享库或配置文件不存在,请检查当前dapl2是否正确安装。如果您不需要dapl2,请忽略该报错。dapl2 config
是否在dapl2配置文件中配置eRDMA
PASS
FAIL
:未在dapl2配置文件中检测到eRDMA相关配置,请检查当前dapl2配置文件并加入eRDMA相关配置。如果您不需要dapl2,请忽略该报错。dapl2 test
是否正常运行dapl2 dtest
PASS
FAIL
:运行dtest失败,可能是未正确安装或配置dapl2。时延检测
检测前提
在执行时延检测之前,您需要确保:
已在所有待检测节点上正确安装和部署eRDMA。具体操作,请参见在企业级实例上配置eRDMA。
已配置所有待检测节点之间可通过SSH免密连接。具体操作,请参见搭建Hadoop环境。
已在所有待检测节点上安装Python paramiko依赖包。
检测步骤
运行如下命令,进行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免密登录所使用的私钥文件路径(绝对路径),请根据实际环境替换。
检测结果示例如下。