Thomas Gleixner von Linutronix, das letztes Jahr von Intel übernommen wurde, und sein Team arbeiten daran, den Boot-Prozess von Linux x86/x86_64 zu bereinigen. Eine Reihe von 17 Patches, die den frühen Linux-Kernel-Initialisierungscode und andere baumweite Änderungen betreffen, wurden jetzt zur Diskussion gestellt.
Linux-Kernel-Entwickler arbeiten daran, den x86-Startvorgang zu bereinigen und den Code zu bereinigen. Thomas Gleixner erklärte den aktuellen Linux x86-Boot-Code und den Schwerpunkt dieser neuesten Patch-Serie:
„Mein Team und ich arbeiten daran, den x86-Boot-Prozess zu bereinigen, insbesondere die komplette Horrorshow von CPUID.“ Evaluierung, die aus verdrahteten Schaltkreisen, Klebeband und Sekundenkleber aufgebaut ist.
Ein damit verbundenes Ziel besteht darin, die Initialisierung der Infrastruktur, die während des frühen Startvorgangs nicht erforderlich ist, in eine spätere Phase des Startvorgangs zu verschieben. Der frühe Startvorgang ist fragil und bereits kompliziert genug, sodass alles, was in eine spätere Phase übergehen kann, ein Gewinn ist.
Die X86-FPU-Initialisierung ist einer der offensichtlichen Teile, für den es keinerlei Rechtfertigung gibt, sie frühzeitig durchzuführen. Die einzige Voraussetzung ist, dass sie stattfindet vor dem alternativen Patchen. Eine frühzeitige Durchführung erfordert auch eine benutzerdefinierte Befehlszeilenanalyse, die offensichtlich vermieden werden kann, wenn die Initialisierung später erfolgt.
Alternatives Patchen erfolgt über check_bugs(), das spät in start_kernel() aufgerufen wird. Das Verschieben der FPU-Initialisierung dorthin ist zu spät, da check_bugs() nach fork_init() aufgerufen wird, fork_init() jedoch erfordert, dass die FPU auf X86 initialisiert wird, da auf X86 die Größe von task_struct von der Größe des FPU-Registerpuffers abhängt.
Um eine weitere magische Funktion zu vermeiden, haben wir uns vorgenommen, check_bugs() früher zu verschieben und haben alle Inkarnationen überprüft, ob es einen Grund gibt, dies so spät zu tun. Es stellte sich heraus, dass es keine gibt (berühmte letzte Worte), aber es zeigte sich auch, dass check_bugs() eine grobe Fehlbezeichnung ist.
check_bugs() ist zu einem Speicherort für die Fertigstellung der CPU-Initialisierung geworden, bevor der Rest des Init-Codes ausgeführt wird.“
Diese Patchserie zielt zunächst auf 17 Patches und zielt darauf ab, den Linux x86-Bootcode zu bereinigen. Es ist eine nette Anstrengung und folgt Gleixners jüngster Arbeit zur parallelen CPU Als weitere Boot-Verbesserung ist die Startunterstützung für Linux 6.5 geplant.