¿Qué puedo hacer para acelerar createrepo?


8

Estamos utilizando un repositorio yum para distribuir nuestro software a nuestras instancias de producción. Desafortunadamente, createrepo se está convirtiendo en un cuello de botella, y solo tenemos 469 paquetes en el repositorio.

$ 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

¿Qué puedo hacer para hacerlo más rápido?


¿Por qué importa el tiempo createrepo?
ewwhite

1
Los desarrolladores están esperando que su código se publique. Pasamos de un modelo de "rsync a cajas vivas" a un modelo de rpm y se quejan de que ahora lleva unos minutos donde solía tomar unos segundos. Simpatizo un poco con su situación. Pero solo un poco :)
jsd

Gracias por la explicación. No podría decir si esto fue un retraso de una sola vez o no.
ewwhite

Publique sus resultados "después de la optimización" para que podamos ver cuánto tiempo ahorraron las optimizaciones :)
Joshua Miller

El uso de las opciones "--cachedir = caché --update --workers 4" redujo el tiempo de 50 segundos a 15 segundos, ¡gran victoria! Gracias por las sugerencias muy útiles, muchachos!
jsd

Respuestas:


9

La --cachediropción dada por dmourati en su respuesta lo ayudará, pero también debe usarla --update, especialmente si no está reemplazando todos los 469 paquetes a la vez.

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

Además, considere hacer un repositorio separado para este paquete si implementarlo de esta manera es realmente urgente y --updateno ayuda lo suficiente.


6

Desde la página de manual createrepo, verá una opción para un caché.

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

Yo comenzaría por allí.

Si eso no acelerara suficientemente createrepo, miraría SSD o tmpfs .


4

¿Has intentado utilizar --workers para CPU multi-core? Normalmente uso --workers 4 para generar 4 hilos de createrepo


2

Utilice createrepo_c , implementación C de createrepo


1
Bienvenido a SE. agregue información o enlaces a las fuentes para que su respuesta sea más útil.
rubo77
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.