User Tools

Site Tools


doc:appunti:linux:sa:ksoftirqd

This is an old revision of the document!


ksoftirqd process utilizes 100% of a CPU

Linux esegue diversi processi per gestire le soft IRQ, uno per ogni CPU presente. Ecco un esempio su una CPU con 4 core:

ps uax | grep ksoftir | grep -v grep
root          14  0.0  0.0      0     0 ?        S    Nov07   0:00 [ksoftirqd/0]
root          21  1.4  0.0      0     0 ?        S    Nov07  21:43 [ksoftirqd/1]
root          26  0.0  0.0      0     0 ?        S    Nov07   0:03 [ksoftirqd/2]
root          31  0.0  0.0      0     0 ?        S    Nov07   0:00 [ksoftirqd/3]

Come si vede uno di questi processi (PID 21) consuma molti cicli di CPU più degli altri (TIME 21:43). Il processo è associato alla CPU #1 [ksoftirqd/1].

Ispezionando lo pseduofile /proc/interrupts si può vedere chi è che genera molte interrupt sulla CPU1:

cat /proc/interrupts
            CPU0       CPU1       CPU2       CPU3       
   0:         19          0          0          0  IR-IO-APIC    2-edge      timer
   8:          0          0          0          0  IR-IO-APIC    8-edge      rtc0
   9:          0          0          0          0  IR-IO-APIC    9-fasteoi   acpi
  14:          0          0          0          0  IR-IO-APIC   14-fasteoi   INTC1057:00
  16:          0        590          0          0  IR-IO-APIC   16-fasteoi   mmc0, idma64.0, i801_smbus, ttyS0
  37:          0          0          0          0  IR-IO-APIC   37-fasteoi   idma64.1, pxa2xx-spi.1
 120:          0          0          0          0  DMAR-MSI     0-edge       dmar0
 121:          0          0          0          0  DMAR-MSI     1-edge       dmar1
 125:          0    4289304          0          0  IR-PCI-MSI   1048576-edge net0
 126:          0          0    4456557          0  IR-PCI-MSI   1572864-edge lan0
 127:          0          0          0     432003  IR-PCI-MSI   376832-edge  ahci[0000:00:17.0]
 128:        442          0          0          0  IR-PCI-MSI   327680-edge  xhci_hcd
 129:          0         42          0          0  IR-PCI-MSI   360448-edge  mei_me
 130:          0          0        164          0  IR-PCI-MSI   32768-edge   i915
 131:          0          0          0          0  IR-PCI-MSI   524288-edge  rtw88_pci
 132:        665          0          0          0  IR-PCI-MSI   514048-edge  snd_hda_intel:card0
...

Come si vede l'IRQ 125 ha affinità alla CPU1, così come la IRQ 126 ha affinità alla CPU2, ecc. Si può verificare comunque che il kernel non impone tale affinità, infatti ispezionando lo pseudofile /proc/irq/IRQ_NUMBER/smp_affinity si vede:

cat /proc/irq/125/smp_affinity
f

Dove f un valore esadecimale che rappresenta una bitmask dei core CPU; tale IRQ può essere quindi servita da uno qualunque dei core.

Web References

doc/appunti/linux/sa/ksoftirqd.1731074372.txt.gz · Last modified: 2024/11/08 14:59 by niccolo