Was kann ich tun, um createrepo zu beschleunigen?

8

Wir verwenden ein Yum-Repository, um unsere Software an unsere Produktionsinstanzen zu verteilen. Leider wird createrepo zu einem Engpass, und wir haben nur 469 Pakete im 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

Was kann ich tun, um es schneller zu machen?

jsd
quelle
Warum ist die Createrepo-Zeit wichtig?
ewwhite
1
Entwickler warten darauf, dass ihr Code live geschaltet wird. Wir sind von einem "rsync to live box" -Modell zu einem RPM-Modell übergegangen und sie beschweren sich, dass es jetzt ein paar Minuten dauert, wo es früher ein paar Sekunden gedauert hat. Ich bin etwas sympathisch mit ihrer Notlage. Aber nur etwas :)
jsd
Danke für die Erklärung. Ich konnte nicht sagen, ob dies eine einmalige Verzögerung war oder nicht.
ewwhite
Bitte posten Sie Ihre "nach der Optimierung" Ergebnisse, damit wir sehen können, wie viel Zeit die Optimierungen gespart haben :)
Joshua Miller
Mit den Optionen "--cachedir = cache --update --workers 4" wurde die Zeit von 50 Sekunden auf 15 Sekunden reduziert, also ein riesiger Gewinn! Danke für die sehr hilfreichen Vorschläge, Leute!
jsd

Antworten:

9

Die --cachedirvon dmourati in seiner Antwort angegebene Option hilft Ihnen, sollte aber auch verwendet werden --update, insbesondere wenn Sie nicht alle 469 Pakete gleichzeitig ersetzen.

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

Darüber hinaus sollten Sie ein separates Repo für dieses Paket erstellen, wenn die Bereitstellung auf diese Weise wirklich zeitkritisch ist und --updatenicht genug hilft.

Michael Hampton
quelle
6

Auf der Managerseite von createrepo sehen Sie eine Option für ein 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.

Ich würde dort anfangen.

Wenn das createrepo nicht ausreichend beschleunigen würde, würde ich mir SSD oder tmpfs ansehen .

dmourati
quelle
4

Haben Sie versucht, --workers für Multi-Core-CPUs zu verwenden? Normalerweise benutze ich --workers 4, um 4 Threads von createrepo zu erzeugen

Shâu Shắc
quelle
2

Verwenden Sie die createrepo_c , C-Implementierung von createrepo

user799109
quelle
1
Willkommen bei SE. Bitte fügen Sie einige Informationen oder Links zu Quellen hinzu, um Ihre Antwort hilfreicher zu gestalten.
rubo77