快速回忆
- 使用方法:拷贝 工具脚本 章节
- 通过系统pcie的sys接口可以获取eth口,比如:
ls -l /sys/class/pci_bus/0000:05/device/0000:05:00.0/net/
- 通过lspci的-s可以查看某个bdf的信息:比如
lspci -s 05:00.1
- 通过lspci的-d可以查看某个vendor的所有pci设别,比如:
lspci -d 15b3:
- 通过ip link show可以查看某个接口的updown和ip信息,比如:
ip addr show
背景
经常为了获取某个IB设备的信息需要多个命令,并且命令之间需要获取PCIe的BDF、获取Eth名字、获取ib名字,然后查询。效率低而且不全面。特此写了个小工具一把刷出来。效果:
工具脚本(拷贝执行)
mlnx_list=($(lspci -d 15b3: | awk '{print $1}' | awk -F\: '{print $1 "," $1":"$2}'))
printf "%-10s %-10s %-20s %-10s %-15s %-30s\n" "VENDOR" "ETH" "BDF" "IBdev" "IPaddr" "Company"
for item in "${mlnx_list[@]}"; do
buf=$(echo "$item" | cut -d ',' -f 1)
bdf=$(echo "$item" | cut -d ',' -f 2)
eth="unknown"
vendor="unknown"
[ -d /sys/class/pci_bus/0000:$buf/device/0000:$bdf/net/ ] && eth=`ls /sys/class/pci_bus/0000:$buf/device/0000:$bdf/net/`
[ -f /sys/class/pci_bus/0000:$buf/device/0000:$bdf/vendor ] && vendor=`cat /sys/class/pci_bus/0000:$buf/device/0000:$bdf/vendor`
company="unknown"
company=`lspci -s $bdf| awk '{print $4" " $7 " " $8 " "$9" "$10}'`
ibv="unknown"
if [ "x$eth" != "xunknown" ]; then ibv=`ibdev2netdev |grep $eth | awk '{print $1" "$NF}'`; fi
ipaddr="ip_None"
if [ "x$eth" != "xunknown" ]; then ipaddr=`ip addr show $eth| grep inet | awk '{print $2}'`; fi
printf "%-10s %-10s %-20s %-10s %-15s %-30s\n" "$vendor" "$eth" "$ibv" "$bdf" "$ipaddr" "$company"
done
说明
- 先通过lspci获取有哪些mellanox的pci设备(这里为何使用lspci作为第一步,因为lspci是实际插入服务器的硬件一对一,这样从物理设备作为基准进一步获取后面的数据)
- 通过pci的bdf在 /sys/class/pci_bus总线中去查找支持的net设备以及vendor号,以及网卡代数信息
- 通过eth信息,使用ivdev2netdev获取ib的dev信息
- 通过ip addr获取ip信息以及up down信息
核心点:PCIe的BDF,进一步获取eth和ibdev
实操
单步获取信息说明
获取PCIe对应的eth口
注意修改红色部分
ls /sys/class/pci_bus/0000:05/device/0000:05:00.1/net
其他方式:ibdev2netdev 可以看有哪些eth口,然后ethtool -i xxxeth获取pcie bdf。这种方法比较绕,获取后还需要和lspci对比查看
lspci -s [bdf] 查看某一个设备的信息
比如:lspci -s 05:00.1
lspci -d 15b3: (注意冒号)查看Mellanox厂商的PCIe设备15b3是Mellanox的vendor id
比如:lspci -d 15b3:
ip addr show enp6s0f0 获取某个eth口的ip等信息
比如:ip addr show enp6s0f0
也可以ifconfig
后记
拷贝命令后在服务器执行快速获取当前服务器包括mellanox的网卡信息以及ip信息和接口等。