check: try to insulate the test framework from oom killer

Some of the tests in xfstests (e.g. generic/224 with 512M of memory)
consume a lot of memory, and when this happens the OOM killer will
run around stomping on processes.  Sometimes it kills the ./check
process before it kills the actual test, which means that the test
run doesn't complete.

Therefore, make the ./check process OOM-proof while bumping up the
attractiveness of the test itself, in the hopes that even if the
test OOMs we'll still be able to continue on our way.

Signed-off-by: Darrick J. Wong <darrick.wong@oracle.com>
Reviewed-by: Eryu Guan <guaneryu@gmail.com>
Signed-off-by: Eryu Guan <guaneryu@gmail.com>
This commit is contained in:
Darrick J. Wong
2019-06-04 14:16:49 -07:00
committed by Eryu Guan
parent edd56cc427
commit 8ca445c46e
+13 -2
View File
@@ -499,6 +499,17 @@ _expunge_test()
return 0 return 0
} }
# Make the check script unattractive to the OOM killer...
OOM_SCORE_ADJ="/proc/self/oom_score_adj"
test -w ${OOM_SCORE_ADJ} && echo -1000 > ${OOM_SCORE_ADJ}
# ...and make the tests themselves somewhat more attractive to it, so that if
# the system runs out of memory it'll be the test that gets killed and not the
# test framework.
_run_seq() {
bash -c "test -w ${OOM_SCORE_ADJ} && echo 250 > ${OOM_SCORE_ADJ}; exec ./$seq"
}
_detect_kmemleak _detect_kmemleak
_prepare_test_list _prepare_test_list
@@ -740,11 +751,11 @@ for section in $HOST_OPTIONS_SECTIONS; do
fi fi
_try_wipe_scratch_devs > /dev/null 2>&1 _try_wipe_scratch_devs > /dev/null 2>&1
if [ "$DUMP_OUTPUT" = true ]; then if [ "$DUMP_OUTPUT" = true ]; then
./$seq 2>&1 | tee $tmp.out _run_seq 2>&1 | tee $tmp.out
# Because $? would get tee's return code # Because $? would get tee's return code
sts=${PIPESTATUS[0]} sts=${PIPESTATUS[0]}
else else
./$seq >$tmp.out 2>&1 _run_seq >$tmp.out 2>&1
sts=$? sts=$?
fi fi