4.26. vGPU 利用率和计费
本章介绍与 vGPU 利用率和计费相关的操作。
函数
- nvmlReturn_t nvmlDeviceGetVgpuInstancesUtilizationInfo ( nvmlDevice_t device, nvmlVgpuInstancesUtilizationInfo_t* vgpuUtilInfo )
- nvmlReturn_t nvmlDeviceGetVgpuProcessUtilization ( nvmlDevice_t device, unsigned long long lastSeenTimeStamp, unsigned int* vgpuProcessSamplesCount, nvmlVgpuProcessUtilizationSample_t* utilizationSamples )
- nvmlReturn_t nvmlDeviceGetVgpuProcessesUtilizationInfo ( nvmlDevice_t device, nvmlVgpuProcessesUtilizationInfo_t* vgpuProcUtilInfo )
- nvmlReturn_t nvmlDeviceGetVgpuUtilization ( nvmlDevice_t device, unsigned long long lastSeenTimeStamp, nvmlValueType_t* sampleValType, unsigned int* vgpuInstanceSamplesCount, nvmlVgpuInstanceUtilizationSample_t* utilizationSamples )
- nvmlReturn_t nvmlVgpuInstanceClearAccountingPids ( nvmlVgpuInstance_t vgpuInstance )
- nvmlReturn_t nvmlVgpuInstanceGetAccountingMode ( nvmlVgpuInstance_t vgpuInstance, nvmlEnableState_t* mode )
- nvmlReturn_t nvmlVgpuInstanceGetAccountingPids ( nvmlVgpuInstance_t vgpuInstance, unsigned int* count, unsigned int* pids )
- nvmlReturn_t nvmlVgpuInstanceGetAccountingStats ( nvmlVgpuInstance_t vgpuInstance, unsigned int pid, nvmlAccountingStats_t* stats )
- nvmlReturn_t nvmlVgpuInstanceGetLicenseInfo_v2 ( nvmlVgpuInstance_t vgpuInstance, nvmlVgpuLicenseInfo_t* licenseInfo )
函数
- nvmlReturn_t nvmlDeviceGetVgpuInstancesUtilizationInfo ( nvmlDevice_t device, nvmlVgpuInstancesUtilizationInfo_t* vgpuUtilInfo )
-
参数
- device
- 目标设备的标识符
- vgpuUtilInfo
- 指向调用者提供的 nvmlVgpuInstancesUtilizationInfo_t 结构的指针
返回值
- NVML_SUCCESS 如果成功检索到利用率样本
- NVML_ERROR_UNINITIALIZED 如果库尚未成功初始化
- NVML_ERROR_INVALID_ARGUMENT 如果 device 无效,vgpuUtilInfo 为 NULL,或者 vgpuUtilInfo->vgpuInstanceCount 为 0
- NVML_ERROR_NOT_SUPPORTED 如果设备不支持 vGPU
- NVML_ERROR_GPU_IS_LOST 如果目标 GPU 已从总线上掉线或无法访问
- NVML_ERROR_ARGUMENT_VERSION_MISMATCH 如果 vgpuUtilInfo 的版本无效
- NVML_ERROR_INSUFFICIENT_SIZE 如果 vgpuUtilInfo->vgpuUtilArray 为 NULL,或者 vgpuUtilInfo->vgpuInstanceCount 的缓冲区大小太小。 调用者应检查返回的 vgpuUtilInfo->vgpuInstanceCount 中的当前 vGPU 实例计数,并再次调用该函数,并使用大小为 vgpuUtilInfo->vgpuInstanceCount * sizeof(nvmlVgpuInstanceUtilizationInfo_t) 的缓冲区
- NVML_ERROR_NOT_FOUND 如果未找到样本条目
- NVML_ERROR_UNKNOWN 如果发生任何意外错误
描述
检索在物理 GPU(device)上运行的 vGPU 实例的近期利用率。
适用于 Kepler 或更新的完全支持的设备。
读取在设备上运行的 vGPU 实例的 GPU SM(3D/计算)、帧缓冲区、视频编码器、视频解码器、jpeg 解码器和 OFA 的近期利用率。 利用率值以利用率样本结构数组的形式返回,该数组位于调用者提供的缓冲区中,由 vgpuUtilInfo->vgpuUtilArray 指向。 每个 vGPU 实例返回一个利用率样本结构,其中包括记录样本的 CPU 时间戳。 单个利用率值以“unsigned int”值形式在 nvmlValue_t 联合中返回。 该函数将调用者提供的 vgpuUtilInfo->sampleValType 设置为 NVML_VALUE_TYPE_UNSIGNED_INT,以指示返回的值类型。
要读取利用率值,首先通过调用 vgpuUtilInfo->vgpuUtilArray 设置为 NULL 的函数来确定保存样本所需的缓冲区大小。 该函数将返回 NVML_ERROR_INSUFFICIENT_SIZE,并将当前 vGPU 实例计数放在 vgpuUtilInfo->vgpuInstanceCount 中;如果当前 vGPU 实例计数为零,则返回 NVML_SUCCESS。 调用者应分配大小为 vgpuUtilInfo->vgpuInstanceCount * sizeof(nvmlVgpuInstanceUtilizationInfo_t) 的缓冲区。 再次调用该函数,并将分配的缓冲区传递到 vgpuUtilInfo->vgpuUtilArray 中,并将 vgpuUtilInfo->vgpuInstanceCount 设置为缓冲区大小所针对的条目数。
在成功返回时,该函数会使用实际写入的 vGPU 利用率样本结构的数目更新 vgpuUtilInfo->vgpuInstanceCount。 这可能与先前读取的值不同,因为 vGPU 实例会被创建或销毁。
vgpuUtilInfo->lastSeenTimeStamp 表示上次读取利用率样本时的 CPU 时间戳(以微秒为单位)。 将其设置为 0 以基于驱动程序内部样本缓冲区维护的所有样本读取利用率。 将 vgpuUtilInfo->lastSeenTimeStamp 设置为从先前查询检索的时间戳,以读取自先前查询以来的利用率。
- nvmlReturn_t nvmlDeviceGetVgpuProcessUtilization ( nvmlDevice_t device, unsigned long long lastSeenTimeStamp, unsigned int* vgpuProcessSamplesCount, nvmlVgpuProcessUtilizationSample_t* utilizationSamples )
-
参数
- device
- 目标设备的标识符
- lastSeenTimeStamp
- 仅返回时间戳大于 lastSeenTimeStamp 的样本。
- vgpuProcessSamplesCount
- 指向调用者提供的数组大小的指针,并返回在 vGPU 实例上运行的进程数
- utilizationSamples
- 指向调用者提供的缓冲区,其中返回 vGPU 子进程利用率样本
返回值
- NVML_SUCCESS 如果成功检索到利用率样本
- NVML_ERROR_UNINITIALIZED 如果库尚未成功初始化
- NVML_ERROR_INVALID_ARGUMENT 如果 device 无效,vgpuProcessSamplesCount 无效,或者当 utilizationSamples 为非 NULL 时传递的样本计数为 0
- NVML_ERROR_INSUFFICIENT_SIZE 如果提供的 vgpuProcessSamplesCount 太小,无法返回当前在设备上执行的所有 vGPU 实例的样本
- NVML_ERROR_NOT_SUPPORTED 如果设备不支持 vGPU
- NVML_ERROR_GPU_IS_LOST 如果目标 GPU 已从总线上掉线或无法访问
- NVML_ERROR_NOT_FOUND 如果未找到样本条目
- NVML_ERROR_UNKNOWN 如果发生任何意外错误
描述
描述
检索在物理 GPU(device)上的 vGPU 上运行的进程的当前利用率。
适用于 Maxwell 或更新的完全支持的设备。
读取在设备上活动的 vGPU 实例上运行的进程的 GPU SM(3D/计算)、帧缓冲区、视频编码器和视频解码器的近期利用率。 利用率值以利用率样本结构数组的形式返回,该数组位于调用者提供的缓冲区中,由 utilizationSamples 指向。 每个在 vGPU 实例上运行的进程返回一个利用率样本结构,该进程在最近的样本期间具有一些非零利用率。 它包括记录样本的 CPU 时间戳。 单个利用率值以“unsigned int”值形式返回。
要读取利用率值,首先通过调用 utilizationSamples 设置为 NULL 的函数来确定保存样本所需的缓冲区大小。 该函数将返回 NVML_ERROR_INSUFFICIENT_SIZE,并将当前 vGPU 实例计数放在 vgpuProcessSamplesCount 中。 调用者应分配大小为 vgpuProcessSamplesCount * sizeof(nvmlVgpuProcessUtilizationSample_t) 的缓冲区。 再次调用该函数,并将分配的缓冲区传递到 utilizationSamples 中,并将 vgpuProcessSamplesCount 设置为缓冲区大小所针对的条目数。
在成功返回时,该函数会使用实际写入的 vGPU 子进程利用率样本结构的数目更新 vgpuSubProcessSampleCount。 这可能与先前读取的值不同,具体取决于在任何给定样本期间处于活动状态的进程数。
- lastSeenTimeStamp 表示上次读取利用率样本时的 CPU 时间戳(以微秒为单位)。 将其设置为 0 以基于驱动程序内部样本缓冲区维护的所有样本读取利用率。 将 lastSeenTimeStamp 设置为从先前查询检索的时间戳,以读取自先前查询以来的利用率。
-
参数
- device
- 目标设备的标识符
- nvmlReturn_t nvmlDeviceGetVgpuProcessesUtilizationInfo ( nvmlDevice_t device, nvmlVgpuProcessesUtilizationInfo_t* vgpuProcUtilInfo )
- vgpuProcUtilInfo
返回值
- NVML_SUCCESS 如果成功检索到利用率样本
- NVML_ERROR_UNINITIALIZED 如果库尚未成功初始化
- 指向调用者提供的 nvmlVgpuProcessesUtilizationInfo_t 结构的指针
- NVML_ERROR_INVALID_ARGUMENT 如果 device 无效,或者 vgpuProcUtilInfo 为 null
- NVML_ERROR_ARGUMENT_VERSION_MISMATCH 如果 vgpuProcUtilInfo 的版本无效
- NVML_ERROR_NOT_SUPPORTED 如果设备不支持 vGPU
- NVML_ERROR_GPU_IS_LOST 如果目标 GPU 已从总线上掉线或无法访问
- NVML_ERROR_NOT_FOUND 如果未找到样本条目
- NVML_ERROR_UNKNOWN 如果发生任何意外错误
描述
NVML_ERROR_INSUFFICIENT_SIZE 如果 vgpuProcUtilInfo->vgpuProcUtilArray 为 null,或者提供的 vgpuProcUtilInfo->vgpuProcessCount 太小,无法返回当前在设备上执行的 vGPU 实例上的所有进程的样本。 调用者应检查返回的 vgpuProcUtilInfo->vgpuProcessCount 中的当前进程计数,并再次调用该函数,并使用大小为 vgpuProcUtilInfo->vgpuProcessCount * sizeof(nvmlVgpuProcessUtilizationSample_t) 的缓冲区
检索在物理 GPU(device)上的 vGPU 上运行的进程的当前利用率。
检索在物理 GPU(device)上的 vGPU 实例上运行的进程的近期利用率。
读取在设备上活动的 vGPU 实例上运行的进程的 GPU SM(3D/计算)、帧缓冲区、视频编码器、视频解码器、jpeg 解码器和 OFA 的近期利用率。 利用率值以利用率样本结构数组的形式返回,该数组位于调用者提供的缓冲区中,由 vgpuProcUtilInfo->vgpuProcUtilArray 指向。 每个在 vGPU 实例上运行的进程返回一个利用率样本结构,该进程在最近的样本期间具有一些非零利用率。 它包括记录样本的 CPU 时间戳。 单个利用率值以“unsigned int”值形式返回。
要读取利用率值,首先通过调用 vgpuProcUtilInfo->vgpuProcUtilArray 设置为 NULL 的函数来确定保存样本所需的缓冲区大小。 该函数将返回 NVML_ERROR_INSUFFICIENT_SIZE,并将在 vgpuProcUtilInfo->vgpuProcessCount 中返回在 vGPU 实例上运行的当前进程计数。 调用者应分配大小为 vgpuProcUtilInfo->vgpuProcessCount * sizeof(nvmlVgpuProcessUtilizationSample_t) 的缓冲区。 再次调用该函数,并将分配的缓冲区传递到 vgpuProcUtilInfo->vgpuProcUtilArray 中,并将 vgpuProcUtilInfo->vgpuProcessCount 设置为缓冲区大小所针对的条目数。
在成功返回时,该函数会使用实际写入的 vGPU 子进程利用率样本结构的数目更新 vgpuProcUtilInfo->vgpuProcessCount。 这可能与先前读取的值不同,具体取决于在任何给定样本期间处于活动状态的进程数。
- vgpuProcUtilInfo->lastSeenTimeStamp 表示上次读取利用率样本时的 CPU 时间戳(以微秒为单位)。 将其设置为 0 以基于驱动程序内部样本缓冲区维护的所有样本读取利用率。 将 vgpuProcUtilInfo->lastSeenTimeStamp 设置为从先前查询检索的时间戳,以读取自先前查询以来的利用率。
-
参数
- device
- 目标设备的标识符
- lastSeenTimeStamp
- 仅返回时间戳大于 lastSeenTimeStamp 的样本。
- sampleValType
- 指向调用者提供的缓冲区,用于保存返回的样本值的类型
- vgpuInstanceSamplesCount
- 指向调用者提供的数组大小的指针,并返回 vGPU 实例数
- utilizationSamples
- utilizationSamples
返回值
- NVML_SUCCESS 如果成功检索到利用率样本
- NVML_ERROR_UNINITIALIZED 如果库尚未成功初始化
- 指向调用者提供的缓冲区,其中返回 vGPU 利用率样本
- NVML_ERROR_INVALID_ARGUMENT 如果 device 无效,vgpuInstanceSamplesCount 或 sampleValType 为 NULL,或者当 utilizationSamples 为非 NULL 时传递的样本计数为 0
- NVML_ERROR_NOT_SUPPORTED 如果设备不支持 vGPU
- NVML_ERROR_GPU_IS_LOST 如果目标 GPU 已从总线上掉线或无法访问
- NVML_ERROR_NOT_FOUND 如果未找到样本条目
- NVML_ERROR_UNKNOWN 如果发生任何意外错误
描述
NVML_ERROR_INSUFFICIENT_SIZE 如果提供的 vgpuInstanceSamplesCount 太小,无法返回当前在设备上执行的所有 vGPU 实例的样本
适用于 Kepler 或更新的完全支持的设备。
检索物理 GPU(device)上的 vGPU 的当前利用率。
读取在设备上运行的 vGPU 实例的 GPU SM(3D/计算)、帧缓冲区、视频编码器和视频解码器的近期利用率。 利用率值以利用率样本结构数组的形式返回,该数组位于调用者提供的缓冲区中,由 utilizationSamples 指向。 每个 vGPU 实例返回一个利用率样本结构,其中包括记录样本的 CPU 时间戳。 单个利用率值以“unsigned int”值形式在 nvmlValue_t 联合中返回。 该函数将调用者提供的 sampleValType 设置为 NVML_VALUE_TYPE_UNSIGNED_INT,以指示返回的值类型。
要读取利用率值,首先通过调用 utilizationSamples 设置为 NULL 的函数来确定保存样本所需的缓冲区大小。 该函数将返回 NVML_ERROR_INSUFFICIENT_SIZE,并将当前 vGPU 实例计数放在 vgpuInstanceSamplesCount 中;如果当前 vGPU 实例计数为零,则返回 NVML_SUCCESS。 调用者应分配大小为 vgpuInstanceSamplesCount * sizeof(nvmlVgpuInstanceUtilizationSample_t) 的缓冲区。 再次调用该函数,并将分配的缓冲区传递到 utilizationSamples 中,并将 vgpuInstanceSamplesCount 设置为缓冲区大小所针对的条目数。
在成功返回时,该函数会使用实际写入的 vGPU 子进程利用率样本结构的数目更新 vgpuSubProcessSampleCount。 这可能与先前读取的值不同,具体取决于在任何给定样本期间处于活动状态的进程数。
- 在成功返回时,该函数会使用实际写入的 vGPU 利用率样本结构的数目更新 vgpuInstanceSampleCount。 这可能与先前读取的值不同,因为 vGPU 实例会被创建或销毁。
-
参数
- nvmlReturn_t nvmlVgpuInstanceClearAccountingPids ( nvmlVgpuInstance_t vgpuInstance )
- vgpuInstance
返回值
- 目标 vGPU 实例的标识符
- NVML_ERROR_UNINITIALIZED 如果库尚未成功初始化
- NVML_SUCCESS 如果已清除计费信息
- NVML_ERROR_INVALID_ARGUMENT 如果 vgpuInstance 无效
- NVML_ERROR_NO_PERMISSION 如果用户没有执行此操作的权限
- NVML_ERROR_UNKNOWN 如果发生任何意外错误
描述
NVML_ERROR_NOT_SUPPORTED 如果 vGPU 不支持此功能或计费模式已禁用
清除已终止的 vGPU 实例的计费信息。
适用于 Maxwell 或更新的完全支持的设备。 需要 root/admin 权限。-
注意
-
计费模式需要开启。 请参阅 nvmlVgpuInstanceGetAccountingMode。
- 仅报告和可以清除计算和图形应用程序统计信息,因为监视应用程序统计信息不会影响 GPU 利用率。
-
参数
- nvmlReturn_t nvmlVgpuInstanceClearAccountingPids ( nvmlVgpuInstance_t vgpuInstance )
- vgpuInstance
- nvmlReturn_t nvmlVgpuInstanceGetAccountingMode ( nvmlVgpuInstance_t vgpuInstance, nvmlEnableState_t* mode )
- mode
返回值
- 用于返回当前计费模式的引用
- NVML_ERROR_UNINITIALIZED 如果库尚未成功初始化
- NVML_SUCCESS 如果已成功检索到模式
- NVML_ERROR_INVALID_ARGUMENT 如果 vgpuInstance 为 0,或者 mode 为 NULL
- NVML_ERROR_NOT_FOUND 如果 vgpuInstance 与系统上有效的活动 vGPU 实例不匹配
- NVML_ERROR_NOT_SUPPORTED 如果 vGPU 不支持此功能
- NVML_ERROR_UNKNOWN 如果发生任何意外错误
- 查询 vGPU 上每个进程计费模式的状态。
-
参数
- nvmlReturn_t nvmlVgpuInstanceClearAccountingPids ( nvmlVgpuInstance_t vgpuInstance )
- vgpuInstance
- nvmlReturn_t nvmlVgpuInstanceGetAccountingPids ( nvmlVgpuInstance_t vgpuInstance, unsigned int* count, unsigned int* pids )
- count
- 用于提供 pids 数组大小的引用,并返回准备好查询的元素数
- pids
返回值
- 用于返回进程 ID 列表的引用
- NVML_ERROR_UNINITIALIZED 如果库尚未成功初始化
- NVML_SUCCESS 如果已成功检索到 pid
- NVML_ERROR_INVALID_ARGUMENT 如果 vgpuInstance 为 0,或者 mode 为 NULL
- NVML_ERROR_NO_PERMISSION 如果用户没有执行此操作的权限
- NVML_ERROR_INVALID_ARGUMENT 如果 vgpuInstance 为 0,或者 count 为 NULL
- NVML_ERROR_UNKNOWN 如果发生任何意外错误
描述
NVML_ERROR_INSUFFICIENT_SIZE 如果 count 太小(count 设置为预期值)
检索在物理 GPU(device)上的 vGPU 上运行的进程的当前利用率。
查询在 vGPU 上运行的进程列表,这些进程可以查询计费统计信息。 返回的进程列表可能处于运行或终止状态。
要仅查询可以查询的最大进程数,请使用 *count = 0 和 pids=NULL 调用此函数。 返回代码将为 NVML_ERROR_INSUFFICIENT_SIZE;如果列表为空,则返回 NVML_SUCCESS。
适用于 Maxwell 或更新的完全支持的设备。 需要 root/admin 权限。有关更多详细信息,请参阅 nvmlVgpuInstanceGetAccountingStats。
在 PID 冲突的情况下,某些进程可能在循环缓冲区满之前无法访问。
- nvmlVgpuInstanceGetAccountingPids
-
参数
- nvmlReturn_t nvmlVgpuInstanceClearAccountingPids ( nvmlVgpuInstance_t vgpuInstance )
- vgpuInstance
- nvmlReturn_t nvmlVgpuInstanceGetAccountingStats ( nvmlVgpuInstance_t vgpuInstance, unsigned int pid, nvmlAccountingStats_t* stats )
- pid
- 要查询统计信息的目标进程的进程 ID
- stats
返回值
- 用于返回进程的计费统计信息的引用
- NVML_ERROR_UNINITIALIZED 如果库尚未成功初始化
- NVML_SUCCESS 如果已成功检索到统计信息
- NVML_ERROR_INVALID_ARGUMENT 如果 vgpuInstance 为 0,或者 stats 为 NULL
- NVML_ERROR_NO_PERMISSION 如果用户没有执行此操作的权限
- NVML_ERROR_UNKNOWN 如果发生任何意外错误
描述
NVML_ERROR_NOT_FOUND 如果 vgpuInstance 与系统上有效的活动 vGPU 实例不匹配,或者未找到统计信息
检索在物理 GPU(device)上的 vGPU 上运行的进程的当前利用率。
查询进程的计费统计信息。
计费统计信息捕获进程生命周期内的 GPU 利用率和其他统计信息,并且可以在进程的生命周期内或终止后查询。 nvmlAccountingStats_t 中的 time 字段在进程的生命周期内报告为 0,并在终止后更新为实际运行时间。 计费统计信息保存在循环缓冲区中,新创建的进程将覆盖有关旧进程的信息。
适用于 Maxwell 或更新的完全支持的设备。 需要 root/admin 权限。-
注意
-
有关每个返回指标的描述,请参阅 nvmlAccountingStats_t。 可以从 nvmlVgpuInstanceGetAccountingPids 检索可以查询的进程列表。
-
只能查询计算和图形应用程序统计信息。 无法查询监视应用程序统计信息,因为它们不会影响 GPU 利用率。
- 在 pid 冲突的情况下,将仅报告最新进程(最后终止的进程)的统计信息
-
参数
- nvmlReturn_t nvmlVgpuInstanceClearAccountingPids ( nvmlVgpuInstance_t vgpuInstance )
- nvmlReturn_t nvmlVgpuInstanceGetLicenseInfo_v2 ( nvmlVgpuInstance_t vgpuInstance, nvmlVgpuLicenseInfo_t* licenseInfo )
- vgpuInstance
- 目标 vGPU 实例的标识符
返回值
- licenseInfo
- 指向 vGPU 许可证信息结构的指针
- NVML_ERROR_INVALID_ARGUMENT 如果 vgpuInstance 为 0,或者 mode 为 NULL
- NVML_ERROR_NOT_SUPPORTED 如果 vGPU 不支持此功能
- NVML_ERROR_UNKNOWN 如果发生任何意外错误