前言
事情是这样的:实验室做机器学习的服务器挂了一张显卡。这台服务器总共有8张 RTX 2080 Ti 显卡,现在使用 nvidia-smi
查看显卡信息,只能检测到七张显卡。
查看连接到服务器的 NVIDIA 设备
我们首先使用 lspci
查看连接到服务器的 NVIDIA 设备和它们的 PCI Bus 地址:
$ lspci | grep -i vga
一共有8张显卡通过 PCI 插槽连接到计算机,最前面是这些设备的 PCI Bus 地址。
查看在线显卡的 PCI Bus 地址
我们还是使用 nvidia-smi
查看在线显卡的信息:
$ nvidia-smi -a | grep -i bus
可以看到唯一没有显示的 Bus Id 是 3e:00.0
。
查看特定 Bus Id 上的设备详细信息
我们使用 lspci
查看 Bus Id 是 3e:00.0
的设备的详细信息,有时候这些信息会很有帮助,但我们现在的主要目标是找到该地址对应的物理插槽:
$ sudo lspci -vv -s 3e:00.0
查看物理插槽的信息
在这里我们要使用 dmidecode
命令。使用该命令可以查询BIOS、系统、主板、处理器、内存、缓存等非常重要信息。
使用下面的命令打印 System Slot Information,也就是加上参数 -t 9
:
$ sudo dmidecode -t 9
我们就可以在里面找到 PCI Bus 地址对应的插槽编号:
其中 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}'
Bus Id 是 3e:00.0
的设备对应插槽18。
当然我现在手边没有工具和防静电手环,没办法打开服务器亲自验证一下,还是得等售后人员上门维修。
最后还是希望把这个将 PCI Bus 地址和物理 PCI 插槽对应的方法介绍给大家,我自己也存个档,防止日后遇到类似问题重新查资料。