186 votes

Kworker, qu'est-ce que c'est et pourquoi utilise-t-il autant de CPU?

Récemment, j'ai mis à niveau vers le Kubuntu Natty Beta 1 et j'ai eu beaucoup de problèmes avec le processus kworker. Par moments, il utilise presque la moitié de mon CPU. De plus, étrangement, il semble affecter mes ports USB ; chaque fois que je branche une clé USB, le processus kworker s'emballe, me laissant incapable de travailler.

J'ai pensé à signaler un bug mais comme je n'ai même pas trouvé d'explication raisonnable sur ce qu'est kworker, j'ai pensé que je devrais d'abord me renseigner.

141voto

dukedave Points 3496

"kworker" est un processus de substitution pour les threads de travail du noyau, qui effectuent la plupart du traitement réel pour le noyau, en particulier dans les cas où il y a des interruptions, des minuteries, des E/S, etc. Ces processus correspondent généralement à la grande majorité de tout le temps "système" alloué aux processus en cours d'exécution. Ce n'est pas quelque chose qui peut être enlevé en toute sécurité du système de quelque manière que ce soit, et n'a aucun lien avec nepomuk ou KDE (à l'exception que ces programmes peuvent faire des appels système, ce qui peut nécessiter au noyau de faire quelque chose).

Il y a eu quelques rapports d'une activité excessive de kworker pour des systèmes relativement inactifs, à partir du développement de la version 2.6.36 (discussion d'exemple), et de nombreux rapports de confusion et de problèmes avec la version 2.6.38 (bien que beaucoup de ces rapports incluent le mot "Natty", je présume donc que ces personnes n'ont pas utilisé de noyau entre la version 2.6.35 (distribuée dans Ubuntu 10.10) et la version 2.6.38 (distribuée dans Ubuntu 11.04).

J'ai trouvé de nombreux rapports de quelque chose qui a "réparé" cela pour un utilisateur ou un autre. La plupart des "correctifs" semblent être liés à des mises à jour du noyau de divers types. Lorsque la mise à jour peut être attribuée à un problème spécifique, il semble souvent s'agir d'un pilote ou d'un service noyau qui a été corrigé pour ne pas mal fonctionner : j'ai l'impression qu'il y a un très grand nombre de choses dans le noyau qui peuvent causer un comportement qui est observé comme une utilisation excessive de kworker.

Si vous constatez que le système est inutilisable en raison d'une activité excessive de kworker, je vous recommande d'essayer de faire moins de choses. Si vous pensez que vous ne faites rien, essayez d'arrêter les services ou minuteries en cours d'exécution depuis longtemps (lecteurs de flux RSS, lecteurs de courrier, indexeurs de fichiers, traceurs d'activité, etc.). Si cela ne fonctionne pas, essayez de redémarrer. Si votre système vous permet d'activer ou de désactiver le matériel dans un environnement de pré-démarrage, essayez d'éteindre le matériel que vous n'utilisez pas. Si cela se produit à chaque redémarrage avant même que vous ne fassiez quoi que ce soit, vous pourriez essayer de désinstaller des choses, mais à ce stade, vous voudrez exécuter des outils de profilage des appels système pour traquer des applications spécifiques qui semblent causer cette surcharge.

On espère que votre système spécifique cessera d'exprimer ce comportement avec une future mise à jour du noyau (et que de nombreuses causes les plus courantes de ce problème ont été résolues).

103voto

tanius Points 5309

Qu'est-ce que kworker? kworker signifie un processus du noyau Linux effectuant du "travail" (traitement des appels système). Vous pouvez en avoir plusieurs dans votre liste de processus: kworker/0:1 est celui sur votre premier cœur de processeur, kworker/1:1 celui sur votre deuxième etc.

Pourquoi kworker monopolise-t-il votre CPU? Pour savoir pourquoi un kworker gaspille votre CPU, vous pouvez créer des traces de la pile du CPU: surveillez la charge de votre processeur (avec top ou autre chose) et en moments de forte charge via kworker, exécutez echo l > /proc/sysrq-trigger pour créer une trace de la pile. (Sur Ubuntu, cela nécessite que vous vous connectiez avec sudo -s). Faites cela plusieurs fois, puis regardez les traces de la pile à la fin de la sortie de dmesg. Voyez ce qui se passe fréquemment dans les traces de la pile du CPU, cela devrait vous orienter vers la source de votre problème.

Exemple: e1000e. Dans mon cas, j'ai trouvé une trace de pile comme celle-ci presque à chaque fois:

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]

Cela m'a mis sur la piste d'un problème dans le module de la carte Ethernet e1000e, et effectivement un sudo rmmod e1000e a immédiatement fait disparaître la charge CPU élevée [bug e1000e #26].

92voto

tanius Points 5309

Pourquoi kworker monopolise-t-il votre CPU (suite) ? En alternative à ma réponse précédente ici, Perf est une façon plus professionnelle d'analyser quelles tâches du kernel monopolisent votre CPU :

  1. Installez perf :

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

    (Le deuxième paquet doit correspondre à votre version du kernel. Vous pouvez d'abord installer juste linux-tools-common et appeler perf pour qu'il vous dise quel paquet il a besoin.)

  2. Enregistrez environ 10 secondes de backtraces sur tous vos CPUs :

    sudo perf record -g -a sleep 10
  3. Analysez votre enregistrement :

    sudo perf report

    (Naviguez dans le graphique d'appels avec , , , et Entrée.)

12voto

Erik Aronesty Points 348

Juste pour que tout le monde le sache. J'ai rencontré ce problème, installé perf (qui est un excellent outil), il a pointé vers le verrouillage par rotation et XFS. Cela pointait vers NFS. Ensuite, j'ai réalisé qu'un de mes montages était plein. Libérer de l'espace a fait chuter le CPU kworker à 0.

Il semblerait que cela puisse être un symptôme du manque d'espace disque sur un serveur NFS chargé!

4voto

CedCannes Points 41

J'ai récemment installé Ubuntu Natty sur un disque externe USB WD Passport. Lorsque je démarre sur mon ordinateur de bureau qui a environ deux ans, tout fonctionne à merveille. Lorsque je démarre sur mon nouveau laptop (système MSI gt680r), cela ralentit après avoir réveillé l'ordinateur du sommeil, ou si je branche un autre disque USB.

Les processus Kworker prennent de plus en plus de CPU, et la souris se fige de temps en temps.

J'ai lu plusieurs solutions sur différents forums qui n'ont pas fonctionné.

Je suis allé dans le BIOS de mon laptop, où j'ai trouvé :

Hand XCHI OFF: Activé
EHCI Hand OFF:Désactivé

J'ai changé pour :

Hand XCHI OFF:Désactivé
EHCI Hand OFF:Désactivé

et depuis ça, il ne se fige plus sur Natty sur mon laptop.

J'activerai la fonction Hand de nouveau lorsque le problème sera corrigé.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X