it-swarm.com.de

Wie beschleunigt man die Linux-Kernel-Kompilierung?

Ich habe Core i5 mit 8 GB RAM . Ich habe VMware Workstation 10.0.1 auf meinem Computer installiert ..__ Ich habe Fedora 20 Desktop Edition auf VMware als Gastbetriebssystem installiert.

Ich arbeite an Linux-Kernel-Quellcode v 3.14.1. Ich entwickle einen E/A-Scheduler für Linux-Kernel. Nach jeder Änderung des Codes dauert es ca. 1 Stunde und 30 Minuten, bis der gesamte Kernel-Code kompiliert und installiert ist, um die Änderungen zu sehen.

Kompilierungs- und Installationsbefehle: make menuconfig, make, make modules, make modules_install, make install

Meine Frage ist es also, 1 Stunde und 30 Minuten in nur 10 bis 15 Minuten zu reduzieren?

17
momersaleem

Verwenden Sie nicht make menuconfig für jede Änderung, die Sie an den Quellen vornehmen, da dies eine vollständige Zusammenstellung aller Elemente auslöst, unabhängig davon, wie unbedenklich Ihre Änderung ist. Dies ist nur erforderlich, wenn sich die Konfigurationsoption des Kernels ändert und dies sollte während der Entwicklung selten vorkommen.

Mach einfach:

make

oder wenn Sie die parallele Zusammenstellung bevorzugen:

make -j4

oder wie viele gleichzeitige Aufgaben Sie auch vorhaben.

Dann kann natürlich make install usw. für die Bereitstellung der kürzlich erstellten Binärdateien erforderlich sein.

Ein anderer Trick besteht darin, den Kernel auf das für Ihre Tests erforderliche Minimum zu konfigurieren. Ich habe festgestellt, dass eine UML-Kompilierung (User Mode Linux) für viele Aufgaben die schnellste ist. Sie können auch nützliche make localmodconfig anstelle von make menuconfig finden, um mit zu beginnen.

22
rodrigo

Sie müssen make menuconfig nicht jedes Mal erneut ausführen, wenn Sie eine Änderung vornehmen - es ist nur einmal erforderlich, um die .config-Kernel-Datei zu erstellen. (Oder möglicherweise erneut, wenn Sie Kconfig-Dateien bearbeiten, um Konfigurationsoptionen hinzuzufügen oder zu ändern, dies sollte jedoch nicht häufig vorkommen.)

Solange Ihr .config in Ruhe gelassen wird, sollte make nur die von Ihnen geänderten Dateien neu kompilieren. Es gibt einige Dateien, die jedes Mal kompiliert werden müssen, die überwiegende Mehrheit jedoch nicht.

5
duskwuff
  1. Verwenden Sie make parallel build mit der Option -j
  2. Kompilieren Sie nur für die Zielarchitektur, da andernfalls der Kernel für jede aufgeführte Architektur erstellt wird.

d. h. zum Beispiel anstatt zu laufen:

make

lauf:

make Arch=<your architecture> -jN

dabei ist N die Anzahl der Kerne auf Ihrem Computer (cat /proc/cpuinfo listet die Anzahl der Kerne auf). Zum Beispiel für i386 target und Host-Rechner mit 4 cores (Ausgabe von cat /proc/cpuinfo): 

make Arch=i386 -j4

Auf ähnliche Weise können Sie die anderen Make-Ziele (modules, modules_install, install) mit -jN-Flag ausführen. 

Hinweis: make prüft die geänderten Dateien und kompiliert nur die Dateien, die geändert wurden, sodass nur der anfängliche Build Zeit in Anspruch nehmen sollte. Nachfolgende Builds werden schneller ausgeführt.

3
brokenfoot

make -j verwendet alle verfügbaren CPUs.

2
Eric Wang

ccache sollte in der Lage sein, Ihre Kompilierungszeiten drastisch zu beschleunigen. Sie beschleunigt die Neukompilierung, indem sie frühere Kompilierungen zwischenspeichert und erkennt, wenn dieselbe Kompilierung erneut durchgeführt wird. Ihre erste Kompilierung mit ccache ist langsamer, da der Cache aufgefüllt werden muss. Nachfolgende Builds sollten jedoch viel schneller sein.

Wenn Sie sich nicht mit ccache-Konfigurationen beschäftigen möchten, können Sie es einfach so ausführen, um den Kernel zu kompilieren:

ccache make
1
Elias

Wenn Sie über ausreichend Speicher verfügen RAM und Ihren Computer während des Kernel-Aufbaus nicht verwenden, können Sie eine große Anzahl gleichzeitiger Jobs erzeugen. Stellen Sie jedoch sicher, dass Ihr RAM ausreicht, da Ihr System sonst hängen bleibt und abstürzt.

0
sohom154

Vielleicht möchten Sie zusätzlich zu den vorherigen Vorschlägen während der Verwendung von ccache CONFIG_GCC_PLUGINS deaktivieren (falls festgelegt), andernfalls erhalten Sie möglicherweise eine Menge Cache-Fehler, wie in this example zu sehen ist.

0
Marcus Linsner

Zusätzlich zu den vorherigen Vorschlägen könnte die Verwendung der Ccache-Software ( https://ccache.samba.org/ ) und eines Kompilierungsverzeichnisses auf einem SSD-Laufwerk die Kompilierungszeit drastisch reduzieren.

0
a.grochmal