Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > linux.debian.kernel > #86132
| From | Chris Hofstaedtler <zeha@debian.org> |
|---|---|
| Newsgroups | linux.debian.bugs.dist, linux.debian.kernel |
| Subject | Bug#1098874: linux: do not activate ttyS0 console on x86 if it does not exist |
| Date | 2025-02-25 13:10 +0100 |
| Message-ID | <Kk1V7-1SvY-13@gated-at.bofh.it> (permalink) |
| Organization | linux.* mail to news gateway |
Cross-posted to 2 groups.
Source: linux
Hi,
a user reported #1098694 against util-linux: agetty crashes. The
crash is a bug in agetty, but it points to something more
interesting. Let me explain below:
systemd starts serial-getty@%i.service for consoles the kernel deems
active.
Debian's cloud images (even the "nocloud" variants) set these
parameters on the kernel command line:
console=tty0 console=ttyS0,115200 earlyprintk=ttyS0,115200
agetty traditionally exits with EXIT_SUCCESS (after a 10sec delay)
when it cannot read from a terminal it is attached to, for example
because reading from it returns EIO.
This combination of things which all are well-intended, will cause
the following scenario in an apparently popular config:
- cloud image ("nocloud")
- x86 VM
- Hypervisor does not configure a serial port, because you have VGA
anyway
These VMs will every 10sec spawn a new agetty on ttyS0, which causes
some CPU and disk activity, to fail and exit. This repeats every
10sec.
This is *almost* silent; if you don't happen to look into journalctl
at the right moment you'll not see this.
I imagine if thousands of VMs do this, it's going to be a huge waste
of energy on our planet.
~~~~
After looking at this a bit longer, I wondered what happens on
arm64: on arm64, passing console=tty0 console=ttyS0,115200 is also
semi-common, but it seems to have a different effect!
On amd64, cat /sys/class/tty/console/active shows tty0 and ttyS0 in
this configuration.
On arm64, ttyS0 is not added to /sys/class/tty/console/active.
This leads systemd to *not* create serial-getty@ttyS0.service,
thereby avoiding the problem.
I don't know if this caused by some x86 heritage, where the 8250 is
always present, even if non-functional or something. But clearly
even then the kernel seems to know its not really working, as
reading from /dev/ttyS0 gives EIO.
Please consider improving this situation for everyone.
If this needs forwarding upstream, please do so.
I've also filed this against systemd upstream, but I imagine they'll
defer to the kernel not activating the ttyS0 console:
https://github.com/systemd/systemd/issues/36497
Thanks,
Chris
Back to linux.debian.kernel | Previous | Next | Find similar | Unroll thread
Bug#1098874: linux: do not activate ttyS0 console on x86 if it does not exist Chris Hofstaedtler <zeha@debian.org> - 2025-02-25 13:10 +0100
csiph-web