《服务器测试百日学习计划——Day11:网卡与链路基础,一张4口RoCE网卡的完整识别方法》

大家好,我是JACK,本篇是服务器测试百日学习计划Day11。

前几天我们在存储层深耕了很久,今天切换赛道,进入网络模块第一篇------网卡与链路基础,把网口状态、驱动、多口卡识别、RDMA/RoCE对应关系彻底搞清楚。


一、先把三个层次分清楚

很多人刚接触服务器网络时容易把这三个概念混在一起:

复制代码
物理层:1张网卡(Card)可以有多个物理端口(Port)
系统层:每个端口在Linux里对应一个网络接口(Interface),如 eno1、eno2
逻辑层:接口可以被组合成 Bond、VLAN、Bridge 等逻辑设备

所以看到 eno1 eno2 eno3 eno4,不要条件反射认为是4张网卡------更可能是1张4口卡,或者2张2口卡。怎么判断?靠 driver + bus-info,后面详细说。


二、接口状态:UP ≠ 链路通

这是今天最重要的一个认知纠正。

bash 复制代码
[root@bogon ~]# ip -br link
lo        UNKNOWN   00:00:00:00:00:00 <LOOPBACK,UP,LOWER_UP>
eno1      UP        2c:da:3f:15:b5:0a <BROADCAST,MULTICAST,UP,LOWER_UP>
eno2      DOWN      2c:da:3f:15:b5:0b <NO-CARRIER,BROADCAST,MULTICAST,UP>
eno3      DOWN      2c:da:3f:15:b5:0c <NO-CARRIER,BROADCAST,MULTICAST,UP>
eno4      DOWN      2c:da:3f:15:b5:0d <NO-CARRIER,BROADCAST,MULTICAST,UP>

状态字段解读:

标志 含义 说明
UP 接口在软件层被启用 不代表线一定通
LOWER_UP 物理链路已建立 线通了,协商成功
NO-CARRIER 无物理载波 没插线、对端未起、模块不兼容
DOWN 接口未启用或无链路 需要结合 Link detected 判断

⚠️ 核心认知:接口 UP 不等于链路正常;链路通,要看 LOWER_UP 或 ethtool 的 Link detected: yes。


三、ethtool --- 看链路状态和速率

bash 复制代码
[root@bogon ~]# ethtool eno1
Settings for eno1:
  Supported ports: [ MII ]
  Supported link modes: 10baseT/Half 10baseT/Full
                        100baseT/Half 100baseT/Full
                        1000baseT/Full
  Speed: 1000Mb/s
  Duplex: Full
  Auto-negotiation: on
  Link detected: yes
bash 复制代码
[root@bogon ~]# ethtool eno2
Settings for eno2:
  Speed: Unknown!
  Duplex: Unknown! (255)
  Auto-negotiation: on
  Link detected: no

关键字段提炼:

字段 eno1 eno2~eno4 说明
Speed 1000Mb/s(1G) Unknown! Unknown! 说明没建立物理链路,不是坏卡
Duplex Full Unknown! 全双工/未知
Link detected yes no 这才是链路通不通的关键字段

💡 速率要结合链路状态一起看。Speed=Unknown! 绝大多数情况是"链路没起来",不是网卡坏了。接上线、对端激活后一般会自动协商到正确速率。


四、ethtool -i --- 看驱动和PCI归属

这是判断"多个网口是不是同一张卡"的核心命令:

bash 复制代码
[root@bogon ~]# ethtool -i eno1
driver: hns3
version: 5.10.0-216.0.0.115.oe2203sp4.aa
firmware-version: 3.10.22.8
bus-info: 0000:35:00.0

[root@bogon ~]# ethtool -i eno2
driver: hns3
firmware-version: 3.10.22.8
bus-info: 0000:35:00.1

[root@bogon ~]# ethtool -i eno3
driver: hns3
firmware-version: 3.10.22.8
bus-info: 0000:35:00.2

[root@bogon ~]# ethtool -i eno4
driver: hns3
firmware-version: 3.10.22.8
bus-info: 0000:35:00.3

关键字段解读:

driver --- 识别网卡家族的第一把钥匙

驱动名 对应网卡 说明
hns3 华为HiSilicon网卡 鲲鹏服务器板载/HNS系列,支持RoCE
mlx5_core Mellanox/NVIDIA CX系列 高速RDMA网卡,最常见
ixgbe Intel 82599/X520/X540 Intel 10G网卡
ice Intel E810系列 Intel 25G/100G新一代
bnxt_en Broadcom NetXtreme 博通高速网卡
be2net Emulex/Broadcom OCe 老一代万兆卡

bus-info --- 判断多口卡归属的关键

bus-info 格式为标准 PCI 地址域:总线:设备.功能

复制代码
0000:35:00.0   →  域0000, 总线35, 设备00, 功能0
0000:35:00.1   →  域0000, 总线35, 设备00, 功能1
0000:35:00.2   →  域0000, 总线35, 设备00, 功能2
0000:35:00.3   →  域0000, 总线35, 设备00, 功能3

判断规则: 同一个"域:总线:设备",只有功能号(最后一位)不同 → 属于同一张多口网卡的不同 function

