[Gelistirici] Pisi delta iyileştirmeleri
Faik Uygur
faik at pardus.org.tr
4 Şub 2009 Çar 13:54:00 EET
Salı 03 Şubat 2009 günü (saat 12:36:59) Gökçen Eraslan şunları yazmıştı:
> Selamlar,
Elinize sağlık,
> Bu noktada şöyle bir durum var, binary dosyalar, kodlarında bir değişiklik
> olmasa dahi her derlendiklerinde farklı SHA1'lere sahip oluyorlar. Yani
> aynı kodu tekrar tekrar derlediğinizde (teknik detaylarını tam bilemiyorum,
> linklendiği kitaplıkların offset'lerinden ya da dosya içine yazılan bir
> timestamp'ten olsa gerek) üretilen her dosyanın SHA1'i farklı oluyor.
[...]
> 1- Yeniden derlenen iki binary'nin, kaynak kodunun değiştiği için mi yoksa
> sadece yeniden derlendiği için mi farklı olduğunu kestirebilir miyiz?
[...]
> 1a- Eğer, ekstirebilirsek, SHA1'i farklı olan fakat aslında sadece tekrar
> derlenmiş olan binary'leri deltaya almayız.
Bilemiyorum ben de, araştırabiliriz.
> 1b- Kestiremezsek, şöyle bir şey düşündük, değişen dosyaların tamamını
> delta paketine almak yerine, eskileriyle olan xdelta'larını delta paketine
> alabiliriz. Bu şekilde baya bir azalma sağladık delta paketlerinde.
Mümkündür. İlk delta paketini xdelta ile yapmaya başlamıştık. Önceki
indirilmiş paketin saklanması gerekliliği ve lzma geçisi sonrası xdelta
lzma'yı anlamaz hale de gelince zorunlu bu çözüme gitmiştik. İsmail bu konuda
xdelta'ya bir hata girmişti. [1] Geliştiricisi en son sıkıştırılmış dosyalar
için şuraya yönlendirmiş. [2] Fakat performans açısından önerdiği hiç de uygun
değil. Şu anki delta paket yapımız performans olarak da çok çok iyi. Tek
yaptığı dosyaları sisteme açmak.
> Örneğin, değişen dosyalar yerine sadece eski ve yeniler arasındaki
> xdeltaların olduğu ati-control-center paketinin boyutu, 5.5M'tan 1.4M'a
> düştü.(İlgili yamayı ekledim) Bu durumda da şöyle bir sıkıntı çıkıyor,
> delta paketini kurarken, eğer eski dosyanın aynısını sistemde bulamazsak
> güncellemeyi hiç yapamıyoruz.
Bu bulunmalı tabi. Şu anki delta paketi için de aynı sorun var sayılabilir ama
güncelleme esnasında bu bir probleme yol açmıyor. Bir paketin eksik dosyaları
varsa ya da silindiyse o paketin çalışmaması bekleniyor sadece. Sıradan bir
paket kurup, dosyalarını silmek gibi.
xdelta durumunda pisi bu dosyalar üzerinde özel bir komut çalıştıracağı için,
ek kontroller yapılmalı, güncellemenin xdelta'ya bağlı olarak başarılı ve ya
başarısız olmasına göre ne yapılacağı kararlaştırılmalı. Ya hiç bi şey olmamış
gibi devam edecek ya da güncelleme sonlanacak.
> Bunun da üstesinden gelmek içinse, şöyle bir
> şey yapılabilir, güncelleme yapılmadan önce paket "pisi check" ile kontrol
> edilir, "pisi check" o paket için sorunsuz tamamlanırsa, bu eski paketin
> aynen sistemde olduğu ve xdeltanın dosyaya uygulanabileceği anlamına
> geliyor, dolayısıyla ufak boyutlardaki delta paketini kurabiliriz. "pisi
> check"te sorun çıkarsa da, delta yerine depodan gerçek paket kurulur.
Güncellemeye başlamadan önce bir paketin delta paketini indirip, indirmeyeceği
kontrolü bu şekilde çok uzun sürer.
faik at jupiter pisi $ time pisi check kernel-source
* kernel-source kontrol ediliyor... Tamam
real 3m24.959s
user 0m15.321s
sys 0m6.122s
faik at jupiter pisi $ time pisi check kernel-source
* kernel-source kontrol ediliyor... Tamam
real 2m15.123s
user 0m15.406s
sys 0m5.838s
Şu an delta paket yapımız çok sade ve basit. Herhangi bir paketten farkı yok.
Bu hoşuma gidiyor. Paket içini açıp dosyaları da inceleyebiliyoruz. xdelta
ile bu mümkün değil. Delta'da iyileştirilebilecek bir şeyler mutlaka
bulunabilir. Örneğin 1a'ya bakabiliriz. Ama buradaki öneri daha şu anki halini
kullanmaya başlamadan çok erken ve köklü bir değişiklik bence.
- Faik
[1] http://code.google.com/p/xdelta/issues/detail?id=1&can=2&q=
[2] http://code.google.com/p/xdelta/wiki/ExternalCompression
Gelistirici mesaj listesiyle ilgili
daha fazla bilgi