Błędy pamięci w Ubuntu, ale nie w MemTest86 +

8

Mam kilka błędów btrfs i ext4. Po podjęciu decyzji o przetestowaniu pamięci RAM wystąpiły następujące powtarzające się błędy memtester. Zawsze pojawiają się podobne błędy po krótkim uruchomieniu memtester. Zwykle za godzinę, ale jednorazowo zajęło 4-5 godzin.

Pamięć RAM mojego komputera jest przylutowana. Mam dodatkowe puste miejsce. W systemie BIOS nie ma ustawień wyłączających wbudowaną pamięć RAM.

Uruchomiłem:

  • Memtest86 + na 8 karnetów (~ 8 godzin)
  • MemTest86 na 18 podań (~ 9 godzin)
  • memtesteri stressapptestna Fedorze 27 domyślnie, zainstalowany na pamięci USB (~ 10 godzin)
  • memtesteri stressapptestna Ubuntu 17.10 Live domyślnie (~ 2 godziny)
  • memtesteri stressapptestna Ubuntu 17.10 na pamięci USB (~ 8 godzin)
  • # debsums --changed jedynym zmienionym plikiem był obraz motywu.

Nie wydrukowali żadnych błędów.

Używam Ubuntu 17.10 (uaktualnionego z 17.04) z domyślnym jądrem. Jądro nie jest skażone. To laptop ASUS z Intel Haswell i3.

  • Testowany również z Linuksem 4.14.13 i 4.15.0-rc3, rc4, mainline.
  • Testowany również z oczyszczonym pakietem intel-microcode.

Błąd jest powtarzalny, albo Nouveau jest wyłączone lub włączone, nie są ładowane żadne sterowniki binarne nvidia.

Umieszczono na czarnej liście następujące moduły: mtd intel_spi_platform intel_spiponieważ nie ładują się przy domyślnej instalacji Fedory 27 i wydają się blokować niektóre laptopy Lenova. Błędy nie ustały.

uname -awyjście

Linux hostname 4.13.0-19-generic #22-Ubuntu SMP Mon Dec 4 11:58:07 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux

# lsmodwyjście

https://paste.ubuntu.com/26222245/

Dane # lsmodwyjściowe Fedory 27

https://paste.ubuntu.com/26226473/

Obecna sytuacja

Włożyłem dysk twardy do laptopa (zapasowego), o którym wiedziałem, że jest dobry, i przeprowadziłem tam testy. Mam błędy. Teraz jestem całkiem pewien, że jest to problem z oprogramowaniem. Nigdy nie byłem w stanie wyzwolić błędów na moim laptopie ze świeżym Ubuntu ani z Fedorą próbującą wielu godzin.

Co powinienem zrobić?

Próbka błędów:

Loop 6:
  Stuck Address       : ok         
  Random Value        : ok
  Compare XOR         : ok
  Compare SUB         : ok
  Compare MUL         : ok
  Compare DIV         : ok
  Compare OR          : ok
  Compare AND         : ok
  Sequential Increment: ok
  Solid Bits          : ok         
  Block Sequential    : ok         
  Checkerboard        : ok         
  Bit Spread          : ok         
  Bit Flip            : testing 262
FAILURE: 0x00000000 != 0xfffffffeffffffff at offset 0x0ef94000.
FAILURE: 0x00000000 != 0x100000000 at offset 0x0ef94008.
FAILURE: 0x00000000 != 0xfffffffeffffffff at offset 0x0ef94010.
FAILURE: 0x00000000 != 0x100000000 at offset 0x0ef94018.
FAILURE: 0x00000000 != 0xfffffffeffffffff at offset 0x0ef94020.
FAILURE: 0x00000000 != 0x100000000 at offset 0x0ef94028.
FAILURE: 0x00000000 != 0xfffffffeffffffff at offset 0x0ef94030.
FAILURE: 0x00000000 != 0x100000000 at offset 0x0ef94038.
  Walking Ones        : ok         
  Walking Zeroes      : ok         
  8-bit Writes        : ok
  16-bit Writes       : ok

Podobny błąd w obu gniazdach pamięci RAM jest pełny:

Loop 1:
  Stuck Address       : ok         
  Random Value        : ok
  Compare XOR         : ok
  Compare SUB         : ok
  Compare MUL         : ok
  Compare DIV         : ok
  Compare OR          : ok
  Compare AND         : ok
  Sequential Increment: ok
  Solid Bits          : ok         
  Block Sequential    : ok         
  Checkerboard        : ok         
  Bit Spread          : testing   4
FAILURE: 0x00000000 != 0x00000050 at offset 0x7da80000.
FAILURE: 0x00000000 != 0xffffffffffffffaf at offset 0x7da80008.
FAILURE: 0x00000000 != 0x00000050 at offset 0x7da80010.
FAILURE: 0x00000000 != 0xffffffffffffffaf at offset 0x7da80018.
FAILURE: 0x00000000 != 0x00000050 at offset 0x7da80020.
FAILURE: 0x00000000 != 0xffffffffffffffaf at offset 0x7da80028.
FAILURE: 0x00000000 != 0x00000050 at offset 0x7da80030.
FAILURE: 0x00000000 != 0xffffffffffffffaf at offset 0x7da80038.
  Bit Flip            : setting 141

