remove console entries when console is disabled

A huge problem with latency sensitive baremetal worklaods
is interrupts being triggered spuriously. Unfortunately
when we start with cloud images, often they default to
logging to a serial console which means every write is
an interrupt, which is far from ideal and can result
in packet loss and service degredation quite quickly.

So instead, if the console logging has been disabled,
and no virtual terminal has been defined, we now strip
the console entries from the resulting image.

In testing with Centos9 Stream, with booting a VM, the console
in this scenario jumps to the framebuffer once started, and
after thousands of lines being written to the console, even with
delays, locally I'm at 219 interrupts, with a bulk of the entries
coming from before I interacted with the console (~135 from just
boot).

Change-Id: Id9b19c4d9804b88e6db05a20e26c8264bb357734
This commit is contained in:
Julia Kreger 2024-06-20 17:32:25 -07:00
parent 69187bae3f
commit 81355c4124
2 changed files with 20 additions and 1 deletions

View File

@ -232,7 +232,7 @@ if [ -n "${EFI_BOOT_DIR:-}" ] && [ -d /boot/efi/$EFI_BOOT_DIR ] ; then
fi fi
# Ensure paths in BLS entries account for /boot being a partition or part of the # Ensure paths in BLS entries account for /boot being a partition or part of the
# root partition # root partition and perform any required entry removal.
if [[ -e /boot/loader/entries ]]; then if [[ -e /boot/loader/entries ]]; then
pushd /boot/loader/entries pushd /boot/loader/entries
set +e set +e
@ -250,6 +250,17 @@ if [[ -e /boot/loader/entries ]]; then
done done
set -e set -e
popd popd
# Since we are already aware we're using BLS, we can go ahead and
# do any cleanup to disable embedded serial console settings if they
# already exist.
if [[ "True" != "${DIB_BOOTLOADER_USE_SERIAL_CONSOLE:-True}" ]] && [[ "${VIRTUAL_TERMINAL}" == "" ]]; then
# NOTE(TheJulia): This removes any console arguments and allows grub
# to use it's default. It will also remove any embedded consoles in
# source images, which may be highly desirable if your running
# interrupt sensitive workloads, such as NFV workloads.
grubby --update-kernel ALL --remove-args=console
fi
# Print resulting grubby output for debug purposes # Print resulting grubby output for debug purposes
grubby --info=ALL grubby --info=ALL
fi fi

View File

@ -0,0 +1,8 @@
---
features:
- |
Adds logic to permit the removal of consoles when the bootloader element
when no configuration has been expressed which requests it, and serial
console is disabled. This involves ``DIB_BOOTLOADER_VIRTUAL_TERMINAL``
being set to an empty string and ``DIB_BOOTLOADER_USE_SERIAL_CONSOLE``
is set to ``False``.