Apa yang dapat saya lakukan untuk mempercepat createrepo?

8

Kami menggunakan repositori yum untuk mendistribusikan perangkat lunak kami ke mesin virtual produksi kami. Sayangnya, createrepo menjadi hambatan, dan kami hanya memiliki 469 paket di repositori.

$ 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

Apa yang bisa saya lakukan untuk membuatnya lebih cepat?

jsd
sumber
Mengapa waktu createrepo penting?
ewwhite
1
Pengembang menunggu kode mereka untuk ditayangkan. Kami beralih dari model "rsync to live boxes" ke model rpm dan mereka mengeluh bahwa sekarang dibutuhkan beberapa menit di mana ia digunakan untuk mengambil beberapa detik. Saya agak bersimpati dengan keadaan mereka. Tapi hanya agak :)
jsd
Terima kasih untuk penjelasannya. Saya tidak tahu apakah ini penundaan satu kali atau tidak.
ewwhite
Silakan kirim hasil "setelah optimasi" Anda sehingga kami dapat melihat berapa banyak waktu optimasi disimpan :)
Joshua Miller
Menggunakan opsi "--cachedir = cache --update --workers 4" mengurangi waktu dari 50 detik menjadi 15 detik, kemenangan sangat besar! Terima kasih atas saran yang sangat membantu, kawan!
jsd

Jawaban:

9

The --cachedirpilihan yang diberikan oleh dmourati dalam jawabannya akan membantu Anda, tetapi Anda juga harus menggunakan --update, terutama jika Anda tidak mengganti semua 469 paket sekaligus.

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

Selain itu, pertimbangkan untuk membuat repo terpisah untuk paket ini jika menggunakan cara ini benar-benar peka terhadap waktu dan --updatetidak cukup membantu.

Michael Hampton
sumber
6

Dari halaman createrepo, Anda akan melihat opsi untuk 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.

Saya akan mulai dari sana.

Jika itu tidak mempercepat createrepo cukup, saya akan melihat SSD atau tmpfs .

dmourati
sumber
4

Sudahkah Anda mencoba memanfaatkan - pekerja untuk CPU multi-inti? Biasanya saya menggunakan - pekerja 4 untuk menelurkan 4 utas createrepo

Shâu Shắc
sumber
2

Gunakan createrepo_c , C implementasi createrepo

pengguna799109
sumber
1
Selamat datang di SE. tolong tambahkan beberapa informasi atau tautan ke sumber untuk membuat jawaban Anda lebih bermanfaat.
rubo77