Buforowanie z zapisem zwrotnym a buforowanie z zapisem?

93

Rozumiem, że główna różnica między tymi dwiema metodami polega na tym, że w metodzie „z zapisem” dane są natychmiast zapisywane do pamięci głównej poprzez pamięć podręczną, podczas gdy w przypadku „zapisu zwrotnego” dane są zapisywane „później”.

Nadal musimy czekać na pamięć w „ostatnim czasie”, więc jaka jest korzyść z „zapisywania”?

Naftaly
źródło
@EricWang Myślę, że masz na myśli write backlepszą wydajność?
wlnirvana
@wlnirvana Tak, masz rację, to mój błąd pisarski. Usunąłbym go i umieścił tutaj nowy komentarz, aby uniknąć wprowadzenia w błąd w przyszłości.
Eric Wang
6
Mówiąc najprościej, write backma lepszą wydajność, ponieważ zapis do pamięci głównej jest znacznie wolniejszy niż zapis do pamięci podręcznej procesora, a dane mogą być krótkie w trakcie (oznacza to, że mogą się ponownie zmienić wcześniej i nie ma potrzeby umieszczania starej wersji w pamięci). Jest złożony, ale bardziej wyrafinowany, większość pamięci we współczesnych procesorach korzysta z tej zasady.
Eric Wang
Widzę, że udzielono wyjaśnienia. Radzę przyjrzeć się tagom Write-Allocate, Write-NoAllocate po uwzględnieniu algorytmu zapisywania zwrotnego.
Çağlayan DÖKME
Odpowiedź na twoje pytanie jest taka, że ​​przy buforowaniu z zapisem, podczas pisania w tym samym bloku potrzebny jest tylko jeden zapis do pamięci głównej. Zobacz moją odpowiedź po szczegóły.
qwr

Odpowiedzi:

111

Zaletą zapisu w pamięci głównej jest to, że upraszcza on projekt systemu komputerowego. W przypadku zapisu w pamięci głównej zawsze znajduje się aktualna kopia wiersza. Zatem po zakończeniu odczytu pamięć główna może zawsze odpowiedzieć żądanymi danymi.

Jeśli używany jest zapis z powrotem, czasami aktualne dane znajdują się w pamięci podręcznej procesora, a czasami w pamięci głównej. Jeśli dane znajdują się w pamięci podręcznej procesora, procesor ten musi zatrzymać odpowiedź pamięci głównej na żądanie odczytu, ponieważ pamięć główna może mieć nieaktualną kopię danych. Jest to bardziej skomplikowane niż zapisywanie.

Ponadto zapis może uprościć protokół spójności pamięci podręcznej, ponieważ nie wymaga stanu modyfikacji . Stan Modify rejestruje, że pamięć podręczna musi ponownie zapisać wiersz pamięci podręcznej, zanim unieważni lub wykluczy wiersz. W przypadku zapisu w pamięci podręcznej wiersz pamięci podręcznej można zawsze unieważnić bez ponownego zapisywania, ponieważ pamięć ma już aktualną kopię wiersza.

Jeszcze jedno - w oprogramowaniu o architekturze z zapisem zwrotnym, które zapisuje do rejestrów we / wy mapowanych w pamięci, należy podjąć dodatkowe kroki, aby upewnić się, że zapisy są natychmiast wysyłane z pamięci podręcznej. W przeciwnym razie zapisy nie będą widoczne poza rdzeniem, dopóki wiersz nie zostanie odczytany przez inny procesor lub linia nie zostanie usunięta.

Craig S. Anderson
źródło
7
W przypadku operacji we / wy mapowanych w pamięci te adresy są zwykle mapowane jako niebuforowane. Zapisu można również użyć do zwiększenia niezawodności (np. Jeśli L1 ma tylko zabezpieczenie przez kontrolę parzystości, a L2 ma ECC). Zapis przez jest również bardziej popularny w przypadku mniejszych pamięci podręcznych, które używają alokacji bez zapisu (tj. Błąd zapisu nie przydziela bloku do pamięci podręcznej, potencjalnie zmniejszając zapotrzebowanie na pojemność L1 i przepustowość odczytu L2 / wypełniania L1), wymóg zapisu jest już obecny dla takiego zapisu.
Paul A. Clayton
1
czy można sprawdzić, czy moje metody pamięci podręcznej w rdzeniu są zapisywane z powrotem lub zapisywane?
Sztucznie
4
Stwierdzenie, że zapis zwrotny jest bardziej złożony, może być mylące, ponieważ procesor musi zatrzymać odpowiedź pamięci głównej na żądanie odczytu. Co więcej, pamięć podręczna śledzi, jakie dane są danymi (nie są wyrównane z pamięcią główną), a co nie, używając „brudnych bitów”, dzięki czemu można w ogóle nie sprawdzać pamięci głównej.
steviejay
Polecenie @Shaowu „lshw”, które pokazuje możliwości pamięci podręcznej, takie jak „asynchroniczny wewnętrzny zapis zwrotny”
mug896
Nadal nie rozumiem, jakie są rzeczywiste kroki stosowane przy odpisywaniu, ale po prostu wiem, że to skomplikowane ... Czy możesz podać więcej zasobów / szczegółów na ten temat?
qwerty9898
10

