Skip to content

Commit

Permalink
TEST-55-OOMD: workaround for kernel regression in 6.12-rcX
Browse files Browse the repository at this point in the history
This ignore failures when running on kernel-6.12-rcX, which has a
regression in the kernel scheduler that breaks PSI.

From systemd#32730 (comment)
> There is a known scheduler bug in 6.12 that breaks psi. It leaks
> "running tasks" counts, which matches your symptoms of seeing partial
> pressure only.
>
> Do you see "inconsistent task state" warnings in dmesg | grep psi?
>
> A fix is queued in the scheduler tree, should be sent to Linus shortly:
> https://git.kernel.org/pub/scm/linux/kernel/git/tip/tip.git/commit/?id=c6508124193d42bbc3224571eb75bfa4c1821fbb

Workaround for systemd#32730.
  • Loading branch information
yuwata committed Oct 19, 2024
1 parent 12e58ab commit 88bbf18
Showing 1 changed file with 18 additions and 3 deletions.
21 changes: 18 additions & 3 deletions test/units/TEST-55-OOMD.sh
Original file line number Diff line number Diff line change
Expand Up @@ -95,6 +95,21 @@ else
systemd-run -t -p MemoryMax=10M -p MemorySwapMax=0 -p MemoryZSwapMax=0 /bin/true
fi

check_killed() {
local unit="${1:?}"
shift

systemctl "$@" status "$unit" || return 0 # Yay! The service has been expectedly killed.

# Workaround for the regression in kernel 6.12-rcX, explained in issue #32730.
if journalctl --no-hostname -k -t kernel --grep 'psi: inconsistent task state!'; then
echo "$unit is unexpectedly still alive, and inconsistency in PSI is reported by the kernel, skipping." >/skipped
exit 77
fi

return 1 # Huh? Something borked.
}

test_basic() {
local cgroup_path="${1:?}"
shift
Expand All @@ -121,7 +136,7 @@ test_basic() {
done

# testbloat should be killed and testchill should be fine
if systemctl "$@" status TEST-55-OOMD-testbloat.service; then exit 42; fi
if ! check_killed TEST-55-OOMD-testbloat.service "$@"; then exit 42; fi
if ! systemctl "$@" status TEST-55-OOMD-testchill.service; then exit 24; fi

systemctl "$@" kill --signal=KILL TEST-55-OOMD-testbloat.service || :
Expand Down Expand Up @@ -172,7 +187,7 @@ EOF

# testmunch should be killed since testbloat had the avoid xattr on it
if ! systemctl status TEST-55-OOMD-testbloat.service; then exit 25; fi
if systemctl status TEST-55-OOMD-testmunch.service; then exit 43; fi
if ! check_killed TEST-55-OOMD-testmunch.service; then exit 43; fi
if ! systemctl status TEST-55-OOMD-testchill.service; then exit 24; fi

systemctl kill --signal=KILL TEST-55-OOMD-testbloat.service || :
Expand Down Expand Up @@ -248,7 +263,7 @@ EOF
sleep 2
done

if systemctl status TEST-55-OOMD-testmunch.service; then exit 44; fi
if ! check_killed TEST-55-OOMD-testmunch.service; then exit 44; fi
if ! systemctl status TEST-55-OOMD-testchill.service; then exit 23; fi

systemctl kill --signal=KILL TEST-55-OOMD-testmunch.service || :
Expand Down

0 comments on commit 88bbf18

Please sign in to comment.