【Linux 管理】如何将 PCI Bus 地址和物理 PCI 插槽对应

前言

事情是这样的:实验室做机器学习的服务器挂了一张显卡。这台服务器总共有8张 RTX 2080 Ti 显卡,现在使用 nvidia-smi 查看显卡信息,只能检测到七张显卡。

image

查看连接到服务器的 NVIDIA 设备

我们首先使用 lspci 查看连接到服务器的 NVIDIA 设备和它们的 PCI Bus 地址:

$ lspci | grep -i vga

image

一共有8张显卡通过 PCI 插槽连接到计算机,最前面是这些设备的 PCI Bus 地址。

查看在线显卡的 PCI Bus 地址

我们还是使用 nvidia-smi 查看在线显卡的信息:

$ nvidia-smi -a | grep -i bus

image

可以看到唯一没有显示的 Bus Id 是 3e:00.0

查看特定 Bus Id 上的设备详细信息

我们使用 lspci 查看 Bus Id 是 3e:00.0 的设备的详细信息,有时候这些信息会很有帮助,但我们现在的主要目标是找到该地址对应的物理插槽:

$ sudo lspci -vv -s 3e:00.0

image

查看物理插槽的信息

在这里我们要使用 dmidecode 命令。使用该命令可以查询BIOS、系统、主板、处理器、内存、缓存等非常重要信息。

使用下面的命令打印 System Slot Information,也就是加上参数 -t 9

$ sudo dmidecode -t 9

我们就可以在里面找到 PCI Bus 地址对应的插槽编号:

image

其中 ID 对应插槽编号:

注意:PCI SLOT 编码可能从1开始也可能从0开始,我遇到的情况是从1开始编号,参考资料2中从0开始编号

我们也可以用下面的命令打印插槽与 PCI Bus 地址的对应关系:

$ sudo dmidecode -t 9 |awk '/ID:/ {id=$2} /Bus Address/ {print "Slot",id,"PCIe",$3}'

image

Bus Id 是 3e:00.0 的设备对应插槽18。

当然我现在手边没有工具和防静电手环,没办法打开服务器亲自验证一下,还是得等售后人员上门维修。

最后还是希望把这个将 PCI Bus 地址和物理 PCI 插槽对应的方法介绍给大家,我自己也存个档,防止日后遇到类似问题重新查资料。

参考资料

  1. Linux常用命令dmidecode命令具体使用方法

  2. How does lspci find out physical slot number of a PCI(E) device? - Stack Overflow

posted @ 2022-10-18 11:21  joexu01  阅读(2239)  评论(0编辑  收藏  举报