doc:appunti:linux:sa:ksoftirqd
Differences
This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
doc:appunti:linux:sa:ksoftirqd [2024/11/08 16:29] – [ksoftirqd process utilizes 100% of a CPU] niccolo | doc:appunti:linux:sa:ksoftirqd [2024/11/08 17:22] (current) – [ksoftirqd process utilizes 100% of a CPU] niccolo | ||
---|---|---|---|
Line 4: | Line 4: | ||
< | < | ||
- | ps uax | grep ksoftir | + | ps uax | grep ksoftirqd |
root 14 0.0 0.0 0 0 ? S Nov07 0:00 [ksoftirqd/ | root 14 0.0 0.0 0 0 ? S Nov07 0:00 [ksoftirqd/ | ||
root 21 1.4 0.0 0 0 ? S Nov07 21:43 [ksoftirqd/ | root 21 1.4 0.0 0 0 ? S Nov07 21:43 [ksoftirqd/ | ||
Line 59: | Line 59: | ||
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 | TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 | ||
</ | </ | ||
+ | |||
+ | ===== softnet_stat ===== | ||
Grazie al contenuto di **/ | Grazie al contenuto di **/ | ||
Line 75: | Line 77: | ||
awk '{for (i=1; i<=NF; i++) printf strtonum(" | awk '{for (i=1; i<=NF; i++) printf strtonum(" | ||
</ | </ | ||
+ | |||
+ | ===== netdev_max_backlog ===== | ||
Se il numero nella **seconda colonna** cresce costantemente (frame persi a causa di una coda backlog piena), è possibile incrementare la dimensione del buffer. Il valore corrente si vede con: | Se il numero nella **seconda colonna** cresce costantemente (frame persi a causa di una coda backlog piena), è possibile incrementare la dimensione del buffer. Il valore corrente si vede con: | ||
< | < | ||
- | # sysctl net.core.netdev_max_backlog | + | sysctl net.core.netdev_max_backlog |
net.core.netdev_max_backlog = 1000 | net.core.netdev_max_backlog = 1000 | ||
</ | </ | ||
Line 94: | Line 98: | ||
sysctl -p / | sysctl -p / | ||
</ | </ | ||
+ | |||
+ | ===== netdev_budget ===== | ||
+ | |||
+ | Anche la **terza colonna** di **/ | ||
+ | |||
+ | Il budget assegnato è dato dai parametri **netdev_budget** e **netdev_budget_usecs** che sono consultabili con i comandi: | ||
+ | |||
+ | < | ||
+ | sysctl net.core.netdev_budget | ||
+ | net.core.netdev_budget = 300 | ||
+ | |||
+ | sysctl net.core.netdev_budget_usecs | ||
+ | net.core.netdev_budget_usecs = 8000 | ||
+ | </ | ||
+ | |||
+ | In questo caso softirqd ha, per ogni ciclo di polling, 8000 microsecondi di tempo massimo per processare fino a 300 messaggi dalla scheda di rete. Possiamo aumentarli creando un file **/ | ||
+ | |||
+ | < | ||
+ | net.core.netdev_budget = 600 | ||
+ | net.core.netdev_budget_usecs = 24000 | ||
+ | </ | ||
+ | |||
+ | ed eseguendo | ||
+ | |||
+ | < | ||
+ | sysctl -p / | ||
+ | </ | ||
+ | |||
+ | ===== Shorewall (netfilter) logging ===== | ||
+ | |||
+ | Purtroppo nel nostro caso **non si sono ottenuti risultati incrementando il budget** per la softirq. L'host in questione è un firewall GNU/Linux con due schede di rete, il problema era associato all' | ||
+ | |||
+ | < | ||
+ | iptables -S | wc -l | ||
+ | 157 | ||
+ | </ | ||
+ | |||
+ | Il problema si manifestava in condizioni di portscan intensi, intorno ai 3 pacchetti/ | ||
+ | |||
+ | Avendo **eliminato il logging dei pacchetti dropped** il problema pare risolto. | ||
===== Web References ===== | ===== Web References ===== | ||
Line 99: | Line 143: | ||
* **[[https:// | * **[[https:// | ||
* **[[https:// | * **[[https:// | ||
+ | * **[[https:// | ||
* **[[https:// | * **[[https:// | ||
doc/appunti/linux/sa/ksoftirqd.1731079769.txt.gz · Last modified: 2024/11/08 16:29 by niccolo