func AverageGPUUtilization()

in pkg/gpu/nvidia/metrics/util.go [97:113]


func AverageGPUUtilization(uuid string, since time.Duration) (uint, error) {
	lastTs := C.ulonglong(time.Now().Add(-1*since).UnixNano() / 1000)
	uuidCStr := C.CString(uuid)
	var util C.uint
	var sum C.uint
	var sampleCount C.uint
	r := C.nvmlDeviceGetAverageUsage(uuidCStr, lastTs, &util, &sum, &sampleCount)
	C.free(unsafe.Pointer(uuidCStr))
	if r != C.NVML_SUCCESS {
		return 0, fmt.Errorf("failed to get GPU utilization for device %s, nvml return code: %v", uuid, r)
	}
	averageUtilization := uint(util)
	if averageUtilization > 100 || averageUtilization < 0 {
		return 0, fmt.Errorf("failed to get GPU utilization for device %s, out of range [0, 100] utilization: %d, sum: %d, sampleCount: %d", uuid, averageUtilization, uint(sum), uint(sampleCount))
	}
	return averageUtilization, nil
}