So beschleunigen Sie die Kompilierung von Ubuntu-Apps (make, cmake, gcc)

11

Ich kompiliere hier einige Programme und habe 4 Kerne. Gibt es eine Möglichkeit zu sagen make, cmakeoder gcczu verwenden alle Kerne oder etwas zu kompilieren , die beeinflussen?

Luis Alvarado
quelle

Antworten:

13

Wenn ein Paket dies unterstützt, können Sie das -jFlag verwenden, um die Ausführung paralleler Jobs zuzulassen, z.

make -j8

Weitere Details zu diesem Flag finden Sie in der Stackoverflow-Frage. Warum ist die Leistung von -j besser, wenn eine Nummer übergeben wird, die größer ist als die Anzahl der verfügbaren Kerne? .

Verteilte Zusammenstellung

Wenn Sie mehrere Maschinen haben, probieren Sie distcc aus . Auf den beteiligten Maschinen , sudo apt-get install distcc. Angenommen, Ihre Build-Maschine ist 192.168.1.1:

  • Führen Sie auf den Hilfsmaschinen Folgendes aus:

    sudo distccd --log-file=/tmp/distccd.log --daemon -a 192.168.1.1
    
  • Auf dem Build-Computer müssen Sie vor dem Ausführen configureoder cmakeHosts angeben, die Sie für den Build-Prozess verwenden möchten. Geben Sie optional die Anzahl der gleichzeitigen Jobs nach einem Schrägstrich an (standardmäßig 4):

    export DISTCC_HOSTS='localhost/4 192.168.1.2/8 192.168.1.3/8'
    

    Lassen Sie den Compiler distcc verwenden:

    export PATH="/usr/lib/distcc:$PATH"
    

    Jetzt configureoder cmakedie Anwendung und bauen mit:

    make -j$(distcc -j)
    

    Beachten Sie /usr/lib/distcc, dass ein fehlgeschlagener PATH fehlschlägt. Stellen Sie sicher, dass Sie /usr/lib/distccnur einmal in Ihrem einstellen PATH.

Weitere Einzelheiten finden Sie auf den Handbuchseiten für distcc (1) und distccd (1) .

Lekensteyn
quelle
Oh mein Gott, dass J gut ist. Ich ging von 15 Minuten auf weniger als 1. Danke L.
Luis Alvarado
Mit distcc kann es schneller werden, die Kompilierung von PHP erfolgte in 2 Minuten, der Kernel in 3 Minuten (drei i5-Maschinen)
Lekensteyn
Ich werde es mit distcc versuchen, wenn ich zur Arbeit komme. Habe gestern eine ähnliche Frage dazu gestellt. Vielleicht können Sie hier helfen: askubuntu.com/questions/106810/…
Luis Alvarado
Distccd als root auszuführen scheint ein schlechter Plan zu sein. Ich habe es aus einigen Gründen nicht verwendet, aber als ich es tat, konnte ich root nicht verwenden, weil ich auf diesen Computern keine Berechtigung hatte.
Ams
@ams Sie müssen es nicht als root ausführen. Wenn Sie es als root ausführen und Benutzer wechseln möchten, verwenden Sie distccd --user nobody. Andernfalls wird es unter dem Benutzer ausgeführt, der es ausgeführt hat.
Lekensteyn