Kworker, co to jest i dlaczego pochłania tak dużo procesora?

136

Niedawno uaktualniłem do Kubuntu Natty Beta 1 i miałem wiele problemów z procesem kworker . Chwilowo zużywa prawie połowę mojego procesora. Co dziwne, wydaje się, że wpływa na moje porty USB; za każdym razem, gdy podłączam dysk USB, procesor kworker przechodzi w hipernapęd, pozostawiając mnie niezdolnym do pracy.

Myślałem o zgłoszeniu błędu, ale odkąd nawet nie znalazłem żadnego rozsądnego wyjaśnienia, co to jest kworker , pomyślałem, że powinienem dowiedzieć się pierwszy.

davorao
źródło
Dziwne, kworker działa i przyczynia się do wznowienia pracy o 10%, ale nie mam zainstalowanych programów Kubuntu. Alos Nepomuk nie jest zainstalowany.
dago
1
od odpowiedzi afraziera myślę, że teraz ma to coś wspólnego z jądrem (więc k w kworker jest dla jądra). dlatego właśnie miałbyś kworker działający na twoim komputerze Ubuntu.
davorao,
1
Ta odpowiedź może być również pomocna w ustaleniu, co robi kworker
anarcat
1
Nie powinieneś brać tej ostatniej aktualizacji systemu operacyjnego. Jeśli masz szczęście, następny to naprawi.
nobar

Odpowiedzi:

109

„kworker” jest procesem zastępczym dla wątków roboczych jądra, które wykonują większość faktycznego przetwarzania dla jądra, szczególnie w przypadkach, w których występują przerwania, timery, operacje we / wy itp. Zazwyczaj odpowiadają one zdecydowanej większości przydzielonych „ systemowy czas do uruchomienia procesów. Nie jest to coś, co można bezpiecznie usunąć z systemu w jakikolwiek sposób, i jest to całkowicie niezwiązane z nepomuk lub KDE (z wyjątkiem tego, że te programy mogą wykonywać wywołania systemowe, które mogą wymagać od jądra czegoś).