本机 eno1~eno4 的 bus-info 从 .0.3 连续,driver 相同,firmware 版本相同,可以确认是同一张4口物理网卡


五、批量采集脚本

不用一个一个手敲,一条命令全部搞定:

bash 复制代码
for nic in $(ls /sys/class/net | grep -v lo); do
    echo "===== $nic ====="
    ip -br link show "$nic"
    ethtool "$nic" 2>/dev/null | egrep "Speed|Duplex|Link detected"
    ethtool -i "$nic" 2>/dev/null | egrep "driver|firmware-version|bus-info"
    echo
done

六、ethtool -S --- 查看网卡错误计数

这个在 Day11 原始内容里没有,但是测试工作中非常重要------用于确认网卡是否有丢包、CRC错误等异常:

bash 复制代码
# 查看网卡详细统计(包含错误计数)
ethtool -S eno1

# 过滤错误相关字段
ethtool -S eno1 | grep -iE 'error|drop|miss|fail|bad'

关键错误计数字段(hns3驱动):

字段 说明 告警条件
rx_errors 接收错误总数 持续增长需关注
tx_errors 发送错误总数 持续增长需关注
rx_dropped 接收丢包数 非零时排查MTU或缓冲区
rx_crc_errors CRC校验错误 非零说明链路质量差
tx_queue_stopped 发送队列停止次数 高负载时常见

七、RDMA/RoCE 与以太网口的对应关系

做完普通网口的分析,训练表里还要求"把网卡与RDMA NIC对上":

bash 复制代码
[root@bogon ~]# rdma link
link roceo1/1 state ACTIVE physical_state LINK_UP netdev eno1
link roceo2/1 state DOWN   physical_state DISABLED netdev eno2
link roceo3/1 state DOWN   physical_state DISABLED netdev eno3
link roceo4/1 state DOWN   physical_state DISABLED netdev eno4

[root@bogon ~]# ls /sys/class/infiniband
roceo1  roceo2  roceo3  roceo4

rdma link 输出字段解读:

字段 含义
roceo1/1 RDMA设备名/端口号
state ACTIVE RDMA层面处于激活状态
physical_state LINK_UP 物理层链路已建立
netdev eno1 绑定的以太网接口名

八、完整NIC信息表(可交付版)

网口 管理状态 物理链路 速率 双工 驱动 固件版本 bus-info RDMA设备 RDMA状态 RDMA物理状态 归属
eno1 UP yes 1G Full hns3 3.10.22.8 0000:35:00.0 roceo1 ACTIVE LINK_UP 卡A
eno2 DOWN no Unknown Unknown hns3 3.10.22.8 0000:35:00.1 roceo2 DOWN DISABLED 卡A
eno3 DOWN no Unknown Unknown hns3 3.10.22.8 0000:35:00.2 roceo3 DOWN DISABLED 卡A
eno4 DOWN no Unknown Unknown hns3 3.10.22.8 0000:35:00.3 roceo4 DOWN DISABLED 卡A

结论:

  • eno1~eno4 属于同一张4口物理网卡(driver相同 + firmware一致 + bus-info连续)
  • 该网卡支持 RoCE RDMA,每个以太网口对应一个 RoCE 设备(roceo1~roceo4)
  • 当前只有 eno1 / roceo1 建立了物理链路并处于 ACTIVE 状态
  • eno2~eno4 无物理链路,对应 RDMA 端口也为 DOWN/DISABLED

九、RDMA / InfiniBand / RoCE --- 三个概念讲清楚

这是 Day11 的概念收尾,必须搞清楚三者关系。

RDMA --- 一种通信能力

RDMA(Remote Direct Memory Access,远程直接内存访问)的核心是:一台机器的网卡可以直接读写另一台机器的内存,尽量绕过对方CPU的参与

对比普通TCP/IP:

复制代码
TCP路径:应用 → 内核协议栈 → 网卡 → 网络 → 对端网卡 → 对端内核 → 对端应用
RDMA路径:应用准备内存 → RDMA网卡直接搬运 → 对端内存(对端CPU几乎不参与)

RDMA的优势:低延迟(μs级)、高带宽、低CPU开销、零/少拷贝,适合AI训练、HPC、分布式存储。

InfiniBand --- 一种网络体系

InfiniBand 是专门为高性能通信设计的互连架构,原生支持RDMA,包含专用的链路层、寻址方式、交换机、队列对(QP)通信模型。常见于超算、HPC集群、大规模训练集群。

RoCE --- RDMA over Converged Ethernet

RoCE 是在以太网上实现RDMA能力,分两个版本:

版本 传输层 说明
RoCEv1 以太网二层 不可路由,同子网内使用
RoCEv2 UDP/IP 可路由,跨子网,主流选择

三者关系

复制代码
RDMA = 通信能力(远程直接内存访问)
    ↓ 可以运行在
InfiniBand(专用高性能网络)   ← 原生RDMA,延迟最低
RoCEv2(以太网 + UDP/IP)     ← 在以太网基础上实现RDMA,兼容现有网络
iWARP(以太网 + TCP/IP)      ← 另一种以太网RDMA方案

