feature: Add EU stall support for xe2/xe3 core

Related-To: NEO-13777

Signed-off-by: shubham kumar <shubham.kumar@intel.com>
This commit is contained in:
shubham kumar
2025-03-11 18:21:47 +00:00
committed by Compute-Runtime-Automation
parent 798fd9e600
commit e287174211
8 changed files with 54 additions and 4 deletions

View File

@@ -47,6 +47,7 @@ MetricIpSamplingLinuxImp::MetricIpSamplingLinuxImp(Device &device) : device(devi
ze_result_t MetricIpSamplingLinuxImp::startMeasurement(uint32_t &notifyEveryNReports, uint32_t &samplingPeriodNs) {
const auto drm = device.getOsInterface()->getDriverModel()->as<NEO::Drm>();
// gpuTimeStampfrequency will be in Hertz
uint64_t gpuTimeStampfrequency = 0;
ze_result_t ret = getMetricsTimerResolution(gpuTimeStampfrequency);
if (ret != ZE_RESULT_SUCCESS) {
@@ -66,7 +67,7 @@ ze_result_t MetricIpSamplingLinuxImp::startMeasurement(uint32_t &notifyEveryNRep
return ZE_RESULT_ERROR_UNKNOWN;
}
notifyEveryNReports = std::max(notifyEveryNReports, 1u);
notifyEveryNReports = std::clamp(notifyEveryNReports, 1u, getRequiredBufferSize(notifyEveryNReports));
if (!ioctlHelper->perfOpenEuStallStream(euStallFdParameter, samplingPeriodNs, classInstance->engineInstance, notifyEveryNReports, gpuTimeStampfrequency, &stream)) {
return ZE_RESULT_ERROR_UNKNOWN;
}
@@ -99,6 +100,9 @@ ze_result_t MetricIpSamplingLinuxImp::readData(uint8_t *pRawData, size_t *pRawDa
// If read needs to try again, do not return error
if (errno == EINTR || errno == EAGAIN || errno == EBUSY) {
return ZE_RESULT_SUCCESS;
} else if (errno == EIO) {
// on i915 EIO is not returned by KMD for any error conditions. Hence we can use this safetly for both xe and i915.
return ZE_RESULT_WARNING_DROPPED_DATA;
}
return ZE_RESULT_ERROR_UNKNOWN;

View File

@@ -255,6 +255,8 @@ HWTEST2_F(MetricIpSamplingLinuxTestPrelim, givenReadFailsWithRetryErrorNumberWhe
EXPECT_EQ(metricIpSamplingOsInterface->readData(&pRawData, &pRawDataSize), ZE_RESULT_SUCCESS);
errno = EAGAIN;
EXPECT_EQ(metricIpSamplingOsInterface->readData(&pRawData, &pRawDataSize), ZE_RESULT_SUCCESS);
errno = EIO;
EXPECT_EQ(metricIpSamplingOsInterface->readData(&pRawData, &pRawDataSize), ZE_RESULT_WARNING_DROPPED_DATA);
}
HWTEST2_F(MetricIpSamplingLinuxTestPrelim, WhenGetRequiredBufferSizeIsCalledThenCorrectSizeIsReturned, IsPVC) {