Es wurde eine Reihe von Patches veröffentlicht, die die Erstellung des Linux-Kernels um 50–80 % beschleunigen.

Ingo Molnar, ein bekannter Linux-Kernel-Entwickler und Autor des Taskplaners CFS (Completely Fair Scheduler), schlug auf der Linux-Kernel-Entwickler-Mailingliste eine Reihe von Patches zur Diskussion, die mehr als die Hälfte aller Dateien in den Kernel-Quellen und betreffen Erhöhen Sie die Geschwindigkeit einer vollständigen Kernel-Neuerstellung je nach Einstellung um 50–80 %. Die implementierte Optimierung ist insofern bemerkenswert, als sie mit der Hinzufügung des größten Satzes an Änderungen in der Geschichte der Kernel-Entwicklung verbunden ist – 2297 Patches wurden gleichzeitig zur Aufnahme vorgeschlagen, wodurch mehr als 25 Dateien geändert wurden (10 Header-Dateien im „include“) /“ und „arch/*/include/“-Verzeichnisse „und 15 Dateien mit Quelltexten).

Der Leistungsgewinn wird durch eine Änderung der Methode zur Verarbeitung von Header-Dateien erreicht. Es ist anzumerken, dass der Zustand der Header-Dateien im Laufe der dreißig Jahre der Kernel-Entwicklung aufgrund der großen Anzahl von gegenseitigen Abhängigkeiten zwischen den Dateien ein deprimierendes Erscheinungsbild angenommen hat. Die Umstrukturierung der Header-Datei dauerte über ein Jahr und erforderte eine erhebliche Überarbeitung der Hierarchie und Abhängigkeiten. Während der Umstrukturierung wurde daran gearbeitet, Typdefinitionen und APIs für verschiedene Kernel-Subsysteme zu trennen.

Zu den vorgenommenen Änderungen gehören: Trennung von High-Level-Header-Dateien voneinander, Eliminierung von Inline-Funktionen, die Header-Dateien verknüpfen, Trennung von Header-Dateien für Typen und APIs, Sicherstellung einer separaten Assemblierung von Header-Dateien (etwa 80 Dateien hatten indirekte Abhängigkeiten, die die Assemblierung beeinträchtigten, offengelegt durch). andere Header-Dateien), 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öcken zu Reduzieren Sie die Anzahl der Objektdateien.

Infolgedessen ermöglichte die geleistete Arbeit eine Reduzierung der Größe der in der Nachvorverarbeitungsphase verarbeiteten Header-Dateien um ein bis zwei Größenordnungen. Beispielsweise führte die Verwendung der Header-Datei „linux/gfp.h“ vor der Optimierung dazu, dass 1 Codezeilen hinzugefügt und 2 abhängige Header-Dateien einbezogen wurden, und nach der Optimierung wurde die Größe auf 13543 Zeilen und 303 abhängige Dateien reduziert. Oder ein anderes Beispiel: Bei der Vorverarbeitung der Datei „kernel/pid.c“ ohne Patch sind 181 Codezeilen enthalten, von denen die meisten in pid.c nicht verwendet werden. Durch die Trennung der Header-Dateien konnte die Menge des verarbeiteten Codes um das Dreifache reduziert und die Anzahl der verarbeiteten Zeilen auf 26 reduziert werden.

Als der Kernel mit dem Befehl „make -j96 vmlinux“ auf einem Testsystem vollständig neu erstellt wurde, zeigte die Anwendung von Patches eine Reduzierung der Build-Zeit des v5.16-rc7-Zweigs von 231.34 auf 129.97 Sekunden (von 15.5 auf 27.7 Builds). pro Stunde) und erhöhte auch die Effizienz der Verwendung von CPU-Kernen während der Montage. Bei einem inkrementellen Build ist der Effekt der Optimierung noch deutlicher spürbar – die Zeit zum Neuaufbau des Kernels nach der Durchführung von Änderungen an den Header-Dateien hat sich erheblich verkürzt (von 112 % auf 173 %, abhängig von der geänderten Header-Datei). Optimierungen sind derzeit nur für ARM64-, MIPS-, Sparc- und x86-Architekturen (32- und 64-Bit) verfügbar.

Source: opennet.ru

Kommentar hinzufügen