Gigamax – cache consistency

Jan Horabik

22.03.2005

Plan prezentacji

Co to jest Gigamax?

Organizacja pamięci

Konstrukcja modelu

Efekty

Przykładowy kod

Co to jest Gigamax?

Wieloprocesor stworzony przez Encore Computer Corporation

Potrzeba weryfiakcji – symulacje nie wystarczają

Weryfikacja zgodności cache'y i braku blokady

Architektura

Protokół

Snooping cache

“read miss” w cachu – wysłanie sygnału read i oczekiwanie na odpowiedź

Bus watcher – przechowuje informacje o adresach

Stany bus watchera: Invalid, Shared, Owned, Xown (odnośnie każdego adresu osobno)

Reakcja – “memory bypass signal” - w przyszłości “write response signal” (podwójne zadanie)

“write invalidate”

Zmiana właściciela

Cache wysyła “read private” i zakłada blokadę na swojego bus watcher'a

bus watcher cache'a, który jest “Owned” przechwytuje sygnał, wysyła “memory bypass” i zmienia stan na “Xown”

Po jakimś czasie wysyła “write response” i zmienia stan na “Invalid”

Pierwszy bus watcher otrzymuje sygnał, zdejmuje blokadę, uaktualnia cache'a.

Bus watcher w UIC

Posiada pełną informację o lokalnych adresach i o tym, w których cache'ach są przechowywane kopie ich zawartości

Decyduje gdzie przesyłać sygnały

Eliminuje konieczność współdzielenia jednej szyny przez wszystkie procesory

Stany bus watcher'a

Model

Zajmujemy się tylko jednym adresem

Abstrakcja:

P: stan bus watcher'a, 1 bit danych,

stan blokady, lista komunikatów

do cache'a.

UIC: lista komunikatów

link: 2 kolejki komunikatów

Co chcemy sprawdzić?

Słaba zgodność cache'y: zapis do jednej kopii, odczyt z wielu kopii, uaktualnianych co jakiś czas:

Co chcemy sprawdzić?

Brak sytuacjii błędnych (bus watcher sygnalizuje błąd, gdy widzi nieoczekiwaną sytuację na szynie)

Brak blokady (grupa bus watcherów nigdy nie osiągnie stanu “shared” lub “owned”)

Wszystkie żądania kiedyś będą obsłużone

Wyniki

Blokada:

Bus watcher procesora w klastrze 2 jest w stanie “owned”, adres pochodzi z pamięci w klastrze 1.

Procesor w klastrze 1 wysyła “read public”, które zostaje zakolejkowane. Bus watcher tego procesora zakłada blokadę.

Procesor w klastrze 3 wysyła “read public”, interweniuje bus watcher klastra 2 i wysyła “write response” do klastra 3. - oba bus watcher'y są “shared”, “write response” dociera do klastra 1 i pamięć zostaje zaktualizowana.

Procesor w klastrze 2 dokonuje zamiany cache'a – jego kopia jest już nieaktualna

Procesor w klastrze 2 wysyła “read public” i zakłada blokadę. Ten sygnał powinien zostać przekazany do klastra 1 (bo nikt nie jest w stanie “owned”).

Pojawia się blokada.

2005-03-21T13:36:51