Pojawiły się doniesienia o nadmiernej aktywności kworkera dla stosunkowo nieużywanych systemów, poczynając od rozwoju 2.6.36 ( przykładowa dyskusja ), oraz szerokie raporty o pomieszaniu i problemach z 2.6.38 (chociaż wiele z tych raportów zawiera słowo „Natty”, więc przypuszczam ci ludzie nie używali żadnego jądra między 2.6.35 (dystrybuowanym w Ubuntu 10.10) a 2.6.38 (dystrybuowanym w Ubuntu 11.04).

Znalazłem wiele raportów o czymś, co „naprawiło” to dla jednego lub drugiego użytkownika. Większość „poprawek” wydaje się być związana z aktualizacjami jądra różnego rodzaju. W przypadku, gdy aktualizację można prześledzić pod kątem konkretnego problemu, często wydaje się, że jest to jakaś usługa sterownika lub jądra, która została załatana, aby nie była źle zachowana: Mam wrażenie, że w jądrze znajduje się bardzo wiele rzeczy, które mogą powodować zachowanie co jest obserwowane jako nadmierne użycie kworkera.

Jeśli okaże się, że system nie nadaje się do użytku z powodu nadmiernej aktywności kworkera, zaleciłbym wykonanie mniejszej liczby czynności. Jeśli uważasz, że nic nie robisz, spróbuj zamknąć długo działające usługi lub liczniki czasu (czytniki RSS, czytniki poczty, indeksatory plików, narzędzia do śledzenia aktywności itp.). Jeśli to nie zadziała, spróbuj uruchomić ponownie. Jeśli twój system umożliwia włączanie lub wyłączanie sprzętu w środowisku przed uruchomieniem, spróbuj wyłączyć sprzęt, którego nie używasz. Jeśli zdarzy się to przy każdym ponownym uruchomieniu, zanim cokolwiek zrobisz, możesz spróbować odinstalować, ale w tym momencie będziesz chciał uruchomić narzędzia do profilowania syscall, aby wyśledzić określone aplikacje, które wydają się powodować to przeciążenie.

Należy mieć nadzieję, że Twój system przestanie wyrażać to zachowanie przy przyszłej aktualizacji jądra (i wiele z najczęstszych przyczyn tego problemu zostało rozwiązanych).

Emmet Hikory
źródło
1
Miałem powolny problem z logowaniem, który moim zdaniem jest z tym związany; Udaje mi się to obejść, opóźniając wszystko, co zostało uruchomione w ten sposób: askubuntu.com/a/484856/46437
Aquarius Power
1
Być może jest to zbyteczne, ale hołd dla bardzo wyraźnie wyrażonej odpowiedzi. To trochę dobrze wyrażony angielski, proszę pana.
Jon Carter
81

Co to jest kworker? kworkeroznacza proces jądra Linuksa wykonujący „pracę” (przetwarzanie wywołań systemowych). Możesz mieć kilka z nich na liście procesów: kworker/0:1jest to na pierwszym rdzeniu procesora, kworker/1:1na drugim itd.

Dlaczego kworker przeskakuje twój procesor? Aby dowiedzieć się, dlaczego kworker marnuje procesor, możesz utworzyć ślady procesora: obserwuj obciążenie procesora (z topczymś lub coś takiego), aw chwilach dużego obciążenia kworkerwykonaj, echo l > /proc/sysrq-triggeraby utworzyć ślad śledzenia. (W systemie Ubuntu musisz się zalogować sudo -s). Zrób to kilka razy, a następnie obserwuj ślady wstecz na końcu danych dmesgwyjściowych. Zobacz, co dzieje się często w śladach procesora, miejmy nadzieję, że wskazuje to na źródło problemu.

Przykład: e1000e. W moim przypadku prawie za każdym razem znajdowałem taki ślad:

Call Trace:
 delay_tsc+0x4a/0x80
 __const_udelay+0x2c/0x30
 e1000_acquire_swflag_ich8lan+0xa2/0x240 [e1000e]
 e1000e_read_phy_reg_igp+0x29/0x80 [e1000e]
 e1000e_phy_has_link_generic+0x85/0x120 [e1000e]
 e1000_check_for_copper_link_ich8lan+0x48/0x930 [e1000e]
 e1000e_has_link+0x55/0xd0 [e1000e]
 e1000_watchdog_task+0x5e/0x960 [e1000e]

Wskazało mi to na problem z e1000emodułem karty Ethernet i rzeczywiście sudo rmmod e1000esprawiło, że wysokie obciążenie procesora natychmiast zniknęło [ błąd e1000e nr 26 ].

Tanius
źródło
4
echo l > /proc/sysrq-triggerwygląda na to, że nie działa na proxy mówiącym sysrq: SysRq : This sysrq operation is disabled.smutno.
hak8or
1
sysrq musi zostać ponownie włączony w sysctl -w kernel.sysrq = 1 patrz askubuntu.com/questions/911522/…
Sebastien
Jak zrozumiałeś, że e1000 powoduje problem? Tylko dlatego, że był powtarzany?
onurcanbektas
@onurcanbektas Tak - najczęściej powtarzany wynik jest najbardziej prawdopodobną przyczyną. Ponieważ ślady wsteczne są na miejscu, sprawdzane jest, na czym procesor jest zajęty, gdy jest zablokowany.
tanius
70

Dlaczego kworker przeskakuje twój procesor (cd.)? Jako alternatywę dla mojej innej odpowiedzi tutaj , Perf jest bardziej profesjonalnym sposobem analizy zadań jądra, które powodują obciążenie procesora:

  1. Zainstaluj perf:

    sudo apt-get install linux-tools-common linux-tools-3.11.0-15-generic
    

    (Drugi pakiet musi pasować do wersji jądra. Możesz najpierw zainstalować linux-tools-commoni wywołać, perfaby poinformować cię, jakiego pakietu potrzebuje.)

  2. Nagraj około 10 sekund śledzenia wstecznego na wszystkich procesorach:

    sudo perf record -g -a sleep 10
    
  3. Przeanalizuj swoje nagranie:

    sudo perf report
    

    (Przejdź wykres połączenia z , , , i Enter).

Tanius
źródło
2
W moim systemie, działającym na maszynie wirtualnej VMware, za pomocą perfprześledziłem problem aż do sd_modmodułu jądra. Wyłączenie SCSI w vmxpliku uniemożliwiło modułowi załadowanie i przywróciło system do normalnej prędkości:scsi0.present = "FALSE"
feklee
E: Nie można znaleźć pakietu linux-tools-3.11.0-15-generic E: Nie można znaleźć żadnego pakietu według glob 'linux-tools-3.11.0-15-generic' E: Nie można znaleźć żadnego pakietu przez regex „linux-tools-3.11.0-15-generic”
Paddy
@Paddy: Sprawdź ponownie odpowiedź :-) "Pakiet [linux-tools - * - generic] musi pasować do twojej wersji jądra. Najpierw możesz zainstalować tylko linux-tools-common i wywołać perf, aby mógł ci powiedzieć, który pakiet wymagania."
tanius
8

Po prostu, aby wszyscy wiedzieli. Natknąłem się na ten problem, zainstalowałem perf (co jest świetnym narzędziem), wskazywał na blokowanie spinów i XFS. To wskazywało na NFS. Potem zdałem sobie sprawę, że jednego z moich wierzchowców brakowało miejsca. Zwolnienie miejsca spowodowało, że procesor kworker spadł do zera.

Widocznie może to być objaw braku miejsca na dysku na zajętym serwerze NFS!

Erik Aronesty
źródło
1
Zauważyłem, że miałem załamanie kworkera, gdy działała konkretna wirtualna skrzynka. Okazuje się, że z moim hostem działał NFS do udostępniania plików. Jednak nie był prawie pełny. Odmontowanie NFS „rozwiązało” problem. Chyba podzielę się z montażem sshfs.
Programster
4

Niedawno zainstalowałem Ubuntu Natty na zewnętrznym dysku USB paszport wd. Kiedy zaczynam na pulpicie, który ma około dwóch lat, wszystko działa jak urok. Kiedy uruchamiam na nowym laptopie (system MSI gt680r), spowalnia on po obudzeniu komputera ze stanu uśpienia lub po podłączeniu innego dysku USB.

Procesy Kworker wymagają coraz więcej procesorów, a mysz od czasu do czasu się zawiesza.

Przeczytałem kilka rozwiązań na różnych forach, które nie działały.

Wszedłem w biografie mojego laptopa, gdzie były:

Hand XCHI OFF: Enabled
EHCI Hand OFF: disabled

Zmieniłem na:

Hand XCHI OFF: disabled
EHCI Hand OFF: disabled

i odtąd nie zamarza już na natty na moim laptopie.

Umożliwiłbym przekazanie zwrotne, jeśli i kiedy problem zostanie rozwiązany.

CedCannes
źródło
1
Czy ktoś może wyjaśnić, dlaczego tak się dzieje? Jak podłączony jest XCHI?
GuySoft,