diff mbox series

[v2] memcontrol03: Using clean page cache to avoid dependency on IO rate

Message ID 20240315033139.20557-1-wegao@suse.com
State Accepted
Headers show
Series [v2] memcontrol03: Using clean page cache to avoid dependency on IO rate | expand

Commit Message

Wei Gao March 15, 2024, 3:31 a.m. UTC
Bad IO situation(storage bandwidth ~10MB/sec) will lead background
writeback has uncertain progress for dirty page. So system can not
reclaim enough memory for new process and finally lead a unexpected
OOM.

memcontrol03.c:218: TPASS: Expect: (A/B/E memory.current=0) ~= 0
memcontrol03.c:116: TPASS: Child 1918 killed by OOM
memcontrol03.c:224: TPASS: Expect: (A/B memory.current=52588544) ~= 52428800
memcontrol03.c:129: TFAIL: Expected child 1944 to exit(0), but instead killed by SIGKILL

Signed-off-by: Wei Gao <wegao@suse.com>
---
 testcases/kernel/controllers/memcg/memcontrol03.c | 1 +
 1 file changed, 1 insertion(+)

Comments

Petr Vorel March 15, 2024, 9:17 a.m. UTC | #1
Hi Wei,

> Bad IO situation(storage bandwidth ~10MB/sec) will lead background
> writeback has uncertain progress for dirty page. So system can not
> reclaim enough memory for new process and finally lead a unexpected
> OOM.

Use fsync() to make sure that the pages from the file we wrote into are written
to a permanent storage.

> memcontrol03.c:218: TPASS: Expect: (A/B/E memory.current=0) ~= 0
> memcontrol03.c:116: TPASS: Child 1918 killed by OOM
> memcontrol03.c:224: TPASS: Expect: (A/B memory.current=52588544) ~= 52428800
> memcontrol03.c:129: TFAIL: Expected child 1944 to exit(0), but instead killed by SIGKILL

Suggested-by: Cyril Hrubis <chrubis@suse.cz>
(Please do this yourself next time)

Reviewed-by: Petr Vorel <pvorel@suse.cz>
Fixes: https://bugzilla.suse.com/show_bug.cgi?id=1218178

Kind regards,
Petr

> Signed-off-by: Wei Gao <wegao@suse.com>
> ---
>  testcases/kernel/controllers/memcg/memcontrol03.c | 1 +
>  1 file changed, 1 insertion(+)

> diff --git a/testcases/kernel/controllers/memcg/memcontrol03.c b/testcases/kernel/controllers/memcg/memcontrol03.c
> index 9c6c808e0..e2fc85cc8 100644
> --- a/testcases/kernel/controllers/memcg/memcontrol03.c
> +++ b/testcases/kernel/controllers/memcg/memcontrol03.c
> @@ -144,6 +144,7 @@ static void alloc_pagecache_in_child(const struct tst_cg_group *const cg,
>  	tst_res(TINFO, "Child %d in %s: Allocating pagecache: %"PRIdPTR,
>  		getpid(), tst_cg_group_name(cg), size);
>  	alloc_pagecache(fd, size);
> +	SAFE_FSYNC(fd);

>  	TST_CHECKPOINT_WAKE(CHILD_IDLE);
>  	TST_CHECKPOINT_WAIT(TEST_DONE);
Petr Vorel March 15, 2024, 9:28 a.m. UTC | #2
Hi Wei,

thanks, merged!

Kind regards,
Petr
diff mbox series

Patch

diff --git a/testcases/kernel/controllers/memcg/memcontrol03.c b/testcases/kernel/controllers/memcg/memcontrol03.c
index 9c6c808e0..e2fc85cc8 100644
--- a/testcases/kernel/controllers/memcg/memcontrol03.c
+++ b/testcases/kernel/controllers/memcg/memcontrol03.c
@@ -144,6 +144,7 @@  static void alloc_pagecache_in_child(const struct tst_cg_group *const cg,
 	tst_res(TINFO, "Child %d in %s: Allocating pagecache: %"PRIdPTR,
 		getpid(), tst_cg_group_name(cg), size);
 	alloc_pagecache(fd, size);
+	SAFE_FSYNC(fd);
 
 	TST_CHECKPOINT_WAKE(CHILD_IDLE);
 	TST_CHECKPOINT_WAIT(TEST_DONE);