Önbellek Tutarlılık Protokolleri
Önbellek tutarlılık protokolleri, paylaşımlı bellekli çok işlemcili sistemlerdeki çoklu özel önbellekleri tutarlı tutarak, bir çekirdek bir bellek konumuna yazdığında diğer çekirdeklerin eski önbelleğe alınmış kopyaları okumaya devam etmemesini sağlamaktadır.
Tanım
Bir önbellek tutarlılık protokolü, çoklu işlemcilerin özel önbellekleri arasında paylaşımlı belleğin tutarlı bir görünümünü sürdüren, her önbelleğe alınmış bloğun durumunu takip ederek ve bir yazma işleminin görünür olmasını ve eski kopyaların kullanılmamasını sağlayacak şekilde okuma ve yazma işlemlerini koordine eden bir mekanizmadır.
Kapsam
Bu konu, tutarlılık problemini ve çözümlerini kapsamaktadır: geçersiz kılma (invalidation) ve güncelleme (update) protokolleri, paylaşımlı bir veri yolu üzerindeki gözetleme (snooping) protokolleri, ölçeklenebilir sistemler için dizin tabanlı protokoller ve MSI ile MESI gibi kanonik durum makineleri. Donanımın önbellekler arasında belleğin tutarlı bir görünümünü nasıl koruduğunu ele almaktadır. Adresler arası işlemlerin sıralanması (bellek tutarlılığı, shared-memory-and-coherence altında) ve tek önbellek politikaları (önbellek organizasyonu ve politikaları) bu kapsamın dışındadır.
Temel sorular
- Önbelleklerin tutarlı olması ne anlama gelmektedir ve tutarlılığa neden ihtiyaç duyulmaktadır?
- Geçersiz kılma (invalidation) ve güncelleme (update) protokolleri nasıl farklılık göstermektedir?
- Gözetleme (snooping) protokolleri, tutarlılığı sürdürmek için paylaşımlı bir ara bağlantıyı nasıl kullanmaktadır?
- Dizin protokolleri, tutarlılığı paylaşımlı bir veri yolunun ötesine nasıl ölçeklendirmektedir?
Anahtar kavramlar
- tutarlılık problemi
- geçersiz kılma (invalidation) ve güncelleme (update) protokolleri
- gözetleme (snooping) protokolleri
- dizin tabanlı protokoller
- MSI ve MESI durumları
- paylaşımlı veri yolu ve ara bağlantı
- yanlış paylaşım (false sharing)
- yazma serileştirmesi
Temel kuramlar
- Durum tabanlı tutarlılık (MSI/MESI)
- Her önbelleğe alınmış blok, küçük bir durum kümesinde (örneğin Modified, Exclusive, Shared, Invalid) takip edilmektedir; okuma ve yazma işlemleri, en fazla bir yazıcı olmasını ve okuyucuların asla eski veri görmemesini sağlayan durum geçişlerini ve tutarlılık mesajlarını tetiklemektedir.
Mekanizmalar
Her önbellek bloğu bir tutarlılık durumu taşımaktadır. Gözetleme (snooping) protokollerinde her önbellek veri yolu işlemlerini gözlemlemekte (snoops) ve kopyalarını buna göre güncellemekte veya geçersiz kılmaktadır; dizin protokollerinde ise bir dizin, hangi önbelleklerin her bir bloğu tuttuğunu kaydetmekte ve hedefli tutarlılık mesajları göndermektedir. Paylaşımlı bir bloğa yazma işlemi, veriyi değiştirmeden önce yazıcıya özel sahiplik vererek diğer kopyaları (bir geçersiz kılma protokolünde) ilk olarak geçersiz kılmaktadır.
Klinik önem
Tutarlılık, paylaşımlı bellekli çok işlemcili sistemleri programlanabilir kılmaktadır: yazılım belleği tek bir paylaşımlı depolama alanı olarak ele alabilmekte, donanım ise çoklu önbelleklerin varlığını gizlemektedir. Ancak tutarlılık trafiği ve yanlış paylaşım (false sharing) gibi etkiler, paralel programlarda performansa hakim olabilmektedir; bu nedenle tutarlılık farkındalığı, ölçeklenebilir çok iş parçacıklı yazılımlar için önem taşımaktadır.
Tarihçe
Tutarlılık protokolleri, 1980'lerde veri yolu tabanlı çok işlemcili sistemlerle ortaya çıkmıştır; bu sistemlerde yazma-geçersiz kılma (write-invalidate) ve MESI ailesi gibi gözetleme (snooping) şemaları standart hale gelmiştir. Sistemler tek bir veri yolunun ötesine ölçeklendikçe, dağıtık paylaşımlı bellek için dizin tabanlı protokoller geliştirilmiştir ve tutarlılık, çok çekirdekli işlemcilerde merkezi bir tasarım problemi olmaya devam etmektedir.
Tartışmalar
- Gözetleme (snooping) ve dizin tabanlı tutarlılık karşılaştırması
- Gözetleme (snooping), küçük paylaşımlı veri yolu sistemlerinde basit ve hızlıdır ancak ölçeklenememektedir; dizinler ise karmaşıklık ve depolama maliyetiyle birçok çekirdeğe ölçeklenebilmektedir. Büyük tasarımlar genellikle hiyerarşik veya hibrit yaklaşımları birleştirmektedir.
Öne çıkan isimler
- David E. Culler
- Mark D. Hill
- James R. Goodman
- John L. Hennessy
İlgili konular
Temel eserler
- hennessy2019
- culler1999
Sıkça sorulan sorular
- Tutarlılık (coherence) ve bellek tutarlılığı (consistency) arasındaki fark nedir?
- Tutarlılık (coherence) tek bir bellek konumunu ilgilendirmektedir: tüm önbellekler sonunda değeri üzerinde anlaşmalı ve ona yapılan yazma işlemlerini sırasıyla görmelidir. Bellek tutarlılığı (consistency), farklı işlemciler tarafından gözlemlenen farklı konumlar arası işlemlerin sıralanmasını ilgilendirmektedir. Tutarlılık, iyi tanımlanmış bir bellek tutarlılığı modeli için gerekli ancak yeterli değildir.
- Yanlış paylaşım (false sharing) nedir?
- Yanlış paylaşım (false sharing), farklı çekirdekler tarafından kullanılan bağımsız değişkenlerin aynı önbellek bloğunda bulunması durumunda meydana gelmektedir. Tutarlılık blok granülerliğinde çalıştığı için, bir çekirdek tarafından yapılan yazma işlemleri, farklı değişkenlere dokunsalar bile diğerlerindeki bloğu geçersiz kılmakta, bu da gereksiz tutarlılık trafiğine ve yavaşlamaya neden olmaktadır.