Otobüs gözetleme - Bus snooping

Otobüs gözetleme veya otobüs koklama bir şema bir hangi bir tutarlılık denetleyicisi (snooper) gereğidir önbelleği (a Snoopy cache ) monitörler veya otobüs işlemleri snoops, bunun amacının da korumak olduğunu önbellek tutarlılık içinde dağıtılmış paylaşılan bellek sistemleri . Bir tutarlılık denetleyicisi (snooper) içeren bir önbelleğe, gözetleme önbelleği adı verilir. Bu şema, 1983 yılında Ravishankar ve Goodman tarafından tanıtıldı.

Nasıl çalışır

Belirli veriler birkaç önbellek tarafından paylaşıldığında ve bir işlemci paylaşılan verilerin değerini değiştirdiğinde, değişikliğin, verilerin bir kopyasına sahip olan tüm diğer önbelleklere yayılması gerekir. Bu değişiklik yayılımı, sistemin önbellek tutarlılığını ihlal etmesini engeller . Veri değişikliği bildirimi, veri yolu gözetleme ile yapılabilir. Tüm meraklılar bir otobüsteki her işlemi izler. Paylaşılan bir önbellek bloğunu değiştiren bir işlem bir veri yolunda görünürse, tüm meraklılar önbelleklerinin paylaşılan bloğun aynı kopyasına sahip olup olmadığını kontrol eder. Bir önbellekte paylaşılan bloğun bir kopyası varsa, karşılık gelen snooper, önbellek tutarlılığını sağlamak için bir eylem gerçekleştirir. Eylem , önbellek bloğunun yıkanması veya geçersiz kılınması olabilir . Ayrıca, önbellek tutarlılık protokolüne bağlı olarak önbellek blok durumunda bir değişiklik içerir.

Gözetleme protokolü türleri

Bir yazma işleminin yerel bir kopyasını yönetme yoluna bağlı olarak iki tür gözetleme protokolü vardır:

Yaz-geçersiz kıl

Bir işlemci paylaşılan bir önbellek bloğuna yazdığında, diğer önbelleklerdeki tüm paylaşılan kopyalar veri yolu gözetleme yoluyla geçersiz kılınır. Bu yöntem, bir verinin yalnızca bir kopyasının yalnızca bir işlemci tarafından okunup yazılabilmesini sağlar. Diğer önbelleklerdeki diğer tüm kopyalar geçersiz kılınır. Bu, en yaygın kullanılan gözetleme protokolüdür. MSI , MESI , MOSI , MOESI ve MESIF protokolleri bu kategoriye aittir.

Yaz-güncelle

Bir işlemci paylaşılan bir önbellek bloğuna yazdığında, diğer önbelleklerin tüm paylaşılan kopyaları veri yolu gözetleme yoluyla güncellenir. Bu yöntem, bir veri yolu boyunca tüm önbelleklere bir yazma verisi yayınlar. Yazma-geçersiz kılma protokolünden daha büyük veri yolu trafiğine neden olur. Bu nedenle bu yöntem nadirdir. Ejderha ve ateş böceği protokolleri bu kategoriye girer.

Uygulama

Olası uygulamalardan biri aşağıdaki gibidir:

Önbellekte fazladan üç bit bulunur :

  • V  - geçerli
  • D  - kirli bit, önbellekteki verilerin bellekteki ile aynı olmadığını belirtir
  • S  - paylaşıldı

Her önbellek satırı şu durumlardan birindedir: "kirli" (yerel işlemci tarafından güncellenmiştir), "geçerli", "geçersiz" veya "paylaşılan". Önbellek satırı bir değer içerir ve okunabilir veya yazılabilir. Önbellek satırına yazmak değeri değiştirir. Her değer ya ana bellekte (erişilmesi çok yavaştır) ya da bir veya daha fazla yerel önbellekte (ki bu hızlıdır). Bir blok önbelleğe ilk yüklendiğinde, "geçerli" olarak işaretlenir.

Yerel önbelleğe bir okuma kaçırıldığında, okuma talebi otobüste yayınlanır. Tüm önbellek denetleyicileri veri yolunu izler. Biri bu adresi önbelleğe almışsa ve adres "kirli" durumundaysa, durumu "geçerli" olarak değiştirir ve kopyayı talep eden düğüme gönderir. "Geçerli" durumu, önbellek satırının güncel olduğu anlamına gelir. Yerel bir yazım hatası durumunda (bu değeri yazma denemesi yapılır, ancak önbellekte değildir), veri yolu gözetleme, diğer önbelleklerdeki tüm kopyaların "geçersiz" olarak ayarlanmasını sağlar. "Geçersiz", bir kopyanın önbellekte var olduğu, ancak artık geçerli olmadığı anlamına gelir.

Örneğin, bir başlangıç ​​durumu şöyle görünebilir:

Tag  | ID | V | D | S
---------------------
1111 | 00 | 1 | 0 | 0
0000 | 01 | 0 | 0 | 0
0000 | 10 | 1 | 0 | 1
0000 | 11 | 0 | 0 | 0

1111 00 adresinin yazılmasından sonra şu şekilde değişecektir:

Tag  | ID | V | D | S
---------------------
1111 | 00 | 1 | 1 | 0
0000 | 01 | 0 | 0 | 0
0000 | 10 | 1 | 0 | 1
0000 | 11 | 0 | 0 | 0

