Jak błąd pamięci jednobitowej wpłynie na Linuksa?

4

Odbudowuję trzyletni system AMD Athlon 5000, który ma płytę główną „ASRock NF7G-FullHD” z 4 gniazdami pamięci, oznaczonymi „DDR2 800”, o łącznej pojemności 8 GB. Oprócz 550 W PS i 500 GB dysku kupiłem „dopasowaną parę” 2 ea. 2 GB DIMM s, które niestety mają trwałe błędy jednobitowe w kilku miejscach (patrz rysunek).

Jaki byłby efekt uruchomienia Linuksa na tym systemie z taką pamięcią? To znaczy. , jak prawdopodobna jest niestabilność, niewykryty błąd lub niska wydajność? Czy będą awarie systemu operacyjnego, segfaults, różne awarie aplikacji, czy co? Czy istnieje sposób mapowania lub wyłączania uszkodzonych fragmentów pamięci RAM?

memtest86 picture

Uwaga: 4 gniazda pamięci są oznaczone jako DDRII_1,2,3,4; 1 i 2 są żółte, 3 i 4 są pomarańczowe. Powyższy obrazek Memtest86 został zrobiony, gdy miejsca zostały wypełnione (nowe, stare, nowe, stare). Błędy występują również na podobnych adresach z kolejnością wypełniania (stare, stare, nowe, nowe), z taką samą szybkością dostępu do pamięci (około 2,9 GB / s), jak na zdjęciu. Wypełnione (stare, stare, -, -) lub (stare, -, stare, -) lub (nowe, -, nowe, -) żadne błędy nie wystąpiły w ciągu kilku godzin testowania, ale (nowe, nowe, -, -) z jakiegoś powodu nie dostał się do BIOSu ani przez niego, a przycisk resetowania wydawał się nie mieć żadnego efektu i nie było sygnału wideo. Z 3 szczelinami wypełnionymi na przykład (nowy1, stary, nowy0, -) wystąpił jeden błąd (znajdujący się w pierwszych GB pamięci RAM) w ciągu 1,5 godziny testowania; z (stary, stary, nowy0, -), brak błędów w 2 godzinach testów. Problem z wydajnością w konfiguracjach 6 GB to szybkość dostępu do pamięci wynosząca tylko 1,7 GB / s.

Podsumowanie pytania: Jaki byłby efekt uruchomienia Linuksa w tym systemie z pamięcią uzależnioną od niektórych błędów jednobitowych? Czy istnieje poprawka inna niż wymiana pamięci RAM?

James Waldby - jwpat7
źródło
1
Możesz zazwyczaj rozwiązać te błędy, podnosząc napięcie RAM, zwiększając opóźnienie i / lub zmniejszając częstotliwość FSB.
David Schwartz
Ponowne opóźnienie, czy znasz dokumentację dotyczącą tego, który z numerów CAS 4-4-4-12 (jak na zdjęciu) musiałby się zmienić?
James Waldby - jwpat7
Specyfikacja techniczna tych chipów określa przy okazji opóźnienie CAS równe 5.
Dennis
Musisz albo zwiększyć napięcie do 2,0 V, albo zwiększyć opóźnienie CAS do 5. Przynajmniej, jeśli specyfikacje, które widzę w Internecie, są poprawne, tak mówią. (Czy nie pochodzą ze specyfikacjami?)
David Schwartz

Odpowiedzi:

8
  1. Szybkość dostępu do pamięci jest niższa przy tylko 3 układach, ponieważ pamięć dwukanałowa powinna być zawsze instalowana parami.

  2. Błędy pojedynczego bitu mogą spowodować, że wszystko się wydarzy. Jak prawdopodobne jest, że zależy to od tego, jak bardzo Twoja pamięć zniknęła, ale nie jest to dobry pomysł. Niestabilność systemu jest tym, na co powinieneś mieć nadzieję. Możesz również zapisać krytyczny plik systemowy (lub inny ważny dla Ciebie plik) w tej części pamięci, zmodyfikować go i zastąpić oryginalny plik. Tak więc błąd jednobitowy może zepsuć cały system operacyjny.

  3. Są szanse, że tylko jeden z pendrive'ów jest uszkodzony (prawdopodobnie nowy1). Pamięć PYG objęta jest dożywotnią gwarancją, więc możesz spróbować uzyskać działającą. Słyszałem bardzo złe rzeczy na temat pamięci PYG i obsługi klienta, ale nie wiem na pewno.

