Odpowiedzi:
Odpowiedź brzmi „tak” i odbywa się to w sposób przejrzysty (pod warunkiem, że masz pamięć ECC do wykrywania błędów, a wersja jądra ma wersję co najmniej 2.6.30, aby nadal bezpiecznie działać).
Zasadniczo pamięć jest sprawdzana przy każdym odczycie z procesora i okresowo szorowana * w celu sprawdzenia zgodności z kodami korekcji błędów (ECC). Jeśli wystąpił błąd, pojawia się wyjątek sprawdzania maszyny, który jest następnie rejestrowany i pobierany przez mcelog ( http://www.mcelog.org/ ).
Jeśli błąd można naprawić, zwiększa licznik „nieszczelnego wiadra”, co powoduje, że fizyczny moduł DIMM, który zbyt często zawodzi, nie może zostać w przejrzysty sposób zastąpiony innym. W ten sposób strona pamięci jest kopiowana do nowej lokalizacji, adres pamięci wirtualnej jest aktualizowany, aby wskazywał na nową stronę, a stara strona jest oznaczona przez system operacyjny jako nieużywana.
W Linuksie nazywa się to „soft-offlining” (i wycofanie strony pamięci w Solarisie, nie wiem o innych systemach operacyjnych).
Jeśli jednak błędu nie da się naprawić, dzieje się tak zwane „hard-offlining”, tzn. Twoja strona pamięci jest usuwana z normalnego zarządzania pamięcią systemu operacyjnego i twoja aplikacja zostaje zabita (NB: przez jakiś chwytliwy sygnał SIGBUS, który mówi ci gdzie błąd się zdarzył, ale rzadko zdarza się, aby się tym nie przejmować i spróbować go złapać). Jeśli twoja strona pamięci jest zmapowana z pliku i wyczyszczona, system operacyjny może również przeładować ją w przejrzysty sposób w innej fizycznej lokalizacji zamiast zabijać proces.
Możesz przeczytać więcej o mcelogu, istnieje wiele opcji konfiguracji, możesz uzyskać inne zachowania, które mają być wyzwalane, opcje i inne informacje o tym, co czytać i jak upewnić się, że mcelog działa w twoim systemie.
* Szorowanie lub „szorowanie patrolowe” polega na czytaniu pamięci, sprawdzaniu jej pod kątem błędów ECC i zastępowaniu poprawionymi słowami pamięci, gdy błąd zostanie wykryty. Termin „szorowanie patrolu” jest używany w przeciwieństwie do nadpisywania niepoprawnych danych o błędach w odczytach pamięci, które czasami nazywane są „szorowaniem popytu”. Czyszczenie to procedura sprzętowa, którą można włączyć, zwykle poprzez BIOS.
To właściwie zły pomysł. Pamięć nie może być niezawodnie przetestowana w krótkim czasie. Dlatego oprogramowanie takie jak memtest86 używa wielu przebiegów z różnymi wzorami bitów do testowania pamięci. Rozwiązanie:
Testuj pamięć za pomocą memtest86 , najlepiej długi test, pozostaw go na noc, zajmie to dużo czasu.
Jeśli wykryta zostanie zła pamięć, użyj memmap
parametru jądra, aby zmusić jądro do nieużywania tej pamięci:
memmap = nn [KMG] $ ss [KMG] [KNL, ACPI] Oznacz określoną pamięć jako zarezerwowaną. Region pamięci do wykorzystania, od ss do ss + nn. Przykład: wyklucz pamięć z 0x18690000-0x1869ffff memmap = 64 tys. 0x18690000 lub memmap = 0x10000 $ 0x18690000
Ponadto można użyć pamięci ECC, która automatycznie poprawi błędy 1-bitowe i automatycznie wykryje błędy 2-bitowe w pamięci (a otrzymasz komunikaty dziennika z jądra o problemach z pamięcią, których nie można naprawić)
Post i odpowiedź źle zrozumiały problem. Czyszczenie pamięci ma na celu zapobieganie przekształceniu poprawialnych błędów pojedynczych bitów w nieskorygowalne błędy podwójne. Płuczka jedynie cała pamięć fizyczna (zmuszając pamięć podręczną, aby to zrobić) od czasu do czasu. Jeśli wystąpią błędy jednobitowe, zostaną one poprawione (a korekta musi przepisać poprawną wartość za pomocą porównania i zamiany), usuwając w ten sposób błąd.
W przeciwnym razie, jeśli wystąpi drugi błąd w słowie, które ma już jeden błąd, całe słowo będzie niemożliwe do naprawienia, a system operacyjny będzie musiał zrobić coś drastycznego.
Czyszczenie jest ważne, ponieważ bez niego pamięć, która jest odczytywana, ale nie zapisywana (jak strony kodowe) może z czasem gromadzić błędy.
Jeśli masz pamięć ECC, możesz przyjrzeć się bliżej https://www.kernel.org/doc/Documentation/ABI/testing/sysfs-devices-edac . (Uważam, że „sdram_scrub_rate” jest szczególnie interesujący.)
(Jeśli ten link zepsuje się w pewnym momencie (naprawdę nie powinien), sugeruję pobranie odpowiedniej dokumentacji systemu Linux i wyszukanie słowa „scrub”.)