mirror of
https://github.com/containers/podman.git
synced 2026-03-19 15:18:44 -04:00
Cirrus: Fix elevator workaround multi-cloud support
In order to support execution on various non-GCP cloud environments, the BFQ scheduler workaround needs updating. Previously it assumed the root disk was always `/dev/sda`. With the addition of new clouds (AWS) and different environment types, the assumption is not always valid. Update the workaround to take care in looking up the block device where '/' comes from. Also update the scheduler to 'none', as all modern clouds already have highly optimized underlying storage configurations. There's no reason to complicate I/O paths further by hard-coding specific scheduler(s) for all environment types. Signed-off-by: Chris Evich <cevich@redhat.com>
This commit is contained in:
@@ -99,11 +99,28 @@ esac
|
||||
if ((CONTAINER==0)); then # Not yet running inside a container
|
||||
# Discovered reemergence of BFQ scheduler bug in kernel 5.8.12-200
|
||||
# which causes a kernel panic when system is under heavy I/O load.
|
||||
# Previously discovered in F32beta and confirmed fixed. It's been
|
||||
# observed in F31 kernels as well. Deploy workaround for all VMs
|
||||
# to ensure a more stable I/O scheduler (elevator).
|
||||
echo "mq-deadline" > /sys/block/sda/queue/scheduler
|
||||
warn "I/O scheduler: $(cat /sys/block/sda/queue/scheduler)"
|
||||
# Disable the I/O scheduler (a.k.a. elevator) for all environments,
|
||||
# leaving optimization up to underlying storage infrastructure.
|
||||
testfs="/" # mountpoint that experiences the most I/O during testing
|
||||
msg "Querying block device owning partition hosting the '$testfs' filesystem"
|
||||
# Need --nofsroot b/c btrfs appends subvolume label to `source` name
|
||||
testdev=$(findmnt --canonicalize --noheadings --nofsroot \
|
||||
--output source --mountpoint $testfs)
|
||||
msg " found partition: '$testdev'"
|
||||
testdisk=$(lsblk --noheadings --output pkname --paths $testdev)
|
||||
msg " found block dev: '$testdisk'"
|
||||
testsched="/sys/block/$(basename $testdisk)/queue/scheduler"
|
||||
if [[ -n "$testdev" ]] && [[ -n "$testdisk" ]] && [[ -e "$testsched" ]]; then
|
||||
msg " Found active I/O scheduler: $(cat $testsched)"
|
||||
if [[ ! "$(<$testsched)" =~ \[none\] ]]; then
|
||||
msg " Disabling elevator for '$testsched'"
|
||||
echo "none" > "$testsched"
|
||||
else
|
||||
msg " Elevator already disabled"
|
||||
fi
|
||||
else
|
||||
warn "Sys node for elevator doesn't exist: '$testsched'"
|
||||
fi
|
||||
fi
|
||||
|
||||
# Which distribution are we testing on.
|
||||
|
||||
Reference in New Issue
Block a user