Dennis
źródło
Poproszę o wymianę, ale szukam alternatyw w przypadku problemów lub opóźnień w wymianie.
James Waldby - jwpat7
Będziesz musiał włączyć wadliwy kij do wymiany, więc po prostu użyj 4 GiB na razie.
Dennis
5

Jak już powiedziano, pojedynczy błąd pamięci może spowodować, że prawie wszystko pójdzie nie tak lub nigdy nie zauważysz tego.

Miałem przed sobą kiepski dysk pamięci, a zły punkt w pamięci RAM oznaczał, że Windows czasami działał, ale zepsułby się dość regularnie. Nigdy nie możesz przewidzieć, co zostanie przydzielone do dowolnego miejsca w pamięci RAM w systemie (ze względu na sposób przydzielania pamięci przez system operacyjny) i chociaż możesz mieć szczęście i tylko złamać jakiś nieistotny program lub uszkodzić jedną grafikę, jest dobre szansa, że ​​zrobi to o wiele gorzej i ryzykujesz swoimi danymi przy użyciu złej pamięci RAM.

Linux ma wsparcie dla BadMem co, jeśli dobrze pamiętam, może oznaczać, że możesz „zmapować” zły blok pamięci. Nie mogłem sprawdzić, czy obsługuje najnowsze jądro, aby sprawdzić, czy jest ono dla Ciebie przydatne.

Moja rada jest następująca: w krótkim czasie bądź przygotowany na utratę danych i ogólną niestabilność systemu, w dłuższej perspektywie powinieneś dowiedzieć się, który kij jest wadliwy i zastąpić go.

Mokubai
źródło
2

Aby móc uruchamiać programy, komputer pobiera instrukcje dotyczące tego, co robić z pamięci. (programy są ładowane do pamięci). Instrukcje są po prostu sekwencjami liczb i są językiem komputerów.

Zbudujmy prosty język, w którym 1 = kopia, 3 = od, 4 = do

1 (kopia), 50,3 (od), 100,4 (do), 200;

Tak więc sekwencja liczbowa 1,50,3,100,4,200 może oznaczać dla komputera skopiowanie 50 bajtów danych z lokacji pamięci 100 do lokacji pamięci 200. Jest to to samo, co przeniesienie 50 skarpet z jednej szuflady do drugiej.

Teraz, jeśli pamięć jest wadliwa i występuje błąd pojedynczego bitu, liczba może na przykład zmienić się z 1 na 129. Zakładając więc, że dowolna liczba w powyższej sekwencji może zostać zmieniona, może dojść do wielu interesujących błędów. Jeśli 50 zostanie zmienione na 35 lub 188 lub cokolwiek innego, łatwo jest zrozumieć, że ilość danych, które mają zostać skopiowane, będzie błędna i może zastąpić inne dane (które mogą być instrukcjami) w pamięci. jeśli 1 zostanie zmienione na 5, komputer może nawet nie zrozumieć, że ma cokolwiek kopiować. Tak jak wykazano, błąd pojedynczego bitu może prowadzić nie tylko do pojedynczego błędu, ale także do innych błędów spowodowanych przez pierwszy błąd.

Linux (lub jakikolwiek inny system operacyjny) jest zasadniczo taki sam jak reszta programów uruchamianych na komputerze: sekwencja liczb, która mówi komputerowi, co robić. Jeśli ta sekwencja zostanie uszkodzona, programy nie sprawią, że komputer zrobi to, co było zamierzone, a zatem mogą wystąpić różnego rodzaju problemy.

