Jak mogę debugować problem z zawieszeniem pamięci RAM w systemie Linux?

15

Mam nadzieję uzyskać sugestie oparte na doświadczeniu, jak przejść do debugowania problemu zawieszenia do pamięci RAM. Porady specyficzne dla mojej sytuacji (wyszczególnione poniżej) byłyby świetne, ale interesują mnie również ogólne porady dotyczące rozwiązywania takich problemów.

Problem:

Często, gdy próbuję zawiesić maszynę, utknie ona w stanie „nie zawieszony, ale nie przebudzony”. Często ekran jest całkowicie czarny, ale czasami pojawia się następujący komunikat o błędzie:

GLib-WARNING **: getpwuid_r(): failed due to unknown user id (0) 

Towarzyszyć temu będą także fani wrzucający wysokie biegi. Jedynym sposobem na wyjście z tego stanu jest ręczne wyłączenie laptopa.

Trochę informacji

$ uname -a
Linux baltar 2.6.35-22-generic #34-Ubuntu SMP Sun Oct 10 09:26:05 UTC 2010 x86_64 GNU/Linux

$ lsb_release -a
Distributor ID:    Ubuntu
Description:    Ubuntu 10.10
Release:    10.10
Codename:    maverick

Wziąłem okiem na /var/log/dmesgi /var/log/pm-suspend.log, ale nie wiem, co ja szukam i nic nie stoi na zewnątrz. Nie jestem pewien, czy jest to powiązane, ale znalazłem wiele z poniższych /var/log/kern.log:

EXT4-fs (dm-0): re-mounted. Opts: errors=remount-ro,commit=600
Steven D.
źródło
1
Jeśli uważasz, że ugryzł cię konkretny błąd, o którym tu wspominam, nie publikuj odpowiedzi „ja też” - ponieważ tak naprawdę nie jest to odpowiedź. Zachęcamy do głosowania za tym pytaniem, aby zachęcić innych do odpowiedzi. Na koniec dobra odpowiedź zapewniłaby nie tylko porady dotyczące rozwiązania tego konkretnego problemu, ale także porady dotyczące debugowania tego rodzaju problemów.
Steven D
Usunięto po wyjaśnieniach dotyczących Salonu Nauczycieli. Jedyne potencjalnie cenne informacje są No LSB modules are available.wyświetlane zaraz po lsb_release -a.
Maciej Piechotka
Zaznaczyłem odpowiedź „pracował dla mnie”, ale nadal uważam, że bardziej ogólna odpowiedź „jak debugować zawieszenie do pamięci RAM” byłaby tutaj bardzo pomocna.
Steven D

Odpowiedzi:

6

PM_DEBUG i PM_TRACE to najwyraźniej najgłębsze dostępne obecnie narzędzia do debugowania. Gdy nie otrzymujesz nic znaczącego z dzienników wyższego poziomu, AFAIK jest to jedyny mechanizm, na który można polegać, gdy napotykasz przerażający objaw „tajemniczego pustego ekranu po wznowieniu”. Najczęściej mamy do czynienia z dość często subtelnie uszkodzonym sterownikiem urządzenia. Możesz także zapoznać się z moją sagą debugowania sterownika bezprzewodowego brcmsmac Broadcom przy błędzie jądra 34682, aby dowiedzieć się, co sugerują i szukają programiści jądra.

lkraav
źródło
1

Podejrzewam, że problem może wynikać z nieprawidłowego zgłaszania przez BIOS tego, jakiego lowmem naprawdę używa.

Domyślnie ta opcja działa:

memory_corruption_check_size=64K

Możesz spróbować ustawić to na większe wartości, aby skaner niszczenia pamięci zbadał większą część lowmem.

Poszukaj „rozmiar_kontroli_wybicia_ pamięci” w

itp.

Chciałbym wiedzieć, co znajdziesz, jeśli w ogóle.


źródło
0

Moje doświadczenie w pracy w tym obszarze dotyczyło Windows CE, a nie Linuksa.

Podczas cyklu zawieszenia / wznawiania system operacyjny będzie stopniowo wyłączał funkcjonalność systemu operacyjnego, ograniczając możliwość uzyskania dokładnych i wiarygodnych informacji o tym, co się dzieje z użyciem funkcji systemu operacyjnego. Ponadto połączenie monitorujące może (np. Jeśli problem dotyczy czasu) zmienić wynik.

Narzędzia preferencyjne zaczynają się od połączenia debugera C / C ++ z systemem operacyjnym na wysokim poziomie, a na bardzo niskim poziomie wysyłania danych do portu szeregowego / kodów POST lub na sprzętowy debugger JTAG lub równoważne. Efektem końcowym są długie godziny pracy nad przepływem kodu i znalezienie punktu, w którym zachowuje się on inaczej niż normalne zachowanie. W tym momencie poprawka jest zwykle oczywista. Rób dobre notatki i wprowadzaj jedną zmianę na raz.

Identyfikacja problemu z uruchomieniem systemu Windows CE zajęła 6 tygodni. Mieliśmy płytę z procesorem PC104, którą mogliśmy wyłączyć na 10 lub 60 sekund i włączyć bez żadnych problemów. Jednak jeśli zasilanie zostanie odłączone na 25 sekund, nie uruchomi się. Okazało się, że mieliśmy wystarczającą pojemność, aby utrzymać zawartość DRAM w stanie nienaruszonym bez zasilania przez około 20 sekund, więc w krótkim cyklu wyłączania Windows CE pomyślał, że wznawia się ze stanu zawieszenia. Gdy cała pamięć zostanie zachowana, rzeczywiście uda się jej wznowić, gdy pamięć zostanie częściowo uszkodzona, będzie raczej mylona podczas wznawiania.

Powodzenia.

Michael Shaw
źródło