Revert "feature: Add support for euss buffer overflow on windows"

This reverts commit 703dd48038.

Signed-off-by: Compute-Runtime-Validation <compute-runtime-validation@intel.com>
This commit is contained in:
Compute-Runtime-Validation
2025-11-04 01:32:39 +01:00
committed by Compute-Runtime-Automation
parent 8f4df0dee1
commit 5f874f45e2
7 changed files with 17 additions and 80 deletions

View File

@@ -17,7 +17,6 @@
namespace L0 {
#define GTDI_RET_BUFFER_OVERFLOW 13
class MetricIpSamplingWindowsImp : public MetricIpSamplingOsInterface {
public:
MetricIpSamplingWindowsImp(Device &device);
@@ -32,7 +31,6 @@ class MetricIpSamplingWindowsImp : public MetricIpSamplingOsInterface {
ze_result_t getMetricsTimerResolution(uint64_t &timerResolution) override;
private:
bool overflowReported = false;
Device &device;
uint32_t notifyEveryNReports = 0u;
ze_result_t getNearestSupportedSamplingUnit(uint32_t &samplingPeriodNs, uint32_t &samplingRate);
@@ -67,25 +65,9 @@ ze_result_t MetricIpSamplingWindowsImp::startMeasurement(uint32_t &notifyEveryNR
}
ze_result_t MetricIpSamplingWindowsImp::readData(uint8_t *pRawData, size_t *pRawDataSize) {
// First read call to the KMD after overflow will just give the overflow status back, without any data being read from the HW buffer. This will not reset the HW overflow bit.
// Second read call to the KMD will reset the HW overflow bit, read the data from the HW buffer and return success to the UMD. This reading will make space for new reports.
bool result;
uint32_t retCode = 0;
const auto wddm = device.getOsInterface()->getDriverModel()->as<NEO::Wddm>();
if (!overflowReported) {
size_t rawDataSizeTemp = 0u;
result = wddm->perfReadEuStallStream(nullptr, &rawDataSizeTemp, &retCode);
if (!result) {
return ZE_RESULT_ERROR_UNKNOWN;
}
bool result = wddm->perfReadEuStallStream(pRawData, pRawDataSize);
if (retCode == GTDI_RET_BUFFER_OVERFLOW) {
overflowReported = true;
return ZE_RESULT_WARNING_DROPPED_DATA;
}
}
overflowReported = false;
result = wddm->perfReadEuStallStream(pRawData, pRawDataSize, &retCode);
return result ? ZE_RESULT_SUCCESS : ZE_RESULT_ERROR_UNKNOWN;
}
@@ -109,9 +91,8 @@ uint32_t MetricIpSamplingWindowsImp::getUnitReportSize() {
bool MetricIpSamplingWindowsImp::isNReportsAvailable() {
size_t bytesAvailable = 0u;
uint32_t retCode = 0;
const auto wddm = device.getOsInterface()->getDriverModel()->as<NEO::Wddm>();
bool result = wddm->perfReadEuStallStream(nullptr, &bytesAvailable, &retCode);
bool result = wddm->perfReadEuStallStream(nullptr, &bytesAvailable);
if (!result) {
METRICS_LOG_ERR("wddm perfReadEuStallStream() call failed.");
return false;

View File

@@ -107,7 +107,7 @@ HWTEST2_F(MetricIpSamplingWindowsFixtureXe2, givenPerfDisableEuStallStreamFailsW
}
HWTEST2_F(MetricIpSamplingWindowsFixtureXe2, givenReadSucceedsWhenReadDataIsCalledThenReturnSuccess, IsXe2HpgCore) {
VariableBackup<decltype(NEO::pPerfReadEuStallStream)> mockPerfReadEuStallStream(&NEO::pPerfReadEuStallStream, [](uint8_t *pRawData, size_t *pRawDataSize, uint32_t *pOutRetCode) -> bool {
VariableBackup<decltype(NEO::pPerfReadEuStallStream)> mockPerfReadEuStallStream(&NEO::pPerfReadEuStallStream, [](uint8_t *pRawData, size_t *pRawDataSize) -> bool {
return true;
});
uint8_t pRawData = 0u;
@@ -116,7 +116,7 @@ HWTEST2_F(MetricIpSamplingWindowsFixtureXe2, givenReadSucceedsWhenReadDataIsCall
}
HWTEST2_F(MetricIpSamplingWindowsFixtureXe2, givenPerfReadEuStallStreamFailsWhenReadDataIsCalledThenReturnFailure, IsXe2HpgCore) {
VariableBackup<decltype(NEO::pPerfReadEuStallStream)> mockPerfReadEuStallStream(&NEO::pPerfReadEuStallStream, [](uint8_t *pRawData, size_t *pRawDataSize, uint32_t *pOutRetCode) -> bool {
VariableBackup<decltype(NEO::pPerfReadEuStallStream)> mockPerfReadEuStallStream(&NEO::pPerfReadEuStallStream, [](uint8_t *pRawData, size_t *pRawDataSize) -> bool {
return false;
});
uint8_t pRawData = 0u;
@@ -124,49 +124,6 @@ HWTEST2_F(MetricIpSamplingWindowsFixtureXe2, givenPerfReadEuStallStreamFailsWhen
EXPECT_EQ(metricIpSamplingOsInterface->readData(&pRawData, &pRawDataSize), ZE_RESULT_ERROR_UNKNOWN);
}
HWTEST2_F(MetricIpSamplingWindowsFixtureXe2, givenPerfReadEuStallStreamOverflowsWhenReadDataIsCalledThenReturnCorrectOverflowStatus, IsXe2HpgCore) {
VariableBackup<decltype(NEO::pPerfReadEuStallStream)> mockPerfReadEuStallStream(&NEO::pPerfReadEuStallStream, [](uint8_t *pRawData, size_t *pRawDataSize, uint32_t *pOutRetCode) -> bool {
*pOutRetCode = 13; // GTDI_RET_BUFFER_OVERFLOW
return true;
});
uint8_t pRawData = 0u;
size_t pRawDataSize = 0;
EXPECT_EQ(metricIpSamplingOsInterface->readData(&pRawData, &pRawDataSize), ZE_RESULT_WARNING_DROPPED_DATA);
}
HWTEST2_F(MetricIpSamplingWindowsFixtureXe2, givenPerfReadEuStallStreamOverflowsWhenReadDataIsCalledTwiceThenCorrectReturnStatusAreReturned, IsXe2HpgCore) {
static bool overflowRetuned = false;
VariableBackup<decltype(NEO::pPerfReadEuStallStream)> mockPerfReadEuStallStream(&NEO::pPerfReadEuStallStream, [](uint8_t *pRawData, size_t *pRawDataSize, uint32_t *pOutRetCode) -> bool {
if (!overflowRetuned) {
overflowRetuned = true;
*pOutRetCode = 13; // GTDI_RET_BUFFER_OVERFLOW
}
return true;
});
uint8_t pRawData = 0u;
size_t pRawDataSize = 0;
EXPECT_EQ(metricIpSamplingOsInterface->readData(&pRawData, &pRawDataSize), ZE_RESULT_WARNING_DROPPED_DATA);
EXPECT_EQ(metricIpSamplingOsInterface->readData(&pRawData, &pRawDataSize), ZE_RESULT_SUCCESS);
overflowRetuned = false;
}
HWTEST2_F(MetricIpSamplingWindowsFixtureXe2, givenPerfReadEuStallStreamOverflowsWhenReadDataIsCalledTwiceAndReadDataFailsOnScondCallThenCorrectReturnStatusAreReturned, IsXe2HpgCore) {
static bool overflowRetuned = false;
VariableBackup<decltype(NEO::pPerfReadEuStallStream)> mockPerfReadEuStallStream(&NEO::pPerfReadEuStallStream, [](uint8_t *pRawData, size_t *pRawDataSize, uint32_t *pOutRetCode) -> bool {
if (!overflowRetuned) {
overflowRetuned = true;
*pOutRetCode = 13; // GTDI_RET_BUFFER_OVERFLOW
return true;
}
return false;
});
uint8_t pRawData = 0u;
size_t pRawDataSize = 0;
EXPECT_EQ(metricIpSamplingOsInterface->readData(&pRawData, &pRawDataSize), ZE_RESULT_WARNING_DROPPED_DATA);
EXPECT_EQ(metricIpSamplingOsInterface->readData(&pRawData, &pRawDataSize), ZE_RESULT_ERROR_UNKNOWN);
overflowRetuned = false;
}
HWTEST2_F(MetricIpSamplingWindowsFixtureXe2, WhenGetRequiredBufferSizeIsCalledThenCorrectSizeIsReturned, IsXe2HpgCore) {
constexpr uint32_t unitReportSize = 64;
EXPECT_EQ(metricIpSamplingOsInterface->getRequiredBufferSize(10), unitReportSize * 10);
@@ -179,7 +136,7 @@ HWTEST2_F(MetricIpSamplingWindowsFixtureXe2, WhenisNReportsAvailableIsCalledAndE
VariableBackup<decltype(NEO::pPerfOpenEuStallStream)> mockPerfOpenEuStallStream(&NEO::pPerfOpenEuStallStream, [](uint32_t sampleRate, uint32_t minBufferSize) -> bool {
return true;
});
VariableBackup<decltype(NEO::pPerfReadEuStallStream)> mockPerfReadEuStallStream(&NEO::pPerfReadEuStallStream, [](uint8_t *pRawData, size_t *pRawDataSize, uint32_t *pOutRetCode) -> bool {
VariableBackup<decltype(NEO::pPerfReadEuStallStream)> mockPerfReadEuStallStream(&NEO::pPerfReadEuStallStream, [](uint8_t *pRawData, size_t *pRawDataSize) -> bool {
*pRawDataSize = 64u;
return true;
});
@@ -199,7 +156,7 @@ HWTEST2_F(MetricIpSamplingWindowsFixtureXe2, WhenisNReportsAvailableIsCalledAndE
VariableBackup<decltype(NEO::pPerfOpenEuStallStream)> mockPerfOpenEuStallStream(&NEO::pPerfOpenEuStallStream, [](uint32_t sampleRate, uint32_t minBufferSize) -> bool {
return true;
});
VariableBackup<decltype(NEO::pPerfReadEuStallStream)> mockPerfReadEuStallStream(&NEO::pPerfReadEuStallStream, [](uint8_t *pRawData, size_t *pRawDataSize, uint32_t *pOutRetCode) -> bool {
VariableBackup<decltype(NEO::pPerfReadEuStallStream)> mockPerfReadEuStallStream(&NEO::pPerfReadEuStallStream, [](uint8_t *pRawData, size_t *pRawDataSize) -> bool {
*pRawDataSize = 192u;
return true;
});

View File

@@ -13,7 +13,7 @@ bool Wddm::perfOpenEuStallStream(uint32_t sampleRate, uint32_t minBufferSize) {
return false;
}
bool Wddm::perfReadEuStallStream(uint8_t *pRawData, size_t *pRawDataSize, uint32_t *pOutRetCode) {
bool Wddm::perfReadEuStallStream(uint8_t *pRawData, size_t *pRawDataSize) {
return false;
}

View File

@@ -201,7 +201,7 @@ class Wddm : public DriverModel {
MOCKABLE_VIRTUAL bool perfOpenEuStallStream(uint32_t sampleRate, uint32_t minBufferSize);
MOCKABLE_VIRTUAL bool perfDisableEuStallStream();
MOCKABLE_VIRTUAL bool perfReadEuStallStream(uint8_t *pRawData, size_t *pRawDataSize, uint32_t *pOutRetCode);
MOCKABLE_VIRTUAL bool perfReadEuStallStream(uint8_t *pRawData, size_t *pRawDataSize);
PhysicalDevicePciBusInfo getPciBusInfo() const override;

View File

@@ -29,7 +29,7 @@ NTSTATUS(*pCallEscape)
uint32_t (*pGetTimestampFrequency)() = nullptr;
bool (*pPerfOpenEuStallStream)(uint32_t sampleRate, uint32_t minBufferSize) = nullptr;
bool (*pPerfDisableEuStallStream)() = nullptr;
bool (*pPerfReadEuStallStream)(uint8_t *pRawData, size_t *pRawDataSize, uint32_t *pOutRetCode) = nullptr;
bool (*pPerfReadEuStallStream)(uint8_t *pRawData, size_t *pRawDataSize) = nullptr;
} // namespace NEO
struct MockHwDeviceId : public HwDeviceIdWddm {
@@ -385,11 +385,11 @@ bool WddmMock::perfDisableEuStallStream() {
return Wddm::perfDisableEuStallStream();
}
bool WddmMock::perfReadEuStallStream(uint8_t *pRawData, size_t *pRawDataSize, uint32_t *pOutRetCode) {
bool WddmMock::perfReadEuStallStream(uint8_t *pRawData, size_t *pRawDataSize) {
if (pPerfReadEuStallStream != nullptr) {
return pPerfReadEuStallStream(pRawData, pRawDataSize, pOutRetCode);
return pPerfReadEuStallStream(pRawData, pRawDataSize);
}
return Wddm::perfReadEuStallStream(pRawData, pRawDataSize, pOutRetCode);
return Wddm::perfReadEuStallStream(pRawData, pRawDataSize);
}
uint32_t WddmMock::getTimestampFrequency() const {

View File

@@ -26,7 +26,7 @@ extern NTSTATUS (*pCallEscape)(D3DKMT_ESCAPE &escapeCommand);
extern uint32_t (*pGetTimestampFrequency)();
extern bool (*pPerfOpenEuStallStream)(uint32_t sampleRate, uint32_t minBufferSize);
extern bool (*pPerfDisableEuStallStream)();
extern bool (*pPerfReadEuStallStream)(uint8_t *pRawData, size_t *pRawDataSize, uint32_t *pOutRetCode);
extern bool (*pPerfReadEuStallStream)(uint8_t *pRawData, size_t *pRawDataSize);
class GraphicsAllocation;
@@ -155,7 +155,7 @@ class WddmMock : public Wddm {
uint32_t getTimestampFrequency() const override;
bool perfOpenEuStallStream(uint32_t sampleRate, uint32_t minBufferSize) override;
bool perfDisableEuStallStream() override;
bool perfReadEuStallStream(uint8_t *pRawData, size_t *pRawDataSize, uint32_t *pOutRetCode) override;
bool perfReadEuStallStream(uint8_t *pRawData, size_t *pRawDataSize) override;
WddmMockHelpers::MakeResidentCall makeResidentResult;
WddmMockHelpers::CallResult evictResult;

View File

@@ -20,10 +20,9 @@ TEST_F(WddmPerfTests, givenCorrectArgumentsWhenPerfOpenEuStallStreamIsCalledThen
}
TEST_F(WddmPerfTests, givenCorrectArgumentsWhenPerfReadEuStallStreamIsCalledThenReturnFailure) {
uint8_t rawData = 0u;
size_t rawDataSize = 0;
uint32_t outRetCode = 0;
EXPECT_FALSE(wddm->perfReadEuStallStream(&rawData, &rawDataSize, &outRetCode));
uint8_t pRawData = 0u;
size_t pRawDataSize = 0;
EXPECT_FALSE(wddm->perfReadEuStallStream(&pRawData, &pRawDataSize));
}
TEST_F(WddmPerfTests, givenCorrectArgumentsWhenPerfDisableEuStallStreamIsCalledThenReturnFailure) {