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ız gü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
  • 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 yae
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.devel
komutuyla 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 = None
değerini
buildhelper = ccache
olarak 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:

Yorumlar

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

    http://www.bilisimplatformu.com/forum/konu-ccache-ile-derleme-yapmak-bsd.html

    YanıtlaSil

Yorum Gönder

sen de yaz yaz yaz buraya yaz bütün sözlerini

Bu blogdaki popüler yayınlar

Diğer Dillerde Hoşçakal

Mızıka Tabları Nasıl Okunur

conio.h