Błąd stressapptest:

Report Error: miscompare : DIMM Unknown : 1 : 157s
Hardware Error: miscompare on CPU 2(0x2) at 0x7fcc0726e000(0xb0d18:DIMM Unknown): read:0x0000000000000000, reread:0x0000000000000000 expected:0x4a4a4a4a4a4a4a4a
Report Error: miscompare : DIMM Unknown : 1 : 157s
Hardware Error: miscompare on CPU 2(0x2) at 0x7fcc0726e008(0xb0d18:DIMM Unknown): read:0x0000000000000000, reread:0x0000000000000000 expected:0x4a4a4a4a4a4a4a4a
Report Error: miscompare : DIMM Unknown : 1 : 157s
Hardware Error: miscompare on CPU 2(0x2) at 0x7fcc0726e010(0xb0d18:DIMM Unknown): read:0x0000000000000000, reread:0x0000000000000000 expected:0x4a4a4a4a4a4a4a4a
Report Error: miscompare : DIMM Unknown : 1 : 157s
Hardware Error: miscompare on CPU 2(0x2) at 0x7fcc0726e018(0xb0d18:DIMM Unknown): read:0x0000000000000000, reread:0x0000000000000000 expected:0x4a4a4a4a4a4a4a4a
Report Error: miscompare : DIMM Unknown : 1 : 157s
Hardware Error: miscompare on CPU 2(0x2) at 0x7fcc0726e020(0xb0d18:DIMM Unknown): read:0x0000000000000000, reread:0x0000000000000000 expected:0x4a4a4a4a4a4a4a4a
Report Error: miscompare : DIMM Unknown : 1 : 157s
Hardware Error: miscompare on CPU 2(0x2) at 0x7fcc0726e028(0xb0d18:DIMM Unknown): read:0x0000000000000000, reread:0x0000000000000000 expected:0x4a4a4a4a4a4a4a4a
Report Error: miscompare : DIMM Unknown : 1 : 157s
Hardware Error: miscompare on CPU 2(0x2) at 0x7fcc0726e030(0xb0d18:DIMM Unknown): read:0x0000000000000000, reread:0x0000000000000000 expected:0x4a4a4a4a4a4a4a4a
Report Error: miscompare : DIMM Unknown : 1 : 157s
Hardware Error: miscompare on CPU 2(0x2) at 0x7fcc0726e038(0xb0d18:DIMM Unknown): read:0x0000000000000000, reread:0x0000000000000000 expected:0x4a4a4a4a4a4a4a4a

Podejrzewam, że w jakiś sposób konfiguracja Ubuntu w połączeniu ze sprzętem mojego laptopa jest winna za te błędy. Prawie za każdym razem w paczkach po osiem.

Nieważne, luźno powiązane informacje poniżej

Informacje o błędach btrfs; Korzystałem z 17.04. Pytałem w irc btrfs. Powiedziano mi, że może to być błąd sprzętowy lub błąd zarządzania pamięcią. Część strony metadanych plików btrfs została wypełniona zerami, tak jak teraz. Przebiegłem memtestera tylko kilka przejść, przestawiłem się na ext4 i zrzuciłem winę na binarny sterownik nvidii.

Polecenia i ich parametry, których używam:

# stressapptest -M 10000 -s 1800

