Update zesFrequencySetRange implementation

While setting max frequency also clamp boost frequency
to max frequency.
Clamping boost frequency to max, will ensure that with workload
execution, max frequency that we are setting would not be violated.

Related-To: LOCI-3075

Signed-off-by: Jitendra Sharma <jitendra.sharma@intel.com>
This commit is contained in:
Jitendra Sharma
2022-04-22 11:57:06 +00:00
committed by Compute-Runtime-Automation
parent 54eee2a88b
commit 34028355af
6 changed files with 31 additions and 17 deletions

View File

@@ -227,7 +227,7 @@ ze_result_t LinuxFrequencyImp::setMax(double max) {
}
return result;
}
return ZE_RESULT_SUCCESS;
return pSysfsAccess->write(boostFreqFile, max);
}
ze_result_t LinuxFrequencyImp::getRequest(double &request) {
@@ -319,6 +319,7 @@ void LinuxFrequencyImp::init() {
if (pSysfsAccess->directoryExists(baseDir)) {
minFreqFile = baseDir + "rps_min_freq_mhz";
maxFreqFile = baseDir + "rps_max_freq_mhz";
boostFreqFile = baseDir + "rps_boost_freq_mhz";
requestFreqFile = baseDir + "punit_req_freq_mhz";
tdpFreqFile = baseDir + "rapl_PL1_freq_mhz";
actualFreqFile = baseDir + "rps_act_freq_mhz";
@@ -333,6 +334,7 @@ void LinuxFrequencyImp::init() {
} 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";

View File

@@ -54,6 +54,7 @@ class LinuxFrequencyImp : public OsFrequency, NEO::NonCopyableOrMovableClass {
private:
std::string minFreqFile;
std::string maxFreqFile;
std::string boostFreqFile;
std::string requestFreqFile;
std::string tdpFreqFile;
std::string actualFreqFile;

View File

@@ -245,7 +245,7 @@ ze_result_t LinuxFrequencyImp::setMax(double max) {
}
return result;
}
return ZE_RESULT_SUCCESS;
return pSysfsAccess->write(boostFreqFile, max);
}
ze_result_t LinuxFrequencyImp::getRequest(double &request) {
@@ -338,6 +338,7 @@ void LinuxFrequencyImp::init() {
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";
@@ -353,6 +354,7 @@ void LinuxFrequencyImp::init() {
} 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";

View File

@@ -55,6 +55,7 @@ class LinuxFrequencyImp : public OsFrequency, NEO::NonCopyableOrMovableClass {
private:
std::string minFreqFile;
std::string maxFreqFile;
std::string boostFreqFile;
std::string minDefaultFreqFile;
std::string maxDefaultFreqFile;
std::string requestFreqFile;

View File

@@ -13,6 +13,7 @@ namespace ult {
const std::string minFreqFile("gt/gt0/rps_min_freq_mhz");
const std::string maxFreqFile("gt/gt0/rps_max_freq_mhz");
const std::string boostFreqFile("gt/gt0/rps_boost_freq_mhz");
const std::string requestFreqFile("gt/gt0/punit_req_freq_mhz");
const std::string tdpFreqFile("gt/gt0/rapl_PL1_freq_mhz");
const std::string actualFreqFile("gt/gt0/rps_act_freq_mhz");
@@ -27,6 +28,7 @@ const std::string throttleReasonThermalFile("gt/gt0/throttle_reason_thermal");
const std::string minFreqFileLegacy("gt_min_freq_mhz");
const std::string maxFreqFileLegacy("gt_max_freq_mhz");
const std::string boostFreqFileLegacy("gt_boost_freq_mhz");
const std::string requestFreqFileLegacy("gt_cur_freq_mhz");
const std::string tdpFreqFileLegacy("rapl_PL1_freq_mhz");
const std::string actualFreqFileLegacy("gt_act_freq_mhz");
@@ -45,6 +47,7 @@ template <>
struct Mock<FrequencySysfsAccess> : public FrequencySysfsAccess {
double mockMin = 0;
double mockMax = 0;
double mockBoost = 0;
double mockRequest = 0;
double mockTdp = 0;
double mockActual = 0;
@@ -265,28 +268,26 @@ struct Mock<FrequencySysfsAccess> : public FrequencySysfsAccess {
ze_result_t setValLegacy(const std::string file, const double val) {
if (file.compare(minFreqFileLegacy) == 0) {
mockMin = val;
}
if (file.compare(maxFreqFileLegacy) == 0) {
} else if (file.compare(maxFreqFileLegacy) == 0) {
mockMax = val;
}
if (file.compare(requestFreqFileLegacy) == 0) {
} else if (file.compare(boostFreqFileLegacy) == 0) {
mockBoost = val;
} else if (file.compare(requestFreqFileLegacy) == 0) {
mockRequest = val;
}
if (file.compare(tdpFreqFileLegacy) == 0) {
} else if (file.compare(tdpFreqFileLegacy) == 0) {
mockTdp = val;
}
if (file.compare(actualFreqFileLegacy) == 0) {
} else if (file.compare(actualFreqFileLegacy) == 0) {
mockActual = val;
}
if (file.compare(efficientFreqFileLegacy) == 0) {
} else if (file.compare(efficientFreqFileLegacy) == 0) {
mockEfficient = val;
}
if (file.compare(maxValFreqFileLegacy) == 0) {
} else if (file.compare(maxValFreqFileLegacy) == 0) {
mockMaxVal = val;
}
if (file.compare(minValFreqFileLegacy) == 0) {
} else if (file.compare(minValFreqFileLegacy) == 0) {
mockMinVal = val;
} else {
return ZE_RESULT_ERROR_UNSUPPORTED_FEATURE;
}
return ZE_RESULT_SUCCESS;
}
@@ -325,6 +326,9 @@ struct Mock<FrequencySysfsAccess> : public FrequencySysfsAccess {
if (file.compare(maxFreqFile) == 0) {
mockMax = val;
}
if (file.compare(boostFreqFile) == 0) {
mockBoost = val;
}
if (file.compare(requestFreqFile) == 0) {
mockRequest = val;
}

View File

@@ -277,6 +277,7 @@ TEST_F(SysmanDeviceFrequencyFixture, GivenValidFrequencyHandleWhenCallingzesFreq
EXPECT_EQ(ZE_RESULT_SUCCESS, zesFrequencyGetRange(handle, &limits));
EXPECT_DOUBLE_EQ(minFreq, limits.min);
EXPECT_DOUBLE_EQ(newMax, limits.max);
EXPECT_DOUBLE_EQ(pSysfsAccess->mockBoost, limits.max);
}
}
@@ -296,6 +297,7 @@ TEST_F(SysmanDeviceFrequencyFixture, GivenValidFrequencyHandleWhenCallingzesFreq
EXPECT_EQ(ZE_RESULT_SUCCESS, zesFrequencyGetRange(handle, &limits));
EXPECT_DOUBLE_EQ(newMin, limits.min);
EXPECT_DOUBLE_EQ(maxFreq, limits.max);
EXPECT_DOUBLE_EQ(pSysfsAccess->mockBoost, limits.max);
}
}
@@ -580,7 +582,7 @@ TEST_F(SysmanDeviceFrequencyFixture, GivenValidFrequencyHandleWhenCallingzesFreq
EXPECT_EQ(setAllThrottleReasonsExceptPL2, state.throttleReasons);
}
TEST_F(SysmanDeviceFrequencyFixture, GivenValidFrequencyHandleWhenCallingzesFrequencyGetRangeWithLegacyPathThenVerifyzesFrequencyGetRangeTestCallSucceeds) {
TEST_F(SysmanDeviceFrequencyFixture, GivenValidFrequencyHandleWhenCallingzesFrequencySetRangeWithLegacyPathThenVerifyzesFrequencySetRangeTestCallSucceeds) {
ON_CALL(*pSysfsAccess.get(), read(_, Matcher<double &>(_)))
.WillByDefault(::testing::Invoke(pSysfsAccess.get(), &Mock<FrequencySysfsAccess>::getValLegacy));
ON_CALL(*pSysfsAccess.get(), write(_, _))
@@ -602,6 +604,8 @@ TEST_F(SysmanDeviceFrequencyFixture, GivenValidFrequencyHandleWhenCallingzesFreq
EXPECT_EQ(ZE_RESULT_SUCCESS, zesFrequencyGetRange(handle, &limits));
EXPECT_DOUBLE_EQ(minFreqLegacy, limits.min);
EXPECT_DOUBLE_EQ(maxFreqLegacy, limits.max);
EXPECT_EQ(ZE_RESULT_SUCCESS, zesFrequencySetRange(handle, &limits));
EXPECT_DOUBLE_EQ(pSysfsAccess->mockBoost, limits.max);
}
}