Systeme mit Intel Apollo Lake Prozessoren mit F-1 (A) Stepping (CPUID 506CA) können beim Starten von FreeBSD 13 beim Punkt Timecounter "HPET" frequency 19200000 Hz quality 950 hängen bleiben. Ursache ist ein Fehler der MONITOR/MWAIT Funktionen im Prozessor. Um das Problem zu lösen, können Sie entweder über das BIOS die Bereitstellung der MONITOR/MWAIT Funktionen deaktieren oder alternativ über den FreeBSD Bootparameter set machdep.idle_mwait=0 die Nutzung dieser Funktionen unterbinden. Künftige FreeBSD Versionen deaktivieren diese Funktionen für diese Prozessoren generell - das Problem tritt damit dort nicht mehr auf.
Betroffen sind Systeme mit:
Der Startvorgang von FreeBSD 13 bleibt bei folgendem Punkt hängen:
Hier dazu ein Auszug eines betroffenen Systems (getestet mit OPNsense 23.1-rc1):
[...] FreeBSD 13.1-RELEASE-p5 stable/23.1-n250368-9ba5919b1b1 SMP amd64 [...] FreeBSD clang version 13.0.0 (git@github.com:llvm/llvm-project.git llvmorg-13.0.0-0-gd7b669b3a303) VT(efifb): resolution 800x600 CPU: Intel(R) Celeron(R) CPU J3455 @ 1.50GHz (1497.60-MHz K8-class CPU) Origin="GenuineIntel" Id=0x506ca Family=0x6 Model=0x5c Stepping=10 [...] hpet0: <High Precision Event Timer> iomem 0xfed00000-0xfed003ff irq 8 on acpi0 Timecounter "HPET" frequency 19200000 Hz quality 950
Ursache für das Problem ist das CPU Errata APL30 - A Store Instruction May Not Wake up MWAIT. Das Befehlspaars MONITOR/MWAIT ermöglicht normalerweise einem logischen Prozessor, in einem Ruhezustand zu warten, bis eine Speicherung in einem definierten Speicher-Adressbereich erfolgt. Aufgrund dieses Fehlers kann es vorkommen, dass Speicherungen im definierten Adressbereich MWAIT nicht zur Wiederaufnahme der Ausführung führen.[1] Daher bleibt FreeBSD beim Startvorgang auf betroffenen Systemen beim Punkt Timecounter "HPET" frequency 19200000 Hz quality 950 stehen.
Zur Lösung des Bootproblems werden die Funktionen MONITOR/MWAIT deaktiviert. Dies kann entweder über das BIOS, über einen Bootparameter oder über einen Patch im Betriebssystem gelöst werden.
Sofern das BIOS eine Option zum Deaktivieren der MONITOR/MWAIT Funktionen bietet, können dort diese Funktionen deaktiviert werden. Das System startet daraufhin, ohne bei Timecounter "HPET" frequency 19200000 Hz quality 950 hängen zu bleiben.[2]
Der Bootparameter set machdep.idle_mwait=0 unterbindet die Verwendung von MONITOR/MWAIT. Dadurch startet das System zuverlässig:
Type '?' for a list of commands, 'help' for more detailed help. OK set machdep.idle_mwait=0 OK boot [...] FreeBSD 13.1-RELEASE-p5 stable/23.1-n250368-9ba5919b1b1 SMP amd64 FreeBSD clang version 13.0.0 (git@github.com:llvm/llvm-project.git llvmorg-13.0.0-0-gd7b669b3a303) VT(efifb): resolution 800x600 CPU: Intel(R) Celeron(R) CPU J3455 @ 1.50GHz (1497.60-MHz K8-class CPU) Origin="GenuineIntel" Id=0x506ca Family=0x6 Model=0x5c Stepping=10 [...] hpet0: <High Precision Event Timer> iomem 0xfed00000-0xfed003ff irq 8 on acpi0 Timecounter "HPET" frequency 19200000 Hz quality 950 Event timer "HPET" frequency 19200000 Hz quality 550 Event timer "HPET1" frequency 19200000 Hz quality 440 Event timer "HPET2" frequency 19200000 Hz quality 440 Event timer "HPET3" frequency 19200000 Hz quality 440 Event timer "HPET4" frequency 19200000 Hz quality 440 Timecounter "ACPI-fast" frequency 3579545 Hz quality 900 acpi_timer0: <32-bit timer at 3.579545MHz> port 0x408-0x40b on acpi0 pcib0: <ACPI Host-PCI bridge> port 0xcf8-0xcff on acpi0 pci0: <ACPI PCI bus> on pcib0 [...] igb1: link state changed to UP
Alternativ führt auch der Bootparameter set machdep.disable_msix_migration=1 dazu, dass das System vollständig starten kann. Interrupts werden damit am selben Kern ausgeführt, die MWAIT Funktion wacht dann wieder auf. Wir empfehlen jedoch mit dem Bootparameter set machdep.idle_mwait=0 MONITOR/MWAIT auf diesen Prozessoren generell nicht zu nützen.
Nachdem Sie temporär mit den 3 verschiedenen Optionen OPNsense 23.1 gestartet haben, können Sie OPNsense 23.1 installieren. Danach erfolgt ein obligatorischer Neustart und das System startet vom Zielmedium (SSD). Sie müssen dann noch einmal den Parameter (wenn Sie Option 2 oder Option 3 verwendet haben) angeben. Nachdem das System dann von der SSD gestartet ist, stoßen Sie die integrierte Updatefunktion in OPNsense an. Somit wird OPNsense vom ursprünglichen Stand 23.1 auf derzeit 23.1.6 aktualisiert (zum Zeitpunkt der Änderung dieses Artikels war OPNsense 23.1.6 die aktuelle Version). Sie erhalten dann auch den Fix zu dem Timecounter HPET Problem, dieser wurde bereits mit 23.1.1 integriert. Nachdem OPNsense auf den aktuellen Stand gebracht wurde, bootet OPNsense ohne Angabe der Parameter oder BIOS Parameter ohne Probleme.
Neuere FreeBSD Versionen deaktivieren die Verwendung von MONITOR/MWAIT nicht nur für das ältere CPU Stepping 506C9, sondern auch für das neuere Stepping 506CA[3] bzw. 506C*.[4] Bei künftigen FreeBSD Versionen wird daher dieses Problem nicht mehr auftreten.
Bei OPNsense wurde dazu ein Issue erstellt, damit das Problem mit einem kommenden Update ebenso behoben werden kann.[5] Am 01. Februar 2023 wurde der Fix im Code integriert und mit dem Release von OPNsense 23.1.1 am 15. Februar 2023 veröffentlicht.[6]
Wenn Sie bei Systemen mit der CPUID 506CA direkt die OPNsense Business Edition in der Version 23.4 installieren, gibt es bei der Installation keine Probleme. Der Fix für den HPET Timecounter ist bei den Installationsmedien zu OPNsense 23.4 bereits integriert. Unser Wiki zeigt wie Sie die direkte Installation der OPNsense Business Edition vornehmen.
Autor: Werner Fischer Werner Fischer arbeitet im Product Management Team von Thomas-Krenn. Er evaluiert dabei neueste Technologien und teilt sein Wissen in Fachartikeln, bei Konferenzen und im Thomas-Krenn Wiki. Bereits 2005 - ein Jahr nach seinem Abschluss des Studiums zu Computer- und Mediensicherheit an der FH Hagenberg - heuerte er beim bayerischen Server-Hersteller an. Als Öffi-Fan nutzt er gerne Bus & Bahn und genießt seinen morgendlichen Spaziergang ins Büro.
|