Önbelleğe alma mantığı, veri yolunu izler ve önbelleğe alınmış herhangi bir belleğin istenip istenmediğini algılar. Önbellek kirliyse ve paylaşılıyorsa ve veri yolu bu hafızayı talep ederse, gözetleme elemanları değeri önbellekten temin edecek ve ardından bu belleğe ihtiyaç duyan her birime belleğin güncellendiğini bildirecektir. Diğer birimler güncellenmiş önbellekten haberdar edildiğinde, o değişkenin önbellekleri için geçerli biti kapatırlar. Böylece, orijinal önbellek özel olarak işaretlenecektir (S biti sıfır olacaktır)

Kirli olarak işaretlenmiş bir adresi geçersiz kılarken (yani, bir önbellek kirli bir adrese sahip olacak ve diğer önbellek yazıyordur), önbellek bu isteği göz ardı edecektir. Yeni önbellek kirli, geçerli ve özel olarak işaretlenecek ve bu önbellek artık adresin sorumluluğunu üstlenecek.

Yarar

Veri yolu gözetlemesini kullanmanın avantajı, dizin tabanlı tutarlılık mekanizmasından daha hızlı olmasıdır . Paylaşılan veriler, dizin tabanlı bir sistemdeki önbellekler arasındaki tutarlılığı koruyan ortak bir dizine yerleştirilir. Yeterli bant genişliği varsa veri yolu gözetleme normalde daha hızlıdır , çünkü tüm işlemler tüm işlemciler tarafından görülen bir istek / yanıttır.

Dezavantaj

Otobüs gözetlemenin dezavantajı sınırlı ölçeklenebilirliktir . Bir önbelleğe sık sık göz atmak, bir işlemciden erişimle bir yarışa neden olur, böylece önbellek erişim süresini ve güç tüketimini artırabilir. İsteklerin her biri, bir sistemdeki tüm düğümlere yayınlanmalıdır. Bu, (fiziksel veya mantıksal) veri yolunun boyutunun ve sağladığı bant genişliğinin , sistem büyüdükçe büyümesi gerektiği anlamına gelir. Veri yolu gözetleme iyi ölçeklenmediğinden, daha büyük önbellek uyumlu NUMA (ccNUMA) sistemleri, dizin tabanlı tutarlılık protokollerini kullanma eğilimindedir .

Snoop filtresi

Belirli bir önbellek bloğuna bir veri yolu işlemi gerçekleştiğinde, tüm meraklıların veri yolu işlemini gözetlemesi gerekir. Ardından meraklılar , aynı önbellek bloğuna sahip olup olmadığını kontrol etmek için karşılık gelen önbellek etiketlerine bakarlar . Çoğu durumda, iyi optimize edilmiş bir paralel program iş parçacıkları arasında fazla veri paylaşmadığından, önbelleklerde önbellek bloğu yoktur. Bu nedenle, snooper tarafından önbellek etiketi araması, genellikle önbellek bloğuna sahip olmayan önbellek için gereksiz bir çalışmadır. Ancak etiket arama, bir işlemcinin önbellek erişimini bozar ve ek güç tüketimine neden olur.

Gereksiz gözetlemeyi azaltmanın bir yolu, gözetleme filtresi kullanmaktır. Bir snoop filtresi, bir snooper'ın önbellek etiketini kontrol etmesi gerekip gerekmediğini belirler. Bir gözetleme filtresi, dizin tabanlı bir yapıdır ve önbellek bloklarının tutarlılık durumlarını takip etmek için tüm tutarlı trafiği izler. Bu, gözetleme filtresinin bir önbellek bloğunun kopyasına sahip olan önbellekleri bildiği anlamına gelir. Böylece, bir önbellek bloğunun kopyasına sahip olmayan önbelleklerin gereksiz gözetleme yapmasını önleyebilir. Gizli filtrelerin konumuna bağlı olarak üç tür filtre vardır. Biri, önbellek tarafında bulunan ve tutarlılık trafiği paylaşılan veri yoluna ulaşmadan önce filtreleme yapan bir kaynak filtredir. Bir diğeri, alıcı önbelleklerinde bulunan ve alıcı çekirdeğinde gereksiz önbellek etiketi aramalarını önleyen bir hedef filtredir, ancak bu tür filtreleme, kaynaktan gelen ilk tutarlılık mesajını engelleyemez. Son olarak, ağ içi filtreler, tutarlılık trafiğini paylaşılan veri yolu içinde dinamik olarak budamaktadır. Snoop filtresi de kapsayıcı ve özel olarak kategorize edilir. Kapsamlı gözetleme filtresi, önbelleklerdeki önbellek bloklarının varlığını izler. Bununla birlikte, özel gözetleme filtresi, önbelleklerde önbellek bloklarının yokluğunu izler. Başka bir deyişle, kapsayıcı gözetleme filtresindeki bir isabet, karşılık gelen önbellek bloğunun önbellekler tarafından tutulduğu anlamına gelir. Öte yandan, özel gözetleme filtresindeki bir isabet, hiçbir önbelleğin istenen önbellek bloğuna sahip olmadığı anlamına gelir.

Referanslar

Dış bağlantılar