feature: supports git SHA logging to log file

Related-To: NEO-11364

Signed-off-by: Kulkarni, Ashwin Kumar <ashwin.kumar.kulkarni@intel.com>
This commit is contained in:
Kulkarni, Ashwin Kumar
2024-05-18 08:54:36 +00:00
committed by Compute-Runtime-Automation
parent 9f4c1b3daf
commit fbb8fa7dea
6 changed files with 72 additions and 28 deletions

View File

@ -20,9 +20,21 @@
#include "level_zero/experimental/source/log_utility/log_manager.h"
#include "level_zero/tools/source/metrics/metric.h"
#include "driver_version.h"
#include <memory>
#include <thread>
#define QTR(a) #a
#define TOSTR(b) QTR(b)
#define LOG_INFO_VERSION_SHA(logType, version, sha) \
auto logger = NEO::LogManager::getInstance()->getLogger(logType); \
if (logger) { \
char logBuffer[256]; \
snprintf(logBuffer, 256, "Level zero driver version and SHA : %s - %s\n", version, sha); \
logger->logInfo(logBuffer); \
}
namespace L0 {
_ze_driver_handle_t *globalDriverHandle;
@ -59,10 +71,8 @@ void DriverImp::initialize(ze_result_t *result) {
executionEnvironment->setDebuggingMode(dbgMode);
}
// spdlog enablement
if ((NEO::debugManager.flags.EnableLogLevel.get() != (uint32_t)NEO::LogLevel::logLevelOff)) {
CREATE_LOGGER(NEO::LogManager::LogType::coreLogger, "coreLogger.log", NEO::debugManager.flags.EnableLogLevel.get());
}
// Logging enablement if opted
initLogger();
if (envVariables.fp64Emulation) {
executionEnvironment->setFP64EmulationEnabled();
@ -101,6 +111,13 @@ void DriverImp::initialize(ze_result_t *result) {
ze_result_t DriverImp::initStatus(ZE_RESULT_ERROR_UNINITIALIZED);
void DriverImp::initLogger() {
if (NEO::LogManager::getLoggingLevel() != (uint32_t)NEO::LogLevel::logLevelOff) {
CREATE_LOGGER(NEO::LogManager::LogType::coreLogger, "coreLogger.log", NEO::LogManager::getLoggingLevel());
LOG_INFO_VERSION_SHA(NEO::LogManager::LogType::coreLogger, TOSTR(NEO_OCL_DRIVER_VERSION), NEO_REVISION);
}
}
ze_result_t DriverImp::driverInit(ze_init_flags_t flags) {
std::call_once(initDriverOnce, [this]() {
ze_result_t result;

View File

@ -1,5 +1,5 @@
/*
* Copyright (C) 2020-2023 Intel Corporation
* Copyright (C) 2020-2024 Intel Corporation
*
* SPDX-License-Identifier: MIT
*
@ -21,6 +21,7 @@ class DriverImp : public Driver {
void initialize(ze_result_t *result) override;
protected:
void initLogger();
std::once_flag initDriverOnce;
static ze_result_t initStatus;
};

View File

@ -7,10 +7,13 @@
#include "linux_log_manager.h"
#include "shared/source/debug_settings/debug_settings_manager.h"
#include <map>
namespace NEO {
std::unique_ptr<LogManager> LogManager::instancePtr = nullptr;
uint32_t LogManager::logLevel = UINT32_MAX;
LogManager *LogManager::getInstance() {
if (instancePtr == nullptr) {
@ -59,6 +62,13 @@ std::unique_ptr<NEO::LinuxLogger> LinuxLogManager::createLoggerByType(LogManager
return pLogger;
}
uint32_t LogManager::getLoggingLevel() {
if (logLevel == UINT32_MAX) {
logLevel = NEO::debugManager.flags.EnableLogLevel.get();
}
return logLevel;
}
std::unique_ptr<NEO::LinuxLogger> LinuxLogManager::prepareLogger() {
return std::make_unique<NEO::LinuxLogger>();
}

View File

@ -37,24 +37,35 @@ class LogManager {
virtual void destroyLogger(LogManager::LogType logType) = 0;
static uint32_t getLoggingLevel();
virtual ~LogManager() = default;
protected:
static std::unique_ptr<LogManager> instancePtr;
static uint32_t logLevel;
};
#define CREATE_LOGGER(logType, filename, logLevel) NEO::LogManager::getInstance()->createLogger(logType, filename, logLevel)
#define LOG_CRITICAL(condition, logType, msg) \
if (condition) { \
if (NEO::debugManager.flags.EnableLogLevel.get() != (uint32_t)NEO::LogLevel::logLevelOff) { \
auto logger = NEO::LogManager::getInstance()->getLogger(logType); \
if (logger) { \
logger->logFatal(msg); \
} \
} \
#define LOG_CRITICAL(condition, logType, msg) \
if (condition) { \
if (NEO::LogManager::getLoggingLevel() != (uint32_t)NEO::LogLevel::logLevelOff) { \
auto logger = NEO::LogManager::getInstance()->getLogger(logType); \
if (logger) { \
logger->logFatal(msg); \
} \
} \
}
#define LOG_CRITICAL_FOR_CORE(condition, msg) LOG_CRITICAL(condition, NEO::LogManager::LogType::coreLogger, msg)
#define LOG_INFO(logType, msg) \
if (NEO::LogManager::getLoggingLevel() != (uint32_t)NEO::LogLevel::logLevelOff) { \
auto logger = NEO::LogManager::getInstance()->getLogger(logType); \
if (logger) { \
logger->logInfo(msg); \
} \
}
} // namespace NEO

View File

@ -9,6 +9,7 @@
namespace NEO {
std::unique_ptr<LogManager> LogManager::instancePtr = nullptr;
uint32_t LogManager::logLevel = UINT32_MAX;
LogManager *LogManager::getInstance() {
if (instancePtr == nullptr) {
@ -29,6 +30,10 @@ NEO::Logger *WinLogManager::getLogger(LogManager::LogType logType) {
return nullptr;
}
uint32_t LogManager::getLoggingLevel() {
return (uint32_t)LogLevel::logLevelOff;
}
void WinLogManager::destroyLogger(LogManager::LogType logType) {
}

View File

@ -54,24 +54,24 @@ else()
endif()
endif()
if(NOT DEFINED NEO_VERSION_BUILD)
set(NEO_VERSION_BUILD 0)
set(NEO_REVISION 0)
else()
find_program(GIT NAMES git)
if(NOT "${GIT}" STREQUAL "GIT-NOTFOUND")
if(IS_DIRECTORY ${NEO_SOURCE_DIR}/.git)
set(GIT_arg --git-dir=${NEO_SOURCE_DIR}/.git rev-parse HEAD)
execute_process(
COMMAND ${GIT} ${GIT_arg}
OUTPUT_VARIABLE NEO_REVISION
OUTPUT_STRIP_TRAILING_WHITESPACE
)
endif()
find_program(GIT NAMES git)
if(NOT "${GIT}" STREQUAL "GIT-NOTFOUND")
if(IS_DIRECTORY ${NEO_SOURCE_DIR}/.git)
set(GIT_arg --git-dir=${NEO_SOURCE_DIR}/.git rev-parse HEAD)
execute_process(
COMMAND ${GIT} ${GIT_arg}
OUTPUT_VARIABLE NEO_REVISION
OUTPUT_STRIP_TRAILING_WHITESPACE
)
endif()
endif()
if(NOT DEFINED NEO_REVISION)
set(NEO_REVISION 0)
set(NEO_REVISION "No git SHA found, compiled outside git folder")
endif()
if(NOT DEFINED NEO_VERSION_BUILD)
set(NEO_VERSION_BUILD 0)
endif()
if(NOT DEFINED NEO_VERSION_HOTFIX)