func numaNode()

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
}