Frage

Ich habe ein Projekt mit einer riesigen Menge an automatisch generiertem Code, den wir in eine statische Bibliothek aufbauen, bevor wir mit der endgültigen ausführbaren Datei verknüpfen. Wir verwenden GCC/GNAT 5.04A. Es gibt so viele Dateien, dass wir den Job in Stapel unterbrechen und AR mehrmals aufrufen müssen, um die Bibliothek zu konstruieren (um die Einschränkung der Befehlszeilenlänge zu vermeiden), z. B.:

 [echo] Archiving codegen                   
 [echo] Deleting old codegen archive                     
   [ar] Using ar found in /usr/bin          
   [ar] Batch 1 of 7 completed in 37.871 s  
   [ar] Batch 2 of 7 completed in 55.796 s  
   [ar] Batch 3 of 7 completed in 89.709 s  
   [ar] Batch 4 of 7 completed in 256.894 s 
   [ar] Batch 5 of 7 completed in 196.704 s 
   [ar] Batch 6 of 7 completed in 248.334 s 
   [ar] Batch 7 of 7 completed in 243.759 s 
   [ar] Archiving took: 1129.067 s          
   [ar] Using ranlib found in /usr/bin      
   [ar] Indexing took: 247.223 s            
 [echo] Done with codegen                   

Wir suchen nach potenziellen Geschwindigkeitsverbesserungen. Es scheint, dass beim Wachstum des Archivs jede Charge immer länger dauert, vermutlich, weil es mehr zu suchen (nach Updates), bevor Objekte hinzugefügt werden. Dies scheint der Grund zu sein, warum das Löschen des Archivs es schneller macht, als nur das alte Archiv zu aktualisieren. Auf unserer Suche nach mehr Geschwindigkeit verwenden wir die Flaggen "QCs" zum AR -Befehl. Gemäß der Mannseite ist "Q" (die schnelle Anmeldezeiten sein sollte) wirklich ein Synonym für "R" (das heißt "Ersatz") "C" das Archiv (nichts Besonderes dort) und "S" übersprungen Erzeugen Sie einen Index (den wir am Ende erneut "Ranlib" verwenden.

Gibt es einen bequemen Weg, um integrierte Tools zu verwenden, um diesen Vorgang schneller zu gestalten? Wenn der "Quick Append" -Modus funktioniert, wäre dies wahrscheinlich das, was wir wollen, aber leider.

War es hilfreich?

Lösung

Wir stellten fest, dass ein großer Teil des Timing -Problems der Ort der archivierten Dateien war. Die obigen Zahlen sind für Objekt- und Archivdateien auf einem NAS -Gerät bestimmt. Die gleiche Operation auf einer lokalen Festplatte (temporärer Speicher) reduziert die Zeit auf ~ 20 - 40 Sekunden. Das Kopieren aller Dateien, das lokale Archiv und das Kopieren des Ergebnisses dauert länger als das Archivieren direkt auf dem NAS. Wir möchten jedoch unseren gesamten Build -Prozess in den lokalen temporären Speicher verschieben, was die Leistung erheblich verbessern sollte.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top