Question

J'ai un projet avec une énorme quantité de code généré automatiquement, que nous construisons dans une bibliothèque statique avant de lier dans l'exécutable final. Nous utilisons gcc / moucheron 5.04a Il y a tellement de fichiers, nous devons briser le travail en lots et invoquer ar plusieurs fois pour construire la bibliothèque (afin d'éviter la limitation de longueur de ligne de commande), par exemple:

 [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                   

Nous recherchons des améliorations de vitesse possibles. Il semble que, comme l'archive se développe, chaque lot prend plus de temps et plus, sans doute parce qu'il a plus à la recherche (pour les mises à jour) avant d'ajouter des objets. Cela semble être la raison pour laquelle la suppression de l'archive Accélère qu'une mise à jour l'ancienne archives en place. Dans notre quête pour plus de vitesse, nous utilisons les drapeaux « Qcs » à la commande ar. Selon la page de manuel, « q » (qui devrait être rapide append) est vraiment synonyme de « r » (ce qui est « l'utilisation de remplacement »), « c » crée l'archive (rien de spécial) et skips « S » la génération d'un index (que nous couvercle en utilisant à nouveau « ranlib » à la fin.

Y at-il plus rapide de toute manière pratique, en utilisant intégré-outils, pour faire cette opération? Si le mode « append rapide » a travaillé ce serait sans doute ce que nous voulons, mais hélas.

Était-ce utile?

La solution

Nous avons constaté qu'une grande partie de la question du moment était l'emplacement des fichiers en cours d'archivage. Les chiffres ci-dessus sont des fichiers d'objets et d'archives situées sur un périphérique NAS. Faire la même opération sur un disque dur local (stockage temporaire) réduit le temps à ~ 20 - 40 secondes. Copie tous les fichiers, faire des archives locales, et copier le résultat ramène plus que l'archivage directement sur le NAS, mais nous cherchons à faire avancer notre ensemble du processus de construction stockage temporaire local, ce qui devrait améliorer considérablement les performances.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top