core/cgroup: introduce MemoryZSwapWriteback setting
Added in https://github.com/torvalds/linux/commit/501a06fe8e4c185bbda371b8cedbdf1b23a633d8
This commit is contained in:
@@ -180,6 +180,8 @@ void cgroup_context_init(CGroupContext *c) {
|
||||
|
||||
.memory_limit = CGROUP_LIMIT_MAX,
|
||||
|
||||
.memory_zswap_writeback = true,
|
||||
|
||||
.io_weight = CGROUP_WEIGHT_INVALID,
|
||||
.startup_io_weight = CGROUP_WEIGHT_INVALID,
|
||||
|
||||
@@ -423,6 +425,7 @@ int cgroup_context_copy(CGroupContext *dst, const CGroupContext *src) {
|
||||
dst->startup_memory_max_set = src->startup_memory_max_set;
|
||||
dst->startup_memory_swap_max_set = src->startup_memory_swap_max_set;
|
||||
dst->startup_memory_zswap_max_set = src->startup_memory_zswap_max_set;
|
||||
dst->memory_zswap_writeback = src->memory_zswap_writeback;
|
||||
|
||||
SET_FOREACH(i, src->ip_address_allow) {
|
||||
r = in_addr_prefix_add(&dst->ip_address_allow, i);
|
||||
@@ -877,6 +880,7 @@ void cgroup_context_dump(Unit *u, FILE* f, const char *prefix) {
|
||||
"%sStartupMemorySwapMax: %" PRIu64 "%s\n"
|
||||
"%sMemoryZSwapMax: %" PRIu64 "%s\n"
|
||||
"%sStartupMemoryZSwapMax: %" PRIu64 "%s\n"
|
||||
"%sMemoryZSwapWriteback: %s\n"
|
||||
"%sMemoryLimit: %" PRIu64 "\n"
|
||||
"%sTasksMax: %" PRIu64 "\n"
|
||||
"%sDevicePolicy: %s\n"
|
||||
@@ -921,6 +925,7 @@ void cgroup_context_dump(Unit *u, FILE* f, const char *prefix) {
|
||||
prefix, c->startup_memory_swap_max, format_cgroup_memory_limit_comparison(u, "StartupMemorySwapMax", cdi, sizeof(cdi)),
|
||||
prefix, c->memory_zswap_max, format_cgroup_memory_limit_comparison(u, "MemoryZSwapMax", cdj, sizeof(cdj)),
|
||||
prefix, c->startup_memory_zswap_max, format_cgroup_memory_limit_comparison(u, "StartupMemoryZSwapMax", cdk, sizeof(cdk)),
|
||||
prefix, yes_no(c->memory_zswap_writeback),
|
||||
prefix, c->memory_limit,
|
||||
prefix, cgroup_tasks_max_resolve(&c->tasks_max),
|
||||
prefix, cgroup_device_policy_to_string(c->device_policy),
|
||||
@@ -2236,6 +2241,7 @@ static void cgroup_context_apply(
|
||||
cgroup_apply_unified_memory_limit(u, "memory.zswap.max", zswap_max);
|
||||
|
||||
(void) set_attribute_and_warn(u, "memory", "memory.oom.group", one_zero(c->memory_oom_group));
|
||||
(void) set_attribute_and_warn(u, "memory", "memory.zswap.writeback", one_zero(c->memory_zswap_writeback));
|
||||
|
||||
} else {
|
||||
char buf[DECIMAL_STR_MAX(uint64_t) + 1];
|
||||
|
||||
@@ -197,6 +197,8 @@ struct CGroupContext {
|
||||
bool startup_memory_swap_max_set:1;
|
||||
bool startup_memory_zswap_max_set:1;
|
||||
|
||||
bool memory_zswap_writeback;
|
||||
|
||||
Set *ip_address_allow;
|
||||
Set *ip_address_deny;
|
||||
/* These two flags indicate that redundant entries have been removed from
|
||||
|
||||
@@ -487,6 +487,7 @@ const sd_bus_vtable bus_cgroup_vtable[] = {
|
||||
SD_BUS_PROPERTY("StartupMemorySwapMax", "t", NULL, offsetof(CGroupContext, startup_memory_swap_max), 0),
|
||||
SD_BUS_PROPERTY("MemoryZSwapMax", "t", NULL, offsetof(CGroupContext, memory_zswap_max), 0),
|
||||
SD_BUS_PROPERTY("StartupMemoryZSwapMax", "t", NULL, offsetof(CGroupContext, startup_memory_zswap_max), 0),
|
||||
SD_BUS_PROPERTY("MemoryZSwapWriteback", "b", bus_property_get_bool, offsetof(CGroupContext, memory_zswap_writeback), 0),
|
||||
SD_BUS_PROPERTY("MemoryLimit", "t", NULL, offsetof(CGroupContext, memory_limit), 0),
|
||||
SD_BUS_PROPERTY("DevicePolicy", "s", property_get_cgroup_device_policy, offsetof(CGroupContext, device_policy), 0),
|
||||
SD_BUS_PROPERTY("DeviceAllow", "a(ss)", property_get_device_allow, 0, 0),
|
||||
@@ -1279,6 +1280,9 @@ int bus_cgroup_set_property(
|
||||
if (streq(name, "MemoryLimitScale"))
|
||||
return bus_cgroup_set_memory_scale(u, name, &c->memory_limit, message, flags, error);
|
||||
|
||||
if (streq(name, "MemoryZSwapWriteback"))
|
||||
return bus_cgroup_set_boolean(u, name, &c->memory_zswap_writeback, CGROUP_MASK_MEMORY, message, flags, error);
|
||||
|
||||
if (streq(name, "TasksAccounting"))
|
||||
return bus_cgroup_set_boolean(u, name, &c->tasks_accounting, CGROUP_MASK_PIDS, message, flags, error);
|
||||
|
||||
|
||||
@@ -230,6 +230,10 @@ static int exec_cgroup_context_serialize(const CGroupContext *c, FILE *f) {
|
||||
return r;
|
||||
}
|
||||
|
||||
r = serialize_bool(f, "exec-cgroup-context-memory-zswap-writeback", c->memory_zswap_writeback);
|
||||
if (r < 0)
|
||||
return r;
|
||||
|
||||
if (c->memory_limit != CGROUP_LIMIT_MAX) {
|
||||
r = serialize_item_format(f, "exec-cgroup-context-memory-limit", "%" PRIu64, c->memory_limit);
|
||||
if (r < 0)
|
||||
@@ -677,6 +681,11 @@ static int exec_cgroup_context_deserialize(CGroupContext *c, FILE *f) {
|
||||
r = safe_atou64(val, &c->startup_memory_zswap_max);
|
||||
if (r < 0)
|
||||
return r;
|
||||
} else if ((val = startswith(l, "exec-cgroup-context-memory-zswap-writeback="))) {
|
||||
r = parse_boolean(val);
|
||||
if (r < 0)
|
||||
return r;
|
||||
c->memory_zswap_writeback = r;
|
||||
} else if ((val = startswith(l, "exec-cgroup-context-memory-limit="))) {
|
||||
r = safe_atou64(val, &c->memory_limit);
|
||||
if (r < 0)
|
||||
|
||||
@@ -220,6 +220,7 @@
|
||||
{{type}}.StartupMemorySwapMax, config_parse_memory_limit, 0, offsetof({{type}}, cgroup_context)
|
||||
{{type}}.MemoryZSwapMax, config_parse_memory_limit, 0, offsetof({{type}}, cgroup_context)
|
||||
{{type}}.StartupMemoryZSwapMax, config_parse_memory_limit, 0, offsetof({{type}}, cgroup_context)
|
||||
{{type}}.MemoryZSwapWriteback, config_parse_bool, 0, offsetof({{type}}, cgroup_context.memory_zswap_writeback)
|
||||
{{type}}.MemoryLimit, config_parse_memory_limit, 0, offsetof({{type}}, cgroup_context)
|
||||
{{type}}.DeviceAllow, config_parse_device_allow, 0, offsetof({{type}}, cgroup_context)
|
||||
{{type}}.DevicePolicy, config_parse_device_policy, 0, offsetof({{type}}, cgroup_context.device_policy)
|
||||
|
||||
@@ -562,6 +562,7 @@ static int bus_append_cgroup_property(sd_bus_message *m, const char *field, cons
|
||||
|
||||
if (STR_IN_SET(field, "CPUAccounting",
|
||||
"MemoryAccounting",
|
||||
"MemoryZSwapWriteback",
|
||||
"IOAccounting",
|
||||
"BlockIOAccounting",
|
||||
"TasksAccounting",
|
||||
|
||||
Reference in New Issue
Block a user