ccache
ccache ile Nasıl Tanıştım
Paket yaparken, biraz aceleciyseniz ve bazı yapılması gereken kontrolleri zamanında değil de sonradan yapıyorsanız bir yazılımı tekrar tekrar derlersiniz. Örneğin, actions.py'ye get ve shelltools gibi yeni bir fonksiyon ekledikten sonra bunu dahil etmeyi unutursanızgüzel ibret verici bir hata alırsınız. Dahil edilmesi unutulan fonksiyonlar actions.py'nin başındaysa pek sorun olmaz ama kurulum fonksiyonundan sonra kullanılmışlarsa epey üzücü olabilir. Aynı şekilde PiSiYaP'ın ürettiği şablon paket dosyalarını kullanırken sırf olmayan bir TODO dosyasının dodoc'lanmasının bedeli onlarca dakika olabilir bazen. Elbette böyle basit hatalar yapmasanız bile birkaç yama isteyen bir uygulamayı paketlerken de onlarca yeniden derleme yapmanız gerekebilir.
Nesyse ki bu gibi durumların acılarını hafifletmek için çeşitli çözümler var. Bunlardan biri olan ccache ile de yanlış hatırlamıyorsam Uğur Çetin sayesinde haberdar olmuştum.
ccache Nedir?
ccache, bir derleyici önbelleği sistemidir. Önceki derlemelerin sonuçlarını saklayarak ve aynı derlemelerde bunlardan yararlanarak derleme işlemini hızlandırır. Desteklenen diller arasında C, C++, Objective-C ve Objective-C++ bulunmaktadır.
ccache, her zaman ve tam olarak önbellek kullanılmadan alınan çıktılarla aynı sonucun elde edilebilmesi için pürdikkat kodlanmıştır. Bu sayede ccache kullandığınızı ancak kazandığınız zamandan anlayabilirsiniz. Yine de her uygulamada olduğu gibi ccache'nin de bazı hataları vardır, siz de daha önceden belirtilmemiş bir hatayla karşılaştığınızda bunları ccache geliştiricilerine iletebilirsiniz.
ccache'nin Özellikleri
ccache'nin Sınırları
ccache Parametreleri
Aşağıda sıralanan parametreler yalnızca ccache, ccache olarak çalıştırıldığında kullanılır, ccache bir (sahte) derleyici olarak çalıştırıldığındaysa esas derleyicinin aldığı parametreleri alır.
-c, --cleanup
Belirtilen dosya sayısına ve boyut sınırlamasına kadar eski önbellek dosyalarını silmek için kullanılır. Bu işlem sonrasında önbellek dosya sayısı ve boyutu yeniden hesaplanır. Normalde, bu işlemin elle yapılmasına gerek yoktur çünkü ccache her çalıştırıldığında belirtilen sınırlamalara uyulması için gerekli temizliği kendi yapar ve istatistikleri günceller. Böyle bir temizlik önbellek içeriğine elle müdahele etmek istenildiğinde veya önbellek istatistiklerinde hata olduğuna inanıldığında yararlıdır.
-C, --clear
Tüm önbelleği temizlemek için kullanılır. Önbelleklenmiş ne var ne yoksa silinir.
-F, --max-files=N
Önbelleklenecek en fazla dosya sayısını ayarlamak için kullanılır. Bu değer önbellek dizininde saklanır ve gelecekteki tüm derlemelerde kullanılır. Ayarlanan yeni değerler 16'nın en yakın katına yuvarlanır.
-M, --max-size=BOYUT
Önbellekte saklanacak dosyaların en büyük dosya boyutunu belirtmek için kullanılır. G, M veya K kullanarak gigabayt, megabayt veya kilobayt cinsinden değerler tanımlayabilirsiniz. Öntanımlı değer gigabayttır. Belirtilen değerler 16 kilobaytın en yakın katına yuvarlanır.
-s, --show-stats
Önbellik için istatistikleri göstermek için kullanılır.
-z, --zero-stats
Önbellek istatistiklerini ayarlanan sınırlamalara dokunmaksızın sıfırlamak için kullanılır.
ccache Nasıl Çalışıyoryae
ccache'nin çalışması, derleme sonuçları tamamen aynı çıktı verecek kodların algılanmasına ve bunların tekrar derlenmesi yerine önceki çıktıların kullanılmasına dayanıyor. Algılama, her derleme için özel ve eşsiz sonuçlar verecek olan farklı türdeki bilgilerin karılmasıyla gerçekleştirilir. ccache, çok hızlı bir kriptografik karma algoritması olan MD4'u kullanmaktadır. MD4, günümüzde şifeleme için biraz zayıf kalsa da derleme çıktılarını tanımlamak için yeteri kadar güvenlidir.
ccache'yi Kim Yaptı
ccache ilk olarak Samba'yı daha hızlı derlemek için, Erik Thiele'nın derleyici önbellek betiğinden ilham alan Andrew Tridgell tarafından geliştirmiştir, şu an ise Joel Rosdahl tarafından gelişimi ve bakımı sürdürülmektedir. Projede Ayrıca pek çok katkıcının desteği ve diğer projelerden alınmış kaynak kodlar bulunmaktadır.
PiSi ile ccache Kullanımı
İlk önce sisteminizde ccache paketinin kurulu olduğundan emin olun, ccache Pardus'ta temel geliştirme paketleri arasında bulunduğu için hem ccache'yi hem de paket yapmak için gereken diğer yazılımları
Pakete göz atma işinden sonra PiSi'nin ccache'yi kullanması için gerekli ayarlamayı yapalım. Bunun için /etc/pisi/pisi.conf dosyasındaki
ccache'yi bir süredir biliyordum ama kullanmaya yeni başlayacağım. Dün hakkında henüz bir Türkçe belge olmadığını görünce bir tane yazmaya karar verdim. Belgede gördüğünüz hataları veya eksiklikleri bildirebilirsiniz. Daha güzeliyse belgeyi bir Wiki'ye aktararak gelişime ve katkıya açık hale gelmesini sağlamak oldurdu, çekinmeden yapabilirsiniz.
PiSi ve ccache ile Birkaç Test
Aşağıda kütüphane, çokluortam uygulaması ve oyun gibi çeşitli türlerde paketlerin ilk inşa ve ccache'li ikinci inşa süreleri yer almaktadır. Testler Toshiba Satellite A300D-20V üzerinde kurulu güncel bir Pardus 2011'de yapılmıştır.
SFML paketi ilk derleme:
real 1m14.922s
user 1m4.078s
sys 0m27.771s
SFML paketi ikinci derleme:
real 0m36.738s
user 0m15.598s
sys 0m22.437s
RecordItNow paketi ilk derleme:
real 5m10.591s
user 4m36.671s
sys 2m59.992s
RecordItNow paketi ikinci derleme:
real 2m14.461s
user 0m51.766s
sys 1m40.053s
Crack Attack! paketi ilk derleme:
real 2m51.818s
user 1m45.650s
sys 1m29.895s
Crack Attack! paketi ikinci derleme:
real 1m46.730s
user 0m37.370s
sys 1m12.382s
Örnek Bir ccache İstatistiği
Birkaç paket inşa ettikten sonra sistemimdeki ccache istatistikleri şu hali aldı:
cache directory /root/.ccache
cache hit (direct) 286
cache hit (preprocessed) 418
cache miss 688
called for link 201
compile failed 24
bad compiler arguments 8
autoconf compile/link 44
unsupported compiler option 42
no input file 34
files in cache 510
cache size 58.7 Mbytes
max cache size 3.0 Gbytes
Kısa Kısa
ccache'nin bir GitHub sayfası bulunmaktadır, gelişmeleri buradan takip edebilirsiniz. Sürümler arasındaki değişiklikleri sürüm notlarından öğrenebilirsiniz. ccache'yi sadece GNU/Linux'ta değil FreeBSD, Mac OS X ve Windows'ta da kullanabilirsiniz.
Kaynaklar
Yazıyı hazırlarken yararlandığım ve ccache hakkında daha detaylı bilgi edinmek isteyenler için yararlı bazı bağlantıları aşağıdaki listede bulabilirsiniz:
Paket yaparken, biraz aceleciyseniz ve bazı yapılması gereken kontrolleri zamanında değil de sonradan yapıyorsanız bir yazılımı tekrar tekrar derlersiniz. Örneğin, actions.py'ye get ve shelltools gibi yeni bir fonksiyon ekledikten sonra bunu dahil etmeyi unutursanız
Nesyse ki bu gibi durumların acılarını hafifletmek için çeşitli çözümler var. Bunlardan biri olan ccache ile de yanlış hatırlamıyorsam Uğur Çetin sayesinde haberdar olmuştum.
ccache Nedir?
ccache, bir derleyici önbelleği sistemidir. Önceki derlemelerin sonuçlarını saklayarak ve aynı derlemelerde bunlardan yararlanarak derleme işlemini hızlandırır. Desteklenen diller arasında C, C++, Objective-C ve Objective-C++ bulunmaktadır.
ccache, her zaman ve tam olarak önbellek kullanılmadan alınan çıktılarla aynı sonucun elde edilebilmesi için pürdikkat kodlanmıştır. Bu sayede ccache kullandığınızı ancak kazandığınız zamandan anlayabilirsiniz. Yine de her uygulamada olduğu gibi ccache'nin de bazı hataları vardır, siz de daha önceden belirtilmemiş bir hatayla karşılaştığınızda bunları ccache geliştiricilerine iletebilirsiniz.
ccache'nin Özellikleri
- Başarıyla önbelleklenen ve önbelleklenemeyenlerin istatistiğinin tutulması
- Otomatik önbellek boyut yönetimi
- Uyarı mesajları veren derlemeleri de önbellekyebilme
- Kolay kurulum ve kullanım
- Sisteme fazladan yük bindirmeme
- İsteğe bağlı olarak kopyaları önlemek için katı bağlantı** kullanımı
- İsteğe bağlı olarak disk kullanımını azaltmak için önbellek dosyalarını sıkıştırabilme
ccache'nin Sınırları
- Yalnızca tek bir C / C++ / Objective-C / Objective-C++ kaynak dosya derlemesinin önbelleklemesini yapabilir. Çoklu dosya derlemesi, bağlama gibi diğer derleme türleriyle karşılaştığında derleme işini gerçek derleyiciye devreder.
- Yalnızca GCC ve GCC benzeri davranışlar sergileyen derleyicilerle çalışır.
- Bazı derleyici bayrakları desteklenmez. ccache bu gibi bayraklarla karşılaştığında gerçek derleyicinin devreye girmesini sağlar.
ccache Parametreleri
Aşağıda sıralanan parametreler yalnızca ccache, ccache olarak çalıştırıldığında kullanılır, ccache bir (sahte) derleyici olarak çalıştırıldığındaysa esas derleyicinin aldığı parametreleri alır.
-c, --cleanup
Belirtilen dosya sayısına ve boyut sınırlamasına kadar eski önbellek dosyalarını silmek için kullanılır. Bu işlem sonrasında önbellek dosya sayısı ve boyutu yeniden hesaplanır. Normalde, bu işlemin elle yapılmasına gerek yoktur çünkü ccache her çalıştırıldığında belirtilen sınırlamalara uyulması için gerekli temizliği kendi yapar ve istatistikleri günceller. Böyle bir temizlik önbellek içeriğine elle müdahele etmek istenildiğinde veya önbellek istatistiklerinde hata olduğuna inanıldığında yararlıdır.
-C, --clear
Tüm önbelleği temizlemek için kullanılır. Önbelleklenmiş ne var ne yoksa silinir.
-F, --max-files=N
Önbelleklenecek en fazla dosya sayısını ayarlamak için kullanılır. Bu değer önbellek dizininde saklanır ve gelecekteki tüm derlemelerde kullanılır. Ayarlanan yeni değerler 16'nın en yakın katına yuvarlanır.
-M, --max-size=BOYUT
Önbellekte saklanacak dosyaların en büyük dosya boyutunu belirtmek için kullanılır. G, M veya K kullanarak gigabayt, megabayt veya kilobayt cinsinden değerler tanımlayabilirsiniz. Öntanımlı değer gigabayttır. Belirtilen değerler 16 kilobaytın en yakın katına yuvarlanır.
-s, --show-stats
Önbellik için istatistikleri göstermek için kullanılır.
-z, --zero-stats
Önbellek istatistiklerini ayarlanan sınırlamalara dokunmaksızın sıfırlamak için kullanılır.
ccache Nasıl Çalışıyor
ccache'nin çalışması, derleme sonuçları tamamen aynı çıktı verecek kodların algılanmasına ve bunların tekrar derlenmesi yerine önceki çıktıların kullanılmasına dayanıyor. Algılama, her derleme için özel ve eşsiz sonuçlar verecek olan farklı türdeki bilgilerin karılmasıyla gerçekleştirilir. ccache, çok hızlı bir kriptografik karma algoritması olan MD4'u kullanmaktadır. MD4, günümüzde şifeleme için biraz zayıf kalsa da derleme çıktılarını tanımlamak için yeteri kadar güvenlidir.
ccache'yi Kim Yaptı
ccache ilk olarak Samba'yı daha hızlı derlemek için, Erik Thiele'nın derleyici önbellek betiğinden ilham alan Andrew Tridgell tarafından geliştirmiştir, şu an ise Joel Rosdahl tarafından gelişimi ve bakımı sürdürülmektedir. Projede Ayrıca pek çok katkıcının desteği ve diğer projelerden alınmış kaynak kodlar bulunmaktadır.
PiSi ile ccache Kullanımı
İlk önce sisteminizde ccache paketinin kurulu olduğundan emin olun, ccache Pardus'ta temel geliştirme paketleri arasında bulunduğu için hem ccache'yi hem de paket yapmak için gereken diğer yazılımları
sudo pisi it -c system.develkomutuyla yükleyebilirsiniz. Daha sonra kullandığınız ccache'yi daha yakından tanıyabilmek için paket dosyalarına göz atmak iyi bir fikir olabilir.
Pakete göz atma işinden sonra PiSi'nin ccache'yi kullanması için gerekli ayarlamayı yapalım. Bunun için /etc/pisi/pisi.conf dosyasındaki
# buildhelper = Nonedeğerini
buildhelper = ccacheolarak değiştirmek yeterli. PiSi'de ccache'nin ne şekilde işlendiğine daha yakından bakmak için pisi/operations/build.py dosyasına bakılabilir.
ccache'yi bir süredir biliyordum ama kullanmaya yeni başlayacağım. Dün hakkında henüz bir Türkçe belge olmadığını görünce bir tane yazmaya karar verdim. Belgede gördüğünüz hataları veya eksiklikleri bildirebilirsiniz. Daha güzeliyse belgeyi bir Wiki'ye aktararak gelişime ve katkıya açık hale gelmesini sağlamak oldurdu, çekinmeden yapabilirsiniz.
PiSi ve ccache ile Birkaç Test
Aşağıda kütüphane, çokluortam uygulaması ve oyun gibi çeşitli türlerde paketlerin ilk inşa ve ccache'li ikinci inşa süreleri yer almaktadır. Testler Toshiba Satellite A300D-20V üzerinde kurulu güncel bir Pardus 2011'de yapılmıştır.
SFML paketi ilk derleme:
real 1m14.922s
user 1m4.078s
sys 0m27.771s
SFML paketi ikinci derleme:
real 0m36.738s
user 0m15.598s
sys 0m22.437s
RecordItNow paketi ilk derleme:
real 5m10.591s
user 4m36.671s
sys 2m59.992s
RecordItNow paketi ikinci derleme:
real 2m14.461s
user 0m51.766s
sys 1m40.053s
Crack Attack! paketi ilk derleme:
real 2m51.818s
user 1m45.650s
sys 1m29.895s
Crack Attack! paketi ikinci derleme:
real 1m46.730s
user 0m37.370s
sys 1m12.382s
Örnek Bir ccache İstatistiği
Birkaç paket inşa ettikten sonra sistemimdeki ccache istatistikleri şu hali aldı:
cache directory /root/.ccache
cache hit (direct) 286
cache hit (preprocessed) 418
cache miss 688
called for link 201
compile failed 24
bad compiler arguments 8
autoconf compile/link 44
unsupported compiler option 42
no input file 34
files in cache 510
cache size 58.7 Mbytes
max cache size 3.0 Gbytes
Kısa Kısa
ccache'nin bir GitHub sayfası bulunmaktadır, gelişmeleri buradan takip edebilirsiniz. Sürümler arasındaki değişiklikleri sürüm notlarından öğrenebilirsiniz. ccache'yi sadece GNU/Linux'ta değil FreeBSD, Mac OS X ve Windows'ta da kullanabilirsiniz.
Kaynaklar
Yazıyı hazırlarken yararlandığım ve ccache hakkında daha detaylı bilgi edinmek isteyenler için yararlı bazı bağlantıları aşağıdaki listede bulabilirsiniz:
Bir Türkçe kaynak daha var artık, henüz bakmadım ama kaynakların artması güzel. Yeni kaynaklar çıktıkça burada belirtmekten çekinmeyiniz:
YanıtlaSilhttp://www.bilisimplatformu.com/forum/konu-ccache-ile-derleme-yapmak-bsd.html