it-swarm.dev

Proč proces ksoftirqd / 0 využívá všechny mé CPU?

Cítil jsem, jak Ubuntu běžel trochu pomalý, a pak jsem šel vidět procesy běžící na něm, a našel ten, který používal něco jako 50% CPU s názvem ksoftirqd/0.

Ví někdo, co tento proces dělá, proč používá tolik CPU a jak ho snížit na CPU?

73
dasen

Váš počítač komunikuje se zařízeními, která jsou k němu připojena, prostřednictvím IRQ (požadavky na přerušení). Když dojde k přerušení ze zařízení, operační systém pozastaví, co dělá, a začne toto přerušení řešit.

V některých situacích přicházejí IRQ velmi rychle jeden po druhém a operační systém nemůže dokončit údržbu jednoho dříve, než dorazí další. To se může stát, když vysokorychlostní síťová karta přijme velmi velké množství paketů v krátkém časovém rámci.

Protože operační systém nemůže zpracovat IRQ při jejich příchodu (protože přicházejí příliš rychle za sebou), operační systém je řadí do fronty pro pozdější zpracování zvláštním interním procesem s názvem ksoftirqd.

Pokud ksoftirqd zabere více než malé procento času procesoru, znamená to, že je stroj zatížen velkým přerušením.

83

Z manuálové stránky je ksoftirqd vlákno jádra na CPU, které se spouští, když je stroj zatížen velkým přerušením.

Nastavení můžete trochu vylepšit definováním toho, který procesor zachytí určité přerušení. To provedete změnou obsahu /proc/irq/$interrupt_number/smp_affinity. Seznam přerušení a jejich význam můžete získat provedením:

cat /proc/interrupts

Číslo v smp_affinity je bitmapa cpus, reprezentovaná v hexadecimálním kódu. Nejvhodnější bit je nejméně významný. Například můj systém má 8 jader. Pokud bych chtěl použít pouze jádra 1, 3 a 4, nastavil bych 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)

Osobně jsem nastavil libovolný procesor tak, aby byl schopen zachytit přerušení 29 (eth0 v mém 8jádrovém systému) pomocí:

echo ff | Sudo tee /proc/irq/29/smp_affinity
23
Eduardo Bezerra

ksoftirqd je vlákno jádra na jádro, které se spouští, když je stroj pod velkým zatížením při přerušení měkkého přerušení.Takže nejedí váš procesor, ale spíše snižuje zatížení IRQ.

4
akshatj