On Thu, Apr 21, 2022 at 11:44:26PM +0000, Yosry Ahmed wrote:
Add a new test for memory.reclaim that verifies that the interface correctly reclaims memory as intended, from both anon and file pages.
Signed-off-by: Yosry Ahmed yosryahmed@google.com Acked-by: Roman Gushchin roman.gushchin@linux.dev
.../selftests/cgroup/test_memcontrol.c | 86 +++++++++++++++++++ 1 file changed, 86 insertions(+)
diff --git a/tools/testing/selftests/cgroup/test_memcontrol.c b/tools/testing/selftests/cgroup/test_memcontrol.c index f2ffb3a30194..5f7c20de2426 100644 --- a/tools/testing/selftests/cgroup/test_memcontrol.c +++ b/tools/testing/selftests/cgroup/test_memcontrol.c @@ -760,6 +760,91 @@ static int test_memcg_max(const char *root) return ret; } +/*
- This test checks that memory.reclaim reclaims the given
- amount of memory (from both anon and file).
- */
+static int test_memcg_reclaim(const char *root) +{
- int ret = KSFT_FAIL, fd, retries;
- char *memcg;
- long current, to_reclaim;
- char buf[64];
- memcg = cg_name(root, "memcg_test");
- if (!memcg)
goto cleanup;
- if (cg_create(memcg))
goto cleanup;
- current = cg_read_long(memcg, "memory.current");
- if (current != 0)
goto cleanup;
- cg_run_nowait(memcg, alloc_anon_noexit, (void *) MB(50));
Don't you need is_swap_enabled() check before deciding to do the anon allocations?
- sleep(1);
- fd = get_temp_fd();
- if (fd < 0)
goto cleanup;
- cg_run_nowait(memcg, alloc_pagecache_50M_noexit, (void *)(long)fd);
- sleep(1);
These sleep(1)s do not seem robust. Since kernel keeps the page cache around, you can convert anon to use tmpfs and use simple cg_run to trigger the allocations of anon (tmpfs) and file which will remain in memory even after return from cg_run.