麒麟系统中确认网卡pcie实际带宽需对比lnkcap与lnksta:用sudo lspci -vv -s addr | grep -a 5 "lnksta\|lnkcap"查协商速率和宽度,或更可靠地读取/sys/bus/pci/devices/addr/current_link_speed与current_link_width。

在麒麟操作系统中确认网卡实际使用的PCIe通道带宽,是为了判断是否存在物理层降速——比如网卡硬件支持PCIe 4.0 x8,但系统只协商到PCIe 3.0 x4,这会直接限制万兆及以上网卡的吞吐上限。不能只看网卡型号宣传参数,必须读取内核从硬件寄存器获取的真实链路状态。
用lspci -vv定位LnkSta协商结果
第一步:执行lspci | grep -i ethernet,记下目标网卡的PCI地址(如02:00.0)。
第二步:以root权限运行sudo lspci -vv -s 02:00.0 | grep -A 5 "LnkSta\|LnkCap"。
第三步:在输出中找到LnkSta:行,它后面紧跟着的Speed和LnkSta: Speed 8.0GT/s, Width x4表示PCIe 3.0 x4;若显示Speed Unknown, Width x0,说明链路未训练成功或BIOS禁用了状态报告。
注意:【必须用sudo执行】,否则部分设备的LnkSta字段可能为空或不完整。
用sysfs读取current_link_speed(更可靠)
方法一:直接查当前速率
执行ls /sys/bus/pci/devices/列出所有PCI设备路径,找到对应网卡的目录(如0000:02:00.0)。
执行cat /sys/bus/pci/devices/0000:02:00.0/current_link_speed,输出为数字(如8.0),单位是GT/s。
执行cat /sys/bus/pci/devices/0000:02:00.0/current_link_width,输出为数字(如4),即x4。
方法二:批量检查所有网卡
运行for d in /sys/bus/pci/devices/*; do [ -e "$d/current_link_speed" ] && echo "$(basename $d) $(cat $d/current_link_speed) $(cat $d/current_link_width)"; done,一次性列出所有已枚举PCIe设备的实际速率与宽度。
这个路径的数据由内核实时从硬件寄存器读取,不受BIOS链路报告开关影响,比lspci -vv更可信。
对比LnkCap与LnkSta判断是否降速
① 在lspci -vv输出中同时找到LnkCap和LnkSta两行:
② 比较LnkCap: Speed与LnkSta: Speed:若Cap为16.0GT/s(PCIe 4.0),Sta为8.0GT/s(PCIe 3.0),说明降代;
③ 比较LnkCap: Width与LnkSta: Width:若Cap为x8,Sta为x4,说明通道数减半;
④ 若两者完全一致,且Link detected: yes在ethtool中也成立,则PCIe链路工作在标称能力下,带宽瓶颈不在物理层。











