[LTP] [PATCH] memcg_stress: survive OOM by targeting the stressors
Andrea Cervesato
andrea.cervesato@suse.com
Sat Jul 4 09:50:19 CEST 2026
Hi Li,
> I agree with the underlying goal, keep the driver alive and let the
> stressors absorb the OOM pressure, but I'd like to suggest a different
> way that mirrors what we already do in the C harness, and that fixes
> this at the lib level rather than in the individual test.
>
> In lib/tst_test.c we don't raise the score of the stress/test processes.
> Instead we protect the harness and then explicitly drop that protection
> in the child before it runs the actual test:
>
> $ grep -A 8 -B 9 tst_enable_oom_protection lib/tst_test.c
>
> void tst_run_tcases(int argc, char *argv[], struct tst_test *self)
> {
> unsigned int test_variants = 1;
> struct utsname uval;
>
> tst_test = self;
>
> do_setup(argc, argv);
> tst_enable_oom_protection(context->lib_pid);
>
> SAFE_SIGNAL(SIGALRM, alarm_handler);
> SAFE_SIGNAL(SIGUSR1, heartbeat_handler);
>
> tst_res(TINFO, "LTP version: "LTP_VERSION);
>
> uname(&uval);
> tst_res(TINFO, "Tested kernel: %s %s %s", uval.release, uval.version, uval.machine);
>
> $ grep -A 8 -B 9 tst_disable_oom_protection lib/tst_test.c
> alarm(context->overall_time);
>
> show_failure_hints = 1;
>
> test_pid = fork();
> if (test_pid < 0)
> tst_brk(TBROK | TERRNO, "fork()");
>
> if (!test_pid) {
> tst_disable_oom_protection(0);
> SAFE_SIGNAL(SIGALRM, SIG_DFL);
> SAFE_SIGNAL(SIGUSR1, SIG_DFL);
> SAFE_SIGNAL(SIGTERM, SIG_DFL);
> SAFE_SIGNAL(SIGINT, SIG_DFL);
> SAFE_SETPGID(0, 0);
> testrun();
> }
>
> The important detail is that oom_score_adj is inherited across fork.
> So the model is: the library process sets itself to -1000, and child
> resets itself back to 0 before doing any real work. The harness survives,
> the workload stays a normal OOM candidate.
>
> What do you think about doing this in the shell lib so all shell
> tests benefit, rather than only memcg_stress?
this patch was sent with a wrong assumption indeed. As you can see
from the log, the OOM message is wrong and I pasted the wrong example :)
But this raised a good point that I think you spotted quite well. It
would be nice to implement this indeed, since shell tests are often
causing issues when it comes to containers or stressing the memory.
I will leave to @Petr the last word because he's more expert than me
on the shell tests.
Thanks,
--
Andrea Cervesato
SUSE QE Automation Engineer Linux
andrea.cervesato@suse.com
More information about the ltp
mailing list