Pamiętaj również, że muzyka, wideo lub obrazy to także tylko ciąg liczb, więc obowiązuje również ta sama zasada. Warto dodać, że w zależności od pliku uszkodzenie może nie być zauważalne (na przykład zły piksel na zdjęciu), ale nie oznacza to, że plik jest w porządku. W tekście, który czytasz na stronie internetowej, może nawet pojawić się literówka, jeśli dany znak jest przechowywany w złym miejscu w pamięci.

Istnieją układy scalone zaprojektowane do odzyskiwania błędów pojedynczych bitów i wykrywające błędy dwubitowe (pamięć ECC).

Mam nadzieję, że to wyjaśnia, dlaczego dowolny system operacyjny nie będzie działać, jeśli pamięć zawierająca jego dane i / lub instrukcje są uszkodzone. Najbezpieczniejszym sposobem rozwiązania tego problemu jest wymiana uszkodzonego barana. W międzyczasie możesz chcieć zmapować zły obszar pamięci za pomocą parametru jądra memmap (poniższy tekst został skopiowany z odpowiedzi, którą otrzymałem na inne pytanie).

 memmap=nn[KMG]$ss[KMG]
            [KNL,ACPI] Mark specific memory as reserved.
            Region of memory to be used, from ss to ss+nn.
            Example: Exclude memory from 0x18690000-0x1869ffff
                     memmap=64K$0x18690000
                     or
                     memmap=0x10000$0x18690000
Waxhead
źródło
2

Miałem ten sam problem, ale okazało się, że dostępne odpowiedzi są mylące i niekompletne, więc przygotowałem przewodnik krok po kroku, zakładając jak najmniejsze tło.

  1. Uruchom Memtest86 + na wyjściu „Badram” (najlepiej z rozruchowego nośnika zewnętrznego). Po uruchomieniu Memtest86 + wpisz:
  2. „C” („konfiguracja”)
  3. „4” („Error Report Mode”)
  4. „3” („Bad RAM Patterns”)
  5. „0” („Kontynuuj”).
  6. Skopiuj wynik następujący po liniach zaczynających się od „badram =”.
  7. Otwórz terminal (wiersz poleceń).
  8. Przejdź do katalogu, w którym znajduje się plik „grub”. Na przykład „cd / etc / default”.
  9. Z uprawnieniami „root” użyj edytora tekstu, aby otworzyć plik „grub” (jeśli nie jesteś zalogowany jako „root”, użyj „sudo”. Zostaniesz poproszony o hasło „root”): „sudo nano grub ”(Ten przykład zmienia użytkownika na„ root ”i otwiera plik„ grub ”za pomocą edytora tekstu„ nano ”).
  10. Znajdź sekcję opisującą memtest.
  11. Odkomentuj ostatnią linię (usuń znak specjalny na początku linii, taki jak „#”, „& gt ;,” lub „!”). To sprawia, że ​​jest aktywny (na przykład „# GRUB_BADRAM =” staje się „GRUB_BADRAM =”.).
  12. Zastąp przykładowe adresy (po „GRUB_BADRAM =”) wyjściem „badram =”, które skopiowałeś z Memtest86 + (na przykład „0x98f548a0,0xfffffffc”).
  13. Zapisz (lub „wypisz”) swoje zmiany.
  14. W terminalu (wierszu poleceń) zaktualizuj plik „grub.cfg”, wpisując „sudo update-grub”.
  15. Restart.
user392465
źródło
Wygląda na miłą odpowiedź. Drobne spory z „(jeśli nie jesteś zalogowany jako„ root ”, użyj„ sudo ”. Zostaniesz zapytany o hasło„ root ”).” - sudo prosi użytkownika o pw. Z man sudoers, „W przeciwieństwie do su (1), gdy sudoers wymaga uwierzytelnienia, sprawdza poświadczenia wywołującego użytkownika, a nie poświadczenia użytkownika docelowego (lub roota)”, chyba że sudoer zaznaczy inaczej
James Waldby - jwpat7