Pergunta

Tenho um projeto com uma enorme quantidade de código gerado automaticamente, que construímos em uma biblioteca estática antes de vincular ao executável final.Usamos gcc/gnat 5.04a Existem tantos arquivos que temos que dividir o trabalho em lotes e invocar ar várias vezes para construir a biblioteca (para evitar a limitação de comprimento da linha de comando), por exemplo:

 [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 procurando possíveis melhorias de velocidade.Parece que, à medida que o arquivo cresce, cada lote leva cada vez mais tempo, presumivelmente porque tem mais para pesquisar (por atualizações) antes de adicionar objetos.Parece ser por isso que a exclusão do arquivo torna tudo mais rápido do que apenas atualizar o arquivo antigo.Em nossa busca por mais velocidade, usamos os sinalizadores “qcS” no comando ar.De acordo com a página de manual, "q" (que deve ser anexado rapidamente) é na verdade um sinônimo de "r" (que é "usar substituição"), "c" cria o arquivo (nada de especial aí) e "S" pula gerando um índice (que abordamos usando "ranlib" novamente no final.

Existe alguma maneira conveniente, usando ferramentas integradas, de tornar essa operação mais rápida?Se o modo "anexação rápida" funcionasse, provavelmente seria o que queremos, mas, infelizmente.

Foi útil?

Solução

Descobrimos que grande parte do problema de tempo era a localização dos arquivos arquivados.Os números acima são para arquivos de objetos e arquivos localizados em um dispositivo NAS.Fazer a mesma operação em um disco rígido local (armazenamento temporário) reduz o tempo para aproximadamente 20 a 40 segundos.Copiar todos os arquivos, arquivar localmente e copiar o resultado leva mais tempo do que arquivar diretamente no NAS, mas estamos pensando em mover todo o nosso processo de construção para armazenamento temporário local, o que deve melhorar substancialmente o desempenho.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top