💡 类比记忆: RDMA = 高速运输方式;InfiniBand = 专用高铁网络;RoCE = 在公路网络上尽量跑出高铁速度。

关于 /sys/class/infiniband 的常见误解

bash 复制代码
[root@bogon ~]# ls /sys/class/infiniband
roceo1  roceo2  roceo3  roceo4

很多人一看到 infiniband 目录就以为"我这台机器用的是InfiniBand"------这是错的。

Linux RDMA子系统历史上沿用了 infiniband 这个目录名,RoCE设备同样会出现在这里。判断是IB还是RoCE,要看设备名和驱动:

  • 设备名 mlx5_*ib0:大概率是InfiniBand
  • 设备名 roceo*、绑定 netdev 的:是RoCE over Ethernet

本机的 roceo1~roceo4 绑定了 eno1~eno4 以太网口,所以是 RoCE,不是传统InfiniBand。


十、本机网络结论

本机 eno1~eno4 使用相同驱动 hns3,固件版本一致(3.10.22.8),PCI地址连续为 0000:35:00.0 ~ 0000:35:00.3,可判断它们属于同一张4口物理网卡。通过 rdma link 确认该网卡支持 RoCE,roceo1~roceo4 分别对应 eno1~eno4。当前仅 eno1 / roceo1 处于活动状态(1G Full,RDMA ACTIVE);其余端口无物理链路,对应RDMA端口也为 DOWN/DISABLED。

一个值得注意的细节: eno1 当前协商速率是 1G,但 hns3 驱动支持的卡通常是 25GbE 级别。1G 的原因是对端交换机端口或网线限制了速率,不是网卡本身问题。实际测试时接上 25G 交换机 + DAC/光模块,速率会协商到 25000Mb/s。


十一、补充:几个今天没用到但很重要的命令

bash 复制代码
# ip link 只看二层(MAC、状态)
ip link show eno1

# ip addr 看二层+三层(MAC + IP地址)
ip addr show eno1

# 查所有接口的IP汇总
ip -br addr

ss --- 查看网络连接状态

bash 复制代码
# 查看所有TCP连接
ss -tuln

# 查看特定端口
ss -tlnp | grep :22

# 统计各状态连接数
ss -s

MTU --- 最大传输单元

bash 复制代码
# 查看MTU(默认1500,Jumbo Frame为9000)
ip link show eno1 | grep mtu

# 设置Jumbo Frame(25G/100G网卡高性能场景)
ip link set eno1 mtu 9000

# 测试MTU(ping大包,不分片)
ping -M do -s 8972 <目标IP>

💡 iperf3 测试25G/100G网卡时,务必先确认MTU=9000(Jumbo Frame)。默认MTU=1500会限制实际带宽,可能导致测试结果偏低20-30%。

ibv_devinfo --- 查看RDMA设备详情

bash 复制代码
# 安装
yum install libibverbs-utils -y

# 查看所有RDMA设备
ibv_devices

# 查看特定设备详情(GID、端口能力等)
ibv_devinfo -d roceo1

总结

Day11 核心收获三点:

一、区分"接口启用"和"物理链路正常"。 UP 是软件层状态,Link detected: yesLOWER_UP 才是物理链路建立的依据。Speed: Unknown! 不是坏卡,是没链路。

二、通过 driver + bus-info 判断多口卡归属。 bus-info 同一个"设备"下的 .0/.1/.2/.3 → 同一张多口卡。driver 和 firmware 一致进一步加强判断。

三、RDMA ≠ InfiniBand,RoCE 是在以太网上实现RDMA。 本机的 roceo1~roceo4 绑定 eno1~eno4,是 RoCE 方案,/sys/class/infiniband 目录名不代表跑的是InfiniBand网络。

欢迎关注 JACK的服务器笔记,我们下篇见!

相关推荐
feasibility.3 小时前
Mac终端的tmux会话使用Codex 时Ctrl+V 可能触发异常并导致会话假死问题以及解决方法
linux·运维·macos·tmux·codex
少许极端3 小时前
算法奇妙屋(三十六)-贪心算法学习之路3
学习·算法·贪心算法·买卖股票问题
觉醒程序员3 小时前
【保姆级】阿里云ECS服务器选购、安全组配置及VS Code SSH连接全攻略(避坑指南)
服务器·安全·阿里云
QQsuccess3 小时前
人工智能(AI)全体系学习——系列二
人工智能·学习·机器学习
Mr-Wanter3 小时前
IDEA 借助 docker-compose.yml 一键打包镜像并推送到开发服务器(前端部署终极方案)
服务器·docker·docker-compose·intellij-idea
EnCi Zheng3 小时前
L1D-Linux系统Node.js部署Claude Code完全指南 [特殊字符]
linux·运维·node.js
Elastic 中国社区官方博客3 小时前
Serverless 中用于负载均衡的 Elasticsearch 副本
大数据·运维·人工智能·elasticsearch·搜索引擎·云原生·serverless
console.log('npc')3 小时前
2026前端进阶学习路线
前端·学习
新时代牛马3 小时前
Windows SSH 免密码登录 Ubuntu
运维·ubuntu·ssh