Power APIs boilerplate for Level Zero Sysman

- boilerplate for following power APIs
-zetSysmanPowerGet
-zetSysmanPowerGetProperties
-zetSysmanPowerGetEnergyCounter
-zetSysmanPowerGetLimits
-zetSysmanPowerSetLimits
-zetSysmanPowerGetEnergyThreshold
-zetSysmanPowerSetEnergyThreshold

Change-Id: I6350d869da9a64424b197ce16ac008224405a65d
Signed-off-by: Konda <saikishore.konda@intel.com>
Signed-off-by: SaiKishore Konda <saikishore.konda@intel.com>
This commit is contained in:
Konda
2020-04-28 12:10:46 +05:30
committed by sys_ocldev
parent 425fd9bf74
commit 610662dbd8
14 changed files with 324 additions and 7 deletions

View File

@@ -0,0 +1,25 @@
#
# Copyright (C) 2020 Intel Corporation
#
# SPDX-License-Identifier: MIT
#
set(L0_SRCS_TOOLS_SYSMAN_POWER
${CMAKE_CURRENT_SOURCE_DIR}/power.cpp
${CMAKE_CURRENT_SOURCE_DIR}/power.h
${CMAKE_CURRENT_SOURCE_DIR}/power_imp.cpp
${CMAKE_CURRENT_SOURCE_DIR}/power_imp.h
${CMAKE_CURRENT_SOURCE_DIR}/os_power.h
)
target_sources(${L0_STATIC_LIB_NAME}
PRIVATE
${L0_SRCS_TOOLS_SYSMAN_POWER}
${CMAKE_CURRENT_SOURCE_DIR}/CMakeLists.txt
)
add_subdirectories()
# Make our source files visible to parent
set_property(GLOBAL PROPERTY L0_SRCS_TOOLS_SYSMAN_POWER ${L0_SRCS_TOOLS_SYSMAN_POWER})

View File

@@ -0,0 +1,18 @@
#
# Copyright (C) 2020 Intel Corporation
#
# SPDX-License-Identifier: MIT
#
set(L0_SRCS_TOOLS_SYSMAN_POWER_LINUX
${CMAKE_CURRENT_SOURCE_DIR}${BRANCH_DIR_SUFFIX}/os_power_imp.cpp
)
if(UNIX)
target_sources(${L0_STATIC_LIB_NAME}
PRIVATE
${L0_SRCS_TOOLS_SYSMAN_POWER_LINUX})
endif()
# Make our source files visible to parent
set_property(GLOBAL PROPERTY L0_SRCS_TOOLS_SYSMAN_POWER_LINUX ${L0_SRCS_TOOLS_SYSMAN_POWER_LINUX})

View File

@@ -0,0 +1,35 @@
/*
* Copyright (C) 2020 Intel Corporation
*
* SPDX-License-Identifier: MIT
*
*/
#include "shared/source/helpers/non_copyable_or_moveable.h"
#include "level_zero/tools/source/sysman/power/os_power.h"
#include "sysman/linux/os_sysman_imp.h"
namespace L0 {
class LinuxPowerImp : public OsPower, public NEO::NonCopyableClass {
public:
LinuxPowerImp(OsSysman *pOsSysman);
~LinuxPowerImp() override = default;
private:
SysfsAccess *pSysfsAccess = nullptr;
};
LinuxPowerImp::LinuxPowerImp(OsSysman *pOsSysman) {
LinuxSysmanImp *pLinuxSysmanImp = static_cast<LinuxSysmanImp *>(pOsSysman);
pSysfsAccess = &pLinuxSysmanImp->getSysfsAccess();
}
OsPower *OsPower::create(OsSysman *pOsSysman) {
LinuxPowerImp *pLinuxPowerImp = new LinuxPowerImp(pOsSysman);
return static_cast<OsPower *>(pLinuxPowerImp);
}
} // namespace L0

View File

@@ -0,0 +1,21 @@
/*
* Copyright (C) 2020 Intel Corporation
*
* SPDX-License-Identifier: MIT
*
*/
#pragma once
#include <level_zero/zet_api.h>
namespace L0 {
struct OsSysman;
class OsPower {
public:
static OsPower *create(OsSysman *pOsSysman);
virtual ~OsPower() = default;
};
} // namespace L0

View File

