Que puis-je faire pour accélérer le createrepo?

8

Nous utilisons un référentiel yum pour distribuer nos logiciels à nos instances de production. Malheureusement, createrepo devient un goulot d'étranglement, et nous n'avons que 469 packages dans le référentiel.

$ 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

Que puis-je faire pour l'accélérer?

jsd
la source
Pourquoi le temps createrepo est-il important?
ewwhite
1
Les développeurs attendent que leur code soit mis en ligne. Nous sommes passés d'un modèle "rsync à live boxes" à un modèle rpm et ils se plaignent que cela prend maintenant quelques minutes alors que cela prenait quelques secondes. Je suis quelque peu sensible à leur sort. Mais seulement un peu :)
jsd
Merci pour l'explication. Je ne pouvais pas dire si c'était un retard unique ou non.
ewwhite
Veuillez publier vos résultats "après optimisation" afin que nous puissions voir combien de temps les optimisations ont permis d'économiser :)
Joshua Miller
L'utilisation des options "--cachedir = cache --update --workers 4" a réduit le temps de 50 secondes à 15 secondes, donc une énorme victoire! Merci pour les suggestions très utiles, les gars!
jsd

Réponses:

9

L' --cachediroption donnée par dmourati dans sa réponse vous aidera, mais vous devez également l'utiliser --update, surtout si vous ne remplacez pas tous les 469 packages à la fois.

       --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.

En outre, envisagez de créer un référentiel distinct pour ce package si le déployer de cette façon est vraiment sensible au temps et --updaten'aide pas suffisamment.

Michael Hampton
la source
6

À partir de la page de manuel createrepo, vous verrez une option pour un cachedir.

-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.

Je commencerais par là.

Si cela n'accélérait pas suffisamment createrepo, je regarderais SSD ou tmpfs .

dmourati
la source
4

Avez-vous essayé d'utiliser --workers pour le processeur multicœur? Normalement, j'utilise --workers 4 pour générer 4 fils de createrepo

Shâu Shắc
la source
2

Utiliser createrepo_c , implémentation C de createrepo

user799109
la source
1
Bienvenue chez SE. veuillez ajouter des informations ou des liens vers des sources pour rendre votre réponse plus utile.
rubo77