10000 to dostępna pamięć, którą mogę przetestować. Dostaję to przez free -m-s` to sekundy.

# memtester 4096

Procesor laptopa ma 2 rdzenie, więc zwykle uruchamiam dwa wystąpienia. 4096 to połowa bieżącej dostępnej pamięci za pośrednictwemfree -m

Artem
źródło
1
Wymieniłbym złą pamięć RAM, ale nie wiem, czy jest to możliwe z lutowanymi układami RAM. Czy komputer jest wystarczająco nowy, aby wymienić go w ramach gwarancji?
sudodus
@sudodus Tak, gwarancja jeszcze nie wygasła. Zrobię to, jeśli nie mogę znaleźć rozwiązania. Przekonałem się, że chociaż nie ma oficjalnego sposobu, ludzie znaleźli sposoby na wyłączenie lutowanych pamięci RAM na niektórych laptopach poprzez przeskakiwanie punktów testowych.
Artem,
Aby być bardziej pewnym, wypróbuj memtest86+z dowolnej LiveCD z instalacją Ubuntu.
N0rbert,
@ N0rbert Zrobiłem kilka testów z memtest86 - przebadanym - z wynikiem ujemnym. Ale były krótkie - 4 powtórzenia - dziś wieczorem zrobię test.
Artem
2
@sudodus, wierzę, że memtest86 + może przetestować własną pamięć, nie powinno to jednak stanowić większego problemu. Tak, naprawiłem kilka razy partycję ext4, ponieważ prawdopodobnie zepsuła się z powodu błędów związanych z pamięcią. Niestety nie mogłem naprawić mojej partycji btrfs, ponieważ metadane zostały w jakiś sposób uszkodzone, zanim zostały zapisane na dysku, a moja partycja btrfs prawdopodobnie rozprzestrzeniła ją za pomocą scrub btrfs i uszkodziła niektóre z nich.
Artem

Odpowiedzi:

1

Usunięta odpowiedź była blisko

Odpowiedź na to pytanie została usunięta:

Czy próbowałeś już ponownie zainstalować Ubuntu, ponieważ brzmi to jak błąd zarządzania pamięcią na poziomie systemu operacyjnego

Moja odpowiedź jest podobna, ponieważ dotyczy zarządzania bardzo niskim poziomem pamięci; KASLR na poziomie jądra.

Co robi KASLR

KASLR oznacza K ernel DRES S tempo L ayout R andomization. Nigdy nie słyszałem, żeby mówiono na głos, ale w mojej głowie wymawiam to „Casler”. Pomyśl o przyjaznym duchu w maszynie. KASLR to środek bezpieczeństwa służący do losowej lokalizacji modułów pamięci jądra. Teoria jest taka, że ​​jądro jest trudniejsze do zhakowania, gdy nie można polegać na tym, że ten sam fragment kodu zawsze znajduje się w tym samym miejscu pamięci.

Operację KASLR można uznać za przeciwieństwo testerów pamięci, które powtarzalnie odczytują i zapisują w tych samych lokalizacjach pamięci, nie oczekując żadnych ZMIAN. To są przeciwieństwa, co przyciągnęło mnie (zauważyłem idiom), do wyszukiwania go w KASLR i błędów pamięci. Jeden w szczególności pozornie niepowiązany mógłby zasłużyć na wiadomość dotyczącą linków github do tego pytania i odpowiedzi. Powodem jest to, że uważają, że tylko one mają wpływ na zmianę adresów pamięci (jeśli poprawnie czytam ich wątek). Pierwsze trzy trafienia pochodzą od RedHata, do którego nie chcę linkować, ponieważ ich strony internetowe są częściowymi postami, które można znaleźć w robotach wyszukiwania Google, a następnie każą płacić za czytanie.

Znane są problemy, gdy KASLR ładuje „rzeczy” jądra do środka mapy pamięci, czego nie powinien robić. Niestety nie mogę przypomnieć sobie linku, który znalazłem w zeszłym tygodniu w dzisiejszej odpowiedzi. Łącze zawierało łatkę / obejście, które nakazuje KASLR, aby nie używał określonych lokalizacji pamięci.

Po potwierdzeniu znanych problemów z KASLR i lokalizacjami pamięci skomentowałem pod pytaniem, aby wyłączyć KASLR i ponownie uruchomić testy pamięci. W odpowiedzi stwierdzono, że wydaje się ona być skuteczna, więc zamieszczam tę odpowiedź.

Jak wyłączyć KASLR

Chociaż od kilku lat używam opcji wiersza polecenia grub kernel „kaslr”, stał się domyślnym jądrem od wersji co najmniej 4.12 . Aby wyeliminować ładowanie KASLR, użyj edycji /etc/default/grubi zmień ten wiersz:

GRUB_CMDLINE_LINUX_DEFAULT="quiet splash nokaslr"

Możesz mieć inne opcje niż „cichy” i „plusk”. Ważnym krokiem jest dodanie „nokaslr” i pozostawienie pozostałych opcji na miejscu.

Następnie zapisz plik i uruchom:

sudo update-grub

Oczywiście innym sposobem wyłączenia KASLR jest po prostu użycie starszego jądra, takiego jak 4.4.0 pod Ubuntu 16.04.1, gdy KASLR nie został automatycznie dołączony.

WinEunuuchs2Unix
źródło
0

Problem bardzo przypomina losowe uszkodzenie pamięci RAM. Z mojego doświadczenia wynika, że ​​MemTest86 jest „zbyt łatwym” testem sprzętu. Znajduje naprawdę złą pamięć, ale drobne problemy często pozostają niezauważone.

Jeśli chcesz się dowiedzieć, czy masz dobrą pamięć, spróbuj uruchomić Prime95 w trybie autotestu / tortur skonfigurowanym tak, aby zużywał jak najwięcej pamięci RAM.

Kolejnym dobrym testem jest przeprowadzenie testu dwustronnego młota szeregowego przez kilka godzin.

Wierzę, że jeśli Prime95 i młot dwustronny nie mogą znaleźć problemów z pamięcią, prawdopodobnie działa poprawnie. Jednak po prostu uruchamianie MemTest86, kompilowanie programów, instalowanie systemu operacyjnego, granie w gry może wydawać się działać, nawet jeśli twoja pamięć jest nieco zła (byłeś tam, zrobiłeś to - i na dłuższą metę dostałem uszkodzone dane).

Mikko Rantalainen
źródło