Virtual Function Management Extension

Virtual Function Management Extension#

API#

Virtual Function Management#

This feature adds the ability to retrieve telemetry from PF domain for monitoring per VF memory and engine utilization. This telemetry is used to determine if a VM has oversubscribed GPU memory or observe engine business for a targeted workload. If VF has no activity value to report, then implementation shall reflect that appropriately in zes_vf_util_engine_exp_t struct so that percentage calculation results in value of 0.

The following pseudo-code demonstrates a sequence for obtaining the engine activity for all Virtual Functions from Physical Function environment:

// Gather count of VF handles
uint32_t numVf = 0;
zes_vf_exp_properties_t vfProps {};
zesDeviceEnumActiveVFExp(hDevice, &numVf, nullptr);

// Allocate memory for vf handles and call back in to gather handles
std::vector<zes_vf_handle_t> vfs(numVf, nullptr);
zesDeviceEnumActiveVFExp(hDevice, &numVf, vfs.data());

// Gather VF properties
std::vector <zes_vf_exp_properties_t> vfProps(numVf);
for (uint32_t i = 0; i < numVf; i++) {
    zesVFManagementGetVFPropertiesExp(vfs[i], &vfProps[i]);
}

// Detect the info types a particular VF supports

// Using VF# 0 to demonstrate how to detect engine info type and query engine util info
zes_vf_handle_t activeVf = vfs[0];
uint32_t count = 1;
if (vfProps[0].flags & ZES_VF_INFO_ENGINE) {
    zes_vf_util_engine_exp_t engineUtil0 = {};
    zesVFManagementGetVFEngineUtilizationExp(activeVf, &count, &engineUtil0);
    sleep(1)
    zes_vf_util_engine_exp_t engineUtil1 = {};
    zesVFManagementGetVFEngineUtilizationExp(activeVf, &count, &engineUtil1);
    // Use formula to calculate engine utilization % based on the 2 snapshots above
}

// Demonstrate using setter to switch off Engine telemetry for VF0 and then check if Getter returns INVALID
zesVFManagementSetVFTelemetryModeExp(activeVf,  ZES_VF_INFO_ENGINE, false);
ze_result_t res = zesVFManagementGetVFEngineUtilizationExp(activeVf, &count, &engineUtil0);
if (res != ZES_RESULT_SUCCESS) {
    printf("Engine utilization successfully disabled for VF");
}