mirror of
https://github.com/intel/compute-runtime.git
synced 2026-01-03 06:49:52 +08:00
Add ZE_RESULT_WARNING_DROPPED_DATA to ip metrics
Related-To: LOCI-3106 Signed-off-by: davidoli <david.olien@intel.com>
This commit is contained in:
committed by
Compute-Runtime-Automation
parent
4673a98074
commit
82d3901978
@@ -190,7 +190,7 @@ ze_result_t IpSamplingMetricGroupImp::calculateMetricValuesExp(const zet_metric_
|
||||
const bool calculationCountOnly = *pTotalMetricValueCount == 0;
|
||||
ze_result_t result = this->calculateMetricValues(type, rawDataSize, pRawData, pTotalMetricValueCount, pMetricValues);
|
||||
|
||||
if (result == ZE_RESULT_SUCCESS) {
|
||||
if ((result == ZE_RESULT_SUCCESS) || (result == ZE_RESULT_WARNING_DROPPED_DATA)) {
|
||||
*pSetCount = 1;
|
||||
if (!calculationCountOnly) {
|
||||
pMetricCounts[0] = *pTotalMetricValueCount;
|
||||
@@ -223,6 +223,7 @@ ze_result_t IpSamplingMetricGroupImp::getCalculatedMetricCount(const size_t rawD
|
||||
ze_result_t IpSamplingMetricGroupImp::getCalculatedMetricValues(const zet_metric_group_calculation_type_t type, const size_t rawDataSize, const uint8_t *pRawData,
|
||||
uint32_t &metricValueCount,
|
||||
zet_typed_value_t *pCalculatedData) {
|
||||
bool dataOverflow = false;
|
||||
StallSumIpDataMap_t stallSumIpDataMap;
|
||||
|
||||
// MAX_METRIC_VALUES is not supported yet.
|
||||
@@ -241,7 +242,7 @@ ze_result_t IpSamplingMetricGroupImp::getCalculatedMetricValues(const zet_metric
|
||||
const uint32_t rawReportCount = static_cast<uint32_t>(rawDataSize) / rawReportSize;
|
||||
|
||||
for (const uint8_t *pRawIpData = pRawData; pRawIpData < pRawData + (rawReportCount * rawReportSize); pRawIpData += rawReportSize) {
|
||||
stallIpDataMapUpdate(stallSumIpDataMap, pRawIpData);
|
||||
dataOverflow |= stallIpDataMapUpdate(stallSumIpDataMap, pRawIpData);
|
||||
}
|
||||
|
||||
metricValueCount = std::min<uint32_t>(metricValueCount, static_cast<uint32_t>(stallSumIpDataMap.size()) * properties.metricCount);
|
||||
@@ -255,7 +256,7 @@ ze_result_t IpSamplingMetricGroupImp::getCalculatedMetricValues(const zet_metric
|
||||
ipDataValues.clear();
|
||||
}
|
||||
|
||||
return ZE_RESULT_SUCCESS;
|
||||
return dataOverflow ? ZE_RESULT_WARNING_DROPPED_DATA : ZE_RESULT_SUCCESS;
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -278,7 +279,7 @@ ze_result_t IpSamplingMetricGroupImp::getCalculatedMetricValues(const zet_metric
|
||||
*
|
||||
* total size 64 bytes
|
||||
*/
|
||||
void IpSamplingMetricGroupImp::stallIpDataMapUpdate(StallSumIpDataMap_t &stallSumIpDataMap, const uint8_t *pRawIpData) {
|
||||
bool IpSamplingMetricGroupImp::stallIpDataMapUpdate(StallSumIpDataMap_t &stallSumIpDataMap, const uint8_t *pRawIpData) {
|
||||
|
||||
const uint8_t *tempAddr = pRawIpData;
|
||||
uint64_t ip = 0ULL;
|
||||
@@ -314,9 +315,7 @@ void IpSamplingMetricGroupImp::stallIpDataMapUpdate(StallSumIpDataMap_t &stallSu
|
||||
memcpy_s(reinterpret_cast<uint8_t *>(&stallCntrInfo), sizeof(stallCntrInfo), tempAddr, sizeof(stallCntrInfo));
|
||||
|
||||
constexpr int overflowDropFlag = (1 << 8);
|
||||
if (stallCntrInfo.flags & overflowDropFlag) {
|
||||
PRINT_DEBUG_STRING(NEO::DebugManager.flags.PrintDebugMessages.get(), stderr, "Stall Sampling Data Lost %s\n", " ");
|
||||
}
|
||||
return stallCntrInfo.flags & overflowDropFlag;
|
||||
}
|
||||
|
||||
// The order of push_back calls must match the order of metricPropertiesList.
|
||||
|
||||
@@ -95,7 +95,7 @@ struct IpSamplingMetricGroupImp : public IpSamplingMetricGroupBase {
|
||||
ze_result_t getCalculatedMetricValues(const zet_metric_group_calculation_type_t type, const size_t rawDataSize, const uint8_t *pRawData,
|
||||
uint32_t &metricValueCount,
|
||||
zet_typed_value_t *pCalculatedData);
|
||||
void stallIpDataMapUpdate(StallSumIpDataMap_t &, const uint8_t *pRawIpData);
|
||||
bool stallIpDataMapUpdate(StallSumIpDataMap_t &, const uint8_t *pRawIpData);
|
||||
void stallSumIpDataToTypedValues(uint64_t ip, StallSumIpData_t &sumIpData, std::vector<zet_typed_value_t> &ipDataValues);
|
||||
IpSamplingMetricSourceImp &metricSource;
|
||||
};
|
||||
|
||||
@@ -65,7 +65,7 @@ class MetricIpSamplingCalculateMetricsFixture : public MetricIpSamplingFixture {
|
||||
public:
|
||||
std::vector<MockStallRawIpData> rawDataVector = {{1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 1000, 0x01},
|
||||
{1, 9, 8, 7, 6, 5, 4, 3, 2, 1, 1000, 0x02},
|
||||
{10, 20, 30, 40, 50, 60, 70, 80, 90, 100, 1001, 0x100}, // set the overflow bit in flags
|
||||
{10, 20, 30, 40, 50, 60, 70, 80, 90, 100, 1001, 0x000},
|
||||
{10, 90, 80, 70, 60, 50, 40, 30, 20, 10, 1000, 0x3}};
|
||||
|
||||
size_t rawDataVectorSize = sizeof(rawDataVector[0]) * rawDataVector.size();
|
||||
@@ -90,6 +90,34 @@ class MetricIpSamplingCalculateMetricsFixture : public MetricIpSamplingFixture {
|
||||
{ZET_VALUE_TYPE_UINT64, {110}},
|
||||
{ZET_VALUE_TYPE_UINT64, {110}},
|
||||
{ZET_VALUE_TYPE_UINT64, {110}}};
|
||||
|
||||
std::vector<MockStallRawIpData> rawDataVectorOverflow = {{1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 1000, 0x01},
|
||||
{1, 9, 8, 7, 6, 5, 4, 3, 2, 1, 1000, 0x02},
|
||||
{10, 20, 30, 40, 50, 60, 70, 80, 90, 100, 1001, 0x100}, // set the overflow bit in flags
|
||||
{10, 90, 80, 70, 60, 50, 40, 30, 20, 10, 1000, 0x3}};
|
||||
|
||||
size_t rawDataVectorOverflowSize = sizeof(rawDataVectorOverflow[0]) * rawDataVectorOverflow.size();
|
||||
std::vector<zet_typed_value_t> expectedMetricOverflowValues = {
|
||||
{ZET_VALUE_TYPE_UINT64, {1}},
|
||||
{ZET_VALUE_TYPE_UINT64, {11}},
|
||||
{ZET_VALUE_TYPE_UINT64, {11}},
|
||||
{ZET_VALUE_TYPE_UINT64, {11}},
|
||||
{ZET_VALUE_TYPE_UINT64, {11}},
|
||||
{ZET_VALUE_TYPE_UINT64, {11}},
|
||||
{ZET_VALUE_TYPE_UINT64, {11}},
|
||||
{ZET_VALUE_TYPE_UINT64, {11}},
|
||||
{ZET_VALUE_TYPE_UINT64, {11}},
|
||||
{ZET_VALUE_TYPE_UINT64, {11}},
|
||||
{ZET_VALUE_TYPE_UINT64, {10}},
|
||||
{ZET_VALUE_TYPE_UINT64, {110}},
|
||||
{ZET_VALUE_TYPE_UINT64, {110}},
|
||||
{ZET_VALUE_TYPE_UINT64, {110}},
|
||||
{ZET_VALUE_TYPE_UINT64, {110}},
|
||||
{ZET_VALUE_TYPE_UINT64, {110}},
|
||||
{ZET_VALUE_TYPE_UINT64, {110}},
|
||||
{ZET_VALUE_TYPE_UINT64, {110}},
|
||||
{ZET_VALUE_TYPE_UINT64, {110}},
|
||||
{ZET_VALUE_TYPE_UINT64, {110}}};
|
||||
};
|
||||
|
||||
} // namespace ult
|
||||
|
||||
@@ -418,6 +418,46 @@ TEST_F(MetricIpSamplingCalculateMetricsTest, GivenEnumerationIsSuccessfulWhenCal
|
||||
}
|
||||
}
|
||||
|
||||
TEST_F(MetricIpSamplingCalculateMetricsTest, GivenDataOverflowOccurredWhenStreamerReadDataIscalledThenCalculateMultipleMetricsValulesExpReturnsOverflowWarning) {
|
||||
EXPECT_EQ(ZE_RESULT_SUCCESS, testDevices[0]->getMetricDeviceContext().enableMetricApi());
|
||||
|
||||
std::vector<zet_typed_value_t> metricValues(30);
|
||||
|
||||
for (auto device : testDevices) {
|
||||
|
||||
uint32_t metricGroupCount = 0;
|
||||
zetMetricGroupGet(device->toHandle(), &metricGroupCount, nullptr);
|
||||
std::vector<zet_metric_group_handle_t> metricGroups;
|
||||
metricGroups.resize(metricGroupCount);
|
||||
ASSERT_EQ(zetMetricGroupGet(device->toHandle(), &metricGroupCount, metricGroups.data()), ZE_RESULT_SUCCESS);
|
||||
ASSERT_NE(metricGroups[0], nullptr);
|
||||
zet_metric_group_properties_t metricGroupProperties;
|
||||
EXPECT_EQ(zetMetricGroupGetProperties(metricGroups[0], &metricGroupProperties), ZE_RESULT_SUCCESS);
|
||||
EXPECT_EQ(strcmp(metricGroupProperties.name, "EuStallSampling"), 0);
|
||||
|
||||
uint32_t setCount = 0;
|
||||
uint32_t totalMetricValueCount = 0;
|
||||
std::vector<uint32_t> metricCounts(2);
|
||||
EXPECT_EQ(L0::zetMetricGroupCalculateMultipleMetricValuesExp(metricGroups[0],
|
||||
ZET_METRIC_GROUP_CALCULATION_TYPE_METRIC_VALUES, rawDataVectorOverflowSize, reinterpret_cast<uint8_t *>(rawDataVectorOverflow.data()),
|
||||
&setCount, &totalMetricValueCount, metricCounts.data(), nullptr),
|
||||
ZE_RESULT_SUCCESS);
|
||||
EXPECT_TRUE(setCount == 1);
|
||||
EXPECT_TRUE(totalMetricValueCount == 40);
|
||||
EXPECT_EQ(L0::zetMetricGroupCalculateMultipleMetricValuesExp(metricGroups[0],
|
||||
ZET_METRIC_GROUP_CALCULATION_TYPE_METRIC_VALUES, rawDataVectorOverflowSize, reinterpret_cast<uint8_t *>(rawDataVectorOverflow.data()),
|
||||
&setCount, &totalMetricValueCount, metricCounts.data(), metricValues.data()),
|
||||
ZE_RESULT_WARNING_DROPPED_DATA);
|
||||
EXPECT_TRUE(setCount == 1);
|
||||
EXPECT_TRUE(totalMetricValueCount == 20);
|
||||
EXPECT_TRUE(metricCounts[0] == 20);
|
||||
for (uint32_t i = 0; i < totalMetricValueCount; i++) {
|
||||
EXPECT_TRUE(expectedMetricOverflowValues[i].type == metricValues[i].type);
|
||||
EXPECT_TRUE(expectedMetricOverflowValues[i].value.ui64 == metricValues[i].value.ui64);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
TEST_F(MetricIpSamplingCalculateMetricsTest, GivenEnumerationIsSuccessfulWithCALCULATIONTYPEMAXWhenCalculateMetricValuesIsCalledThenErrorUnknownIsReturned) {
|
||||
|
||||
EXPECT_EQ(ZE_RESULT_SUCCESS, testDevices[0]->getMetricDeviceContext().enableMetricApi());
|
||||
|
||||
Reference in New Issue
Block a user