Bu yazımda da bilgisayar mimarisi ve önbellek verimleri için önemli bir yer oluşturan cache coherence yani önbellek tutarlılığı kavramından bahsedeceğim.Bilgisayar mimarisi araştırma ödevi olarak verilen bu konu ile çoklu işlemci tasarımında önemli bir yere sahip olan cache coherence kavramnını da tam anlamıyla öğrenmiş oldum.
Yazan: Nuran Bahar
Cache Coherence Nedir?
Çoklu işlemcilerin yani multiprocessorların tasarımında özellikle bir konunun çözümü üzerinde pek çok çalışma yapılmış ve çeşitli yöntemler geliştirilmiştir. Bu konu da bu çoklu işlemcilerin daha doğrusu paralel işlemcilerin veriyi aralarında nasıl paylaşacağıdır. Bunun için çözümler ise:
Tek adres uzaylı (single address space) veya shared memory proccessors yani paylaşımlı bellek işlemciler ile çok adres uzaylı veya distributed memory multiprocessors mimarisidir.
Tek adres uzaylı mimaride tek bir bellek uzayı vardır ve bu çoklu işlemciler bu uzaya direk olarak erişirler. Birbirleriyle olan veri iletişimi ise paylaşılan bazı değişkenler ile yapılır. Bu paralel işlemcilerin koordine edilmesine de senkronizasyon denir. Bunu yapmanın bir yolu verinin kitlenmesidir(lock). Sadece bir işlemci bu kilidi alabilir diğerleri de kilidin bırakılmasını beklemek zorundadırlar.
Bu tür işlemcilerin iki çeşidi vardır. Birinde her işlemcinin bellek uzayının her yerine erişim süresi aynıdır. Hangi işlemcinin hangi bilgiyi istediği önemli değildir. Buna uniform memory access (UMA) veya symmetric multiprocessor (SMP) adı verilir.
İkinci türde ise bazı bellek erişim süreleri diğerlerine göre daha kısadır. Bu da hangi işlemcinin hangi bilgiye ulaşmak istediğine bağlıdır. Bu türdeki işlemcilere ise nonuniform memory Access (NUMA) adı verilir. Bunların programlanması diğerlerine göre daha zordur.
Çok adres uzaylı veya distributed memory multiproccessor mimarisinde ise işlemciler arasındaki veri iletişimi message passing ile yapılır. Bu mimaride her bir işlemcinin kendi bellek bölgesi bulunmaktadır. Bilgi paylaşımı sırasında işlemciler birbirlerine mesaj gönderirler. Bu mesajlaşma hem bilgi isterken hem bilgi gönderirken yapılır. Koordineye gerek yoktur çünkü zaten işlemciler kendi aralarında bu bilgiyi birbirlerine göndermektedirler.
Cache Coherency(önbellek tutarlılığı) : Günümüzdeki işlemcilerde her işlemcinin birer cache adı verilen önbelleği bulunmaktadır. Bu durumda önbellekteki verilerin değerleri ile bellek üzerindeki verilerin değerinin aynı olması gerekmektedir. Bunu sağlamak için de cache coherency yani önbellek tutarlılığı için bazı protokoller uygulanmaktadır.
Snopping yöntemi: Cache coherency için sık kullanılan bir yöntem snopping tekniğidir. Bu teknikte bütün cacheler devamlı olarak bus’ı dinlemektedirler. Değeri değişen bloğun kendi bölgelerinde olup olmadığını kontrol ederler. Eğer kendi bölgelerinde olan bir bloksa ya kendi kopyalarını iptal ederler ya da yeni değeri alırlar. Önbellekteki her bloğun bir snoop etiketi bulunmaktadır. Bu da blok bilgisi bellekteki kopya ile karşılaştırıldığında ikisinin tutarlı olup olmadığını sağlar.

Şekil 1.İşlemcilerdeki önbelleğin snoop etiketleri ve bus.
Snopping tekniğinde de iki yöntem vardır. Bunlar da write-invalidate ve write update teknikleridir.
Write-invalidate: Bu snopping tekniğinde write işlemini yapmak isteyen işlemci öncelikle kendisiyle birlikte diğer işlemcilerdeki cachelerdeki o bilginin invalidate olmasını sağlar. Daha sonra o bilginin değerini değiştirir. Yazmak isteyen işlemci bus yolu ile bütün işlemcilere bir sinyal gönderir. Eğer sinyal gönderilen bu işlemcilerde cachelerinde bu bilginin bulunduğu blok mevcutsa bu kopyaları iptal ederler. Dolayısı ile bu yöntemde çoklu okuma gerçekleştirilirken yazma işlemini gerçekleştiren tek bir writer bulunmaktadır.
Write-update: Bu snopping tekniğinde yazmak isteyen işlemci değişkeni tüm işlemcilere dağıtır bu değişken onların cache bloklarında mevcutsa o değişken değerlerini güncellerler.
Cache Coherency’de Write and Read:
Cache coherency’de kullanılan iki yön vardır: read ve write. Okuma işlemi gerçekleşirken bilginin ya da değişkenin kopyasının tüm işlemcilerde olmasına gerek yoktur. Fakat write işlemi read işlemine göre daha sakıncalı ve zordur. Eğer yazma yapılacaksa öncelikle yazma işlemini yapacak olan işlemcinin yazma hakkı olmalıdır ve diğer bütün işlemciler değişen değişken değerindeki bilginin en son haline sahip olmalıdır.
Write- invalidate Snopping Tekniğinin Avantajları:
Bu snopping yani mesajlaşma tekniğinde değişken değeri değiştiğinde herkese son hali gönderilmediği için bus bant genişliğini daha az kullanır. Eğer bir işlemci aynı değişkenin değerini birden fazla değiştirecekse yalnızca ilk değiştirmede invalidation sinyalini göndermesi yeterlidir. Bu işlem diğer işlemciler read işlemini gerçekleştirmemesi durumunda yeterlidir.
Şu anki tek bus üzerindeki multiişlemcilerin çoğunda write-invalidate tekniğini daha az bant genişliğine ihtiyaç olduğu için kullanılmaktadır
Cache Coherence Protokolleri
Distributed share memory yani dağılmış paylaşımı hafızaya sahip olan sistemlerdeki tüm cache bellekler arasındaki tutarlılığı sağlamak için ya da tutarlılığı devam ettirmek için oluşturulan protokollere cache coherency protokolleri yani önbellek tutarlılığı protokolleri adı verilmektedir. Protokol özel bir tutarlılık modeline bağlı olarak hafıza uyumluluğunu muhafaza eder.
Multiprocessorlerin içerisindeki cache protokollerinin çoğu ardışıl tutarlılık modelini destekler.
Herhangi bir uygulama içerisindeki durumlar arası değişim bu cache coherency protokollerine bağlı olarak farklılık gösterebilir. Örnek olarak bir uygulama farklı bir güncelleme yöntemi çizebilir veya bilgi geçerliliğini iptal edebilir. Örnek olarak okumadaki güncelleştirmeler, yazmadaki güncelleştirmeler, okumadaki geçersiz kılmalar veya yazmadaki geçersiz kılmalar verilebilir. Bu geçiş seçimleri toplam inter-cache trafiğini yoğunluğunu etkileyebilir.
Çeşitli model ve protokoller cache uyumluluklarını sürdürmek için tasarlanmıştır. Bunlara örnek verecek olursak:
• MSI protocol
• MESI protocol
• MOSI protocol
• MOESI protocol
• MERSI protocol
• MESIF protocol
• Write-once protocol
• Synapse protocol
• Berkeley protocol
• Illinois protocol
• Firefly protocol
• Dragon protocol