Instruktor: W
tej lekcji omówimy pamięć ECC, znaną
jako kod korekcji błędów.
Najpierw jednak musimy omówić koncepcję
braku parzystości i parzystości w odniesieniu do pamięci.
Teraz, gdy mówimy o braku parzystości, jest to pamięć,
która jest po prostu standardową pamięcią.
Nie sprawdza błędów i pozwala na dowolne
umieszczanie lub wyjmowanie danych z pamięci, a
taka właśnie będzie większość pamięci.
Pamięć nieparzysta jest bardzo tania w produkcji
i ma wyższą prędkość niż pamięć parzysta.
Z drugiej strony, pamięć parzystości będzie
używana do przeprowadzania podstawowej kontroli
błędów i zapewnienia niezawodności
i integralności zawartości pamięci.
Z tego powodu pamięć
ta będzie wolniejsza niż pamięć nieparametryczna,
ale charakteryzuje się niezawodnością,
która jest niezbędna w serwerach
i niektórych stacjach roboczych klasy high-end.
Teraz pamięć, która ma kontrolę parzystości,
będzie w stanie wykonać podstawowe obliczenia
w oparciu o to, co widzi,
aby sprawdzić, czy dane są dobre, czy nie.
A jeśli te dane są dobre, wykorzysta je.
A jeśli nie, wystąpi błąd, ale nie będzie
w stanie go naprawić.
Będzie mógł po prostu powiedzieć, że wystąpił
błąd, ale nie wiem, jak go naprawić.
Zasadniczo działa to w ten sposób, że każdy
bajt ma powiązany z nim bit parzystości.
Tak więc zamiast ośmiu bitów mamy teraz dziewięć bitów,
ponieważ osiem bitów danych plus jeden bit parzystości.
Teraz bit parzystości zostanie ustawiony we właściwym czasie.
Następnie zostaną one obliczone i porównane
podczas odczytu z pamięci, aby określić,
czy którykolwiek z bitów zmienił się
od czasu ostatniego zapisu danych w tej pamięci.
Ten rodzaj sprawdzania jest
jednak ograniczony do wykrywania błędów pojedynczych bitów.
A jeśli dwa bity zostały zmienione, kontrola
parzystości może faktycznie przejść pomyślnie,
ponieważ pamiętaj, że bity mogą mieć tylko wartość 0 lub 1.
Na przykład, powiedzmy, że zapisałem liczbę
0, która jest
zapisana jako 00000000 w systemie binarnym.
Teraz, jeśli dodam wszystkie te bity razem, otrzymam osiem
0, co daje mi 0 dla mojego bitu parzystości.
Teraz, jeśli pójdę odczytać tę liczbę z
pamięci i zobaczę, że jest osiem
zer, dodam je do siebie i otrzymam 0, 0 pasuje
do mojego bitu parzystości jako 0,
więc są to dobre dane.
Z drugiej strony,
powiedzmy, że zapisuję
liczbę 1, która jest zapisana jako 00000001.
Jeśli dodam wszystkie te liczby do siebie, otrzymam 1.
I umieszczę to w moim parytecie dziewiątego bitu.
Robiąc to, czytam teraz z tego i
dostaję 00000001.
A ponieważ wszystko to sumuje
się do 1 i pasuje do mojego
bitu parzystości, wiem, że dane
są dobre. Ale jeśli umieściłem
to w pamięci i siedziało tam przez
kilka godzin, a ta 1 została przypadkowo zmieniona na 0, jeśli teraz
to przeczytam i otrzymam 00000000, i dodam je razem, otrzymam 0
i porównam to z moim bitem parzystości, który miał w sobie 1, to teraz mówi mi,
że wystąpił błąd i coś poszło nie
tak.
Nie wiem, który z tych ośmiu bitów został zmieniony,
ale przynajmniej jeden z nich.
Z drugiej strony,
jeśli ta liczba
z 00000001 została zmieniona na coś w rodzaju
01010001, mam teraz dwa bity, które zostały przypadkowo
zmienione z 0 na 1 przez
pamięć.
Kiedy patrzę na parzystość, nadal będzie to 1, ponieważ
kiedy je sumuję, jeśli jest to liczba nieparzysta, będzie
to 1 dla mojego bitu parzystości.
A jeśli je zsumuję i będzie to liczba
parzysta, będzie to 0.
Jak więc widać, nie będziesz
w stanie wykryć błędu, jeśli
dwa bity zostały zmienione w tym miejscu, jeśli
używasz obliczeń typu parzystości.
Dobrą wiadomością jest to, że około 90% większości błędów
to błędy jednobitowe, więc sprawdzanie
parzystości zwykle wystarcza w większości
naszych sytuacji.
Ale jeśli masz do czynienia z czymś takim
jak uruchamianie serwerów dla banku, posiadanie
jakichkolwiek błędów może być złą rzeczą.
Chcemy więc czegoś lepszego niż parzystość
i tu właśnie do gry wkracza ECC.
Teraz ECC to skrót od Error Correcting Code.
Kod korekcji błędów to rodzaj pamięci,
który przenosi parzystość na wyższy poziom.
Teraz nie tylko może wykryć błąd,
podobnie jak parzystość,
ale może również skorygować ten błąd.
Teraz ECC jest nieco wolniejsze niż parzystość, która
jest również wolniejsza niż nieparzystość.
Tak więc rezygnujesz z pewnej
wydajności na rzecz tej dodatkowej
możliwości, ale uzyskujesz wyższą
integralność i niezawodność pamięci,
gdy używasz ECC, ponieważ będzie
ona w stanie wykryć te błędy i je naprawić.
Ogólnie rzecz biorąc, kod ECC lub kod korekcji
błędów jest używany tylko w naprawdę
zaawansowanych stacjach roboczych lub serwerach ze względu
na dodatkowe koszty, a ten dodatkowy
wysoki poziom integralności jest potrzebny
tylko w tego typu środowiskach.
Teraz możesz się zastanawiać,
w jaki sposób ECC faktycznie określa, co było nie
tak i jak to naprawić?
Aby to zrobić, użyje
czegoś znanego jako pamięć buforowana
lub zarejestrowana.
Teraz pamięć buforowana lub zarejestrowana
ma dodatkowy sprzęt, który będzie
znajdował się między pamięcią a procesorem lub procesorem.
Sprzęt ten nazywany jest rejestrem
i przechowuje dane w buforze
przed wysłaniem ich do procesora.
Ta funkcja jest używana jako miara niezawodności
w wielu systemach, zwłaszcza
w systemach takich jak serwery, które
mają wiele różnych modułów pamięci, w których
mogą wystąpić błędy.
Systemy te wymagają buforowania lub rejestrowania danych
w celu zmniejszenia obciążenia elektrycznego
wykorzystywanego przez
te systemy, które mają duże ilości modułów pamięci,
a to może być połączone z pamięcią parzystości
lub kodem korekcji błędów, aby zapewnić
dodatkową niezawodność, której szukasz
i wykryć te błędy.
Teraz, aby korzystać z modułów kodu korygującego
błędy, płyta główna musi je obsługiwać, podobnie jak procesor.
Jeśli któryś z tych komponentów nie obsługuje ECC,
to nawet jeśli kupisz moduły ECC, które kosztują więcej,
nie uzyskasz dodatkowych korzyści z ECC.
Warto o tym pamiętać.
Ponadto większość płyt głównych albo obsługuje ECC, albo nie.
Generalnie nie ma takiej opcji.
Jeśli więc kupisz płytę główną obsługującą ECC,
będziesz musiał kupić moduły ECC, które
są zarejestrowanymi modułami pamięci.
Jeśli znajdziesz płytę główną obsługującą
moduły ECC lub non-ECC, zazwyczaj
nie będą one obsługiwać obu jednocześnie.
Tak więc wszystkie moduły muszą być ECC
lub żaden z modułów nie może być ECC.
Ich mieszanka może powodować błędy w systemie, a płyta główna
nie będzie wiedziała, jak sobie z nimi poradzić.
Ostatnią rzeczą, o której
chciałbym wspomnieć, jest to, że jeśli
używasz DDR5, DDR5 ma pewną kontrolę błędów
wewnątrz samych modułów.
Nie jest to uważane za ECC lub moduł ECC.
Tak więc korekcja błędów
w nowszych modułach DDR5 może być używana na płytach
głównych, które nie obsługują ECC i nadal będziesz
mieć możliwość sprawdzania błędów.
Jest to inna forma sprawdzania błędów
i nie jest uważana za kod korygujący błędy.
Należy więc o tym pamiętać i nie dać się zmylić,
gdy jesteś w terenie.
Jest to inna forma sprawdzania błędów,
a moduły DDR5 nadal mogą być sprzedawane jako
moduły ECC lub non-ECC, ponieważ oprócz tego wewnętrznego
sprawdzania błędów, mogą one również współpracować
z procesorem i płytą główną, jeśli obsługują one
ECC i są teraz również kodem korygującym
błędy.
Wiem, że to trochę mylące.
Pamiętaj więc o tym, gdy jesteś w terenie.