@@ -0,0 +1,45 @@
/*
* Copyright (C) 2020 Intel Corporation
*
* SPDX-License-Identifier: MIT
*
*/
#include "level_zero/tools/source/sysman/power/power.h"
#include "level_zero/tools/source/sysman/power/power_imp.h"
namespace L0 {
PowerHandleContext::~PowerHandleContext() {
for (Power *pPower : handleList) {
delete pPower;
}
}
void PowerHandleContext::init() {
Power *pPower = new PowerImp(pOsSysman);
if (pPower->initSuccess == true) {
handleList.push_back(pPower);
} else {
delete pPower;
}
}
ze_result_t PowerHandleContext::powerGet(uint32_t *pCount, zet_sysman_pwr_handle_t *phPower) {
if (nullptr == phPower) {
*pCount = static_cast<uint32_t>(handleList.size());
return ZE_RESULT_SUCCESS;
}
uint32_t i = 0;
for (Power *power : handleList) {
if (i >= *pCount) {
break;
}
phPower[i++] = power->toHandle();
}
*pCount = i;
return ZE_RESULT_SUCCESS;
}
} // namespace L0

View File

@@ -0,0 +1,47 @@
/*
* Copyright (C) 2020 Intel Corporation
*
* SPDX-License-Identifier: MIT
*
*/
#pragma once
#include <level_zero/zet_api.h>
#include <vector>
struct _zet_sysman_pwr_handle_t {
virtual ~_zet_sysman_pwr_handle_t() = default;
};
namespace L0 {
struct OsSysman;
class Power : _zet_sysman_pwr_handle_t {
public:
virtual ze_result_t powerGetProperties(zet_power_properties_t *pProperties) = 0;
virtual ze_result_t powerGetEnergyCounter(zet_power_energy_counter_t *pEnergy) = 0;
virtual ze_result_t powerGetLimits(zet_power_sustained_limit_t *pSustained, zet_power_burst_limit_t *pBurst, zet_power_peak_limit_t *pPeak) = 0;
virtual ze_result_t powerSetLimits(const zet_power_sustained_limit_t *pSustained, const zet_power_burst_limit_t *pBurst, const zet_power_peak_limit_t *pPeak) = 0;
virtual ze_result_t powerGetEnergyThreshold(zet_energy_threshold_t *pThreshold) = 0;
virtual ze_result_t powerSetEnergyThreshold(double threshold) = 0;
static Power *fromHandle(zet_sysman_pwr_handle_t handle) {
return static_cast<Power *>(handle);
}
inline zet_sysman_pwr_handle_t toHandle() { return this; }
bool initSuccess = false;
};
struct PowerHandleContext {
PowerHandleContext(OsSysman *pOsSysman) : pOsSysman(pOsSysman){};
~PowerHandleContext();
void init();
ze_result_t powerGet(uint32_t *pCount, zet_sysman_pwr_handle_t *phPower);
OsSysman *pOsSysman = nullptr;
std::vector<Power *> handleList;
};
} // namespace L0

View File

@@ -0,0 +1,51 @@
/*
* Copyright (C) 2020 Intel Corporation
*
* SPDX-License-Identifier: MIT
*
*/
#include "level_zero/tools/source/sysman/power/power_imp.h"
#include "shared/source/helpers/debug_helpers.h"
#include "level_zero/core/source/device/device.h"
namespace L0 {
ze_result_t PowerImp::powerGetProperties(zet_power_properties_t *pProperties) {
return ZE_RESULT_ERROR_UNSUPPORTED_FEATURE;
}
ze_result_t PowerImp::powerGetEnergyCounter(zet_power_energy_counter_t *pEnergy) {
return ZE_RESULT_ERROR_UNSUPPORTED_FEATURE;
}
ze_result_t PowerImp::powerGetLimits(zet_power_sustained_limit_t *pSustained, zet_power_burst_limit_t *pBurst, zet_power_peak_limit_t *pPeak) {
return ZE_RESULT_ERROR_UNSUPPORTED_FEATURE;
}
ze_result_t PowerImp::powerSetLimits(const zet_power_sustained_limit_t *pSustained, const zet_power_burst_limit_t *pBurst, const zet_power_peak_limit_t *pPeak) {
return ZE_RESULT_ERROR_UNSUPPORTED_FEATURE;
}
ze_result_t PowerImp::powerGetEnergyThreshold(zet_energy_threshold_t *pThreshold) {
return ZE_RESULT_ERROR_UNSUPPORTED_FEATURE;
}
ze_result_t PowerImp::powerSetEnergyThreshold(double threshold) {
return ZE_RESULT_ERROR_UNSUPPORTED_FEATURE;
}
PowerImp::PowerImp(OsSysman *pOsSysman) {
pOsPower = OsPower::create(pOsSysman);
UNRECOVERABLE_IF(nullptr == pOsPower);
init();
}
PowerImp::~PowerImp() {
if (nullptr != pOsPower) {
delete pOsPower;
pOsPower = nullptr;
}
}
} // namespace L0

View File