Spójrzmy na to na przykładzie. Załóżmy, że mamy bezpośrednio mapowaną pamięć podręczną i używana jest zasada zapisu zwrotnego. Mamy więc prawidłowy bit, brudny bit, tag i pole danych w linii pamięci podręcznej. Załóżmy, że mamy operację: napisz A (gdzie A jest mapowane do pierwszej linii pamięci podręcznej).

Dzieje się tak, że dane (A) z procesora są zapisywane w pierwszej linii pamięci podręcznej. Ustawione są prawidłowe bity i bity znacznika. Brudny bit jest ustawiony na 1.

Brudny bit po prostu wskazuje, że linia pamięci podręcznej została kiedykolwiek zapisana od czasu jej ostatniego wprowadzenia do pamięci podręcznej!

Teraz załóżmy, że wykonywana jest inna operacja: przeczytaj E (gdzie E jest również odwzorowane na pierwszą linię pamięci podręcznej)

Ponieważ mamy bezpośrednio mapowaną pamięć podręczną, pierwszą linię można po prostu zastąpić blokiem E, który zostanie przeniesiony z pamięci. Ale ponieważ blok ostatnio zapisany w linii (blok A) nie jest jeszcze zapisany w pamięci (wskazywany przez brudny bit), więc kontroler pamięci podręcznej najpierw wyda zapis z powrotem do pamięci, aby przenieść blok A do pamięci, a następnie zastąpi wiersz blokiem E przez wykonanie operacji odczytu do pamięci. brudny bit jest teraz ustawiony na 0.

Tak więc polityka zapisu z powrotem nie gwarantuje, że blok będzie taki sam w pamięci i związanej z nim linii pamięci podręcznej. Jednak za każdym razem, gdy linia ma zostać zastąpiona, najpierw wykonywany jest zapis zwrotny.

Polityka zapisywania jest dokładnie odwrotna. W związku z tym w pamięci zawsze będą aktualne dane. Oznacza to, że jeśli zostanie zapisany blok pamięci podręcznej, pamięć również zostanie odpowiednio zapisana. (bez brudnych bitów)

Rajat
źródło
7

może ten artykuł pomoże ci połączyć się tutaj

Zapis: zapis jest wykonywany synchronicznie zarówno do pamięci podręcznej, jak i do magazynu zapasowego.

Zapis z powrotem (lub z tyłu): Zapis jest wykonywany tylko do pamięci podręcznej. Zmodyfikowany blok pamięci podręcznej jest zapisywany z powrotem do sklepu, tuż przed jego zastąpieniem.

Zapisywanie: gdy dane są aktualizowane, są zapisywane zarówno w pamięci podręcznej, jak i w pamięci masowej zaplecza. Ten tryb jest łatwy w obsłudze, ale wolno zapisuje dane, ponieważ dane muszą być zapisywane zarówno w pamięci podręcznej, jak i w magazynie.

Zapis zwrotny: gdy dane są aktualizowane, są zapisywane tylko w pamięci podręcznej. Zmodyfikowane dane są zapisywane w pamięci wewnętrznej tylko wtedy, gdy dane są usuwane z pamięci podręcznej. Ten tryb zapewnia dużą prędkość zapisu danych, ale dane zostaną utracone, jeśli awaria zasilania nastąpi przed zapisaniem zaktualizowanych danych do pamięci.

Shengmin Zhao
źródło
3

Zasady opisujące zasady zapisu zwrotnego i zapisu w czasie, gdy wystąpi trafienie zapisu , czyli gdy pamięć podręczna zawiera żądane informacje. W tych przykładach zakładamy, że pojedynczy procesor zapisuje w pamięci głównej z pamięcią podręczną.

