* always set memory.user_hierarchy for all cgroups we create
-* Get rid of MemorySoftLimit=
-
* After coming back from hibernation reset hibernation swap partition
* mounts: do not test each mount unit against each other mount unit to
<varlistentry>
<term><varname>MemoryLimit=<replaceable>bytes</replaceable></varname></term>
- <term><varname>MemorySoftLimit=<replaceable>bytes</replaceable></varname></term>
<listitem>
- <para>Specify the hard and soft limits on maximum memory
- usage of the executed processes. The "hard" limit specifies
- how much process and kernel memory can be used by tasks in
- this unit, when there is no memory contention. If the kernel
- detects memory contention, memory reclaim will be performed
- until the memory usage is within the "soft" limit. Takes a
+ <para>Specify the limit on maximum memory usage of the
+ executed processes. The limit specifies how much process and
+ kernel memory can be used by tasks in this unit. Takes a
memory size in bytes. If the value is suffixed with K, M, G
or T, the specified memory size is parsed as Kilobytes,
Megabytes, Gigabytes, or Terabytes (with the base 1024),
respectively. This controls the
- <literal>memory.limit_in_bytes</literal> and
- <literal>memory.soft_limit_in_bytes</literal> control group
- attributes. For details about these control group attributes,
+ <literal>memory.limit_in_bytes</literal> control group
+ attribute. For details about this control group attribute,
see <ulink
url="https://www.kernel.org/doc/Documentation/cgroups/memory.txt">memory.txt</ulink>.</para>
* structure is preinitialized to 0 */
c->cpu_shares = 1024;
- c->memory_limit = c->memory_soft_limit = (uint64_t) -1;
+ c->memory_limit = (uint64_t) -1;
c->blockio_weight = 1000;
}
"%sCPUShares=%lu\n"
"%sBlockIOWeight=%lu\n"
"%sMemoryLimit=%" PRIu64 "\n"
- "%sMemorySoftLimit=%" PRIu64 "\n"
"%sDevicePolicy=%s\n",
prefix, yes_no(c->cpu_accounting),
prefix, yes_no(c->blockio_accounting),
prefix, c->cpu_shares,
prefix, c->blockio_weight,
prefix, c->memory_limit,
- prefix, c->memory_soft_limit,
prefix, cgroup_device_policy_to_string(c->device_policy));
LIST_FOREACH(device_allow, a, c->device_allow)
if (r < 0)
log_error("Failed to set memory.limit_in_bytes on %s: %s", path, strerror(-r));
-
- if (c->memory_soft_limit != (uint64_t) -1) {
- sprintf(buf, "%" PRIu64 "\n", c->memory_soft_limit);
- r = cg_set_attribute("memory", path, "memory.soft_limit_in_bytes", buf);
- } else
- r = cg_set_attribute("memory", path, "memory.soft_limit_in_bytes", "-1");
-
- if (r < 0)
- log_error("Failed to set memory.soft_limit_in_bytes on %s: %s", path, strerror(-r));
}
if (mask & CGROUP_DEVICE) {
mask |= CGROUP_BLKIO;
if (c->memory_accounting ||
- c->memory_limit != (uint64_t) -1 ||
- c->memory_soft_limit != (uint64_t) -1)
+ c->memory_limit != (uint64_t) -1)
mask |= CGROUP_MEMORY;
if (c->device_allow || c->device_policy != CGROUP_AUTO)
LIST_HEAD(CGroupBlockIODeviceBandwidth, blockio_device_bandwidths);
uint64_t memory_limit;
- uint64_t memory_soft_limit;
CGroupDevicePolicy device_policy;
LIST_HEAD(CGroupDeviceAllow, device_allow);
{ "BlockIOWriteBandwidth", bus_cgroup_append_device_bandwidths, "a(st)", 0 },
{ "MemoryAccounting", bus_property_append_bool, "b", offsetof(CGroupContext, memory_accounting) },
{ "MemoryLimit", bus_property_append_uint64, "t", offsetof(CGroupContext, memory_limit) },
- { "MemorySoftLimit", bus_property_append_uint64, "t", offsetof(CGroupContext, memory_soft_limit) },
{ "DevicePolicy", bus_cgroup_append_device_policy, "s", offsetof(CGroupContext, device_policy) },
{ "DeviceAllow", bus_cgroup_append_device_allow, "a(ss)", 0 },
{}
return 1;
- } else if (streq(name, "MemoryLimit") || streq(name, "MemorySoftLimit")) {
+ } else if (streq(name, "MemoryLimit")) {
if (dbus_message_iter_get_arg_type(i) != DBUS_TYPE_UINT64)
return -EINVAL;
if (mode != UNIT_CHECK) {
uint64_t limit;
-
dbus_message_iter_get_basic(i, &limit);
- if (streq(name, "MemoryLimit"))
- c->memory_limit = limit;
- else
- c->memory_soft_limit = limit;
-
+ c->memory_limit = limit;
unit_write_drop_in_private_format(u, mode, name, "%s=%" PRIu64, name, limit);
}
" <property name=\"BlockIOWriteBandwidth=\" type=\"a(st)\" access=\"read\"/>\n" \
" <property name=\"MemoryAccounting\" type=\"b\" access=\"read\"/>\n" \
" <property name=\"MemoryLimit\" type=\"t\" access=\"read\"/>\n" \
- " <property name=\"MemorySoftLimit\" type=\"t\" access=\"read\"/>\n" \
" <property name=\"DevicePolicy\" type=\"s\" access=\"read\"/>\n" \
" <property name=\"DeviceAllow\" type=\"a(ss)\" access=\"read\"/>\n"
$1.CPUShares, config_parse_cpu_shares, 0, offsetof($1, cgroup_context)
$1.MemoryAccounting, config_parse_bool, 0, offsetof($1, cgroup_context.memory_accounting)
$1.MemoryLimit, config_parse_memory_limit, 0, offsetof($1, cgroup_context)
-$1.MemorySoftLimit, config_parse_memory_limit, 0, offsetof($1, cgroup_context)
$1.DeviceAllow, config_parse_device_allow, 0, offsetof($1, cgroup_context)
$1.DevicePolicy, config_parse_device_policy, 0, offsetof($1, cgroup_context.device_policy)
$1.BlockIOAccounting, config_parse_bool, 0, offsetof($1, cgroup_context.blockio_accounting)
void *userdata) {
CGroupContext *c = data;
- uint64_t *limit;
off_t bytes;
int r;
- limit = streq(lvalue, "MemoryLimit") ? &c->memory_limit : &c->memory_soft_limit;
-
if (isempty(rvalue)) {
- *limit = (uint64_t) -1;
+ c->memory_limit = (uint64_t) -1;
return 0;
}
return 0;
}
- *limit = (uint64_t) bytes;
+ c->memory_limit = (uint64_t) bytes;
return 0;
}
!dbus_message_iter_append_basic(&sub, DBUS_TYPE_BOOLEAN, &b))
return log_oom();
- } else if (streq(field, "MemoryLimit") || streq(field, "MemorySoftLimit")) {
+ } else if (streq(field, "MemoryLimit")) {
off_t bytes;
uint64_t u;