83 votes

Pourquoi le processus ksoftirqd/0 utilise-t-il tout mon processeur ?

J'avais l'impression que Ubuntu était un peu lent, et puis j'ai regardé les processus en cours d'exécution, et j'en ai trouvé un qui utilisait quelque chose comme 50% du CPU appelé ksoftirqd/0 .

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

96voto

Thomas Jespersen Points 155

Votre ordinateur communique avec les périphériques qui lui sont connectés par le biais des IRQ (demandes d'interruption). Lorsqu'une interruption provient d'un périphérique, le système d'exploitation interrompt ce qu'il était en train de faire et commence à s'occuper de cette interruption.

Dans certaines situations, les IRQ arrivent très rapidement les unes après les autres et le système d'exploitation ne peut pas finir de les gérer avant qu'une autre n'arrive. Cela peut se produire lorsqu'une carte réseau à haut débit reçoit un très grand nombre de paquets dans un court laps de temps.

Comme le système d'exploitation ne peut pas traiter les IRQ au fur et à mesure qu'elles arrivent (parce qu'elles arrivent trop vite les unes après les autres), il les met en file d'attente pour un traitement ultérieur par un processus interne spécial appelé ksoftirqd .

Si ksoftirqd prend plus qu'un infime pourcentage du temps CPU, cela indique que la machine est soumise à une forte charge d'interruption.

28voto

Eduardo Bezerra Points 472

De 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 douce.

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

cat /proc/interrupts

Le nombre en 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 possède 8 cœurs. Si je voulais utiliser uniquement les cœurs 1, 3 et 4, je définirais la valeur smp_affinity à 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, je configure n'importe quel processeur pour qu'il puisse capter l'interruption 29 (eth0 dans mon système à 8 cœurs) :

echo ff | sudo tee /proc/irq/29/smp_affinity

4voto

Mark Biek Points 41769

Ksoftirqd est un thread de noyau par processeur qui s'exécute lorsque la machine est soumise à une forte charge d'interruptions douces. Ainsi, il ne mange pas votre processeur mais réduit plutôt votre charge d'IRQ.

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