1 votes

Le processus "irq/288-wcd9xxx" vide la batterie, comment l'arrêter ?

J'utilise un Fairphone 2 avec Fairphone open OS, sous Android 7, (build-number : fp2_sibon-userdebug 7.1.2 19.11.2 sibon-24df0be9 ), à jour. Ma batterie perd systématiquement de 50% à 90% pendant la nuit, et après avoir essayé toutes sortes de choses pour l'arrêter, mon frère a vérifié dans un terminal (en utilisant Termux) avec l'icône top quels processus utilisaient le CPU. Un processus nommé irq/288-wcd9xxx utilise 15 à 20 % du CPU en permanence, ce qui pourrait expliquer pourquoi ma batterie se vide tout simplement en 12 heures. Voici une capture d'écran de ce que j'obtiens.

Screenshot top command

Comme kill o kill -9 n'a absolument aucun effet sur lui (cela semble fonctionner lors de l'exécution de la commande, mais le processus est toujours là après), quelqu'un a-t-il une idée de ce que c'est, et comment le tuer ou l'arrêter ?

EDIT :

Merci Irfan Latif pour votre réponse détaillée, mon frère et moi avons commencé à y jeter un coup d'œil, et pour le moment, pas beaucoup d'amélioration :

La commande grep -rI $(readlink /proc/$(pgrep -f irq/288-wcd9xxx)/exe) /*/etc/init/ /init.*.rc ne donne en effet aucun résultat, et ppid est 2, donc comme vous le pensiez, il semble s'agir d'un thread du noyau.
(Nous avons quand même jeté un coup d'œil à la getprop | grep init.svc. et j'ai essayé d'arrêter audiod juste pour voir, mais ça n'a rien changé).

Comme ce téléphone est un Fairphone (téléphone modulaire), nous pouvons retirer le matériel suspect et redémarrer pour voir si cela change quelque chose (suggestion par ce fil de fairphone que j'ai posté aussi, en fait disant déjà que c'est un "processus du noyau", je n'avais pas compris les implications : Ce sont des interruptions matérielles provenant du codec audio. ).
Mais le retrait du matériel n'a pas semblé changer grand-chose non plus, peut-être que l'échange fonctionnera (mon frère a le même téléphone avec une version différente d'Android, nous essaierons la prochaine fois que nous nous verrons), mais à ce stade, nous en doutons.

Enfin, nous essaierons bientôt vos suggestions pour contrôler l'utilisation du CPU du processus, peut-être que ce sera une solution temporaire, mais il semble maintenant que mon frère ait besoin d'une réinstallation complète du système, car à partir du moment où nous avons fait l'installation (l'installation standard du fairphone open OS), la batterie semblait toujours se vider de manière excessive.

P.S. Un autre procédé, irq/195-ngd_sli semble manger aussi 5 à 7% en permanence. Nous n'y avions pas prêté beaucoup d'attention, mais cela semble maintenant tout aussi anormal ; nous allons creuser cela aussi.

1voto

Irfan Latif Points 16863

irq ressemble à quelque chose interruptions matérielles y wcd9xxx est une série de codecs audio Qualcomm Aqstic. Donc apparemment irq/288-wcd9xxx est en cours d'exécution pour prendre en charge la fonctionnalité audio sur votre appareil. L'exécutable doit être un blob binaire à source fermée, donc il n'y a rien que vous puissiez faire pour le réparer, sauf (si déjà réparé par quelqu'un, ou) mettre à niveau / rétrograder la ROM ou arrêter le service.

Comme kill o kill -9 n'a absolument aucun effet sur lui (cela semble fonctionner lors de l'exécution de la commande, mais le processus est toujours là après), quelqu'un a-t-il une idée de ce que c'est, et comment le tuer ou l'arrêter ?

Le processus doit être exécuté en tant que service natif défini par le fournisseur de matériel / SoC dans une certaine mesure. init 's .rc fichier. Il continuera donc à redémarrer s'il est tué. Afin d'arrêter correctement le service, vous devez trouver son nom. Tout d'abord, obtenez le chemin de l'exécutable à partir du PID, puis trouvez le service en cherchant dans tous les fichiers de l'application .rc des fichiers :

~# grep -rI $(readlink /proc/$(pgrep -f irq/288-wcd9xxx)/exe) /*/etc/init/ /init.*.rc

Vous pouvez confirmer le même nom de service en regardant à running statut en getprop | grep init.svc. commande. Pour arrêter le service, utilisez l'une de ces commandes :

~# stop <service_name>
~# setprop ctl.stop <service_name>

Cette opération doit être répétée à chaque redémarrage. Ou vous pouvez modifier le fichier .rc pour supprimer le service.

S'il en résulte que quelque chose ne fonctionne pas, une autre possibilité est d'essayer de contrôler l'utilisation du CPU en appliquant une limitation, par ex. cgroups (si le noyau le supporte).

EDIT :

Je viens de remarquer qu'un nom de fichier ne peut pas avoir de barre oblique ( / ). Ainsi, irq/288-wcd9xxx doit être un thread du noyau pour la gestion des interruptions. Ce n'est pas évident mais vous pouvez vérifier son PID parent ( ppid doit être 2 ) et également aucune allocation de mémoire ( 0K ) indique qu'il ne s'agit pas d'un processus en espace utilisateur. Le problème se situe donc au niveau du matériel audio ou du pilote intégré au noyau (cf. cette réponse ). Dans ce dernier cas, un noyau mis à jour par l'équipementier résoudrait le problème.

Une solution de contournement peut être de contrôler l'utilisation du CPU du processus en temps réel en utilisant chrt : chrt -r -p 1 $(pgrep -f irq/288-wcd9xxx) o chrt -f -p 1 $(pgrep -f irq/288-wcd9xxx) o renice o cgroups (si le noyau le supporte) : cpu o cpuset .

androidalle.com

AndroidAlle est une communauté de androiders 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