@@ -0,0 +1,31 @@
/*
* Copyright (C) 2020 Intel Corporation
*
* SPDX-License-Identifier: MIT
*
*/
#pragma once
#include "shared/source/helpers/non_copyable_or_moveable.h"
#include "level_zero/tools/source/sysman/power/os_power.h"
#include "level_zero/tools/source/sysman/power/power.h"
#include <level_zero/zet_api.h>
namespace L0 {
class PowerImp : public NEO::NonCopyableClass, public Power {
public:
ze_result_t powerGetProperties(zet_power_properties_t *pProperties) override;
ze_result_t powerGetEnergyCounter(zet_power_energy_counter_t *pEnergy) override;
ze_result_t powerGetLimits(zet_power_sustained_limit_t *pSustained, zet_power_burst_limit_t *pBurst, zet_power_peak_limit_t *pPeak) override;
ze_result_t powerSetLimits(const zet_power_sustained_limit_t *pSustained, const zet_power_burst_limit_t *pBurst, const zet_power_peak_limit_t *pPeak) override;
ze_result_t powerGetEnergyThreshold(zet_energy_threshold_t *pThreshold) override;
ze_result_t powerSetEnergyThreshold(double threshold) override;
PowerImp() = default;
PowerImp(OsSysman *pOsSysman);
~PowerImp() override;
OsPower *pOsPower = nullptr;
void init() {}
};
} // namespace L0

View File

@@ -0,0 +1,18 @@
#
# Copyright (C) 2020 Intel Corporation
#
# SPDX-License-Identifier: MIT
#
set(L0_SRCS_TOOLS_SYSMAN_POWER_WINDOWS
${CMAKE_CURRENT_SOURCE_DIR}/os_power_imp.cpp
)
if(WIN32)
target_sources(${L0_STATIC_LIB_NAME}
PRIVATE
${L0_SRCS_TOOLS_SYSMAN_POWER_WINDOWS})
endif()
# Make our source files visible to parent
set_property(GLOBAL PROPERTY L0_SRCS_TOOLS_SYSMAN_POWER_WINDOWS ${L0_SRCS_TOOLS_SYSMAN_POWER_WINDOWS})

View File

@@ -0,0 +1,19 @@
/*
* Copyright (C) 2020 Intel Corporation
*
* SPDX-License-Identifier: MIT
*
*/
#include "sysman/power/os_power.h"
namespace L0 {
class WddmPowerImp : public OsPower {};
OsPower *OsPower::create(OsSysman *pOsSysman) {
WddmPowerImp *pWddmPowerImp = new WddmPowerImp();
return static_cast<OsPower *>(pWddmPowerImp);
}
} // namespace L0

View File

@@ -10,6 +10,7 @@
#include "level_zero/tools/source/sysman/frequency/frequency.h"
#include "level_zero/tools/source/sysman/memory/memory.h"
#include "level_zero/tools/source/sysman/pci/pci.h"
#include "level_zero/tools/source/sysman/power/power.h"
#include "level_zero/tools/source/sysman/ras/ras.h"
#include "level_zero/tools/source/sysman/scheduler/scheduler.h"
#include "level_zero/tools/source/sysman/standby/standby.h"

View File

@@ -31,9 +31,11 @@ SysmanImp::SysmanImp(ze_device_handle_t hDevice) {
pEngineHandleContext = new EngineHandleContext(pOsSysman);
pRasHandleContext = new RasHandleContext(pOsSysman);
pTempHandleContext = new TemperatureHandleContext(pOsSysman);
pPowerHandleContext = new PowerHandleContext(pOsSysman);
}
SysmanImp::~SysmanImp() {
freeResource(pPowerHandleContext);
freeResource(pTempHandleContext);
freeResource(pRasHandleContext);
freeResource(pEngineHandleContext);
@@ -66,6 +68,9 @@ void SysmanImp::init() {
if (pTempHandleContext) {
pTempHandleContext->init();
}
if (pPowerHandleContext) {
pPowerHandleContext->init();
}
if (pPci) {
pPci->init();
}
@@ -161,7 +166,7 @@ ze_result_t SysmanImp::pciGetStats(zet_pci_stats_t *pStats) {
}
ze_result_t SysmanImp::powerGet(uint32_t *pCount, zet_sysman_pwr_handle_t *phPower) {
return ZE_RESULT_ERROR_UNSUPPORTED_FEATURE;
return pPowerHandleContext->powerGet(pCount, phPower);
}
ze_result_t SysmanImp::frequencyGet(uint32_t *pCount, zet_sysman_freq_handle_t *phFrequency) {

View File

@@ -38,6 +38,7 @@ struct SysmanImp : Sysman {
EngineHandleContext *pEngineHandleContext = nullptr;
RasHandleContext *pRasHandleContext = nullptr;
TemperatureHandleContext *pTempHandleContext = nullptr;
PowerHandleContext *pPowerHandleContext = nullptr;
ze_result_t deviceGetProperties(zet_sysman_properties_t *pProperties) override;
ze_result_t schedulerGetCurrentMode(zet_sched_mode_t *pMode) override;