Ingo Molnar, ein bekannter Entwickler des Linux-Kernels und Autor des Completely Fair Scheduler (CFS), hat in der Mailingliste der Kernel-Entwickler eine Reihe von Patches zur Diskussion vorgeschlagen, die mehr als die HĂ€lfte aller Dateien im Quellcode des Kernels betreffen und eine Geschwindigkeitssteigerung der vollstĂ€ndigen Neukompilierung des Kernels um 50-80% je nach Einstellungen ermöglichen. Die implementierte Optimierung ist bemerkenswert, da sie mit der EinfĂŒhrung des gröĂten Satzes an Ănderungen in der Geschichte der Kern-Entwicklung verbunden ist â es werden insgesamt 2297 Patches angeboten, die mehr als 25.000 Dateien Ă€ndern (10.000 Header-Dateien in den Verzeichnissen âinclude/â und âarch/*/include/â und 15.000 Quellcodedateien).
Die Leistungssteigerung wird durch eine Ănderung der Methode zur Verarbeitung von Header-Dateien erreicht. Es wird festgestellt, dass der Zustand der Header-Dateien nach dreiĂig Jahren der Kernel-Entwicklung aufgrund einer Vielzahl von kreuzweisen AbhĂ€ngigkeiten zwischen den Dateien besorgniserregend ist. Die Arbeit an der Umstrukturierung der Header-Dateien dauerte mehr als ein Jahr und erforderte eine erhebliche Ăberarbeitung der Hierarchie und AbhĂ€ngigkeiten. Im Zuge der Umstrukturierung wurde die Arbeit zur Trennung der Typdefinitionen und APIs fĂŒr verschiedene Subsysteme des Kernels durchgefĂŒhrt.
Zu den vorgenommenen Ănderungen gehören: die Trennung der hochrangigen Header-Dateien voneinander, der Ausschluss von verbindenden Header-Dateien fĂŒr Inline-Funktionen, die Schaffung von Header-Dateien fĂŒr Typen und APIs, die GewĂ€hrleistung einer eigenstĂ€ndigen Kompilierung der Header-Dateien (etwa 80 Dateien wiesen störende, indirekte AbhĂ€ngigkeiten auf, die ĂŒber andere Header-Dateien deklariert waren), die automatische HinzufĂŒgung von AbhĂ€ngigkeiten zu den â.hâ- und â.câ-Dateien, eine schrittweise Optimierung der Header-Dateien, die Verwendung des Modus âCONFIG_KALLSYMS_FAST=yâ sowie die selektive Konsolidierung von C-Dateien in Kompilierungseinheiten zur Reduzierung der Anzahl der Objektdateien.
Insgesamt hat die getĂ€tigte Arbeit es ermöglicht, die GröĂe der Header-Dateien, die in der Post-Preprocessing-Phase verarbeitet werden, um 1-2 GröĂenordnungen zu reduzieren. Zum Beispiel fĂŒhrte die Verwendung der Header-Datei âlinux/gfp.hâ vor der Optimierung zu 13543 hinzugefĂŒgten Codezeilen und 303 abhĂ€ngigen Header-Dateien, wĂ€hrend die GröĂe nach der Optimierung auf 181 Zeilen und 26 abhĂ€ngige Dateien reduziert wurde. Ein weiteres Beispiel: Bei der PrĂ€processierung der Datei âkernel/pid.câ werden ohne Patch 94 Tausend Codezeilen eingebunden, von denen der GroĂteil in pid.c nicht verwendet wird. Die Trennung der Header-Dateien hat es ermöglicht, das Volumen des verarbeiteten Codes um das Drei fache zu reduzieren, wodurch die Anzahl der verarbeiteten Zeilen auf 36 Tausend gesenkt wurde.
Bei dem vollstĂ€ndigen Neuaufbau des Kernels mit dem Befehl âmake -j96 vmlinuxâ hat sich bei der Testsystemanwendung von Patches die Build-Zeit des Branches v5.16-rc7 von 231,34 auf 129,97 Sekunden verkĂŒrzt (von 15,5 auf 27,7 Builds pro Stunde) und die Effizienz der CPU-Kernauslastung wĂ€hrend des Builds erhöht. Bei einer inkrementellen Erneuerung ist der Effekt der Optimierung noch ausgeprĂ€gter â die Zeit fĂŒr die erneute Neukompilierung des Kernels nach Ănderungen an den Header-Dateien ist um ein Vielfaches gesenkt worden (von 112% bis 173%, abhĂ€ngig von der geĂ€nderten Header-Datei). Optimierungen sind derzeit nur fĂŒr die Architekturen ARM64, MIPS, Sparc und x86 (32-Bit und 64-Bit) verfĂŒgbar.
Quelle: opennet.ru
