Mellanox ConnectX网卡巡检
单台巡检
简要描述
对HPC所有的计算节点和管理节点进行ConnectX网卡检查,确保计算网络运行状态正常。
业务影响
无。
操作前准备
无。
操作步骤
- 使用PuTTY工具,以管理员用户登录巡检目标服务器。
- 执行以下命令,查询InfiniBand设备状态或IB地址上的系统状态。
ibstat
CA 'mlx5_0' CA type: MT4123 Number of ports: 1 Firmware version: 20.26.4012 Hardware version: 0 Node GUID: 0xb8599f0300eb0000 System image GUID: 0xb8599f0300eb0000 Port 1: State: Active Physical state: LinkUp Rate: 100 Base lid: 206 LMC: 0 SM lid: 1 Capability mask: 0x2659e848 Port GUID: 0xb8599f0300eb0000 Link layer: InfiniBand
确认业务端口中“State”为“Active”、“Physical state”为“LinkUp”。否则,请参见Mellanox ConnectX网卡故障处理进行处理。
批量巡检
简要描述
使用脚本对HPC所有的计算节点和管理节点进行ConnectX网卡检查,确保计算网络运行状态正常。当前提供的“info-batch-dump.sh”脚本和“info-collect.sh”脚本为示例脚本,用户需要根据实际情况进行调试修改。
前提条件
环境中已安装expect和dos2unix。
操作步骤
- 使用PuTTY工具,以管理员用户登录HPC任意管理节点。
- 执行以下命令,切换到共享目录,以“/share/dir”为例。
cd /share/dir
- 创建“info-batch-dump.sh”脚本。
- 执行以下命令,创建“info-batch-dump.sh”脚本。
vi info-batch-dump.sh
- 按“i”进入编辑模式,添加以下内容。
用户根据系统配置自行设定合理的timeout值。
#!/bin/bash script_path=`pwd` echo -n "Please input user name:" read user_name echo -ne "Please input password:" read -s password if [ $user_name != "root" ];then echo -ne "\n\rPlease input root password:" read -s root_password fi echo -e "\n\r" i=1 for ip in `cat ip.txt` do echo -e "Collecting logs: $ip\n\r" { echo -e "\n\r\n\r#################################$ip#################################" /usr/bin/expect << EOF set timeout 60 log_file log_user 0 spawn -noecho /usr/bin/ssh -t -p 22 $user_name@$ip expect { "yes/no" { send "yes\r"; exp_continue } "password:" { send "$password\r" } } expect { "Permission denied, please try again." {send_user "Invalid user name or password\n\r"; exit} "*@*]" {send "\r"} } if {"$root_password" != ""} { expect "*@*]" send "su root\r" expect "Password:" send "$root_password\r" expect { "Authentication failure" {send_user "Invalid root password\n\r"} "*@*]" {send "\r"} } } expect "*@*]" log_user 1 send "$script_path/info-collect.sh\r" expect "*@*]" exit EOF echo -e "\n\r#############################################################################" } > log-$ip-$i.log & i=$[$i+1] done wait i=1 cur_time=`date "+%Y%m%d%H%M%S"` for ip in `cat ip.txt` do cat log-$ip-$i.log >> log-$cur_time.log rm -fr log-$ip-$i.log i=$[$i+1] done
- 按“Esc”键,输入:wq!,按“Enter”保存并退出编辑。
- 执行以下命令,创建“info-batch-dump.sh”脚本。
- 创建“info-collect.sh”脚本。
- 执行以下命令,创建“info-collect.sh”脚本。
vi info-collect.sh
- 按“i”进入编辑模式,添加以下内容。
#!/bin/bash for i in `ibdev2netdev | awk '{i++;if(i>=1){print $1","$3","$5","$6}}'` do { dev_name=`echo $i | awk -F ',' '{print $1}'` port_id=`echo $i | awk -F ',' '{print $2}'` port_name=`echo $i | awk -F ',' '{print $3}'` link_state=`echo $i | awk -F ',' '{print $4}' | sed 's/^[(]*//g' | sed 's/[)]*$//g'` echo "************ $i | `date "+%Y-%m-%d %H:%M:%S"` *************" echo $port_name:link_state=$link_state echo $port_name:roce_mode=`cma_roce_mode -d $dev_name` echo $port_name:tos=`cma_roce_tos -d $dev_name` echo $port_name:mtu=`ifconfig $port_name | grep mtu | sed 's/.*mtu \([0-9]*\).*/\1/g'` echo $port_name:priority_trust_state=`mlnx_qos -i $port_name 2>&1 | grep -vE 'deprecated|ctrl' | grep "Priority trust state" | sed 's/.*: *\(.*\)/\1/g'` echo $port_name:cable_len=`mlnx_qos -i $port_name 2>&1 | grep -vE 'deprecated|ctrl' | grep "Cable len" | sed 's/.*: *\(.*\)/\1/g'` echo $port_name:dscp_26_map_to_prio=`mlnx_qos -i $port_name 2>&1 | grep -vE 'deprecated|ctrl' | grep "prio:" | grep "dscp:" | grep "26" | awk -F ' dscp:' '{print $1}'` echo $port_name:PFC_priority_4_enabled=`mlnx_qos -i $port_name 2>&1 | grep -vE 'deprecated|ctrl' | grep "enabled " | awk '{print $6}'` echo $port_name:PFC_priority_4_buffer=`mlnx_qos -i $port_name 2>&1 | grep -vE 'deprecated|ctrl' | grep "buffer " | awk '{print $6}'` echo $port_name:Receive_buffer_size=`mlnx_qos -i $port_name 2>&1 | grep -vE 'deprecated|ctrl' | grep "Receive buffer size" | awk -F ': ' '{print $2}'` echo $port_name:cnp_dscp=`cat /sys/class/net/$port_name/ecn/roce_np/cnp_dscp` echo $port_name:roce_np_enable_4=`cat /sys/class/net/$port_name/ecn/roce_np/enable/4` echo $port_name:roce_rp_enable_4=`cat /sys/class/net/$port_name/ecn/roce_rp/enable/4` echo $port_name:packet_seq_err=`cat /sys/class/infiniband/$dev_name/ports/$port_id/hw_counters/packet_seq_err` echo $port_name:np_cnp_sent=`cat /sys/class/infiniband/$dev_name/ports/$port_id/hw_counters/np_cnp_sent` echo $port_name:rp_cnp_handled=`cat /sys/class/infiniband/$dev_name/ports/$port_id/hw_counters/rp_cnp_handled` echo $port_name:port_xmit_packets=`cat /sys/class/infiniband/$dev_name/ports/$port_id/counters/port_xmit_packets` echo $port_name:port_rcv_packets=`cat /sys/class/infiniband/$dev_name/ports/$port_id/counters/port_rcv_packets` echo $port_name:tx_prio4_pause=`ethtool -S $port_name | grep "tx_prio4_pause:" | awk -F ': ' '{print $2}'` echo $port_name:rx_prio4_pause=`ethtool -S $port_name | grep "rx_prio4_pause:" | awk -F ': ' '{print $2}'` echo "*********************************************************************" } done
- 按“Esc”键,输入:wq!,按“Enter”保存并退出编辑。
- 执行以下命令,创建“info-collect.sh”脚本。
- 创建“ip.txt”文件。
- 执行以下命令,创建“ip.txt”文件。
vi ip.txt
- 按“i”进入编辑模式,添加所有将待巡检计算节点的管理IP地址,多个IP地址请换行依次添加。(注意:“ip.txt”中所有待检查节点的SSH账号、密码需一致)。
192.168.100.1 192.168.100.2 192.168.100.3 192.168.100.4
- 按“Esc”键,输入:wq!,按“Enter”保存并退出编辑。
- 执行以下命令,创建“ip.txt”文件。
- 执行以下命令,将“info-batch-dump.sh”、“info-collect.sh”、“ip.txt”文件转换为unix格式。
dos2unix info-batch-dump.sh info-collect.sh ip.txt
- 执行以下命令,设置“info-batch-dump.sh”、“info-collect.sh”脚本的执行权限。
chmod +x info-batch-dump.sh info-collect.sh
- 执行“info-batch-dump.sh”脚本并根据提示输入待巡检节点的ssh账号、密码。
./info-batch-dump.sh
执行结果保存在脚本同级目录下的“log-yyyymmddHHMMSS.log”文件中。请参见表5-1,验证检查内容。若与表格中检查项不一致,请参见Mellanox ConnectX网卡故障处理进行处理。
表5-1 “log-yyyymmddHHMMSS.log”参数说明类别
参数
说明
网口工作状态和配置
link_state
网口的link状态。请确认是否为Up。
roce_mode
网口的roce模式。请确认是否为RoCEv2模式。
tos
网口的TOS值。请确认是否与配置的一致(当前系统TOS值为106)。
mtu
网口的MTU值。请确认是否与配置的一致(当前系统MTU值为4500)。
priority_trust_state
网口的priority trust状态。确认是否与配置的一致(当前系统priority trust为dscp)。
cable_len
线缆长度。请确认cable_len和实际使用线缆的长度是否一致。
dscp_26_map_to_prio
网口dscp 26映射的优先级队列。请确认是否与配置的一致(当前系统配置dscp 26映射到队列4)。
PFC_priority_4_enabled
使能PFC优先级队列4。请确认网口是否已使能PFC优先级队列4(当前系统配置PFC优先级队列为队列4)。
PFC_priority_4_buffer
buffer的索引值。
receive_buffer_size
buffer的大小。请确认网口PFC优先级队列4的buffer大小不能为0。
cnp_dscp
确认网口的cnp_dscp值是否与配置的一致(当前系统配置值为48)。
roce_np_enable_4
确认网口是否已使能DCQCN(当前系统配置PFC优先级队列为队列4)。
roce_rp_enable_4
网口报文统计
packet_seq_err
网口丢包重传计数。
np_cnp_sent
CNP发包数。
rp_cnp_handled
CNP收包数。
port_xmit_packets
网口发包数。
port_rcv_packets
网口收包数。
tx_prio4_pause
网口发送的PFC流控包数(当前系统配置PFC优先级队列为队列4)。
rx_prio4_pause
网口接收的PFC流控包数(当前系统配置PFC优先级队列为队列4)。