mirror of
https://github.com/intel/compute-runtime.git
synced 2026-01-08 22:12:59 +08:00
feature: Add support for internal Metrics
Related-To: LOCI-4561 Signed-off-by: Joshua Santosh Ranjan <joshua.santosh.ranjan@intel.com>
This commit is contained in:
committed by
Compute-Runtime-Automation
parent
6217d97bbe
commit
e27046af1f
@@ -23,6 +23,7 @@ target_sources(${L0_STATIC_LIB_NAME}
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/metric_ip_sampling_streamer.h
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/metric_ip_sampling_streamer.cpp
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/os_interface_metric.h
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/${BRANCH_DIR_SUFFIX}/metric_device_context_create.cpp
|
||||
)
|
||||
|
||||
add_subdirectories()
|
||||
|
||||
@@ -61,15 +61,15 @@ MetricsDiscovery::IAdapter_1_9 *MetricEnumeration::getMetricsAdapter() {
|
||||
const int32_t drmMinorPrimary = drmMinor - (drmNodePrimary * drmMaxDevices);
|
||||
|
||||
// Enumerate metrics discovery adapters.
|
||||
for (uint32_t index = 0, count = pAdapterGroup->GetParams()->AdapterCount;
|
||||
for (uint32_t index = 0, count = getAdapterGroupParams(pAdapterGroup)->AdapterCount;
|
||||
index < count;
|
||||
++index) {
|
||||
|
||||
UNRECOVERABLE_IF(pAdapterGroup->GetAdapter(index) == nullptr);
|
||||
UNRECOVERABLE_IF(pAdapterGroup->GetAdapter(index)->GetParams() == nullptr);
|
||||
|
||||
auto adapter = pAdapterGroup->GetAdapter(index);
|
||||
auto adapterParams = adapter->GetParams();
|
||||
auto adapter = getAdapterFromAdapterGroup(pAdapterGroup, index);
|
||||
auto adapterParams = getAdapterParams(adapter);
|
||||
|
||||
const bool validAdapterType = adapterParams->SystemId.Type == MetricsDiscovery::ADAPTER_ID_TYPE_MAJOR_MINOR;
|
||||
const bool validAdapterMajor = adapterParams->SystemId.MajorMinor.Major == static_cast<int32_t>(drmMajor);
|
||||
|
||||
@@ -22,10 +22,6 @@
|
||||
|
||||
namespace L0 {
|
||||
|
||||
std::unique_ptr<MetricDeviceContext> MetricDeviceContext::create(Device &device) {
|
||||
return std::make_unique<MetricDeviceContext>(device);
|
||||
}
|
||||
|
||||
MetricDeviceContext::MetricDeviceContext(Device &inputDevice) : device(inputDevice) {
|
||||
auto deviceNeo = device.getNEODevice();
|
||||
bool isSubDevice = deviceNeo->isSubDevice();
|
||||
|
||||
@@ -63,6 +63,9 @@ class MetricDeviceContext {
|
||||
static std::unique_ptr<MetricDeviceContext> create(Device &device);
|
||||
static ze_result_t enableMetricApi();
|
||||
|
||||
protected:
|
||||
std::map<MetricSource::SourceType, std::unique_ptr<MetricSource>> metricSources;
|
||||
|
||||
private:
|
||||
bool enable();
|
||||
ze_result_t activateAllDomains();
|
||||
@@ -72,7 +75,6 @@ class MetricDeviceContext {
|
||||
std::map<uint32_t, std::pair<zet_metric_group_handle_t, bool>> domains;
|
||||
bool multiDeviceCapable = false;
|
||||
uint32_t subDeviceIndex = 0;
|
||||
std::map<MetricSource::SourceType, std::unique_ptr<MetricSource>> metricSources;
|
||||
};
|
||||
|
||||
struct Metric : _zet_metric_handle_t {
|
||||
|
||||
@@ -0,0 +1,16 @@
|
||||
/*
|
||||
* Copyright (C) 2023 Intel Corporation
|
||||
*
|
||||
* SPDX-License-Identifier: MIT
|
||||
*
|
||||
*/
|
||||
|
||||
#include "level_zero/tools/source/metrics/metric.h"
|
||||
|
||||
namespace L0 {
|
||||
|
||||
std::unique_ptr<MetricDeviceContext> MetricDeviceContext::create(Device &device) {
|
||||
return std::make_unique<MetricDeviceContext>(device);
|
||||
}
|
||||
|
||||
} // namespace L0
|
||||
@@ -173,7 +173,7 @@ ze_result_t MetricEnumeration::openMetricsDiscovery() {
|
||||
auto &subDeviceMetricEnumeraion = deviceImp.subDevices[i]->getMetricDeviceContext().getMetricSource<OaMetricSourceImp>().getMetricEnumeration();
|
||||
auto &metricsDevice = subDeviceMetricEnumeraion.pMetricsDevice;
|
||||
auto subDeviceImp = static_cast<DeviceImp *>(deviceImp.subDevices[i]);
|
||||
pAdapter->OpenMetricsSubDevice(subDeviceImp->getPhysicalSubDeviceId(), &metricsDevice);
|
||||
openMetricsSubDeviceFromAdapter(pAdapter, subDeviceImp->getPhysicalSubDeviceId(), &metricsDevice);
|
||||
subDeviceMetricEnumeraion.pAdapter = pAdapter;
|
||||
if (metricsDevice == nullptr) {
|
||||
NEO::printDebugString(NEO::DebugManager.flags.PrintDebugMessages.get(), stderr, "unable to open metrics device %u\n", i);
|
||||
@@ -184,7 +184,7 @@ ze_result_t MetricEnumeration::openMetricsDiscovery() {
|
||||
subDeviceMetricEnumeraion.readGlobalSymbol(globalSymbolOaMaxBufferSize.data(), maximumOaBufferSize);
|
||||
}
|
||||
|
||||
pAdapter->OpenMetricsDevice(&pMetricsDevice);
|
||||
openMetricsDeviceFromAdapter(pAdapter, &pMetricsDevice);
|
||||
if (pMetricsDevice == nullptr) {
|
||||
NEO::printDebugString(NEO::DebugManager.flags.PrintDebugMessages.get(), stderr, "unable to open metrics device %u\n", 0);
|
||||
cleanupMetricsDiscovery();
|
||||
@@ -196,10 +196,10 @@ ze_result_t MetricEnumeration::openMetricsDiscovery() {
|
||||
const uint32_t subDeviceIndex = deviceImp.getPhysicalSubDeviceId();
|
||||
if (subDeviceIndex == 0) {
|
||||
// Open metrics device for root device or sub device with index 0.
|
||||
pAdapter->OpenMetricsDevice(&pMetricsDevice);
|
||||
openMetricsDeviceFromAdapter(pAdapter, &pMetricsDevice);
|
||||
} else {
|
||||
// Open metrics device for a given sub device index.
|
||||
pAdapter->OpenMetricsSubDevice(subDeviceIndex, &pMetricsDevice);
|
||||
openMetricsSubDeviceFromAdapter(pAdapter, subDeviceIndex, &pMetricsDevice);
|
||||
}
|
||||
|
||||
if (pMetricsDevice == nullptr) {
|
||||
@@ -238,6 +238,7 @@ ze_result_t MetricEnumeration::cleanupMetricsDiscovery() {
|
||||
delete metricGroups[i];
|
||||
}
|
||||
metricGroups.clear();
|
||||
cleanupExtendedMetricInformation();
|
||||
|
||||
if (hMetricsDiscovery != nullptr) {
|
||||
if (pAdapterGroup != nullptr) {
|
||||
@@ -312,7 +313,7 @@ ze_result_t MetricEnumeration::cacheMetricInformation() {
|
||||
// 1. Iterate over concurrent groups.
|
||||
MetricsDiscovery::IConcurrentGroup_1_5 *pConcurrentGroup = nullptr;
|
||||
for (uint32_t i = 0; i < pMetricsDeviceParams->ConcurrentGroupsCount; ++i) {
|
||||
pConcurrentGroup = pMetricsDevice->GetConcurrentGroup(i);
|
||||
pConcurrentGroup = getConcurrentGroupFromDevice(pMetricsDevice, i);
|
||||
DEBUG_BREAK_IF(pConcurrentGroup == nullptr);
|
||||
|
||||
MetricsDiscovery::TConcurrentGroupParams_1_0 *pConcurrentGroupParams =
|
||||
@@ -334,6 +335,7 @@ ze_result_t MetricEnumeration::cacheMetricInformation() {
|
||||
cacheMetricGroup(*pMetricSet, *pConcurrentGroup, i,
|
||||
ZET_METRIC_GROUP_SAMPLING_TYPE_FLAG_EVENT_BASED);
|
||||
}
|
||||
cacheExtendedMetricInformation(*pConcurrentGroup, i);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -39,6 +39,37 @@ struct MetricEnumeration {
|
||||
|
||||
MetricsDiscovery::IMetricsDevice_1_5 *getMdapiDevice() { return pMetricsDevice; }
|
||||
MetricsDiscovery::IAdapter_1_9 *getMdapiAdapter() { return pAdapter; }
|
||||
virtual MetricsDiscovery::IAdapter_1_9 *getAdapterFromAdapterGroup(
|
||||
MetricsDiscovery::IAdapterGroup_1_9 *adapterGroup,
|
||||
uint32_t index) {
|
||||
UNRECOVERABLE_IF(pAdapterGroup == nullptr);
|
||||
UNRECOVERABLE_IF(pAdapterGroup->GetAdapter(index) == nullptr);
|
||||
return pAdapterGroup->GetAdapter(index);
|
||||
}
|
||||
virtual const MetricsDiscovery::TAdapterGroupParams_1_6 *getAdapterGroupParams(MetricsDiscovery::IAdapterGroup_1_9 *adapterGroup) {
|
||||
return adapterGroup->GetParams();
|
||||
}
|
||||
virtual const MetricsDiscovery::TAdapterParams_1_9 *getAdapterParams(
|
||||
MetricsDiscovery::IAdapter_1_9 *pAdapter) {
|
||||
return pAdapter->GetParams();
|
||||
}
|
||||
|
||||
virtual void openMetricsSubDeviceFromAdapter(MetricsDiscovery::IAdapter_1_9 *pAdapter,
|
||||
const uint32_t subDeviceIndex, MetricsDiscovery::IMetricsDevice_1_5 **metricsDevice) {
|
||||
pAdapter->OpenMetricsSubDevice(subDeviceIndex, metricsDevice);
|
||||
}
|
||||
|
||||
virtual void openMetricsDeviceFromAdapter(
|
||||
MetricsDiscovery::IAdapter_1_9 *pAdapter,
|
||||
MetricsDiscovery::IMetricsDevice_1_5 **metricsDevice) {
|
||||
pAdapter->OpenMetricsDevice(metricsDevice);
|
||||
}
|
||||
|
||||
virtual MetricsDiscovery::IConcurrentGroup_1_5 *getConcurrentGroupFromDevice(
|
||||
MetricsDiscovery::IMetricsDevice_1_5 *metricDevice,
|
||||
uint32_t index) {
|
||||
return metricDevice->GetConcurrentGroup(index);
|
||||
}
|
||||
|
||||
protected:
|
||||
ze_result_t initialize();
|
||||
@@ -63,6 +94,11 @@ struct MetricEnumeration {
|
||||
getMetricType(const MetricsDiscovery::TInformationType sourceInformationType) const;
|
||||
zet_value_type_t
|
||||
getMetricResultType(const MetricsDiscovery::TMetricResultType sourceMetricResultType) const;
|
||||
virtual ze_result_t cacheExtendedMetricInformation(
|
||||
MetricsDiscovery::IConcurrentGroup_1_5 &pConcurrentGroup,
|
||||
const uint32_t domain) { return ZE_RESULT_SUCCESS; };
|
||||
|
||||
virtual void cleanupExtendedMetricInformation() {}
|
||||
|
||||
protected:
|
||||
OaMetricSourceImp &metricSource;
|
||||
|
||||
@@ -48,15 +48,15 @@ MetricsDiscovery::IAdapter_1_9 *MetricEnumeration::getMetricsAdapter() {
|
||||
UNRECOVERABLE_IF(getAdapterId(major, minor) == false);
|
||||
|
||||
// Enumerate metrics discovery adapters.
|
||||
for (uint32_t index = 0, count = pAdapterGroup->GetParams()->AdapterCount;
|
||||
for (uint32_t index = 0, count = getAdapterGroupParams(pAdapterGroup)->AdapterCount;
|
||||
index < count;
|
||||
++index) {
|
||||
|
||||
UNRECOVERABLE_IF(pAdapterGroup->GetAdapter(index) == nullptr);
|
||||
UNRECOVERABLE_IF(pAdapterGroup->GetAdapter(index)->GetParams() == nullptr);
|
||||
|
||||
auto adapter = pAdapterGroup->GetAdapter(index);
|
||||
auto adapterParams = adapter->GetParams();
|
||||
auto adapter = getAdapterFromAdapterGroup(pAdapterGroup, index);
|
||||
auto adapterParams = getAdapterParams(adapter);
|
||||
|
||||
const bool validAdapterInfo = adapterParams->SystemId.Type == MetricsDiscovery::ADAPTER_ID_TYPE_LUID;
|
||||
const bool validAdapterMatch = (adapterParams->SystemId.Luid.HighPart == major) &&
|
||||
|
||||
Reference in New Issue
Block a user