in pkg/gpu/nvidia/nvmlutil/nvmlutil.go [114:151]
func numaNode(d nvml.Device, pciDevicesRoot string) (numaEnabled bool, numaNode int, err error) {
if NvmlDeviceInfo == nil {
NvmlDeviceInfo = &DeviceInfo{}
}
pciInfo, ret := NvmlDeviceInfo.PciInfo(d)
if ret != nvml.SUCCESS {
return false, 0, fmt.Errorf("error getting PCI Bus Info of device: %v", ret)
}
var bytesT []byte
for _, b := range pciInfo.BusId {
if byte(b) == '\x00' {
break
}
bytesT = append(bytesT, byte(b))
}
// Discard leading zeros.
busID := strings.ToLower(strings.TrimPrefix(string(bytesT), "0000"))
numaNodeFile := fmt.Sprintf("%s/%s/numa_node", pciDevicesRoot, busID)
glog.V(3).Infof("Reading NUMA node information from %q", numaNodeFile)
b, err := os.ReadFile(numaNodeFile)
if err != nil {
return false, 0, fmt.Errorf("failed to read NUMA information from %q file: %v", numaNodeFile, err)
}
numaNode, err = strconv.Atoi(string(bytes.TrimSpace(b)))
if err != nil {
return false, 0, fmt.Errorf("eror parsing value for NUMA node: %v", err)
}
if numaNode < 0 {
return false, 0, nil
}
return true, numaNode, nil
}