Szpiegowanie autobusowe

Podsłuchiwanie magistrali lub podsłuchiwanie magistrali to schemat, za pomocą którego kontroler spójności (snooper) w pamięci podręcznej ( snoopy cache ) monitoruje lub podsłuchuje transakcje magistrali, a jego celem jest utrzymanie spójności pamięci podręcznej w rozproszonych systemach pamięci współdzielonej . [ potrzebne źródło ] Pamięć podręczna zawierająca kontroler spójności (snooper) nazywana jest pamięcią podręczną snoopy. Schemat ten został wprowadzony przez Ravishankara i Goodmana w 1983 roku.

Jak to działa

Gdy określone dane są współdzielone przez kilka pamięci podręcznych, a procesor modyfikuje wartość współdzielonych danych, zmiana musi zostać rozpropagowana do wszystkich innych pamięci podręcznych, które mają kopię danych. Ta propagacja zmian zapobiega naruszeniu przez system spójności pamięci podręcznej . Powiadamianie o zmianie danych może odbywać się poprzez podsłuchiwanie magistrali. Wszyscy szpiedzy monitorują każdą transakcję w autobusie. Jeśli w magistrali pojawi się transakcja modyfikująca blok współdzielonej pamięci podręcznej, wszyscy szpiedzy sprawdzają, czy w ich pamięciach podręcznych znajduje się ta sama kopia współdzielonego bloku. Jeśli pamięć podręczna zawiera kopię współdzielonego bloku, odpowiedni szpieg wykonuje akcję, aby zapewnić spójność pamięci podręcznej. Akcją może być opróżnienie lub unieważnienie bloku pamięci podręcznej. Obejmuje to również zmianę stanu bloku pamięci podręcznej w zależności od protokołu spójności pamięci podręcznej.

Rodzaje protokołów szpiegujących

Istnieją dwa rodzaje protokołów szpiegowania w zależności od sposobu zarządzania lokalną kopią operacji zapisu:

Unieważnienie zapisu

Gdy procesor zapisuje w bloku współdzielonej pamięci podręcznej, wszystkie współdzielone kopie w innych pamięciach podręcznych są unieważniane przez podsłuchiwanie magistrali. Ta metoda zapewnia, że ​​tylko jedna kopia danych może być wyłącznie odczytywana i zapisywana przez procesor. Wszystkie pozostałe kopie w innych pamięciach podręcznych są unieważniane. Jest to najczęściej używany protokół szpiegowania. Do tej kategorii należą protokoły MSI , MESI , MOSI , MOESI i MESIF .

Aktualizacja zapisu

Kiedy procesor zapisuje w bloku współdzielonej pamięci podręcznej, wszystkie współdzielone kopie innych pamięci podręcznych są aktualizowane przez podsłuchiwanie magistrali. Ta metoda rozgłasza dane zapisu do wszystkich pamięci podręcznych w magistrali. Powoduje większy ruch magistrali niż protokół unieważniający zapis. Dlatego ta metoda jest rzadkością. Do tej kategorii należą protokoły Dragon i Firefly .

Realizacja

Jedna z możliwych implementacji jest następująca:

Pamięć podręczna miałaby trzy dodatkowe bity :

  • V – ważny
  • D – brudny bit, oznacza, że ​​dane w pamięci podręcznej nie są takie same jak w pamięci
  • S – wspólne

Każda linia pamięci podręcznej znajduje się w jednym z następujących stanów: „brudny” (został zaktualizowany przez lokalny procesor), „ważny”, „nieprawidłowy” lub „udostępniony”. Linia pamięci podręcznej zawiera wartość, którą można odczytać lub zapisać. Pisanie w wierszu pamięci podręcznej zmienia wartość. Każda wartość znajduje się albo w pamięci głównej (do której dostęp jest bardzo wolny), albo w jednej lub kilku lokalnych pamięciach podręcznych (co jest szybkie). Gdy blok jest ładowany po raz pierwszy do pamięci podręcznej, jest oznaczany jako „ważny”.

W przypadku braku odczytu w lokalnej pamięci podręcznej żądanie odczytu jest wysyłane do magistrali. Wszystkie kontrolery pamięci podręcznej monitorują magistralę. Jeśli ktoś zapisał ten adres w pamięci podręcznej i jest w stanie „brudny”, zmienia stan na „ważny” i wysyła kopię do żądającego węzła. Stan „prawidłowy” oznacza, że ​​linia pamięci podręcznej jest aktualna. W przypadku lokalnego chybienia zapisu (podejmowana jest próba zapisania tej wartości, ale nie ma jej w pamięci podręcznej), podsłuchiwanie magistrali zapewnia, że ​​wszelkie kopie w innych pamięciach podręcznych zostaną ustawione jako „nieprawidłowe”. „Nieprawidłowy” oznacza, że ​​kopia znajdowała się w pamięci podręcznej, ale nie jest już aktualna.

Na przykład stan początkowy może wyglądać tak:

Oznacz | identyfikator | V | D | S --------------------- 1111 | 00 | 1 | 0 | 0 0000 | 01 | 0 | 0 | 0 0000 | 10 | 1 | 0 | 1 0000 | 11 | 0 | 0 | 0

Po wpisaniu adresu 1111 00 zmieniłby się on w ten:

