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.

Dall'elenco delle interrupt si deduce che probabilmente vi è una situazione critica relativamente all'interfaccia net0, abbiamo una conferma constatando il gran numero di pacchetti dropped:

ifconfig net0
net0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.1.254  netmask 255.255.255.0  broadcast 192.168.1.255
        inet6 fe80::2e0:4cff:fe60:11e4  prefixlen 64  scopeid 0x20<link>
        ether 00:e0:4c:60:11:e4  txqueuelen 1000  (Ethernet)
        RX packets 3943557  bytes 3439040842 (3.2 GiB)
        RX errors 0  dropped 107001  overruns 0  frame 0
        TX packets 2410528  bytes 714236244 (681.1 MiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

Grazie al contenuto di /proc/net/softnet_stat è possibile avere statistiche sulla gestione da parte delle softirq dei pacchetti network.

  Total number of processed packets (processed).
  Times ksoftirq ran out of quota (dropped).
  Times net_rx_action was rescheduled.
  Number of times processed all lists before quota.
  Number of times did not process all lists due to quota.
  Number of times net_rx_action was rescheduled for GRO (Generic Receive Offload) cells.
  Number of times GRO cells were processed.

Web References

doc/appunti/linux/sa/ksoftirqd.1731078956.txt.gz · Last modified: 2024/11/08 16:15 by niccolo