应使用sudo lspci -s 02:00.0 -vvv定位LnkSta行查真实速率与宽度,或读取/sys/bus/pci/devices/0000:02:00.0/current_link_speed和current_link_width;LnkSta反映当前实际协商状态,而非LnkCap标称能力,且必须加sudo权限确保字段完整。

您在麒麟系统中需要确认某块PCIe设备(比如显卡、NVMe硬盘或FPGA加速卡)当前实际运行的链路速度与通道数,而不是它理论上支持的最大能力——因为链路可能因BIOS设置、主板限制、供电不足或驱动异常而降速,此时仅看设备规格会误判性能瓶颈。
用sudo lspci -vvv定位LnkSta字段查真实速率
第一步:打开终端,执行lspci列出所有PCI设备,找到目标设备的地址(如02:00.0)。这一步必须先做,否则无法精准定位——直接对全量设备跑-vvv会产生巨量输出,关键信息极易被淹没。
第二步:以root权限执行sudo lspci -s 02:00.0 -vvv(把02:00.0替换成你的真实地址)。普通用户执行时,LnkSta行常为空或不完整,【必须加sudo,否则看到的Speed/Width不是真实值】。
第三步:在输出中向下滚动,找到紧邻的两行:LnkCap:和LnkSta:。前者是设备“能支持什么”,后者才是“此刻正在用什么”。只认LnkSta:行末尾的Speed和Width字段,例如LnkSta: Speed 8GT/s, Width x8表示当前以PCIe 3.0速率、8通道运行。
注意:如果LnkSta行显示Speed 0.0GT/s或整行缺失,说明链路根本未训练成功,要立刻检查供电、插槽识别或BIOS中PCIe选项是否被禁用。
快速过滤LnkSta的两种方法
方法一:全局搜索(适合已知设备不多的场景)
执行sudo lspci -vvv | grep -A 3 "LnkSta:"。这条命令会把所有设备的LnkSta及其后三行一起打出,方便横向对比。但输出仍较杂乱,需人工匹配设备地址。
方法二:精准提取(推荐用于脚本或批量检查)
执行sudo lspci -vvv | sed -n '/LnkSta:/ {N;N;p;}' | grep -E "(Speed|Width)"。它跳过LnkCap干扰,只抓LnkSta及后续两行,并过滤出含关键词的行,结果干净利落。
通过sysfs验证链路状态(底层可信方式)
Linux内核在/sys/bus/pci/devices/下为每个设备建立实时运行目录。这里的数据不经过命令解析,直接映射硬件寄存器,比lspci更底层也更可信。
执行ls /sys/bus/pci/devices/列出所有已枚举设备地址(格式为0000:xx:xx.x)。
选取目标设备,例如0000:02:00.0,运行cat /sys/bus/pci/devices/0000:02:00.0/current_link_speed。该文件内容即为当前协商速率,单位是GT/s(如8.0),对应PCIe 3.0。
再运行cat /sys/bus/pci/devices/0000:02:00.0/current_link_width,输出数字即通道数(如8代表x8)。这两项合起来就是真实链路宽度与速率,且无需解析文本格式。

















