Pourquoi le processus ksoftirqd / 0 utilise-t-il la totalité de mon processeur?

67

Je sentais qu'Ubuntu fonctionnait un peu lentement, puis je suis allé voir les processus en cours d'exécution et j'en ai trouvé un qui utilisait quelque chose comme 50% du CPU appelé ksoftirqd/0.

Est-ce que quelqu'un sait ce que fait ce processus, pourquoi il utilise autant de ressources processeur et comment le rendre moins gourmand en ressources processeur?

dasen
la source

Réponses:

77

Votre ordinateur communique avec les périphériques qui lui sont connectés via des IRQ (demandes d'interruption). Lorsqu'une interruption provient d'un périphérique, le système d'exploitation met son activité en pause et commence à l'adresser.

Dans certaines situations, les IRQ sont très rapides les unes après les autres et le système d’exploitation ne peut pas terminer la maintenance de l’une avant l’autre. Cela peut se produire lorsqu'une carte réseau haut débit reçoit un très grand nombre de paquets dans un délai très court.

Le système d'exploitation ne pouvant pas gérer les IRQ au fur et à mesure qu'elles arrivent (car elles arrivent trop rapidement les unes après les autres), il les met en file d'attente pour un traitement ultérieur par un processus interne spécial nommé ksoftirqd.

Si cela ksoftirqdprend plus qu'un pourcentage infime du temps processeur, cela indique que la machine subit une charge d'interruption importante.

Lucian Adrian Grijincu
la source
22

Dans la page de manuel, vous ksoftirqdtrouverez un thread de noyau per-cpu qui s'exécute lorsque la machine subit une lourde charge d'interruptions logicielles.

Vous pouvez modifier un peu les paramètres en définissant quel processeur prend une certaine interruption. Vous faites cela en changeant le contenu de /proc/irq/$interrupt_number/smp_affinity. Vous pouvez obtenir une liste d'interruptions et leur signification en faisant:

cat /proc/interrupts

Le nombre dans smp_affinityest un bitmap de CPU, représenté en code hexadécimal. Le bit le plus à droite est le moins significatif. Par exemple, mon système a 8 cœurs. Si je voulais utiliser uniquement les coeurs 1, 3 et 4, je définirais le paramètre smp_affinity sur 1a:

cpu_7 cpu_6 cpu_5 cpu_4 cpu_3 cpu_2 cpu_1 cpu_0
  0     0     0     1     1     0     1     0    = 0001 1010 = 1a (in hex)

Personnellement, j'ai configuré n'importe quel processeur pour pouvoir recevoir l'interruption 29 (eth0 dans mon système à 8 cœurs) avec:

sudo echo ff > /proc/irq/29/smp_affinity
Eduardo Bezerra
la source
4

ksoftirqd est un thread de noyau per-cpu qui s'exécute lorsque la machine subit une charge importante d'interruptions logicielles. Ainsi, il ne consomme pas votre unité centrale, mais réduit plutôt votre charge IRQ.

akshatj
la source
1
Je sais que c'est askubuntu.com, mais sur Raspberry Pi, c'est tout le contraire, ksoftirqd mange tout le processeur en charge IRQ intensive.
machineaddict
Si j'ai bien compris, ksoftirqd traite les softirqs différés (lorsqu'ils ne peuvent pas être traités assez rapidement). Quand il y a beaucoup de softirqs et / ou qu'ils consomment beaucoup de temps processeur, ksoftirqd consomme beaucoup de temps processeur.
Pabouk