feature: Add FsAccess and Derived class in Sysman Kmd Interface

- The FsAccess, ProcFsAccess and SysfsAccess classes have been added in
a file in the Sysman Shared directory. The instances of these classes
are maintained in the Sysman Kmd Interface classes.
- Added functions for opendir, readdir and closedir in the shared code.
- Added a ULT in the sysman directory to cover these new functions from
the shared code.

Related-To: LOCI-4689

Signed-off-by: Bari, Pratik <pratik.bari@intel.com>
This commit is contained in:
Bari, Pratik
2023-08-09 09:03:06 +00:00
committed by Compute-Runtime-Automation
parent e77e49853b
commit f9e4381c1e
15 changed files with 879 additions and 93 deletions

View File

@@ -11,15 +11,12 @@
#include "shared/source/device/device.h"
#include "shared/source/helpers/hw_info.h"
#include "level_zero/sysman/source/shared/linux/sysman_kmd_interface.h"
#include "level_zero/tools/source/sysman/linux/os_sysman_imp.h"
#include "igfxfmid.h"
#include <cmath>
using namespace L0::Sysman;
namespace L0 {
const bool LinuxFrequencyImp::canControl = true; // canControl is true on i915 (GEN9 Hardcode)
@@ -387,37 +384,46 @@ ze_result_t LinuxFrequencyImp::getMinVal(double &minVal) {
}
void LinuxFrequencyImp::init() {
const std::string baseDir = pSysmanKmdInterface->getBasePath(subdeviceId);
bool baseDirectoryExists = false;
const std::string baseDir = "gt/gt" + std::to_string(subdeviceId) + "/";
if (pSysfsAccess->directoryExists(baseDir)) {
baseDirectoryExists = true;
minFreqFile = baseDir + "rps_min_freq_mhz";
minDefaultFreqFile = baseDir + ".defaults/rps_min_freq_mhz";
maxFreqFile = baseDir + "rps_max_freq_mhz";
boostFreqFile = baseDir + "rps_boost_freq_mhz";
maxDefaultFreqFile = baseDir + ".defaults/rps_max_freq_mhz";
requestFreqFile = baseDir + "punit_req_freq_mhz";
tdpFreqFile = baseDir + "rapl_PL1_freq_mhz";
actualFreqFile = baseDir + "rps_act_freq_mhz";
efficientFreqFile = baseDir + "rps_RP1_freq_mhz";
maxValFreqFile = baseDir + "rps_RP0_freq_mhz";
minValFreqFile = baseDir + "rps_RPn_freq_mhz";
throttleReasonStatusFile = baseDir + "throttle_reason_status";
throttleReasonPL1File = baseDir + "throttle_reason_pl1";
throttleReasonPL2File = baseDir + "throttle_reason_pl2";
throttleReasonPL4File = baseDir + "throttle_reason_pl4";
throttleReasonThermalFile = baseDir + "throttle_reason_thermal";
} else {
minFreqFile = "gt_min_freq_mhz";
maxFreqFile = "gt_max_freq_mhz";
boostFreqFile = "gt_boost_freq_mhz";
requestFreqFile = "gt_cur_freq_mhz";
tdpFreqFile = "rapl_PL1_freq_mhz";
actualFreqFile = "gt_act_freq_mhz";
efficientFreqFile = "gt_RP1_freq_mhz";
maxValFreqFile = "gt_RP0_freq_mhz";
minValFreqFile = "gt_RPn_freq_mhz";
throttleReasonStatusFile = "gt_throttle_reason_status";
throttleReasonPL1File = "gt_throttle_reason_status_pl1";
throttleReasonPL2File = "gt_throttle_reason_status_pl2";
throttleReasonPL4File = "gt_throttle_reason_status_pl4";
throttleReasonThermalFile = "gt_throttle_reason_status_thermal";
}
minFreqFile = pSysmanKmdInterface->getSysfsFilePath(SysfsName::sysfsNameMinFrequency, subdeviceId, baseDirectoryExists);
minDefaultFreqFile = pSysmanKmdInterface->getSysfsFilePath(SysfsName::sysfsNameMinDefaultFrequency, subdeviceId, baseDirectoryExists);
maxFreqFile = pSysmanKmdInterface->getSysfsFilePath(SysfsName::sysfsNameMaxFrequency, subdeviceId, baseDirectoryExists);
maxDefaultFreqFile = pSysmanKmdInterface->getSysfsFilePath(SysfsName::sysfsNameMaxDefaultFrequency, subdeviceId, baseDirectoryExists);
boostFreqFile = pSysmanKmdInterface->getSysfsFilePath(SysfsName::sysfsNameBoostFrequency, subdeviceId, baseDirectoryExists);
requestFreqFile = pSysmanKmdInterface->getSysfsFilePath(SysfsName::sysfsNameCurrentFrequency, subdeviceId, baseDirectoryExists);
tdpFreqFile = pSysmanKmdInterface->getSysfsFilePath(SysfsName::sysfsNameTdpFrequency, subdeviceId, baseDirectoryExists);
actualFreqFile = pSysmanKmdInterface->getSysfsFilePath(SysfsName::sysfsNameActualFrequency, subdeviceId, baseDirectoryExists);
efficientFreqFile = pSysmanKmdInterface->getSysfsFilePath(SysfsName::sysfsNameEfficientFrequency, subdeviceId, baseDirectoryExists);
maxValFreqFile = pSysmanKmdInterface->getSysfsFilePath(SysfsName::sysfsNameMaxValueFrequency, subdeviceId, baseDirectoryExists);
minValFreqFile = pSysmanKmdInterface->getSysfsFilePath(SysfsName::sysfsNameMinValueFrequency, subdeviceId, baseDirectoryExists);
throttleReasonStatusFile = pSysmanKmdInterface->getSysfsFilePath(SysfsName::sysfsNameThrottleReasonStatus, subdeviceId, baseDirectoryExists);
throttleReasonPL1File = pSysmanKmdInterface->getSysfsFilePath(SysfsName::sysfsNameThrottleReasonPL1, subdeviceId, baseDirectoryExists);
throttleReasonPL2File = pSysmanKmdInterface->getSysfsFilePath(SysfsName::sysfsNameThrottleReasonPL2, subdeviceId, baseDirectoryExists);
throttleReasonPL4File = pSysmanKmdInterface->getSysfsFilePath(SysfsName::sysfsNameThrottleReasonPL4, subdeviceId, baseDirectoryExists);
throttleReasonThermalFile = pSysmanKmdInterface->getSysfsFilePath(SysfsName::sysfsNameThrottleReasonThermal, subdeviceId, baseDirectoryExists);
}
LinuxFrequencyImp::LinuxFrequencyImp(OsSysman *pOsSysman, ze_bool_t onSubdevice, uint32_t subdeviceId, zes_freq_domain_t frequencyDomainNumber) : isSubdevice(onSubdevice), subdeviceId(subdeviceId), frequencyDomainNumber(frequencyDomainNumber) {
LinuxSysmanImp *pLinuxSysmanImp = static_cast<LinuxSysmanImp *>(pOsSysman);
pSysfsAccess = &pLinuxSysmanImp->getSysfsAccess();
pDevice = Device::fromHandle(pLinuxSysmanImp->getSysmanDeviceImp()->hCoreDevice);
pSysmanKmdInterface = pLinuxSysmanImp->getSysmanKmdInterface();
init();
}

View File

@@ -12,11 +12,6 @@
#include "level_zero/tools/source/sysman/frequency/os_frequency.h"
#include "level_zero/tools/source/sysman/linux/fs_access.h"
namespace L0 {
namespace Sysman {
class SysmanKmdInterface;
} // namespace Sysman
} // namespace L0
namespace L0 {
class LinuxFrequencyImp : public OsFrequency, NEO::NonCopyableOrMovableClass {
@@ -43,7 +38,6 @@ class LinuxFrequencyImp : public OsFrequency, NEO::NonCopyableOrMovableClass {
~LinuxFrequencyImp() override = default;
protected:
L0::Sysman::SysmanKmdInterface *pSysmanKmdInterface = nullptr;
SysfsAccess *pSysfsAccess = nullptr;
ze_result_t getMin(double &min);
ze_result_t setMin(double min);

View File

@@ -16,7 +16,6 @@
#include "level_zero/core/source/device/device_imp.h"
#include "level_zero/core/source/driver/driver_handle_imp.h"
#include "level_zero/sysman/source/shared/linux/sysman_kmd_interface.h"
#include "level_zero/tools/source/sysman/firmware_util/firmware_util.h"
#include "level_zero/tools/source/sysman/linux/fs_access.h"
#include "level_zero/tools/source/sysman/pci/linux/os_pci_imp.h"
@@ -55,8 +54,6 @@ ze_result_t LinuxSysmanImp::init() {
DEBUG_BREAK_IF(nullptr == pPmuInterface);
pSysmanKmdInterface = L0::Sysman::SysmanKmdInterface::create(getDrm());
getMemoryType();
return createPmtHandles();
}

View File

@@ -22,12 +22,6 @@
#include <map>
#include <mutex>
namespace L0 {
namespace Sysman {
class SysmanKmdInterface;
} // namespace Sysman
} // namespace L0
namespace L0 {
class PmuInterface;
@@ -92,10 +86,8 @@ class LinuxSysmanImp : public OsSysman, NEO::NonCopyableOrMovableClass {
bool isMemoryDiagnostics = false;
Device *pDevice = nullptr;
std::string gtDevicePath;
L0::Sysman::SysmanKmdInterface *getSysmanKmdInterface() { return pSysmanKmdInterface.get(); }
protected:
std::unique_ptr<L0::Sysman::SysmanKmdInterface> pSysmanKmdInterface;
FsAccess *pFsAccess = nullptr;
ProcfsAccess *pProcfsAccess = nullptr;
SysfsAccess *pSysfsAccess = nullptr;