Commit 953ea877 authored by Brian Geffon's avatar Brian Geffon Committed by Commit Bot

chromeos: Add swap tunable features for ChromeOS.

Adding features for ram_vs_swap_weight and extra_free kernel
tunables.

BUG=chromium:1019806
TESTED=Validated on an octopus device

Change-Id: I681e09ba7cae3deeab69a8833fa068ed09f9eaf7
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1890792Reviewed-by: default avatarSteven Bennetts <stevenjb@chromium.org>
Commit-Queue: Brian Geffon <bgeffon@chromium.org>
Cr-Commit-Position: refs/heads/master@{#710961}
parent ee9e2122
...@@ -17,14 +17,32 @@ const base::Feature kCrOSTuneMinFilelist{"CrOSTuneMinFilelist", ...@@ -17,14 +17,32 @@ const base::Feature kCrOSTuneMinFilelist{"CrOSTuneMinFilelist",
const base::FeatureParam<int> kCrOSMinFilelistMb{&kCrOSTuneMinFilelist, const base::FeatureParam<int> kCrOSMinFilelistMb{&kCrOSTuneMinFilelist,
"CrOSMinFilelistMb", -1}; "CrOSMinFilelistMb", -1};
const base::Feature kCrOSTuneRamVsSwapWeight{"CrOSTuneRamVsSwapWeight",
base::FEATURE_DISABLED_BY_DEFAULT};
const base::FeatureParam<int> kCrOSRamVsSwapWeight{&kCrOSTuneRamVsSwapWeight,
"CrOSRamVsSwapWeight", -1};
const base::Feature kCrOSTuneExtraFree{"CrOSTuneExtraFree",
base::FEATURE_DISABLED_BY_DEFAULT};
const base::FeatureParam<int> kCrOSExtraFreeMb{&kCrOSTuneExtraFree,
"CrOSExtraFreeMb", -1};
namespace { namespace {
constexpr const char kMinFilelist[] = "min_filelist"; constexpr const char kMinFilelist[] = "min_filelist";
constexpr const char kRamVsSwapWeight[] = "ram_vs_swap_weight";
constexpr const char kExtraFree[] = "extra_free";
void OnSwapParameterSet(std::string parameter, void OnSwapParameterSet(std::string parameter,
base::Optional<std::string> res) { base::Optional<std::string> res) {
LOG_IF(ERROR, !res.has_value()) LOG_IF(ERROR, !res.has_value())
<< "Setting swap paramter " << parameter << " failed."; << "Setting swap paramter " << parameter << " failed.";
LOG_IF(ERROR, res.has_value() && !res.value().empty())
<< "Setting swap parameter " << parameter
<< " returned error: " << res.value();
} }
void ConfigureMinFilelistIfEnabled() { void ConfigureMinFilelistIfEnabled() {
...@@ -48,9 +66,54 @@ void ConfigureMinFilelistIfEnabled() { ...@@ -48,9 +66,54 @@ void ConfigureMinFilelistIfEnabled() {
kMinFilelist, min_mb, base::BindOnce(&OnSwapParameterSet, kMinFilelist)); kMinFilelist, min_mb, base::BindOnce(&OnSwapParameterSet, kMinFilelist));
} }
void ConfigureRamVsSwapWeightIfEnabled() {
if (!base::FeatureList::IsEnabled(kCrOSTuneRamVsSwapWeight))
return;
chromeos::DebugDaemonClient* debugd_client =
chromeos::DBusThreadManager::Get()->GetDebugDaemonClient();
CHECK(debugd_client);
int swap_weight = kCrOSRamVsSwapWeight.Get();
if (swap_weight < 0) {
LOG(ERROR) << "Ram vs Swap weight must be greater than or equal to 0, "
"invalid value: "
<< swap_weight;
return;
}
VLOG(1) << "Setting ram vs swap weight to: " << swap_weight;
debugd_client->SetSwapParameter(
kRamVsSwapWeight, swap_weight,
base::BindOnce(&OnSwapParameterSet, kRamVsSwapWeight));
}
void ConfigureExtraFreeIfEnabled() {
if (!base::FeatureList::IsEnabled(kCrOSTuneExtraFree))
return;
chromeos::DebugDaemonClient* debugd_client =
chromeos::DBusThreadManager::Get()->GetDebugDaemonClient();
CHECK(debugd_client);
int extra_free = kCrOSExtraFreeMb.Get();
if (extra_free < 0) {
LOG(ERROR)
<< "Extra free must be greater than or equal to 0, invalid value: "
<< extra_free;
return;
}
VLOG(1) << "Setting extra_free mb to: " << extra_free;
debugd_client->SetSwapParameter(
kExtraFree, extra_free, base::BindOnce(&OnSwapParameterSet, kExtraFree));
}
} // namespace } // namespace
void ConfigureSwap() { void ConfigureSwap() {
ConfigureExtraFreeIfEnabled();
ConfigureRamVsSwapWeightIfEnabled();
ConfigureMinFilelistIfEnabled(); ConfigureMinFilelistIfEnabled();
} }
......
...@@ -16,6 +16,19 @@ namespace chromeos { ...@@ -16,6 +16,19 @@ namespace chromeos {
extern const base::Feature kCrOSTuneMinFilelist; extern const base::Feature kCrOSTuneMinFilelist;
extern const base::FeatureParam<int> kCrOSTuneMinFilelistMb; extern const base::FeatureParam<int> kCrOSTuneMinFilelistMb;
// Controls the ChromeOS /sys/kernel/mm/chromeos-low_mem/ram_vs_swap_weight
// tunable. The number is a zero or positive number which represents how well
// zram based swap is compressed in physical ram.
extern const base::Feature kCrOSTuneRamVsSwapWeight;
extern const base::FeatureParam<int> kCrOSRamVsSwapWeight;
// Controls the ChromeOS /proc/sys/vm/extra_free_kbytes tunable. The number is a
// zero or positive number which represents how much additional memory the
// kernel will keep around. Raising this number has the affect of causing
// swapping earlier.
extern const base::Feature kCrOSTuneExtraFree;
extern const base::FeatureParam<int> kCrOSExtraFreeMb;
// Configure swap will configure any swap related experiments that this user may // Configure swap will configure any swap related experiments that this user may
// be opted into. // be opted into.
CHROMEOS_EXPORT void ConfigureSwap(); CHROMEOS_EXPORT void ConfigureSwap();
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment