
ECC to skrót od Error Correcting Code, czyli kodu korekcji błędów. To pojęcie pojawia się najczęściej w kontekście pamięci RAM. Sama idea jest jednak szersza i dotyczy sposobu zapisywania oraz odczytywania danych. Chodzi o to, by przy okazji wykrywać i naprawiać błędy powstające w trakcie pracy komputera.
Niezawodność zapisu bitowego
Każda pamięć operacyjna przechowuje dane v postaci bitów, czyli ciągu zer i jedynek. W idealnym świecie zapisany bit zawsze byłby odczytany dokładnie tak samo. W praktyce zdarzają się przekłamania. Mogą być spowodowane przez zakłócenia elektryczne, promieniowanie kosmiczne, wady układów scalonych albo po prostu starzenie się sprzętu. Pojedynczy błędny bit może nie mieć znaczenia, ale w niektórych zastosowaniach może całkowicie zmienić wynik obliczeń.
Mechanizm detekcji i naprawy
ECC rozwiązuje ten problem przez dodanie do danych dodatkowych bitów kontrolnych. Kiedy zapisujesz dane w pamięci, system tworzy na ich podstawie kod korekcyjny. Przy odczycie ten kod jest ponownie obliczany i porównywany z zapisanym. Jeśli coś się nie zgadza, kontroler pamięci potrafi wykryć, że wystąpił błąd, a w wielu przypadkach również go poprawić.
Najczęściej stosowanym mechanizmem w pamięciach ECC jest kod Hamminga rozszerzony o dodatkowy bit parzystości. Taki układ pozwala na automatyczną korekcję pojedynczego błędu bitowego i wykrycie podwójnych. W praktyce oznacza to, że jeśli jeden bit zmieni się z 0 na 1 albo odwrotnie, system przywróci poprawną wartość bez udziału użytkownika. Jeśli błędów jest więcej, ECC przynajmniej wykryje problem i może zareagować, na przykład zgłaszając wyjątek.
Różnice sprzętowe i kontrolery
Od strony technicznej pamięć ECC różni się od zwykłej pamięci RAM pod kilkoma względami. Najważniejsza jest kwestia magistrali danych. Standardowy moduł RAM przesyła 64 bity danych, a moduł ECC przesyła 72 bity, gdzie dodatkowe 8 bitów to właśnie kod korekcyjny. To oznacza, że fizycznie na module znajdują się dodatkowe układy pamięci. Często widać to po liczbie kości na płytce.
Kolejna sprawa to kontroler pamięci. Musi on obsługiwać ECC, bo to on odpowiada za generowanie i sprawdzanie kodów. Nie każdy procesor i płyta główna to potrafią. W komputerach domowych zwykle tej funkcji nie ma, choć są wyjątki. W serwerach i stacjach roboczych ECC jest standardem, bo tam stabilność jest ważniejsza niż minimalna różnica w wydajności czy cenie.
Parametry i zaawansowane tryby pracy
Jeśli chodzi o parametry, to poza wspomnianą szerokością 72 bitów istotne są też opóźnienia i częstotliwość pracy. Pamięci ECC mają bardzo zbliżone parametry do zwykłych modułów, choć czasami mają nieco wyższe opóźnienia ze względu na dodatkowe operacje sprawdzania danych. Różnice są jednak niewielkie i w praktyce rzadko odczuwalne. Ważniejsza jest niezawodność.
Warto też wspomnieć o trybach pracy. Najprostszy to SECDED, czyli Single Error Correction, Double Error Detection. Bardziej zaawansowane systemy mogą stosować dodatkowe mechanizmy, takie jak patrol scrubbing. Polega on na cyklicznym sprawdzaniu zawartości pamięci w tle i poprawianiu błędów zanim wpłyną na działanie aplikacji.
ECC nie sprawia jednak, że komputer staje się szybszy. Zamiast tego chroni on dane przed cichymi błędami, które mogłyby pozostać niezauważone. W zastosowaniach takich jak bazy danych, symulacje naukowe czy systemy finansowe ma to realne znaczenie. W domowym komputerze różnica często będzie niewidoczna, ale w środowiskach, gdzie liczy się poprawność obliczeń, ECC jest po prostu rozsądnym wyborem.