NVML API 参考指南 (PDF) - vR570 (旧版本) - 最后更新日期:2025 年 1 月 29 日 - 发送反馈

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 结构的指针
返回值

描述

检索在物理 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 子进程利用率样本
返回值

描述

描述

检索在物理 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_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_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
返回值

描述

NVML_ERROR_NOT_SUPPORTED 如果 vGPU 不支持此功能或计费模式已禁用

清除已终止的 vGPU 实例的计费信息。

适用于 Maxwell 或更新的完全支持的设备。 需要 root/admin 权限。

仅报告和可以清除计算和图形应用程序统计信息,因为监视应用程序统计信息不会影响 GPU 利用率。
参数
nvmlReturn_t nvmlVgpuInstanceClearAccountingPids ( nvmlVgpuInstance_t vgpuInstance )
vgpuInstance
nvmlReturn_t nvmlVgpuInstanceGetAccountingMode ( nvmlVgpuInstance_t vgpuInstance, nvmlEnableState_t* mode )
mode
返回值

描述

NVML_ERROR_DRIVER_NOT_LOADED 如果 NVIDIA 驱动程序未在 vGPU 实例上运行

检索在物理 GPU(device)上的 vGPU 上运行的进程的当前利用率。

查询 vGPU 上每个进程计费模式的状态。
参数
nvmlReturn_t nvmlVgpuInstanceClearAccountingPids ( nvmlVgpuInstance_t vgpuInstance )
vgpuInstance
nvmlReturn_t nvmlVgpuInstanceGetAccountingPids ( nvmlVgpuInstance_t vgpuInstance, unsigned int* count, unsigned int* pids )
count
用于提供 pids 数组大小的引用,并返回准备好查询的元素数
pids
返回值

描述

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_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 实例的标识符
返回值

描述

NVML_SUCCESS 如果已成功检索到信息

检索在物理 GPU(device)上的 vGPU 上运行的进程的当前利用率。


NVML API 参考指南 (PDF) - vR570 (旧版本) - 最后更新日期:2025 年 1 月 29 日 - 发送反馈