Cosa posso fare per accelerare il createrepo?


8

Stiamo utilizzando un repository yum per distribuire il nostro software alle nostre istanze di produzione. Sfortunatamente, createrepo sta diventando un collo di bottiglia e abbiamo solo 469 pacchetti nel repository.

$ time createrepo /opt/tm-yum-repo
Spawning worker 0 with 469 pkgs
Workers Finished
Gathering worker results

Saving Primary metadata
Saving file lists metadata
Saving other metadata
Generating sqlite DBs
Sqlite DBs complete

real    0m43.188s
user    0m37.798s
sys 0m1.296s

Cosa posso fare per renderlo più veloce?


Perché è importante il tempo di creazione?
ewwhite,

1
Gli sviluppatori stanno aspettando che il loro codice diventi attivo. Siamo passati da un modello "rsync a live box" a un modello rpm e si lamentano del fatto che ora ci vogliono alcuni minuti in cui impiegava qualche secondo. Sono in qualche modo solidale con la loro condizione. Ma solo un po ':)
jsd

Grazie per la spiegazione. Non riuscivo a capire se si trattasse di un ritardo una tantum o meno.
ewwhite,

Si prega di pubblicare i risultati "dopo l'ottimizzazione" in modo da poter vedere quanto tempo le ottimizzazioni hanno salvato :)
Joshua Miller,

L'uso delle opzioni "--cachedir = cache --update --workers 4" ha ridotto il tempo da 50 secondi a 15 secondi, quindi una vittoria enorme! Grazie per i suggerimenti molto utili, ragazzi!
jsd

Risposte:


9

L' --cachediropzione data da dmourati nella sua risposta ti aiuterà, ma dovresti anche usare --update, specialmente se non stai sostituendo tutti i 469 pacchetti contemporaneamente.

       --update
              If metadata already exists  in  the  outputdir  and  an  rpm  is
              unchanged  (based on file size and mtime) since the metadata was
              generated, reuse the existing metadata rather than recalculating
              it.  In  the  case  of a large repository with only a few new or
              modified rpms this can significantly reduce I/O  and  processing
              time.

Inoltre, considera la possibilità di creare un repository separato per questo pacchetto se la sua distribuzione in questo modo è veramente sensibile al tempo e --updatenon aiuta abbastanza.


6

Dalla manpage di createrepo, vedrai un'opzione per una cache.

-c --cachedir <path>
              Specify a directory to use as a cachedir. This allows createrepo
              to create a cache of checksums of packages in the repository. In
              consecutive runs of createrepo over the same repository of files
              that  do  not  have  a  complete change out of all packages this
              decreases the processing time dramatically.

Vorrei iniziare da lì.

Se ciò non accelerasse sufficientemente la creazione, guarderei SSD o tmpfs .


4

Hai provato a utilizzare --worker per CPU multi core? Normalmente uso --workers 4 per generare 4 fili di createrepo


2

Usa createrepo_c , implementazione C di createrepo


1
Benvenuti a SE. aggiungi alcune informazioni o collegamenti a fonti per rendere la tua risposta più utile.
rubo77,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.