Prawie przy każdym odczycie dysk SSD trafia na błędne bity, a mimo to użytkownik dostaje poprawne pliki. To zasługa wielostopniowego systemu korekcji błędów. Pokazujemy, jak działa i dlaczego ma swoje granice.
Kody korekcyjne: zapasowe informacje przy każdym fragmencie danych
Zapisując stronę, kontroler dzieli dane na fragmenty i do każdego dodaje informacje kontrolne. Fragment danych razem z tymi informacjami tworzy słowo kodowe. Przy odczycie kontroler wykorzystuje je do wykrycia i poprawienia błędnych bitów.
Im więcej informacji kontrolnych, tym więcej błędów da się poprawić, ale tym mniej miejsca zostaje na dane. Układy korekcji w dyskach opisanych w publikacji radzą sobie z danymi, w których błędny jest od 1 na 1000 do 1 na 100 bitów. Po korekcji błędów ma być bardzo mało: norma JEDEC wymaga poziomu 1 na 10^15 bitów, a producenci celują w 1 na 10^16.
W dyskach stosuje się dwa główne rodzaje kodów:
- BCH poprawia wiele błędów na podstawie jednego odczytu.
- LDPC potrafi wykorzystać informacje z wielu odczytów tej samej komórki. Szacuje, z jakim prawdopodobieństwem przechowuje ona 0, a z jakim 1. Daje silniejszą ochronę kosztem dłuższego dekodowania.
Dodatkowo słowo kodowe zawiera sumę kontrolną CRC. Pozwala ona wykryć rzadkie przypadki, w których korekcja „myli się” i uznaje błędne dane za poprawne. Nowsze kontrolery chronią też dane w drodze przez sam kontroler i jego pamięć podręczną (data path protection).
Etapy ratowania danych przy odczycie
Gdy pierwszy odczyt zawiedzie, kontroler nie poddaje się od razu. Sięga po coraz mocniejsze, ale wolniejsze metody:
- Szybki odczyt (dekodowanie „twarde”). Kontroler odczytuje stronę przy ustalonych napięciach odniesienia i próbuje ją poprawić. W przykładzie z publikacji trwa to ok. 80 µs i zawodzi mniej więcej raz na 10 tys. słów kodowych.
- Odczyty dodatkowe (dekodowanie „miękkie”). Kontroler ponownie odczytuje komórki przy innych napięciach. Każdy kolejny poziom dokłada informacji o tym, jak „pewna” jest wartość każdej komórki. Pięć poziomów to do ok. 480 µs, ale prawdopodobieństwo porażki spada około 100 tys. razy. Przy kodach BCH zamiast tego stosuje się ponowne próby odczytu z innymi napięciami.
- Odtworzenie z parzystości (jak w macierzach RAID). Wiele dysków zapisuje dodatkowe dane parzystości rozłożone między układy pamięci. Brakujący fragment można wtedy wyliczyć z pozostałych, nawet gdy zawiedzie cały jeden układ (die). To kosztowna operacja, trwa ok. 10 ms.
- Błąd nie do skorygowania. Jeśli i to się nie uda, dysk zgłasza komputerowi błąd odczytu.
W przykładzie opisanym w publikacji dane, które udało się poprawić lub odtworzyć, trafiają do komputera i są też zapisywane ponownie w nowym fizycznym miejscu.
Dlaczego „miękkie” dekodowanie jest tak cenne
W przykładzie porównawczym z publikacji oba kody miały podobną nadmiarowość. Kod BCH utrzymywał wymaganą jakość danych przy 1 błędnym bicie na 1000. LDPC z dekodowaniem miękkim radził sobie z ok. 5 błędnymi bitami na 1000, czyli z pięciokrotnie większą liczbą błędów (wartość ekstrapolowana przez autorów). Ceny tej przewagi są dwie: dodatkowe odczyty i dłuższy czas odpowiedzi.
Nowsze badanie na pamięci 3D TLC pokazuje, jak szybko ten czas się sumuje. Pojedynczy odczyt trwa 85 µs, a przy 7 poziomach łączny czas odczytu strony sięga 1099 µs:

Najlepsza obrona: odczyt przy właściwym napięciu
Skoro błędy biorą się z przesuwania „okienek” napięcia, najskuteczniej jest przesunąć za nimi napięcia odczytu. Z tej obserwacji wynika kilka mechanizmów:
- Read-retry. Kontroler ponawia odczyt z innymi napięciami odniesienia, aż korekcja się powiedzie lub skończą się dostępne warianty. Mechanizm jest powszechny w nowoczesnych pamięciach, choć każda próba wydłuża odczyt.
- Uczenie się optymalnych napięć. Kontroler okresowo, np. raz dziennie, sprawdza dla każdego bloku, przy jakim napięciu jest najmniej błędów, i od niego zaczyna kolejne odczyty. W badaniach zwiększyło to wytrzymałość pamięci o 64% i skróciło czas korekcji o 10%. Pomaga w tym przemieszanie danych: skoro zer i jedynek powinno być po połowie, kontroler szuka napięcia, przy którym ten stosunek się zgadza.
- Korekcja z pomocą sąsiadów. Znając wartości zapisane w sąsiednim rzędzie komórek, kontroler może uwzględnić, jak bardzo zakłóciły one odczytywaną komórkę. W testach na pamięci MLC wydłużyło to żywotność o 33%.
Badanie pamięci 3D NAND z 2024 roku potwierdza wagę tego podejścia. Gdy kontroler czyta przy napięciu bliskim optymalnego, w większości przypadków wystarcza szybki odczyt, nawet przy dużym zużyciu, długim przechowywaniu i silnych zakłóceniach. Gdy napięcie jest daleko od optymalnego, potrzeba wielu dodatkowych odczytów, a części danych nie da się odczytać wcale.
Co to oznacza w praktyc
Korekcja błędów w dysku SSD jest skuteczna, ale ma ograniczoną możliwości. Każdy błąd „zużywa” część tej przestrzeni . Gdy błędów przybywa, kontroler coraz częściej sięga po wolniejsze etapy odczytu. W przykładzie z publikacji dysk, który osiągnął zakładany kres żywotności, nadal odczytuje dane poprawnie, ale wolniej. Publikacja opisuje też mechanizm, w którym kontroler traktuje wydłużony czas odczytu strony jako sygnał, że przybyło w niej błędów, i odświeża cały blok. Ponieważ odzyskiwanie danych z dysków SSD staje się coraz trudniejsze, warto zadbać o kopie zapasowe, a jeśli masz jakiś problem i potrzebujesz odzyskać dane z dysku SSD lub innego nośnika zapraszamy do kontaktu