Oznacz | identyfikator | V | D | S --------------------- 1111 | 00 | 1 | 1 | 0 0000 | 01 | 0 | 0 | 0 0000 | 10 | 1 | 0 | 1 0000 | 11 | 0 | 0 | 0

Logika buforowania monitoruje magistralę i wykrywa, czy wymagana jest jakakolwiek pamięć buforowana. Jeśli pamięć podręczna jest brudna i udostępniona, a na magistrali jest żądanie dotyczące tej pamięci, brudny element szpiegujący dostarczy dane żądającemu. W tym momencie albo osoba żądająca może wziąć odpowiedzialność za dane (oznaczając dane jako brudne), albo pamięć może pobrać kopię (mówi się, że pamięć „złapała” dane), a dwa elementy przechodzą do stanu współdzielenia.


Podczas unieważniania adresu oznaczonego jako brudny (tzn. jedna pamięć podręczna miałaby brudny adres, a druga pamięć podręczna zapisuje), pamięć podręczna zignoruje to żądanie. Nowa pamięć podręczna zostanie oznaczona jako brudna, ważna i wyłączna, a ta pamięć podręczna przejmie teraz odpowiedzialność za adres.

Korzyść

Zaletą korzystania z podsłuchiwania magistrali jest to, że jest szybsze niż mechanizm spójności oparty na katalogach . Udostępniane dane są umieszczane we wspólnym katalogu, który zachowuje spójność między pamięciami podręcznymi w systemie opartym na katalogach. przepustowość jest wystarczająca , ponieważ wszystkie transakcje są żądaniem/odpowiedzią widzianą przez wszystkie procesory.

Wada

Wadą podsłuchiwania magistrali jest ograniczona skalowalność . Częste węszenie w pamięci podręcznej powoduje wyścig z dostępem z procesora, co może wydłużyć czas dostępu do pamięci podręcznej i zużycie energii. Każde z żądań musi być rozgłoszone do wszystkich węzłów w systemie. Oznacza to, że wielkość magistrali (fizycznej lub logicznej) oraz przepustowość muszą rosnąć w miarę powiększania się systemu. Ponieważ podsłuchiwanie magistrali nie skaluje się dobrze, większe spójne systemy NUMA (ccNUMA) z pamięcią podręczną zwykle używają protokołów koherencji opartych na katalogach .

Filtr Snoopa

Kiedy transakcja magistrali dotyczy określonego bloku pamięci podręcznej, wszyscy szpiedzy muszą szpiegować transakcję magistrali. Następnie szpiedzy wyszukują odpowiedni znacznik pamięci podręcznej , aby sprawdzić, czy ma ten sam blok pamięci podręcznej. W większości przypadków pamięci podręczne nie mają bloku pamięci podręcznej, ponieważ dobrze zoptymalizowany program równoległy nie udostępnia wielu danych między wątkami. Zatem wyszukiwanie znaczników pamięci podręcznej przez szpiega jest zwykle niepotrzebną pracą dla pamięci podręcznej, która nie ma blokady pamięci podręcznej. Jednak wyszukiwanie znaczników zakłóca dostęp procesora do pamięci podręcznej i powoduje dodatkowe zużycie energii.

Jednym ze sposobów ograniczenia niepotrzebnego podglądania jest użycie filtra podglądu. Filtr snoop określa, czy snooper musi sprawdzić swój znacznik pamięci podręcznej, czy nie. Filtr snoop jest strukturą opartą na katalogach i monitoruje cały spójny ruch w celu śledzenia stanów spójności bloków pamięci podręcznej. Oznacza to, że filtr snoop zna pamięci podręczne, które mają kopię bloku pamięci podręcznej. W ten sposób może zapobiec niepotrzebnemu szpiegowaniu przez pamięci podręczne, które nie mają kopii bloku pamięci podręcznej. Istnieją trzy rodzaje filtrów w zależności od umiejscowienia filtrów snoop. Jednym z nich jest filtr źródłowy, który znajduje się po stronie pamięci podręcznej i wykonuje filtrowanie, zanim ruch związany ze spójnością dotrze do wspólnej magistrali. Innym jest filtr docelowy, który znajduje się w pamięci podręcznej odbiornika i zapobiega niepotrzebnemu wyszukiwaniu znaczników pamięci podręcznej w rdzeniu odbiornika, ale ten typ filtrowania nie zapobiega początkowemu komunikatowi spójności ze źródła. Wreszcie, filtry wewnątrzsieciowe dynamicznie przycinają ruch związany ze spójnością we wspólnej magistrali. Filtr snoop jest również sklasyfikowany jako obejmujący i ekskluzywny. Inkluzywny filtr snoop śledzi obecność bloków pamięci podręcznej w pamięci podręcznej. Jednak wyłączny filtr snoop monitoruje brak bloków pamięci podręcznej w pamięciach podręcznych. Innymi słowy, trafienie w inkluzywnym filtrze snoop oznacza, że ​​odpowiedni blok pamięci podręcznej jest przechowywany w pamięciach podręcznych. Z drugiej strony trafienie w wyłącznym filtrze snoop oznacza, że ​​żadna pamięć podręczna nie ma żądanego bloku pamięci podręcznej.

Linki zewnętrzne