Domanda

Ho un progetto con una quantità enorme di codice generato automaticamente, che si costruisce in una libreria statica prima di collegare nell'eseguibile finale. Usiamo gcc / 5.04a moscerino Ci sono così tanti file, dobbiamo spezzare il lavoro in lotti e invocare ar più volte per costruire la biblioteca (al fine di evitare la limitazione di lunghezza della riga di comando), per esempio:

 [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                   

Siamo alla ricerca di potenziali miglioramenti di velocità. Sembra che, come l'archivio cresce, ogni partita richiede più tempo e più a lungo, presumibilmente perché ha più per la ricerca (per gli aggiornamenti) prima di aggiungere gli oggetti. Questo sembra essere il motivo per cui la cancellazione dell'archivio rende più veloce di un semplice aggiornamento del vecchio archivio al suo posto. Nella nostra ricerca di una maggiore velocità, usiamo le bandiere "QCS" al comando ar. Secondo la pagina man, "q" (che dovrebbe essere rapido-append) è davvero sinonimo di "r" (che è "la sostituzione l'uso"), "c" crea l'archivio (niente di speciale) e salta "S" generando un indice (che copriamo utilizzando "ranlib" di nuovo alla fine.

C'è un modo conveniente, utilizzando built-in-strumenti, per rendere l'operazione più veloce? Se la modalità "append rapida" ha lavorato, che sarebbe probabilmente quello che vogliamo, ma ahimè.

È stato utile?

Soluzione

Abbiamo scoperto che una parte enorme del problema di temporizzazione era la posizione dei file che vengono archiviati. I numeri di cui sopra sono per i file oggetto e archiviazione situati su un dispositivo NAS. Fare la stessa operazione su un disco rigido locale (deposito temporaneo) riduce il tempo a ~ 20 - 40 secondi. Copia di tutti i file, facendo archivio locale, e copiare il risultato riporta più di archiviazione direttamente sul NAS, ma stiamo cercando di spostare il nostro intero processo di generazione di archiviazione temporanea locale, che dovrebbe migliorare sostanzialmente le prestazioni.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top