搜索
您的当前位置:首页正文

微知-BlueField DPU的DOCA中PCIe的VUID是什么?(Virtual Unique Identifier;lspci -s 2d:00.0 -vvv| grep VU)

来源:好走旅游网

背景

在DOCA virtio、dma、PCIe中都涉及到了VUID的概念,他到底什么?

要点

在PCIe技术中,VUID(Virtual Unique Identifier)是一个持久的标识符,用于标识PCIe设备。与BDF(Bus, Device, Function)不同,VUID在不同的系统运行之间保持不变,这使得它非常适合作为PCIe函数的标识符。VUID是NVIDIA设备添加到PCIe属性中的一个扩展,用于解决BDF值可能在不同系统运行之间变化的问题,因此VUID可以作为一个更稳定的标识符来使用。比如在DOCA中涉及到HOST和DPU沟通需要使用某个PCIe设备时候就要用到。

  • PCIe BDF(总线、设备、功能)是分配给连接到计算机的每个 PCIe 设备的唯一标识符。通过使用唯一的 BDF 编号识别每个设备,OS可以有效地管理系统的资源。
  • PCIe BDF 值由主机操作系统决定,因此在不同OS之间甚至在单次运行中可能会发生变化。因此,BDF 标识符不是最适合永久配置。
  • 为了克服这个问题,NVIDIA 设备向 PCIe 属性添加了一个扩展,称为 VUID。与 BDF 相反,VUID 在运行中是持久的,这使其可用作 PCIe 函数标识符。

获取VUID的方式

PCI BDF 和 VUID 使用 ‘lspci’ 命令从另一个中提取:

lspci -s 2d:00.0 -vvv|grep -i VU

通过vuid获取pciebdf方法:需要遍历

[host] ./get_bdf.py <VUID>
[host] cat ./get_bdf.py
#!/usr/bin/python3 
 
import subprocess
import sys
 
vuid = sys.argv[1]
 
# Split the output into individual PCI function entries
lspci_output = subprocess.check_output(['lspci']).decode().strip().split('\n')
 
# Create an empty dictionary to store the results
pci_functions = {}
 
# Loop through each PCI function and extract the BDF and full info
for line in lspci_output:
    bdf = line.split()[0]
    if vuid in subprocess.check_output(['lspci', '-s', bdf, '-vvv']).decode():
        print(bdf)
        exit(0)
 
print("Not Found")

参考

https://docs.nvidia.com/networking/display/bluefield3snap431/appendix+%E2%80%93+pcie+bdf+to+vuid+translation

因篇幅问题不能全部显示,请点此查看更多更全内容

Top