History

mm, memcg: reconsider kmem.limit_in_bytes deprecation

This reverts commits 86327e8eb94c ("memcg: drop kmem.limit_in_bytes") and partially reverts 58056f77502f ("memcg, kmem: further deprecate kmem.limit_in_bytes") which have incrementally removed support for the kernel memory accounting hard limit. Unfortunately it has turned out that there is still userspace depending on the existence of memory.kmem.limit_in_bytes [1]. The underlying functionality is not really required but the non-existent file just confuses the userspace which fails in the result. The patch to fix this on the userspace side has been submitted but it is hard to predict how it will propagate through the maze of 3rd party consumers of the software. Now, reverting alone 86327e8eb94c is not an option because there is another set of userspace which cannot cope with ENOTSUPP returned when writing to the file. Therefore we have to go and revisit 58056f77502f as well. There are two ways to go ahead. Either we give up on the deprecation and fully revert 58056f77502f as well or we can keep kmem.limit_in_bytes but make the write a noop and warn about the fact. This should work for both known breaking workloads which depend on the existence but do not depend on the hard limit enforcement. Note to backporters to stable trees. a8c49af3be5f ("memcg: add per-memcg total kernel memory stat") introduced in 4.18 has added memcg_account_kmem so the accounting is not done by obj_cgroup_charge_pages directly for v1 anymore. Prior kernels need to add it explicitly (thanks to Johannes for pointing this out). [akpm@linux-foundation.org: fix build - remove unused local] Link: http://lkml.kernel.org/r/20230920081101.GA12096@linuxonhyperv3.guj3yctzbm1etfxqx2vob5hsef.xx.internal.cloudapp.net [1] Link: https://lkml.kernel.org/r/ZRE5VJozPZt9bRPy@dhcp22.suse.cz Fixes: 86327e8eb94c ("memcg: drop kmem.limit_in_bytes") Fixes: 58056f77502f ("memcg, kmem: further deprecate kmem.limit_in_bytes") Signed-off-by: Michal Hocko <mhocko@suse.com> Acked-by: Shakeel Butt <shakeelb@google.com> Acked-by: Johannes Weiner <hannes@cmpxchg.org> Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org> Cc: Jeremi Piotrowski <jpiotrowski@linux.microsoft.com> Cc: Muchun Song <muchun.song@linux.dev> Cc: Roman Gushchin <roman.gushchin@linux.dev> Cc: Tejun heo <tj@kernel.org> Cc: <stable@vger.kernel.org> Signed-off-by: Andrew Morton <akpm@linux-foundation.org>

Michal Hocko committed 3 years ago

Commit 45976481 parent ca564892 files · +20 −0Browse files

Unified · Split

2 files
  1. Documentation/admin-guide/cgroup-v1/memory.rst +7 −0
  2. mm/memcontrol.c +13 −0
Documentation/admin-guide/cgroup-v1/memory.rst+7−0
@@ -92,6 +92,13 @@ Brief summary of control files. · 91 unmodified lines
92 memory.oom_control set/show oom controls.92 memory.oom_control set/show oom controls.
93 memory.numa_stat show the number of memory usage per numa93 memory.numa_stat show the number of memory usage per numa
94 node94 node
95 memory.kmem.limit_in_bytes Deprecated knob to set and read the kernel
96 memory hard limit. Kernel hard limit is not
97 supported since 5.16. Writing any value to
98 do file will not have any effect same as if
99 nokmem kernel parameter was specified.
100 Kernel memory is still charged and reported
101 by memory.kmem.usage_in_bytes.
95 memory.kmem.usage_in_bytes show current kernel memory allocation102 memory.kmem.usage_in_bytes show current kernel memory allocation
96 memory.kmem.failcnt show the number of kernel memory usage103 memory.kmem.failcnt show the number of kernel memory usage
97 hits limits104 hits limits
mm/memcontrol.c+13−0
@@ -3867,6 +3867,13 @@ static ssize_t mem_cgroup_write(struct kernfs_open_file *of, · 3866 unmodified lines
3867 case _MEMSWAP:3867 case _MEMSWAP:
3868 ret = mem_cgroup_resize_max(memcg, nr_pages, true);3868 ret = mem_cgroup_resize_max(memcg, nr_pages, true);
3869 break;3869 break;
3870 case _KMEM:
3871 pr_warn_once("kmem.limit_in_bytes is deprecated and will be removed. "
3872 "Writing any value to this file has no effect. "
3873 "Please report your usecase to linux-mm@kvack.org if you "
3874 "depend on this functionality.\n");
3875 ret = 0;
3876 break;
3870 case _TCP:3877 case _TCP:
3871 ret = memcg_update_tcp_max(memcg, nr_pages);3878 ret = memcg_update_tcp_max(memcg, nr_pages);
3872 break;3879 break;
@@ -5077,6 +5084,12 @@ static struct cftype mem_cgroup_legacy_files[] = { · 1204 unmodified lines
5077 .seq_show = memcg_numa_stat_show,5084 .seq_show = memcg_numa_stat_show,
5078 },5085 },
5079#endif5086#endif
5087 {
5088 .name = "kmem.limit_in_bytes",
5089 .private = MEMFILE_PRIVATE(_KMEM, RES_LIMIT),
5090 .write = mem_cgroup_write,
5091 .read_u64 = mem_cgroup_read_u64,
5092 },
5080 {5093 {
5081 .name = "kmem.usage_in_bytes",5094 .name = "kmem.usage_in_bytes",
5082 .private = MEMFILE_PRIVATE(_KMEM, RES_USAGE),5095 .private = MEMFILE_PRIVATE(_KMEM, RES_USAGE),

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t