2009-12-22 10 views
1

J'ai un projet avec une énorme quantité de code généré automatiquement, que nous construisons dans une bibliothèque statique avant de créer un lien vers 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:Amélioration des performances d'archivage ar

[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 potentielles. Il semble que, à mesure que l'archive grandit, chaque lot prend de plus en plus de temps, vraisemblablement parce qu'il a plus à chercher (pour les mises à jour) avant d'ajouter des objets. Cela semble être pourquoi la suppression de l'archive rend plus rapide que la simple mise à jour de l'ancienne archive en place. Dans notre quête de plus de vitesse, nous utilisons les drapeaux "qcS" pour la commande ar. Selon la page de manuel, "q" (qui devrait être rapide-append) est vraiment un synonyme de "r" (qui est "use replacement"), "c" crée l'archive (rien de spécial là) et "S" saute générer un index (que nous couvrons en utilisant de nouveau "ranlib" à la fin)

Y a-t-il un moyen pratique, en utilisant des outils intégrés, de rendre cette opération plus rapide? Soit ce que nous voulons, mais hélas

Répondre

1

Nous avons constaté qu'une grande partie du problème de synchronisation était l'emplacement des fichiers archivés Les numéros ci-dessus sont pour les fichiers objet et archive situés sur un périphérique NAS. sur un disque dur local (stockage temporaire) réduit le temps à ~ 20 - 40 secondes.Copier tous les fichiers, faire des archives locales, et copier le résultat prend longtemps plus que l'archivage directement sur le NAS, mais nous envisageons de déplacer tout notre processus de construction vers un stockage temporaire local, ce qui devrait améliorer considérablement les performances.

Questions connexes