Pregunta

Tengo un proyecto con una gran cantidad de código generado automáticamente, lo que construimos en una biblioteca estática antes de enlazar en el ejecutable final. Podemos utilizar gcc / 5.04a mosquito Hay tantos archivos, tenemos que romper el trabajo en lotes e invocar ar varias veces para construir la biblioteca (con el fin de evitar la limitación de la longitud de línea de comandos), por ejemplo:

 [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                   

Estamos en busca de posibles mejoras en la velocidad. Parece ser que, a medida que crece el archivo, cada lote tarda más y más largos, presumiblemente debido a que tiene más que buscar (para actualizaciones) antes de añadir objetos. Esta parece ser la razón por la supresión del archivo hace que sea más rápido que acaba de actualizar el archivo de edad en su lugar. En nuestra búsqueda de más velocidad, utilizamos las banderas "círculos de calidad" al comando ar. De acuerdo con la página del manual, "q" (que debe ser rápida de agregación) es realmente un sinónimo de "r" (que es "reemplazo de uso"), "c" crea el archivo (nada especial) y se salta "S" la generación de un índice (que cubrimos mediante el uso de "ranlib" de nuevo al final.

¿Hay alguna manera conveniente, utilizando una función de-herramientas, para hacer esta operación más rápido? Si el modo "append rápida" trabajó que probablemente sería lo que queremos, pero por desgracia.

¿Fue útil?

Solución

Hemos encontrado que una gran parte del problema de tiempo fue la ubicación de los archivos que están siendo archivada. Los números anteriores son para los archivos de objetos y archivos ubicados en un dispositivo NAS. Haciendo la misma operación en un disco duro local (almacenamiento temporal) reduce el tiempo a ~ 20 - 40 segundos. Copiar todos los archivos, haciendo archivo local, y copiar el resultado de nuevo tarda más de archivar directamente en el NAS, pero estamos buscando a mover todo nuestro proceso de generación al almacenamiento temporal local, lo que debería mejorar sustancialmente el rendimiento.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top