Skip to content

Commit 0f6e1c5

Browse files
fix: enable eustall only if kmd supports
Related-To: NEO-15193 Signed-off-by: Joshua Santosh Ranjan <joshua.santosh.ranjan@intel.com> Source: 5b67a3d
1 parent 514fc1a commit 0f6e1c5

File tree

5 files changed

+45
-9
lines changed

5 files changed

+45
-9
lines changed

level_zero/tools/source/metrics/metric.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -121,6 +121,7 @@ ze_result_t MetricDeviceContext::metricGroupGet(uint32_t *pCount, zet_metric_gro
121121
}
122122
}
123123
}
124+
124125
*pCount = availableCount;
125126
return result;
126127
}

level_zero/tools/source/metrics/metric_ip_sampling_source.cpp

Lines changed: 26 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ bool IpSamplingMetricSourceImp::isAvailable() {
5656
return isEnabled;
5757
}
5858

59-
void IpSamplingMetricSourceImp::cacheMetricGroup() {
59+
ze_result_t IpSamplingMetricSourceImp::cacheMetricGroup() {
6060

6161
const auto deviceImp = static_cast<DeviceImp *>(&metricDeviceContext.getDevice());
6262
if (metricDeviceContext.isImplicitScalingCapable()) {
@@ -70,14 +70,26 @@ void IpSamplingMetricSourceImp::cacheMetricGroup() {
7070
uint32_t count = 1;
7171
zet_metric_group_handle_t hMetricGroup = {};
7272
const auto result = source.metricGroupGet(&count, &hMetricGroup);
73+
if (result == ZE_RESULT_ERROR_UNSUPPORTED_FEATURE) {
74+
return result;
75+
}
7376
// Getting MetricGroup from sub-device cannot fail, since RootDevice is successful
7477
UNRECOVERABLE_IF(result != ZE_RESULT_SUCCESS);
7578
subDeviceMetricGroup.push_back(static_cast<IpSamplingMetricGroupImp *>(MetricGroup::fromHandle(hMetricGroup)));
7679
}
7780

7881
IpSamplingMetricSourceImp &source = deviceImp->getMetricDeviceContext().getMetricSource<IpSamplingMetricSourceImp>();
7982
cachedMetricGroup = MultiDeviceIpSamplingMetricGroupImp::create(source, subDeviceMetricGroup);
80-
return;
83+
return ZE_RESULT_SUCCESS;
84+
}
85+
86+
// Confirm whether sample collection is possible
87+
uint32_t referenceValues = 100;
88+
const ze_result_t sampleCheckResult = getMetricOsInterface()->startMeasurement(referenceValues, referenceValues);
89+
if (sampleCheckResult != ZE_RESULT_SUCCESS) {
90+
return ZE_RESULT_ERROR_UNSUPPORTED_FEATURE;
91+
} else {
92+
getMetricOsInterface()->stopMeasurement();
8193
}
8294

8395
std::vector<IpSamplingMetricImp> metrics = {};
@@ -114,6 +126,8 @@ void IpSamplingMetricSourceImp::cacheMetricGroup() {
114126

115127
cachedMetricGroup = IpSamplingMetricGroupImp::create(*this, metrics);
116128
DEBUG_BREAK_IF(cachedMetricGroup == nullptr);
129+
130+
return ZE_RESULT_SUCCESS;
117131
}
118132

119133
ze_result_t IpSamplingMetricSourceImp::metricGroupGet(uint32_t *pCount, zet_metric_group_handle_t *phMetricGroups) {
@@ -123,15 +137,21 @@ ze_result_t IpSamplingMetricSourceImp::metricGroupGet(uint32_t *pCount, zet_metr
123137
return ZE_RESULT_ERROR_UNSUPPORTED_FEATURE;
124138
}
125139

140+
if (cachedMetricGroup == nullptr) {
141+
auto status = cacheMetricGroup();
142+
143+
if (status != ZE_RESULT_SUCCESS) {
144+
*pCount = 0;
145+
isEnabled = false;
146+
return ZE_RESULT_ERROR_UNSUPPORTED_FEATURE;
147+
}
148+
}
149+
126150
if (*pCount == 0) {
127151
*pCount = 1;
128152
return ZE_RESULT_SUCCESS;
129153
}
130154

131-
if (cachedMetricGroup == nullptr) {
132-
cacheMetricGroup();
133-
}
134-
135155
DEBUG_BREAK_IF(phMetricGroups == nullptr);
136156
phMetricGroups[0] = cachedMetricGroup->toHandle();
137157
*pCount = 1;

level_zero/tools/source/metrics/metric_ip_sampling_source.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,7 @@ class IpSamplingMetricSourceImp : public MetricSource {
6767
bool canDisable() override;
6868

6969
protected:
70-
void cacheMetricGroup();
70+
ze_result_t cacheMetricGroup();
7171
bool isEnabled = false;
7272

7373
const MetricDeviceContext &metricDeviceContext;

level_zero/tools/test/unit_tests/sources/metrics/test_metric_ip_sampling_enumeration.cpp

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -90,6 +90,22 @@ HWTEST2_F(MetricIpSamplingEnumerationTest, GivenDependenciesAvailableWhenMetricG
9090
}
9191
}
9292

93+
HWTEST2_F(MetricIpSamplingEnumerationTest, GivenDependenciesNotAvailableWhenMetricGroupGetIsCalledThenValidMetricGroupIsReturned, EustallSupportedPlatforms) {
94+
95+
EXPECT_EQ(ZE_RESULT_SUCCESS, testDevices[0]->getMetricDeviceContext().enableMetricApi());
96+
97+
for (auto &osInterface : osInterfaceVector) {
98+
osInterface->startMeasurementReturn = ZE_RESULT_ERROR_UNSUPPORTED_FEATURE;
99+
}
100+
101+
for (auto device : testDevices) {
102+
103+
uint32_t metricGroupCount = 0;
104+
EXPECT_EQ(zetMetricGroupGet(device->toHandle(), &metricGroupCount, nullptr), ZE_RESULT_SUCCESS);
105+
EXPECT_EQ(metricGroupCount, 0u);
106+
}
107+
}
108+
93109
HWTEST2_F(MetricIpSamplingEnumerationTest, GivenDependenciesAvailableWhenMetricGroupGetIsCalledMultipleTimesThenValidMetricGroupIsReturned, EustallSupportedPlatforms) {
94110

95111
EXPECT_EQ(ZE_RESULT_SUCCESS, testDevices[0]->getMetricDeviceContext().enableMetricApi());

level_zero/tools/test/unit_tests/sources/metrics/test_metric_ip_sampling_streamer.cpp

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -133,8 +133,6 @@ TEST_F(MetricIpSamplingStreamerTest, GivenStartMeasurementFailsWhenStreamerOpenI
133133
subDeviceIndex = 2;
134134
}
135135

136-
osInterfaceVector[subDeviceIndex]->startMeasurementReturn = ZE_RESULT_ERROR_UNSUPPORTED_FEATURE;
137-
138136
zet_metric_group_handle_t metricGroupHandle = MetricIpSamplingStreamerTest::getMetricGroup(device);
139137
EXPECT_EQ(zetContextActivateMetricGroups(context->toHandle(), device, 1, &metricGroupHandle), ZE_RESULT_SUCCESS);
140138

@@ -145,6 +143,7 @@ TEST_F(MetricIpSamplingStreamerTest, GivenStartMeasurementFailsWhenStreamerOpenI
145143
streamerDesc.notifyEveryNReports = 32768;
146144
streamerDesc.samplingPeriod = 1000;
147145

146+
osInterfaceVector[subDeviceIndex]->startMeasurementReturn = ZE_RESULT_ERROR_UNSUPPORTED_FEATURE;
148147
EXPECT_EQ(
149148
zetMetricStreamerOpen(context->toHandle(), device, metricGroupHandle, &streamerDesc, eventHandle, &streamerHandle),
150149
osInterfaceVector[subDeviceIndex]->startMeasurementReturn);

0 commit comments

Comments
 (0)