Tipps, um Builds schneller zu machen

8

Gibt es eine Möglichkeit, Software-Builds / Compilation schneller zu machen? Wir haben einen Build-Baum c, c ++ mit Makefile, das für neue Builds fast 2 Stunden dauert. Ich bin auf einige kommerzielle Lösungen wie ElectricAccelerator, Sparkbuild gestoßen, gibt es irgendwelche Opensource-Entsprechungen?

    
Kamath 18.01.2012, 15:23
quelle

7 Antworten

9

Vielleicht möchten Sie sich distcc , ccache ansehen und natürlich -j make option.

    
Michael Krelin - hacker 18.01.2012, 15:26
quelle
9

Eine Suche bei Google könnte helfen, eine Liste von Open-Source-Software zu erhalten.
Wr.t Ihr Code können Sie Folgendes tun, um Build-Zeiten zu reduzieren:

  • Verwenden Sie, wo immer möglich, Vorwärtsdeklarationen.
  • Verwenden Sie Namespace-Deklarationen anstelle der Namespace-Anweisung .
  • Stellen Sie sicher, dass Sie keine unnötigen Includes haben.
Alok Save 18.01.2012 15:27
quelle
4

In unserer Firma hatten wir eine Menge Produkte, die eine längere Bauzeit haben wie 3-6 Stunden.

Es gibt 2 Techniken, die wir verwendet haben.

  1. Verwenden Sie die parallele Erstellung von -j -Option von make
  2. RAM als Datenträger mounten Dann verschiebe alle Dateien dorthin und kompiliere. Aber Sie brauchen viel RAM dafür. Wir haben Amazons ec2 Instanzen benutzt. Es war ziemlich teuer.
Shiplu Mokaddim 18.01.2012 15:33
quelle
2

Eine Möglichkeit besteht darin, den Build einfach auf schnellerer Hardware auszuführen. Ich stelle fest, dass dies nicht immer eine Option ist, aber es ist immer noch etwas zu beachten.

Wie @Martin erwähnt, beinhalten einige spezielle zu aktualisierende Untersysteme die Verwendung einer so schnellen Festplatte wie eine SSD, das Hinzufügen von mehr RAM, eine schnellere CPU (und mehr Kerne, wenn Ihr Compiler sie verwenden kann) und Sicherstellen, dass die zu erstellenden Dateien alle lokal auf dem Erstellungscomputer (nicht im Netzwerk) sind.

Sie sollten dem Build-Prozess auch so viel wie möglich von diesem Ressourcen-Pool geben, also entfernen Sie alle nicht-Build-bezogenen Prozesse und Anwendungen von der Build-Maschine. Dies wird jegliche Ressourcenkonkurrenz reduzieren.

    
cdeszaq 18.01.2012 15:28
quelle
0

Vorkompilierte Header können bei korrekter Verwendung die Build-Zeiten drastisch reduzieren.

    
thiton 18.01.2012 18:54
quelle
0

Wir verwenden eine Kombination aus distmake , ccache und a makefile-generator , die ein parallelisierbares Makefile erstellt. C/C++ builds können extrem gut parallelisieren; oft können alle .o -Dateien parallel kompiliert werden.

Distmake ist eine verteilte Implementierung von make, basierend auf gnu make und veröffentlicht unter GPL. Ich behalte es. Sie können damit mehrere Hosts parallelisieren. Dies erfordert, dass alle Hosts die gleiche Ansicht des Dateisystems haben, z. NFS, so dass derselbe Befehl auf jedem Build-Host ausgeführt werden kann.

Das Deaktivieren von Optimierungen führt tendenziell zu schnelleren Builds, wenn Sie diese Option haben.

Wenn Sie bereits eine parallele Build-Architektur verwenden und diese immer noch langsam ist, müssen Sie sie vielleicht nur untersuchen. Beobachten Sie den Fortschritt mit einer Stoppuhr und sehen Sie, wo es Engpässe gibt. Suchen Sie nach "langen Stangen", die Sie vielleicht nicht erwartet haben. Viel Glück.

    
jpc 28.01.2012 00:26
quelle
0

Sie haben Ihre Konfigurationssoftware nicht angegeben, aber wir haben ein Problem mit dem Clearcase entdeckt. Da Dateien auf Dateibasis ausgewertet werden, kann das Öffnen einer Datei ein Engpass sein. Denken Sie nur darüber nach, weiter zu lesen, wenn Sie mit einem Clearcase "festhängen".

Wir haben also festgestellt, dass Sie Ihre Build-Zeit auf 1/30 der Zeit (für uns) reduzieren können, indem Sie Ihre Include-Wächter für Header-Dateien ändern.

Grundsätzlich haben Sie in Ihren Header-Dateien oben einen Wächter wie:

%Vor%

Dann weg von woanders, du schließt foo.h ein. Richtig, naja, wir fanden das aufgrund einer schrecklichen Kopplung von Dateitypen und so, dass einige allgemeine Header für jede von uns kompilierte .c-Datei hunderte Male eingeschlossen wurden. Mit dem Fehler im Design von Clearcase heißt das, dass man jede dieser Dateien hunderte Male öffnet, nur um den Inhalt zu ignorieren und die Datei wieder zu schließen.

Also ... statt nur ein #include für foo, benutze den Wächter, um foo bedingt einzuschließen. Normalerweise ist das eine schlechte Übung und ein schrecklicher Alptraum (wenn jemand anfängt, die Wachen zu wechseln).

Also ... in Ihrer .c-Datei würden Sie etwas tun wie:

%Vor%

Wie ich schon sagte ... schlechte Praxis, aber wenn Sie Clearcase verwenden und es mit 3-4 Bauzeiten (wie wir es hatten) beißen, ... könnte es sich lohnen, darüber nachzudenken (oder einfach nur eine Kopie Ihres ganzen Baumes zu machen) außerhalb des Klarglases). Oder Graben Clearcase. Oder machen Sie einen besseren Job mit Typ-Abhängigkeiten.

Wir waren in der Lage, einige der am häufigsten verwendeten Includes zu "reparieren" und eine ziemlich dramatische Verbesserung der Build-Zeiten zu erreichen.

    
LawfulEvil 07.11.2017 22:57
quelle

Tags und Links