Ein Set von Patches wurde veröffentlicht, die den Linux-Kernel-Bau um 50-80 % beschleunigen

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

60GB SSD 8Gb DDR4