Ingo Molnar, ein renommierter BautrĂ€ger Linux Der Entwickler des Kernels und der Autor des CFS-Task-Schedulers (Completely Fair Scheduler) schlugen es zur Diskussion auf der Mailingliste der Kernel-Entwickler vor. Linux Eine Reihe von Patches betrifft mehr als die HĂ€lfte aller Dateien im Kernel-Quellcode und ermöglicht je nach Einstellungen eine Geschwindigkeitssteigerung von 50â80 % bei vollstĂ€ndigen Kernel-Neukompilierungen. Diese Optimierung ist bemerkenswert, da sie die gröĂte Menge an Ănderungen in der Geschichte der Kernelentwicklung umfasst: 2297 gleichzeitig vorgeschlagene Patches, die mehr als 25 Dateien verĂ€ndern (10 Header-Dateien in den Verzeichnissen âinclude/â und âarch/*/include/â sowie 15 Quellcodedateien).
Die Leistungssteigerungen werden durch eine Ănderung der Verarbeitung von Header-Dateien erreicht. Es ist bekannt, dass sich der Zustand der Header-Dateien im Laufe von dreiĂig Jahren Kernel-Entwicklung aufgrund der Vielzahl von AbhĂ€ngigkeiten zwischen den Dateien verschlechtert hat. Die Umstrukturierung der Header-Dateien dauerte ĂŒber ein Jahr und erforderte eine umfassende Ăberarbeitung der Hierarchie und AbhĂ€ngigkeiten. Im Zuge der Umstrukturierung wurden Typdefinitionen und APIs fĂŒr verschiedene Kernel-Subsysteme getrennt.
Zu den vorgenommenen Ănderungen gehören: Trennung der Header-Dateien auf hoher Ebene voneinander, Ausschluss von Inline-Funktionen, die Header-Dateien verknĂŒpfen, Zuweisung von Header-Dateien fĂŒr Typen und APIs, Bereitstellung einer separaten Assembly von Header-Dateien (etwa 80 Dateien hatten indirekte AbhĂ€ngigkeiten, die die Assembly störten und durch andere Header-Dateien offengelegt wurden), automatisches HinzufĂŒgen von AbhĂ€ngigkeiten zu â.hâ- und â.câ-Dateien, schrittweise Optimierung von Header-Dateien, Verwendung des Modus âCONFIG_KALLSYMS_FAST=yâ, selektive Konsolidierung von C-Dateien in Assembly-Blöcke, um die Anzahl der Objektdateien zu reduzieren.
Die durchgefĂŒhrte Arbeit ermöglichte es uns, die GröĂe der in der Post-Preprocessing-Phase verarbeiteten Header-Dateien um ein bis zwei GröĂenordnungen zu reduzieren. Beispielsweise fĂŒhrte die Verwendung der Header-Datei âlinux/gfp.hâ vor der Optimierung zum HinzufĂŒgen von 1 Codezeilen und zum Verbinden von 2 abhĂ€ngigen Header-Dateien. Nach der Optimierung reduzierte sich die GröĂe auf 13543 Zeilen und 303 abhĂ€ngige Dateien. Oder ein anderes Beispiel: Bei der Vorverarbeitung der Datei âkernel/pid.câ ohne Patch werden 181 Codezeilen verbunden, von denen die meisten in pid.c nicht verwendet werden. Durch die Trennung der Header-Dateien konnten wir die Menge des verarbeiteten Codes um das Dreifache reduzieren und die Anzahl der verarbeiteten Zeilen auf 26 reduzieren.
Beim vollstĂ€ndigen Neuaufbau des Kernels mit dem Befehl âmake -j96 vmlinuxâ auf dem Testsystem reduzierte sich durch die Anwendung der Patches die Buildzeit des v5.16-rc7-Zweigs von 231.34 auf 129.97 Sekunden (von 15.5 auf 27.7 Builds pro Stunde) und erhöhte gleichzeitig die Effizienz der CPU-Nutzung wĂ€hrend des Builds. Bei der inkrementellen Assemblierung ist der Effekt der Optimierung noch deutlicher: Die Zeit fĂŒr den Neuaufbau des Kernels nach Ănderungen an den Header-Dateien verringerte sich um ein Vielfaches (von 112 % auf 173 %, abhĂ€ngig von der geĂ€nderten Header-Datei). Optimierungen sind derzeit nur fĂŒr die Architekturen ARM64, MIPS, Sparc und x86 (32- und 64-Bit) verfĂŒgbar.
Source: opennet.ru
