Bir Düzenek Olarak Tutarlılık
Önbellek tutarlılığı, aynı bellek konumunun birden çok önbellekte tutulan kopyalarının birbiriyle uyumlu kalmasını sağlayan donanım düzeneğidir. Ortak bir adres uzayını paylaşan çok çekirdekli ve çok işlemcili sistemlerde her çekirdek kendi önbelleğine yazdığı için, aynı adresin farklı çekirdeklerde farklı değerleri bulunabilir. Tutarlılık düzeneği bu kopyaları izleyerek bütün çekirdeklerin belleğe ilişkin aynı görünümü paylaşmasını sağlar.
Sorun önbelleğin varlığından doğar. Önbellek tek çekirdekli bir sistemde yazılıma görünmeyen bir başarım düzeneğidir; çekirdek sayısı birden çok olduğunda ise aynı düzenek, paylaşılan verinin birbirinden habersiz kopyalarını üretir. Tutarlılık protokolü bu kopyaları donanımda izleyip gerektiğinde geçersiz kılarak, paylaşımlı bellek soyutlamasını programcı için ayakta tutar. Protokolün yaptığı iş yazılıma görünmez, ancak ürettiği veri aktarımı ve gecikme çok çekirdekli başarımın belirleyicilerinden biridir.

Sorunun Doğuşu
Paylaşılan bir x değişkeninin başlangıç değerinin 0 olduğu iki çekirdekli bir sistem ele alınsın. Her iki çekirdek de x’i okur ve kendi önbelleğine bir kopyasını alır. Ardından birinci çekirdek x’e 1 yazar; yazma kendi önbelleğinde kaldığı sürece ikinci çekirdeğin önbelleğindeki kopya 0 olarak kalır. İkinci çekirdek x’i yeniden okuduğunda önbelleğinde bir kopya bulduğu için ana belleğe hiç gitmez ve eskimiş değeri kullanır.
Sorunun kaynağı, önbelleğin yazılıma görünmeyecek biçimde tasarlanmış olmasıdır. Çekirdek bir okumanın önbellekten mi ana bellekten mi karşılandığını bilmez ve bilmek zorunda da değildir; bu saydamlık tek çekirdekte doğru sonucu verirken, kopyalar çoğaldığında kendiliğinden bozulur. Sorunu yazılıma bırakmak, paylaşılan her veri için programcının açıkça geçersiz kılma ve geri yazma yapmasını gerektirirdi; bu yüzden genel amaçlı sistemlerde tutarlılık donanımda ele alınır.
Aynı sorun, yazma ilkesi doğrudan yazma olduğunda da ortadan kalkmaz. Doğrudan yazmada değer ana belleğe hemen işlenir, ancak öteki çekirdeklerin önbelleklerindeki eski kopyalar yerinde durmayı sürdürür; onların da geçersiz kılınması gerekir. Geri yazmada ise değişiklik uzun süre tek bir önbellekte kalabildiği için sorun daha da belirginleşir.
Tutarlılığın Koşulları
Bir bellek düzeninin tutarlı sayılması için iki özelliği sağlaması gerekir. Yazma yayılımı, bir çekirdeğin yaptığı yazmanın sonunda öteki çekirdeklerce de görülebilir duruma gelmesidir. Bir yazmanın yalnızca yazan çekirdeğin önbelleğinde kalması ve orada süresiz durması tutarlılığı bozar. Yazma serileştirmesi ise aynı adrese yapılan yazmaların bütün çekirdeklerce aynı sırada görülmesidir. İki çekirdek x’e sırasıyla 1 ve 2 yazarsa, hiçbir çekirdek önce 2’yi sonra 1’i görmemelidir.
Bu iki koşul birlikte, her bellek adresinin bütün çekirdekler için tek bir değer dizisi taşıyormuş gibi davranmasını sağlar. Koşullar yalnızca tek bir adres için tanımlıdır; ayrı adreslere yapılan işlemlerin göreli sırası konusunda hiçbir şey söylemezler.
Protokollerin İki Ekseni
Tutarlılık, önbellek satırlarına durum bilgisi ekleyen ve çekirdekler arasında ileti alışverişi yapan bir protokolle sağlanır. Protokoller iki eksende sınıflandırılır: bir yazmanın öteki kopyalara ne yaptığı ve kopyaların nerede izlendiği.
Yazma geçersizleştirme yaklaşımında, bir çekirdek yazmadan önce öteki bütün kopyaları geçersiz kılar ve satırın tek sahibi durumuna geçer. Berikutnya yazmaları için başka ileti göndermesi gerekmez. Yazma güncelleme yaklaşımında ise yazılan değer kopyası bulunan bütün önbelleklere yayılır ve kopyalar yerinde kalır. Bu yaklaşım paylaşılan veriyi okuyan çekirdeklerin bekleme süresini kısaltır, ancak her yazma için veri aktarımı gerektirir. Çağdaş sistemlerin neredeyase tamamı geçersizleştirmeyi kullanır.
Gözetleme tabanlı protokollerde bütün önbellekler ortak bir yayın ortamını, çoğunlukla paylaşılan bir yolu dinler. Bir çekirdek bir satırı isteyince isteğini bu ortama koyar; her önbellek isteği görür, kendi etiketlerine bakar ve o satırın kopyasına sahipse gereken tepkiyi verir. Yaklaşımın üstünlüğü basitliği ve düşük gecikmesidir; ayrı bir dizin yapısı tutulmadığı için depolama maliyeti yoktur. Sınırı ise ortamın kendisidir: çekirdek sayısı arttıkça hem ortamın bant genişliği hem de her önbelleğin etiket arama yükü doğrusal büyür. Bu yüzden gözetleme küçük ve orta ölçekli sistemlerde kullanılır.
Dizin tabanlı protokollerde her bellek bloğu için, o bloğun hangi önbelleklerde bulunduğunu ve hangi durumda olduğunu tutan bir kayıt saklanır. Yazmak isteyen çekirdek isteğini dizine gönderir; dizin yalnızca kopyayı taşıyan önbelleklere geçersizleştirme iletisi yollar. Yayın olmadığı için ileti sayısı çekirdek sayısıyla değil, o bloğu gerçekten paylaşan çekirdek sayısıyla orantılıdır. Çekirdek sayısı arttıkça dizin tabanlı düzen kaçınılmaz olur. Çok çekirdekli yongalarda iki yaklaşım sıkça birleştirilir: bir yonga içindeki çekirdek öbeği kendi arasında gözetlemeyle, öbekler ve yongalar arası ise dizinle tutarlı tutulur.
Durum Makineleri
Protokoller her önbellek satırına bir durum atar ve gelen isteklere göre bu durumu değiştirir. Durum kümesi büyüdükçe protokol karmaşıklaşır, buna karşılık gereksiz aktarım azalır. En yalın kullanışlı küme MSIdir: satır ya Değiştirilmiş, ya Paylaşılan ya da Geçersiz olur. MESI bu eksiği Dışlayan durumuyla kapatır. Bir satır yalnızca tek bir önbellekte bulunuyor ve değiştirilmemişse Dışlayan durumdadır; o çekirdek satıra yazmak istediğinde hiçbir ileti göndermeden Değiştirilmiş duruma geçebilir. Protokol 1984’te Illinois Üniversitesi’nde geliştirildiği için Illinois protokolü olarak da anılır.
MOESI, Sahiplenilmiş durumunu ekler. Değiştirilmiş bir satır başka bir çekirdekçe istendiğinde MESI’de ana belleğe geri yazılması gerekir; MOESI’de satırı elinde tutan çekirdek sahiplik alarak veriyi doğrudan isteyene verir ve geri yazmayı erteler. Bu, çekirdekler arası paylaşımın yoğun olduğu iş yüklerinde bellek trafiğini azaltır. Durum sınıflandırması 1986’da Sweazey ve Smith tarafından derli toplu bir çerçeveye oturtulmuştur. MESIF, İletici durumunu ekler. Bir satırın paylaşılan kopyaları birden çok önbellekte bulunduğunda, isteğe hangisinin yanıt vereceği belirsizdir; İletici durumu bu kopyalardan tam olarak birini yanıt vermekle görevlendirir.
Başarıma Etkisi
Tutarlılık protokolü, tek çekirdekli bir sistemde bulunmayan yeni bir bulamama türü üretir. Tutarlılık bulamaması, satır önbellekte yer bulamadığı için değil, protokol onu geçersiz kıldığı için oluşur. Bu tür bulamamalar üç C modelinin dışında kaldığından sınıflandırmaya dördüncü bir C olarak eklenir.
Tutarlılık bulamamaları iki kaynaktan doğar. Gerçek paylaşımda çekirdekler aynı veriyi kullanır ve aktarım gerçekten gereklidir. Yanlış paylaşımda ise çekirdekler ayrı değişkenlere erişir, ancak bu değişkenler aynı önbellek satırına düştüğü için protokol onları tek bir birim gibi görür. 64 baytlık bir satırın başındaki sayaca bir çekirdek, ortasındaki başka bir sayaca ikinci çekirdek yazarsa, satır iki önbellek arasında sürekli gidip gelir; program mantığında hiçbir paylaşım olmadığı hâlde her yazma bir aktarım doğurur.
Yanlış paylaşım yazılım tarafında önlenebilir. İş parçacığı başına düşen değişkenleri önbellek satır sınırına hizalamak, sık yazılan sayaçları ayrı satırlara dağıtmak ve paylaşılan bir yapıda okunan alanlarla yazılan alanları ayırmak yaygın çözümlerdir. Bu düzenlemelerin bedeli bellek kullanımının artmasıdır. Satır boyu bu dengede iki yönlü çalışır: büyük satır alanda yerellikten çok yararlanır ve tek çekirdekli başarımı artırır, buna karşılık yanlış paylaşım olasılığını da büyütür. Çok çekirdekli sistemlerde satır boyunun 64 baytta yerleşmesinin gerekçelerinden biri budur.
Tarihçe
Sorun, birden çok işlemcinin özel önbelleklerle ortak belleğe bağlandığı ilk tasarımlarla birlikte ortaya çıktı. 1978’de Lucien Censier ve Paul Feautrier,
Bu açıklama Vikipedi kaynaklarından uyarlanmıştır ve şu lisans altında sunulur: CC BY-SA 4.0.
Bahas perkembangan ini di Komunitas
Haber hakkındaki düşüncelerinizi, donanım deneyimlerinizi ve teknik sorularınızı topluluk üyeleriyle anlık olarak tartışın.





Giliran Anda berbicara.
Bagikan pengalaman, pertanyaan, dan tanggapan Anda. Alamat email Anda tidak akan dipublikasikan.