Dlaczego proces ksoftirqd / 0 używa całego mojego procesora?

67

Czułem, że Ubuntu działa nieco powolnie, a potem poszedłem zobaczyć procesy działające na nim i znalazłem taki, który wykorzystuje około 50% zwanego procesora ksoftirqd/0.

Czy ktoś wie, co robi ten proces, dlaczego zużywa tak dużo procesora i jak zmniejszyć jego obciążenie?

dasen
źródło

Odpowiedzi:

77

Komputer komunikuje się z podłączonymi do niego urządzeniami za pośrednictwem przerwań (żądania przerwania). Gdy urządzenie przychodzi z przerwaniem, system operacyjny wstrzymuje jego działanie i zaczyna reagować na to przerwanie.

W niektórych sytuacjach przerwania IRQ przychodzą bardzo szybko jeden po drugim, a system operacyjny nie może zakończyć obsługi jeden przed drugim. Może się to zdarzyć, gdy szybka karta sieciowa odbierze bardzo dużą liczbę pakietów w krótkim czasie.

Ponieważ system operacyjny nie może obsłużyć przerwań IRQ podczas ich nadejścia (ponieważ przychodzą zbyt szybko jeden po drugim), system operacyjny kolejkuje je do późniejszego przetworzenia przez specjalny proces wewnętrzny o nazwie ksoftirqd.

Jeśli ksoftirqdzajmuje więcej niż niewielki procent czasu procesora, oznacza to, że maszyna jest obciążona dużym przerwaniem.

Lucian Adrian Grijincu
źródło
22

Ze strony podręcznika ksoftirqdjest wątek jądra na procesor, który działa, gdy maszyna jest obciążona dużym miękkim przerwaniem.

Możesz nieco poprawić ustawienia, określając, które procesor odbiera określone przerwanie. Robisz to, zmieniając zawartość /proc/irq/$interrupt_number/smp_affinity. Możesz uzyskać listę przerwań i ich znaczenie, wykonując:

cat /proc/interrupts

Liczba w smp_affinityto bitmapa cpus, reprezentowana w kodzie szesnastkowym. Najbardziej prawy bit jest najmniej znaczący. Na przykład mój system ma 8 rdzeni. Gdybym chciał używać tylko rdzeni 1, 3 i 4, ustawiłbym smp_affinity na 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)

Osobiście skonfigurowałem dowolną jednostkę centralną, aby móc odbierać przerwanie 29 (eth0 w moim 8-rdzeniowym systemie) za pomocą:

sudo echo ff > /proc/irq/29/smp_affinity
Eduardo Bezerra
źródło
4

ksoftirqd to wątek jądra na procesor, który działa, gdy maszyna jest obciążona dużym, miękkim przerwaniem, więc nie zjada procesora, ale raczej zmniejsza obciążenie IRQ.

akshatj
źródło
1
Wiem, że to askubuntu.com, ale na Raspberry Pi jest zupełnie odwrotnie, ksoftirqd zjada cały procesor przy intensywnym obciążeniu IRQ.
machineaddict,
Jak rozumiem, ksoftirqd przetwarza odroczone softirqs (kiedy nie można ich przetworzyć wystarczająco szybko). Kiedy jest dużo softirqów i / lub zajmują dużo czasu procesora, to ksoftirqd zużywa dużo czasu procesora.
pabouk