微知-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

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值