Zapis: informacje są zapisywane w pamięci podręcznej i pamięci, a zapis kończy się po zakończeniu obu. Ma to tę zaletę, że jest prostsze w implementacji, a pamięć główna jest zawsze spójna (zsynchronizowana) z pamięcią podręczną (w przypadku jednoprocesorowego - jeśli jakieś inne urządzenie modyfikuje pamięć główną, ta zasada nie wystarczy), a brak odczytu nigdy nie powoduje zapisów do pamięci głównej. Oczywistą wadą jest to, że każde trafienie zapisu musi wykonać dwa zapisy, z których jeden uzyskuje dostęp do wolniejszej pamięci głównej.

Zapis zwrotny: informacje są zapisywane w bloku w pamięci podręcznej. Zmodyfikowany blok pamięci podręcznej jest zapisywany w pamięci tylko wtedy, gdy jest zastępowany (w efekcie zapis z opóźnieniem ). Specjalny bit dla każdego bloku pamięci podręcznej, brudny bit , oznacza, czy blok pamięci podręcznej został zmodyfikowany w pamięci podręcznej, czy nie. Jeśli brudny bit nie jest ustawiony, blok pamięci podręcznej jest „czysty”, a błąd zapisu nie musi zapisywać bloku w pamięci.

Zaletą jest to, że zapisy mogą następować z prędkością pamięci podręcznej, a jeśli zapisuje się w tym samym bloku, potrzebny jest tylko jeden zapis do pamięci głównej (podczas zastępowania poprzedniego bloku). Wadą jest to, że ten protokół jest trudniejszy do zaimplementowania, pamięć główna może nie być spójna (nie zsynchronizowana) z pamięcią podręczną, a odczyty powodujące zamianę mogą powodować zapisanie brudnych bloków do pamięci głównej.

Zasady dotyczące braku zapisu są szczegółowo opisane w moim pierwszym linku.

Te protokoły nie zajmują się przypadkami z wieloma procesorami i wieloma pamięciami podręcznymi, jak to jest powszechne w nowoczesnych procesorach. W tym celu potrzebne są bardziej skomplikowane mechanizmy spójności pamięci podręcznej . Pamięci podręczne z zapisem mają prostsze protokoły, ponieważ zapis do pamięci podręcznej jest natychmiast odzwierciedlany w pamięci.

Dobre zasoby:

qwr
źródło
0

Zapis zwrotny jest bardziej złożony i wymaga skomplikowanego protokołu Cache Coherence Protocol (MOESI), ale jest tego wart, ponieważ sprawia, że ​​system jest szybki i wydajny.

Jedyną zaletą Write-Through jest to, że implementacja jest niezwykle prosta i nie jest wymagany żaden skomplikowany protokół spójności pamięci podręcznej.

Gaurav Toshniwal
źródło
1
WT nadal potrzebuje protokołu spójności. Sklep z jednego rdzenia nadal musi unieważniać kopie w innych pamięciach podręcznych, aby nie czytały nieaktualnych danych w nieskończoność. Atomic RMW potrzebuje specjalnego wsparcia. Myślę, że wszystko to jest łatwiejsze w przypadku WT, ale wymagana spójność jest nadal nieco skomplikowana.
Peter Cordes,
A może mówiłeś o systemie jednordzeniowym z hierarchią pamięci podręcznej L1 / L2 (a może więcej). W takim przypadku tak naprawdę nie musisz używać MESI / MOESI do wewnętrznych pamięci podręcznych, które pobierają przez zewnętrzne pamięci podręczne, chyba że chcesz obsługiwać spójny z pamięcią podręczną DMA, który może uzyskać dostęp do najbardziej zewnętrznego kierunku pamięci podręcznej. Ale wtedy nadal potrzebujesz spójności dla zapisu DMA, aby unieważnić wewnętrzną pamięć podręczną.
Peter Cordes
1
Protokół koherencji pamięci podręcznej jest potrzebny tylko wtedy, gdy potrzebna jest obsługa wielu pamięci podręcznych / procesorów lub coś wpływa na pamięć, na przykład DMA. Zapis ma swoje zalety nawet w przypadku systemów jednoprocesorowych, a mianowicie szybkość zapisu.
qwr
W przypadku DMA system operacyjny może jawnie opróżnić pamięć podręczną po operacji we / wy. Jako oprogramowanie jest mniej wydajne.
qwr