2013-02-28 15 views
8

Mój system to CentOS 6.3 (z uruchomioną wersją jądra 2.6.32-279.el6.x86_64).Linux utknął w soft lockup CPU?

Mam ładowalny moduł jądra, który jest sterownikiem, który zarządza kartą PCIe. Jeśli ręcznie włożę sterownik za pomocą insmod, gdy system operacyjny jest uruchomiony, sterownik ładuje się pomyślnie i działa.

Jednakże, jeśli spróbuję zainstalować sterownik przy użyciu rpm, a następnie ponownie uruchomić system, podczas uruchamiania system operacyjny zostaje zablokowany wypluwając następujący komunikat "soft lockup" dla WSZYSTKICH rdzeni procesora, z wyjątkiem jednego rdzenia, który jest w " soft lockup "w jednym z wątków stworzonych przez mojego kierowcę.

BUG: soft lockup - CPU#X stuck for 67s! [migration/8:36] 
.......(same above message for all cores except one) 
BUG: soft lockup - CPU#10 stuck for 67s! [mydriver_thread/8:36] 
(one core is locked up in one of the threads in my driver). 

Przeszukałem net trochę za info o tym kernel/msg bug, i istnieje sporo postów o tym, nikt na co go wywołuje i jak do debugowania. Każda pomoc z następującymi pytaniami naprawdę być docenione:

  1. nie jestem w stanie zalogować się do systemu, myślę, że to dlatego, że wszystkie rdzenie są w „miękki blokowaniem” państwa, a tym samym nie może wywołać jądra zrzutu z wiersza powłoki. Włączyłem SysRq i spróbowałem wyzwolić zrzut jądra z kombinacją klawiszy SysRq, ale bez powodzenia. Wygląda na to, że system nie reaguje na klawiaturę (nawet nie reaguje na przycisk CapsLock). Jakieś sugestie, w jaki sposób mogę wywołać zrzut jądra w takich okolicznościach?

  2. Potrafię sobie wyobrazić prawdopodobnie wątek sterownika powodujący "miękką blokadę". Ale w jaki sposób wątek "migracja" (wątek jądra) może być "miękką blokadą" tylko z powodu mojego sterownika?

  3. Od przeglądania sieci wątek "migracja" służy do przenoszenia zadań z jednego procesora na drugi. Czy ktoś może mi pomóc zrozumieć, co dokładnie robi ten wątek? I jak to może wpłynąć na inne wątki, jeśli w ogóle.

+0

Byłoby bardzo pomocne, gdybyś mógł pokazać nam ślady stosu. – cdleonard

+0

Problem z ponownym uruchomieniem sprawia, że ​​myślę o wielu problemach, które moduły ładowały oprogramowanie układowe, gdy nie ma oprogramowania układowego. Czy sterownik próbuje załadować z początkowego ramdysku? Czy wymaga oprogramowania sprzętowego i nie otrzymuje go? Czy twój sterownik zapętla się podczas inicjalizacji i wyłapuje wszystkie wątki kolejki pracy czy coś takiego? –

+0

@cdleonard Na ekranie nie ma odwrotu. Otrzymuję tylko szesnaście linii tego samego komunikatu jądra ("BUG: soft lockup .....") dla każdego z szesnastu rdzeni w systemie. Jedna z tych wiadomości dotyczy rdzenia zajęty wątkiem od mojego sterownika, a reszta rdzenia utknęła z wątkiem migracji. –

Odpowiedz

1

Miałem bardzo podobny problem na moim pulpicie. Zdarza się to bardzo często - mniej więcej raz dziennie.

Okazuje się, że to dlatego, że pracowałem na Intel Haswell. Wygląda na to, że procesory Intel Haswell/Broadwell mają błąd, który może spowodować niestabilność systemu. Ten błąd został naprawiony w aktualizacji mikrokodu.

Sprawdź, czy CentOS oferuje pakiet intel-microcode i zainstaluj go. Upewnij się, że skonfigurujesz grub, aby załadował go jako początkowy RAMdysk zanim załaduje initramfs.

Osobiście zaktualizowałem mój mikrokod przez uruchomienie systemu Windows i uruchomienie aktualizacji systemu BIOS. Możesz sprawdzić, czy kod micrcode został faktycznie zaktualizowany, porównując dane wyjściowe z grep 'microcode' /proc/cpuinfo przed i po aktualizacji.