Skip to content

Commit fc1c08a

Browse files
fix: Returns Correct No. of VF Engine Stats as requested.
- When the requested engine count is less than the actual engine stats available, then only requested no. of engine stats are retrieved. Related-To: NEO-13525 Signed-off-by: Pratik Bari <[email protected]>
1 parent 1dc7cd9 commit fc1c08a

File tree

4 files changed

+51
-15
lines changed

4 files changed

+51
-15
lines changed

level_zero/sysman/source/api/vf_management/linux/sysman_os_vf_imp.cpp

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -191,19 +191,17 @@ ze_result_t LinuxVfImp::vfOsGetEngineUtilization(uint32_t *pCount, zes_vf_util_e
191191

192192
if (pEngineUtil != nullptr) {
193193
const auto pPmuInterface = pLinuxSysmanImp->getPmuInterface();
194-
uint32_t index = 0;
195-
for (const auto &pEngineUtilsData : pEngineUtils) {
194+
for (uint32_t i = 0; i < *pCount; i++) {
196195
uint64_t pmuData[4] = {};
197-
auto ret = pPmuInterface->pmuRead(static_cast<int>(pEngineUtilsData.busyTicksFd), pmuData, sizeof(pmuData));
196+
auto ret = pPmuInterface->pmuRead(static_cast<int>(pEngineUtils[i].busyTicksFd), pmuData, sizeof(pmuData));
198197
if (ret < 0) {
199198
NEO::printDebugString(NEO::debugManager.flags.PrintDebugMessages.get(), stderr, "Error@ %s():pmuRead is returning value:%d and error:0x%x \n", __FUNCTION__, ret, ZE_RESULT_ERROR_UNKNOWN);
199+
*pCount = 0;
200200
return ZE_RESULT_ERROR_UNKNOWN;
201201
}
202-
203-
pEngineUtil[index].vfEngineType = pEngineUtilsData.engineType;
204-
pEngineUtil[index].activeCounterValue = pmuData[2];
205-
pEngineUtil[index].samplingCounterValue = pmuData[3];
206-
index++;
202+
pEngineUtil[i].vfEngineType = pEngineUtils[i].engineType;
203+
pEngineUtil[i].activeCounterValue = pmuData[2];
204+
pEngineUtil[i].samplingCounterValue = pmuData[3];
207205
}
208206
}
209207

level_zero/sysman/test/unit_tests/sources/vf_management/linux/test_zes_sysman_vf_management_prelim.cpp

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -123,6 +123,26 @@ TEST_F(ZesVfFixturePrelim, GivenValidVfHandleWhenCallingZesVFManagementGetVFEngi
123123
}
124124
}
125125

126+
TEST_F(ZesVfFixturePrelim, GivenValidVfHandleWhenCallingZesVFManagementGetVFEngineUtilizationExp2WithEngineStatsCountLessThanActualThenCorrectEngineStatsCountIsReturned) {
127+
128+
auto handles = getEnabledVfHandles(mockHandleCount);
129+
for (auto handleVf : handles) {
130+
ASSERT_NE(nullptr, handleVf);
131+
uint32_t count = 0;
132+
auto result = zesVFManagementGetVFEngineUtilizationExp2(handleVf, &count, nullptr);
133+
EXPECT_EQ(result, ZE_RESULT_SUCCESS);
134+
EXPECT_EQ(count, numberMockedEngines);
135+
count = count - 1;
136+
std::vector<zes_vf_util_engine_exp2_t> engineUtils(count);
137+
result = zesVFManagementGetVFEngineUtilizationExp2(handleVf, &count, engineUtils.data());
138+
EXPECT_EQ(result, ZE_RESULT_SUCCESS);
139+
EXPECT_EQ(count, engineUtils.size());
140+
EXPECT_EQ(engineUtils[0].vfEngineType, ZES_ENGINE_GROUP_COMPUTE_SINGLE);
141+
EXPECT_EQ(engineUtils[0].activeCounterValue, mockActiveTime);
142+
EXPECT_EQ(engineUtils[0].samplingCounterValue, mockTimestamp);
143+
}
144+
}
145+
126146
TEST_F(ZesVfFixturePrelim, GivenValidVfHandleWhenQueryingEngineUtilizationMultipleTimesThenCorrectEngineStatsAreReturned) {
127147

128148
auto handles = getEnabledVfHandles(mockHandleCount);

level_zero/tools/source/sysman/vf_management/linux/os_vf_imp_prelim.cpp

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -110,19 +110,17 @@ ze_result_t LinuxVfImp::getEngineUtilization(uint32_t *pCount, zes_vf_util_engin
110110

111111
if (pEngineUtil != nullptr) {
112112
PmuInterface *pPmuInterface = pLinuxSysmanImp->getPmuInterface();
113-
uint32_t index = 0;
114-
for (auto pEngineUtilsData : pEngineUtils) {
113+
for (uint32_t i = 0; i < *pCount; i++) {
115114
uint64_t pmuData[4] = {};
116-
auto ret = pPmuInterface->pmuRead(static_cast<int>(pEngineUtilsData.busyTicksFd), pmuData, sizeof(pmuData));
115+
auto ret = pPmuInterface->pmuRead(static_cast<int>(pEngineUtils[i].busyTicksFd), pmuData, sizeof(pmuData));
117116
if (ret < 0) {
118117
NEO::printDebugString(NEO::debugManager.flags.PrintDebugMessages.get(), stderr, "Error@ %s():pmuRead is returning value:%d and error:0x%x \n", __FUNCTION__, ret, ZE_RESULT_ERROR_UNKNOWN);
119118
*pCount = 0;
120119
return ZE_RESULT_ERROR_UNKNOWN;
121120
}
122-
pEngineUtil[index].vfEngineType = pEngineUtilsData.engineType;
123-
pEngineUtil[index].activeCounterValue = pmuData[2];
124-
pEngineUtil[index].samplingCounterValue = pmuData[3];
125-
index++;
121+
pEngineUtil[i].vfEngineType = pEngineUtils[i].engineType;
122+
pEngineUtil[i].activeCounterValue = pmuData[2];
123+
pEngineUtil[i].samplingCounterValue = pmuData[3];
126124
}
127125
}
128126

level_zero/tools/test/unit_tests/sources/sysman/vf_management/linux/test_zes_sysman_vf_management_prelim.cpp

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -99,6 +99,26 @@ TEST_F(ZesVfFixturePrelim, GivenValidVfHandleWhenCallingZesVFManagementGetVFEngi
9999
}
100100
}
101101

102+
TEST_F(ZesVfFixturePrelim, GivenValidVfHandleWhenCallingZesVFManagementGetVFEngineUtilizationExp2WithEngineStatsCountLessThanActualThenCorrectEngineStatsCountIsReturned) {
103+
104+
auto handles = getEnabledVfHandles(mockHandleCount);
105+
for (auto handleVf : handles) {
106+
ASSERT_NE(nullptr, handleVf);
107+
uint32_t count = 0;
108+
auto result = zesVFManagementGetVFEngineUtilizationExp2(handleVf, &count, nullptr);
109+
EXPECT_EQ(result, ZE_RESULT_SUCCESS);
110+
EXPECT_EQ(count, numberMockedEngines);
111+
count = count - 1;
112+
std::vector<zes_vf_util_engine_exp2_t> engineUtils(count);
113+
result = zesVFManagementGetVFEngineUtilizationExp2(handleVf, &count, engineUtils.data());
114+
EXPECT_EQ(result, ZE_RESULT_SUCCESS);
115+
EXPECT_EQ(count, engineUtils.size());
116+
EXPECT_EQ(engineUtils[0].vfEngineType, ZES_ENGINE_GROUP_COMPUTE_SINGLE);
117+
EXPECT_EQ(engineUtils[0].activeCounterValue, mockActiveTime);
118+
EXPECT_EQ(engineUtils[0].samplingCounterValue, mockTimestamp);
119+
}
120+
}
121+
102122
TEST_F(ZesVfFixturePrelim, GivenValidVfHandleWhenQueryingEngineUtilizationMultipleTimesThenCorrectEngineStatsAreReturned) {
103123

104124
auto handles = getEnabledVfHandles(mockHandleCount);

0 commit comments

Comments
 (0)