Pourquoi ksoftirqd / 0 traite-t-il tout mon processeur?

59

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

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

    
posée dasen 17.10.2010 - 06:55
la source

3 réponses

65

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 interrompt ce qu'il faisait et commence à adresser cette interruption.

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 haute vitesse reçoit un très grand nombre de paquets dans un délai court.

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

Si ksoftirqd prend plus d’un pourcentage infime de temps CPU, cela indique que la machine est sous forte charge d’interruption.

    
réponse donnée Lucian Adrian Grijincu 17.10.2010 - 13:37
la source
17

Dans la page de manuel, ksoftirqd est un thread de noyau par processeur qui s'exécute lorsque la machine est soumise à une forte charge d'interruption logicielle.

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

cat /proc/interrupts

Le nombre dans smp_affinity est un bitmap de cpus, 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 noyaux 1, 3 et 4, je définirais 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 prendre l'interruption 29 (eth0 dans mon système à 8 cœurs) avec:

sudo echo ff > /proc/irq/29/smp_affinity
    
réponse donnée Eduardo Bezerra 13.07.2012 - 16:12
la source
2

ksoftirqd est un thread de noyau par cpu qui s'exécute lorsque la machine est sous forte charge d'interruption logicielle. Ainsi, il ne mange pas votre processeur mais réduit plutôt votre charge d'IRQ.

    
réponse donnée akshatj 17.10.2010 - 12:37
la source

Lire d'autres questions sur les étiquettes